坐標(biāo)上海沿猜、
》
博主最近找工作的真實(shí)經(jīng)歷枚荣。
從01月5號(hào)-01月11號(hào)為期一周的面試安排以及遇到的問(wèn)題,做一個(gè)總結(jié)啼肩,帶你走進(jìn)2019年這個(gè)互聯(lián)網(wǎng)寒冬環(huán)境下找工作的真實(shí)經(jīng)歷橄妆,帶大家做一個(gè)梳理,希望能幫到大家祈坠。
》
這里不講虛的害碾,直接上來(lái)就是面試官拋出的問(wèn)題,以及后來(lái)面試通過(guò)情況赦拘,回答問(wèn)題情況慌随,關(guān)注點(diǎn)在哪,整個(gè)做一個(gè)詳細(xì)的說(shuō)明躺同,畢竟年底儒陨,HR想壓薪資,并且好多一部分公司招人需求并不是很強(qiáng)烈笋籽,寒冬已至,只有不斷的面嘍…
好了椭员,下面開(kāi)始總結(jié)车海。
》
從01月02號(hào)周三開(kāi)始投遞簡(jiǎn)歷,面試邀請(qǐng)往后排隘击,安排了為期3天的面試侍芝,然后,后面邊面試邊投遞埋同。
2019.01.04周五 小雨
1
Firstday AM10:00
這天安排了3家州叠,甲方和外包均有、
周五上午10:00 甲方凶赁,上海市黃浦區(qū)咧栗,地鐵9號(hào)線打浦橋站
1逆甜、老流程,填表致板,筆試(非技術(shù)題)交煞,面試
2、筆試不多說(shuō)斟或,直接進(jìn)入面試
面試官3人組素征,技術(shù)面試官(27/8年輕小伙子),hr(大姐姐)萝挤,產(chǎn)品(大姐姐)
1御毅、自我介紹,博主傻帽的說(shuō)了如下:
“你好怜珍,我是打豆豆端蛆, 老家xxx,以前在北京一家外包绘面,這家公司主要做金融以及電商的項(xiàng)目欺税,最近做了個(gè)基于springCloud架構(gòu)的綜合品類(lèi)電商的這么一個(gè)項(xiàng)目,我在項(xiàng)目中負(fù)責(zé)商品后臺(tái)管理以及es實(shí)時(shí)搜索模塊的開(kāi)發(fā)揭璃,參與了…此處省略100字 ”晚凿。
問(wèn)題如下:
說(shuō)老家時(shí)候,hr大姐姐直接打斷:“你說(shuō)下你之前在哪家公司瘦馍?”
打豆豆:xxx 還沒(méi)說(shuō)完 hr又打斷:“說(shuō)下最近做的哪個(gè)項(xiàng)目歼秽,還有在項(xiàng)目組中擔(dān)任什么樣的角色?”
打豆豆:比拉比拉…負(fù)責(zé)商品后臺(tái)管理以及es實(shí)時(shí)搜索模塊的開(kāi)發(fā)
2情组、支付
技術(shù)面試官: 說(shuō)下支付模塊實(shí)現(xiàn)
打豆豆內(nèi)心 : 尼瑪燥筷,老子開(kāi)發(fā)的是后臺(tái)商品管理,上下架院崇,CURD肆氓,還有ES搜索模塊,你問(wèn)我支付模塊…
打豆豆不動(dòng)聲色 : 支付這個(gè)底瓣,前臺(tái)…到order微服務(wù)生成唯一order號(hào)…調(diào)用微信支付寶銀聯(lián)接口谢揪,支付成功更改訂單狀態(tài)status …
3、秒殺
技術(shù)面試官: 說(shuō)下商品秒殺實(shí)現(xiàn)
打豆豆內(nèi)心 : 尼瑪捐凭,秒殺業(yè)務(wù)的線程并發(fā)拨扶,熔斷,限流茁肠,以及單人秒殺權(quán)限只有一次患民,orderId 不重復(fù)支付(分布式事務(wù))最終結(jié)果一致性。實(shí)在不行用TCC
打豆豆不動(dòng)聲色 : 支付這個(gè)垦梆,雖然不是我開(kāi)發(fā)的匹颤,也有參與仅孩,保證支付訂單的冪等性唄
PS: 當(dāng)然現(xiàn)場(chǎng)答得不好,好多東西沒(méi)講出來(lái)惋嚎,
我可以用分布式鎖來(lái)解決杠氢,
也可以用身份標(biāo)簽來(lái)解決
當(dāng)然重要的是支付ok 生成的訂單流水插入mysql ,重復(fù)請(qǐng)求支付同一orderId時(shí)候先查詢(xún)流水另伍,然后決定事務(wù)是否回滾鼻百、
4、整個(gè)springCloud的架構(gòu)了解么
打豆豆:
5摆尝、JWT鑒權(quán)
技術(shù)面試官: 哎呦温艇,還做了JWT鑒權(quán),你說(shuō)下JWT鑒權(quán)實(shí)現(xiàn)流程是怎樣的堕汞?
打豆豆內(nèi)心: 尼瑪勺爱,上臉了…麻煩瞅下簡(jiǎn)歷,你這一問(wèn)這個(gè)項(xiàng)目都是我做的好啦讯检,我獨(dú)立開(kāi)發(fā)琐鲁,我是全棧…
打豆豆: 額人灼,這個(gè)… 結(jié)合Zuul網(wǎng)關(guān)微服務(wù)做了一個(gè)JWT(java webService token)+rsa 相結(jié)合…
請(qǐng)求進(jìn)來(lái)…
auth-center鑒權(quán)中心微服務(wù),存放一個(gè)rsa.pri(私鑰)…調(diào)用…微服務(wù)…
在每一個(gè)微服務(wù)存放一個(gè)rsa.pub(公鑰),用來(lái)解密token 围段、完成對(duì)用戶(hù)的鑒權(quán)…
PS: 當(dāng)時(shí)答得一塌糊涂,以上均是做了優(yōu)化投放,
防止有小伙伴沒(méi)有看清楚奈泪,照著我這博客背然后弄錯(cuò)了,面試吃癟回來(lái)找我理論灸芳。
所以這些回答均是優(yōu)化過(guò)了涝桅,當(dāng)時(shí)這個(gè)jwt 鑒權(quán)答得不怎么樣、
6烙样、日常高并發(fā)從不缺席
技術(shù)面試官: 你們并發(fā)量多少冯遂?秒殺時(shí)候高并發(fā)問(wèn)題怎么處理的?
打豆豆內(nèi)心: 這個(gè)是我強(qiáng)項(xiàng)啊
打豆豆: mysql 并發(fā)600左右谒获,使用redis的master-salve 讀寫(xiě)分離架構(gòu)以及消息隊(duì)列债蜜,外加mysql 主從,數(shù)據(jù)分發(fā)
表結(jié)構(gòu)優(yōu)化究反,當(dāng)然表結(jié)構(gòu)優(yōu)化這一點(diǎn)不能夠過(guò)早的優(yōu)化,在你并發(fā)量較低情況下儒洛,業(yè)務(wù)需求不需要做過(guò)早的分表精耐,過(guò)早的分表會(huì)導(dǎo)致一些其他的問(wèn)題凸顯、
PS: 當(dāng)然不能夠忘記 高可用琅锻,宕機(jī)仍會(huì)導(dǎo)致你整個(gè)應(yīng)用的癱瘓卦停,這一點(diǎn)上springCould較為注重AP
技術(shù)面試官: 恩向胡,hashmap用到過(guò)?hashmap的特點(diǎn) 惊完,實(shí)現(xiàn)原理是怎樣的僵芹?
打豆豆: …使用場(chǎng)景在… 底層數(shù)據(jù)結(jié)構(gòu)是…
技術(shù)面試官: hashmap的hash沖突 怎么解決?
打豆豆內(nèi)心: 啥小槐?懵逼…
打豆豆: 不太了解
PS: 解決方式拇派,1、再次hash 2凿跳、鏈表對(duì) 相同hashcode值的key 進(jìn)行處理(hashmap底層默認(rèn)的處理方式)
當(dāng)然件豌,redis 單機(jī)模式讀寫(xiě)數(shù)據(jù)qps在萬(wàn)級(jí)別,qps要達(dá)到 數(shù)十萬(wàn)級(jí)別的話控嗜,那就要用讀寫(xiě)分離茧彤,集群了,redis集群可基于zookeeper 和redis cluster 搭建疆栏、
具體可自行百度
小結(jié)
這家涼涼曾掂,下午還有兩家
Firstday PM13:00
周五下午13:00 外包,浦東新區(qū)碧波路 壁顶,2號(hào)線張江高科地鐵站
這家上去就是讓做題
1珠洗,N道邏輯判斷
2,定義單例Rectangle類(lèi) 編碼博助;判斷2個(gè)矩形相交編碼
好多人在等险污,筆試沒(méi)過(guò)
Firstday PM16:30
周五下午16:30 外包,徐匯區(qū)華宜大廈 富岳,9號(hào)線宜山路
1蛔糯、無(wú)筆試
2、面試
redis 窖式。分布式蚁飒。mysql存儲(chǔ)過(guò)程(當(dāng)時(shí)沒(méi)答出來(lái))。高并發(fā)
3萝喘、薪資未達(dá)到期望
2019.01.06周日 小雨 下午2:30
1
Second day PM 14:30
甲方淮逻,上海市楊高中路,xx科技
流程
1阁簸、填表筆試爬早,幾個(gè)選擇,編程題 :系統(tǒng)時(shí)間上一個(gè)月是哪一天启妹?
2筛严、面試
結(jié)果未通過(guò)
技術(shù)面試官: ok ,自我介紹下
打豆豆 : …負(fù)責(zé)某某某…
技術(shù)面試官: ok ,thymeleaf 靜態(tài)化怎么實(shí)現(xiàn)的
打豆豆 : …xxx
靜態(tài)化的具體實(shí)現(xiàn)(回答的不好)饶米、
PS : 靜態(tài)化桨啃,生成HTML车胡,請(qǐng)求進(jìn)來(lái)從nginx 拉取靜態(tài)頁(yè)面…但是有靜態(tài)化同步問(wèn)題,使用mq解決
技術(shù)面試官: 靜態(tài)化頁(yè)面存在可變動(dòng)的信息照瘾?類(lèi)似于庫(kù)存匈棘?
打豆豆 : 當(dāng)然了,有貨沒(méi)貨顯示就行了析命,status字段么
技術(shù)面試官: es 搜索主卫,秒殺
打豆豆內(nèi)心 : 秒殺你妹,這模塊又不是我做的…
打豆豆 : 怎么怎么 … 秒殺配置熔斷限流
技術(shù)面試官: nginx 服務(wù)器碳却,使用場(chǎng)景队秩,哪里用的?除了反向代理別的地方用在哪了昼浦?
打豆豆 : 熔斷限流具體設(shè)置(沒(méi)答上來(lái))馍资。
PS : 設(shè)置線程熔斷時(shí)間 300ms ,為了單線程 能抗 3/s 個(gè)請(qǐng)求关噪、
技術(shù)面試官: 期望薪資
技術(shù)面試官: 有什么想問(wèn)的鸟蟹?
打豆豆 : xxx上下班時(shí)間,你們主要做哪些方向使兔?線上碰到過(guò)什么比較棘手的問(wèn)題建钥?支付冪等性怎么保證?
技術(shù)面試官: 有沒(méi)有其他要問(wèn)的虐沥?
打豆豆 : 沒(méi)有
2019.01.07周一 晴
第三天排了3家
1
2
Third day AM 10:00
甲方熊经,上海市長(zhǎng)寧區(qū)通協(xié)路,地鐵二號(hào)線淞虹路站
流程:1欲险、筆試
2镐依、面試
筆試未通過(guò),算法和編程以及表設(shè)計(jì)寫(xiě)了下天试,估計(jì)做完中午了槐壳,沒(méi)寫(xiě)完直奔下一家
題超多,sql 題20道喜每,選擇6頁(yè)务唐,算法(二分法),表設(shè)計(jì)1個(gè)
數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)1道
表拆分1道
Third day PM 14:30
甲方带兜,2019年1月7日 14:30
上海市黃浦區(qū)打浦路
無(wú)筆試
期望薪資未達(dá)到
以下為了節(jié)省時(shí)間枫笛,直接磕重點(diǎn)了,不寫(xiě)那么細(xì)了
技術(shù)面試官: 項(xiàng)目
技術(shù)面試官: 秒殺實(shí)現(xiàn)刚照、springcloud用了什么組件
打豆豆 : Zuul 等等
技術(shù)面試官: 數(shù)據(jù)庫(kù)
打豆豆 : 就一些優(yōu)化問(wèn)題刑巧,引擎優(yōu)化具體怎么做講一講ok了,結(jié)合redis 處理并發(fā)
技術(shù)面試官: 遞歸了解多少,jdk8新特性
打豆豆 : 遞歸開(kāi)始結(jié)束條件海诲,新特性lambda
技術(shù)面試官: 我們是一家…期望薪資多少… 什么問(wèn)題?
打豆豆 : 恩恩…比拉比啦…
技術(shù)面試官: 引擎 …內(nèi)存片段怎么怎么滴…微信厲害吧檩互,我仿微信寫(xiě)了個(gè)一樣的…
打豆豆內(nèi)心 : 牛批牛批…
Third day PM 17:00
甲方特幔,2019年1月7日 17:00
上海閔行區(qū) ,甲方 中庚環(huán)球創(chuàng)意中心
無(wú)筆試
未通過(guò)
技術(shù)面試官: 說(shuō)下項(xiàng)目闸昨,負(fù)責(zé)那些模塊
技術(shù)面試官: springcloud都哪些組件
技術(shù)面試官: hashmap hashtable 還有線程并發(fā)問(wèn)題
技術(shù)面試官: redis集群高可用怎么保證
打豆豆: 比拉比啦…
技術(shù)面試官: 有用過(guò)es蚯斯,那你說(shuō)下es的原理
打豆豆內(nèi)心: es不就讀寫(xiě),底層怎么讀怎么寫(xiě)…到內(nèi)存buffer …刷新…oscache…segmentFile合并…
然后使用的話饵较,創(chuàng)建index 拍嵌,映射… 根據(jù)詞條…
技術(shù)面試官: IK分詞器底層原理
打豆豆內(nèi)心: 栽了…
打豆豆: 栽了…
2019.01.08 周二 小雨
1
Fourth day AM 10:30
甲方,上海市張江路循诉,地鐵2號(hào)線廣蘭路站 xxx金服
流程
1横辆、無(wú)筆試
2、面試
結(jié)果未通過(guò)
技術(shù)面試官: ok茄猫,負(fù)責(zé)了后臺(tái)和搜索狈蚤,那你說(shuō)下購(gòu)物車(chē)怎么實(shí)現(xiàn)的,就說(shuō)下從購(gòu)物車(chē)的表設(shè)計(jì)划纽,到添加購(gòu)物車(chē)脆侮,然后展示購(gòu)物車(chē),使用redis 的話勇劣,你是如何設(shè)計(jì) key 和value 的…整個(gè)你來(lái)說(shuō)靖避,我來(lái)寫(xiě)?
技術(shù)面試官: 我們就說(shuō)說(shuō)最常見(jiàn)的購(gòu)物車(chē)模式比默,登錄才能夠添加展示購(gòu)物車(chē)的這種幻捏,來(lái),你講一講退敦。
打豆豆內(nèi)心: 尼瑪粘咖,這個(gè)
打豆豆: 可以把數(shù)據(jù)存放在localStorage, 購(gòu)物車(chē)若基于redis 設(shè)計(jì)的話侈百,key 設(shè)計(jì)成userId 瓮下,value 設(shè)計(jì)成 map<skuid, 商品數(shù)據(jù)> ,就是一個(gè)雙層map結(jié)構(gòu)
1、添加購(gòu)物車(chē)
數(shù)據(jù)添加到mysql同步到redis 钝域,并存入localstorage 中
2讽坏、展示購(gòu)物車(chē)
localstorage 中是否存在數(shù)據(jù),
存在 例证,返回值渲染到頁(yè)面路呜、
不存在,請(qǐng)求redis 把數(shù)據(jù)渲染到前端、
技術(shù)面試官: 涉及到哪些表胀葱?
打豆豆: 涉及到的表有:
tb_user 漠秋、tb_spu、tb_spu_detail 抵屿、 tb_sku 庆锦、tb_spec_group 、tb_spec_param 轧葛、tb_category 搂抒、tb_brand
技術(shù)面試官邊記邊問(wèn): 涉及到這么多張表,說(shuō)下你封裝了哪些數(shù)據(jù)尿扯?
打豆豆內(nèi)心已接近崩潰: 商品的通用規(guī)格參數(shù)求晶、特有規(guī)格參數(shù)…比拉比拉…
技術(shù)面試官邊: ok ,目前這些問(wèn)題均已解決衷笋,你說(shuō)后臺(tái)商品是可以修改的芳杏,我修改商品,你購(gòu)物車(chē)如何同步右莱?
打豆豆內(nèi)心: 終于正常些了蚜锨,呼呼
打豆豆: 使用rabbitMq 隊(duì)列,在后臺(tái)定義監(jiān)聽(tīng)器慢蜓,監(jiān)聽(tīng)…比拉比啦亚再,刪除redis ,創(chuàng)建新的redis 數(shù)據(jù)
技術(shù)面試官邊內(nèi)心: 好晨抡,重點(diǎn)來(lái)了氛悬,小伙子,嘿嘿
技術(shù)面試官邊: 方案可行耘柱,具體下如捅,刪除redis 你怎么找到被更新的數(shù)據(jù)的id ? 也就是說(shuō)调煎,redis 中這么多數(shù)據(jù)镜遣,你怎么找到哪個(gè)被更新了,哪個(gè)被修改了士袄?
打豆豆: 額悲关,額,沒(méi)答好
技術(shù)面試官邊: 其他問(wèn)題開(kāi)始問(wèn)… 秒殺怎么實(shí)現(xiàn)的
打豆豆: 比比比…
技術(shù)面試官邊: 你們版本控制工具用的什么娄柳,常用哪些命令寓辱?
打豆豆: git svn 都用過(guò),現(xiàn)在用git 赤拒,用了git 就停不下來(lái)…創(chuàng)建分支秫筏,合并分支…
技術(shù)面試官邊: 合并分支幾種方式诱鞠?
打豆豆: 2種,…
技術(shù)面試官邊: 另一種呢这敬?
打豆豆: 我只用過(guò)這一種航夺,打豆豆內(nèi)心一臉黑線
技術(shù)面試官邊: 既然git 分布式的,為什么說(shuō)分布式崔涂?
打豆豆: 比拉比啦敷存,還舉了個(gè)提交代碼的例子
技術(shù)面試官邊: mysql 數(shù)據(jù)庫(kù)優(yōu)化,你在開(kāi)發(fā)中做了什么優(yōu)化堪伍,具體細(xì)節(jié)
技術(shù)面試官邊: 數(shù)據(jù)庫(kù)引擎優(yōu)化你做了哪些?
打豆豆: 沒(méi)有做觅闽,但是可以這樣優(yōu)化…ok帝雇,就這樣
技術(shù)面試官邊: 你提到MQ,你說(shuō)下你用過(guò)幾種蛉拙?都有什么優(yōu)缺點(diǎn)尸闸?
打豆豆: activemq、rabbitmq孕锄、kafka吮廉、rocketMq 比拉比啦…高吞吐的話就kafka了,比拉比拉…
技術(shù)面試官邊: 技術(shù)廣度是夠了畸肆,期望薪資多少宦芦?有什么想要問(wèn)的?
打豆豆: 估計(jì)涼涼轴脐,隨便問(wèn)了點(diǎn)
技術(shù)面試官邊: 哦调卑,今天先到這兒
每一個(gè)購(gòu)物車(chē)均是一個(gè)對(duì)象(如下),所以購(gòu)物車(chē)列表是個(gè) json數(shù)組
{
skuId:2131241,
title:"大麥",
image:"",
price:190000,
num:1,
ownSpec:"{"機(jī)身顏色":"陶瓷黑尊享版","內(nèi)存":"6GB","機(jī)身存儲(chǔ)":"128GB"}"
}
1
2
3
4
5
6
7
8
外層map的key
// 獲取登錄用戶(hù)
UserInfo user = LoginInterceptor.getLoginUser();
// Redis的key
String key = KEY_PREFIX + user.getId();
// 獲取hash操作對(duì)象
BoundHashOperations<String, Object, Object> hashOps = this.redisTemplate.boundHashOps(key);
// 查詢(xún)是否存在
Long skuId = cart.getSkuId();
Integer num = cart.getNum();
Boolean boo = hashOps.hasKey(skuId.toString());
//判斷
1
2
3
4
5
6
7
8
9
10
11
Fourth day PM 13:30
外包某為大咱,上海浦東新區(qū)錦繡東路 錦繡申江恬涧,地鐵2號(hào)線廣蘭路站
無(wú)筆試
2、面試
結(jié)果未通過(guò)碴巾,原因:缺乏移動(dòng)性溯捆,至今不懂他說(shuō)的移動(dòng)性是什么、
技術(shù)面試官: 說(shuō)下項(xiàng)目厦瓢,負(fù)責(zé)那些模塊
訂單模塊說(shuō)說(shuō)怎么開(kāi)發(fā)的
微服務(wù)配置
參與的哪些模塊都說(shuō)下
打豆豆內(nèi)心: ok…
打豆豆: 比拉比啦…
技術(shù)面試官: redis相關(guān)
集合數(shù)組提揍,hashmap
mq使用長(zhǎng)連接短鏈接,使用場(chǎng)景
設(shè)計(jì)模式了解多少旷痕?單例模式使用場(chǎng)景
技術(shù)面試官: 怎么保證訂單的一致性問(wèn)題
打豆豆: 好多方法啊碳锈,1、加鎖欺抗,2售碳、使用身份標(biāo)識(shí),3、可以使用mq 連接各個(gè)服務(wù) …不推薦使用分布式鎖 …
并發(fā)性能收到影響…推薦使用ticket …
技術(shù)面試官: zookeeper了解多少贸人,談下使用作用等
打豆豆: 配置管理间景,故障轉(zhuǎn)移…
技術(shù)面試官: maven構(gòu)建子工程
打豆豆: 怎么滴怎么滴… 打包方式 pom …依賴(lài)傳遞…
技術(shù)面試官: 有什么想問(wèn)的?
打豆豆內(nèi)心: 沒(méi)問(wèn)期望薪資艺智,ok 倘要,問(wèn)你幾個(gè)問(wèn)題,看你水平咋樣十拣,反正是涼涼了封拧,露出了邪惡微笑
打豆豆: 你們業(yè)務(wù)流 是怎樣的,哦夭问,做支付啊泽西,ok,TCC有用過(guò)? 你們是怎么保證分布式訂單不重復(fù)支付的呢缰趋?
技術(shù)面試官: 啥捧杉?
技術(shù)面試官: 加鎖
打豆豆: 是加同步鎖 線程?
技術(shù)面試官: 恩
打豆豆: 鎖級(jí)別跳不過(guò)jvm 啊秘血,并且對(duì)性能上有影響味抖,有考慮過(guò)么?其實(shí)使用zk鎖也可以解決這樣的問(wèn)題
技術(shù)面試官: 使用分布式鎖
打豆豆: 其實(shí)灰粮,分布式鎖一樣跳不過(guò) jvm 仔涩,本質(zhì)是一樣的,那這個(gè)你們是怎么處理的呢粘舟?
技術(shù)面試官內(nèi)心罵娘: 額红柱,我們都是前端做的,我們調(diào)接口就行了
打豆豆: 不會(huì)吧蓖乘,前后端一般情況下都會(huì)做校驗(yàn)呀锤悄,尤其后端數(shù)據(jù)庫(kù)這塊要保證數(shù)據(jù)的一致性、
技術(shù)面試官: 不知道嘉抒、你還有其它問(wèn)題么
打豆豆: 沒(méi)有了
PS: 其實(shí)這個(gè)問(wèn)題給每一個(gè)請(qǐng)求一個(gè)門(mén)票零聚,支付req來(lái)了校驗(yàn)門(mén)票,已支付些侍,插入數(shù)據(jù)庫(kù)流水隶症,同步redis ,同時(shí)銷(xiāo)毀門(mén)票岗宣,第二個(gè)請(qǐng)求來(lái)了蚂会,判斷是否存在流水就行了,只要不是特別要求一般用不到TCC事務(wù)補(bǔ)償耗式,基本這些就能99.99保證不重復(fù)支付了
Fourth day PM 17:00
外包胁住,外高橋富特北路237號(hào)趁猴,6號(hào)線航津路站;
1彪见、無(wú)筆試
2儡司、面試
結(jié)果未通過(guò),面試過(guò)程中就收到郵件說(shuō)已停止招聘了余指,尼瑪大坑
技術(shù)面試官: 隨意問(wèn)了幾個(gè)模塊
技術(shù)面試官: concurrentHashMap 什么特點(diǎn)捕犬?
技術(shù)面試官: null 鍵,那你說(shuō)為什么支持null 鍵酵镜?
打豆豆內(nèi)心: 好吧碉碉,我認(rèn)栽…
先點(diǎn)開(kāi)源碼過(guò)一下,然后寫(xiě)個(gè)demo 跟進(jìn)去瞅瞅
//key為null的話 hash值為 0
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
// 源碼如下:
public V get(Object key) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
}
1
2
3
4
5
6
7
8
9
10
6.1 淮韭、開(kāi)啟debug
/**
- @auther SyntacticSugar
- @data 2019/1/11 0011下午 10:05
*/
public class YZTest {
@Test
public void test(){
HashMap<Object, Object> map = new HashMap<>();
map.put(null, "null值");
System.out.println(map.get(null));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
6.2誉裆、跟進(jìn)去
// 底層是這樣處理的
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
1
2
3
4
再往下會(huì)調(diào)用hash(key) 方法對(duì)key 進(jìn)行hash值計(jì)算,把計(jì)算出結(jié)果傳參,調(diào)用putVal( ) 方法缸濒、
//key為null的話 hash值為 0
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
1
2
3
4
5
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
//聲明變量
Node<K,V>[] tab; Node<K,V> p; int n, i;
// 1、直接到這里判斷
if ((tab = table) == null || (n = tab.length) == 0)
//2粱腻、滿(mǎn)足條件就調(diào)用 resize()方法返回一個(gè)Node<K,V>[] 對(duì)象
// 給 tab賦值
//n=16
n = (tab = resize()).length;
if ((p = tab[i = (n - 1) & hash]) == null)
//3庇配、 i=0
//調(diào)用構(gòu)造創(chuàng)建 Node對(duì)象
//直接到 ++modCount;
tab[i] = newNode(hash, key, value, null);
else {
Node<K,V> e; K k;
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
e = p;
else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
else {
for (int binCount = 0; ; ++binCount) {
if ((e = p.next) == null) {
p.next = newNode(hash, key, value, null);
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
break;
}
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
p = e;
}
}
if (e != null) { // existing mapping for key
V oldValue = e.value;
if (!onlyIfAbsent || oldValue == null)
e.value = value;
afterNodeAccess(e);
return oldValue;
}
}
//4、 ++modCount值為0
++modCount;
//5绍些、 ++size值0 捞慌,threshold值是12
// 所以走afterNodeInsertion(evict);
if (++size > threshold)
resize();
//6此虑、 evict值為true
//然后執(zhí)行 return null 就返回 null
afterNodeInsertion(evict);
return null;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
返回值為null 依疼,所以key 為 null
至此,hashmap 底層對(duì)null 鍵的處理就完畢了魁瞪、
2019.01.09 周三 小雨
安排了4家裙品,面了3家
1
2
Fifth day AM 10:00
外包痒玩,上海黃浦區(qū)廣東路昆庇,南京東路地鐵站 固歪,世界貿(mào)易大廈
流程
1汹胃、筆試
2上沐、面試
結(jié)果未通過(guò)
技術(shù)面試官: ok皮服,負(fù)責(zé)了后臺(tái)和搜索,那你說(shuō)下后臺(tái)商品那幾張表参咙?
技術(shù)面試官: 你做的這么快就忘了龄广?
打豆豆內(nèi)心: 尼瑪,逆向生成又不是我設(shè)計(jì)的表
Fifth day PM 13:00
甲方蕴侧,上海市楊浦區(qū)择同,地跌8號(hào)線黃興路
無(wú)筆試
2、面試
結(jié)果通過(guò)
項(xiàng)目
靜態(tài)化實(shí)現(xiàn)同步
redis分布式
hashtable和hashmap和concurrenthashmap
開(kāi)源項(xiàng)目參與
部署
dubbo和cloud的接口區(qū)別
如何保證分布式商品id唯一
如何保證訂單不重復(fù)(冪等性)
spring了解多少
mvc框架了解多少(手寫(xiě)過(guò)mvc框架净宵,估計(jì)是個(gè)加分項(xiàng))
bean加載的整個(gè)過(guò)程(答的不好)
只回答了工廠敲才,反射
mq的了解裹纳,項(xiàng)目為什么選rabbit
搜索模塊
遇到什么問(wèn)題,怎么解決的
單例模式有用到归斤?什么場(chǎng)景痊夭?還有哪些場(chǎng)景
設(shè)計(jì)模式了解多少
Fifth day PM 15:30
甲方外派,上海徐匯區(qū)欽州路脏里,地鐵1號(hào)線人民廣場(chǎng)
無(wú)筆試
2她我、面試
結(jié)果一面通過(guò)
如何保證分布式id唯一,
如何保證
線程阻塞和同步?
打豆豆: 同步/異步關(guān)注的是消息通知的機(jī)制迫横,而阻塞/非阻塞關(guān)注的是程序(線程)等待消息通知時(shí)的狀態(tài)番舆。
打豆豆:
阻塞狀態(tài)(Blocked):一個(gè)正在運(yùn)行的線程因某些原因不能繼續(xù)運(yùn)行時(shí),就進(jìn)入阻塞 狀態(tài)矾踱。這些原因包括:
等待阻塞:當(dāng)線程執(zhí)行了某個(gè)對(duì)象的wait()方法時(shí)恨狈,線程會(huì)被置入該對(duì)象的等待集中,直到執(zhí)行了該對(duì)象的notify()方法wait()/notify()方法的執(zhí)行要求線程首先獲得該對(duì)象的鎖呛讲。
同步阻塞:當(dāng)多個(gè)線程試圖進(jìn)入某個(gè)同步區(qū)域(同步鎖)時(shí)禾怠,沒(méi)能進(jìn)入該同步區(qū)域(同步鎖)的線程會(huì)被置入鎖定集(鎖池)中,直到獲得該同步區(qū)域的鎖贝搁,進(jìn)入就緒狀態(tài)吗氏。
其他阻塞:運(yùn)行的線程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請(qǐng)求時(shí)雷逆,JVM會(huì)把該線程置為阻塞狀態(tài)弦讽。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)膀哲、或者I/O處理完畢時(shí)往产,線程重新轉(zhuǎn)入就緒狀態(tài)。
treemap和hashmap
docker部署(不知道)
mysql語(yǔ)句執(zhí)行順序(沒(méi)答上)
insert into(沒(méi)答上)
select insert into
遞歸
項(xiàng)目越來(lái)越慢怎么處理
死鎖問(wèn)題某宪,遇到過(guò)仿村?什么是死鎖問(wèn)題?
什么場(chǎng)景遇到兴喂?
安全問(wèn)題考慮過(guò)奠宜?你開(kāi)發(fā)遇到過(guò)?
文件注入瞻想,sql注入压真,命令注入?前端注入蘑险?怎么解決
前端框架怎樣滴肿?vue門(mén)戶(hù)是你寫(xiě)?
說(shuō)下所有的你熟悉的前端框架
能寫(xiě)前端佃迄?
打豆豆: 寫(xiě)能寫(xiě)泼差,丑一點(diǎn)而已
一般都是前端寫(xiě)
學(xué)習(xí)通過(guò)什么方式
2019.01.10 周四 小雨
安排了2家贵少,面了一家
1
2
Sixth day AM 10:00
外包,凱旋路369號(hào) 龍之夢(mèng)雅仕大廈堆缘, 地鐵二號(hào)線中山公園站
流程
1滔灶、筆試
2、面試
結(jié)果未面試吼肥,做完筆試11:00 等待20分鐘仍不見(jiàn)面試官录平,直接走了
一個(gè)外包公司而已,不懂得尊重人
Sixth day PM 14:00
甲方缀皱,上海市松江區(qū)斗这, 地鐵松江大學(xué)城站
流程
1、筆試
2啤斗、面試
結(jié)果薪資未達(dá)到期望
輪詢(xún)底層
網(wǎng)關(guān)配置
熔斷限流配置
redis超高并發(fā)
jwt鑒權(quán)如何傳遞信息表箭,如何解析出userInfo中信息到其他微服務(wù)
userid保存到哪里?rsa非對(duì)稱(chēng)加密載荷中
如何判斷2個(gè)token是不同的token
(當(dāng)時(shí)回答每個(gè)用戶(hù)攜帶標(biāo)記钮莲,)
(面試官說(shuō)解析出來(lái)token判斷id 免钻,也可行,
判斷signatrue )
后來(lái)想想是 signatrue標(biāo)識(shí)著每一個(gè)token都不同
(寶貴時(shí)間問(wèn)了問(wèn))咨詢(xún)了業(yè)務(wù)流程
2019.01.11 周五 小雨
安排了2家崔拥,某國(guó)企復(fù)試二面极舔,寶鋼一面
1
2
Seventh day AM 9:30
某國(guó)企二面,浦東新區(qū)沈家弄路握童, 地鐵二號(hào)線
無(wú)筆試
2、面試
結(jié)果未通過(guò)叛赚,烏龍了澡绩,招前端的,我一個(gè)后端俺附,嘎嘎
Seventh day AM 9:30
外包寶鋼肥卡,寶山區(qū)漠河路600號(hào) 東鼎國(guó)際大廈,3號(hào)線友誼路站
無(wú)筆試
2事镣、面試
結(jié)果未通過(guò)步鉴,做物流項(xiàng)目,賣(mài)鋼鐵璃哟,對(duì)面試官水平保持懷疑
技術(shù)面試官: 我們是賣(mài)鋼鐵的氛琢,你們做商城的,差不多
技術(shù)面試官: 我們這邊主要做物流随闪,其他人做其他的…
打豆豆內(nèi)心: 哎呀阳似,我去,啥都沒(méi)問(wèn)
技術(shù)面試官: 對(duì)加班什么看法
打豆豆: 錢(qián)到位一切ok
技術(shù)面試官笑笑: 你期望的這個(gè)就能讓你拼命干了么铐伴?
打豆豆內(nèi)心: 這家伙不是來(lái)招人的…
打豆豆: 開(kāi)什么玩笑撮奏,這點(diǎn)薪水是正常上下班的錢(qián)…
技術(shù)面試官: 有什么想問(wèn)的么
打豆豆一分鐘都不想待: 沒(méi)有
That's all .
歡迎工作一到五年的Java工程師朋友們加入Java高并發(fā): 957734884俏讹,群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)畜吊、高性能及分布式泽疆、Jvm性能調(diào)優(yōu)、Spring源碼玲献,MyBatis殉疼,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用"沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰青自!趁年輕株依,使勁拼,給未來(lái)的自己一個(gè)交代延窜!