寫(xiě)在2019年后的螞蟻醉锄、頭條乏悄、拼多多的面試總結(jié)
不想聽(tīng)我BB直接進(jìn)入面試分享:
說(shuō)起來(lái)開(kāi)始進(jìn)行面試是年前倒數(shù)第二周,上午9點(diǎn)恳不,我還在去公司的公交上檩小,突然收到螞蟻的面試電話,其實(shí)算不上真正的面試烟勋。面試官只是和我聊了下他們?cè)谧龅氖虑椋ㄖ饕亲鲭p十一這里大促的穩(wěn)定性保障规求,偏中間件吧),說(shuō)的很詳細(xì)卵惦,然后和我溝通了下是否有興趣阻肿,我表示有興趣,后面就收到正式面試的通知沮尿,最后沒(méi)選擇去螞蟻表示抱歉丛塌。
當(dāng)時(shí)我自己也準(zhǔn)備出去看看機(jī)會(huì),順便看看自己的實(shí)力畜疾。當(dāng)時(shí)我其實(shí)挺糾結(jié)的赴邻,一方面現(xiàn)在部門(mén)也正需要我,還是可以有一番作為的啡捶,另一方面覺(jué)得近一年來(lái)進(jìn)步緩慢姥敛,沒(méi)有以前飛速進(jìn)步的成就感了,而且業(yè)務(wù)和技術(shù)偏于穩(wěn)定瞎暑,加上自己也屬于那種比較懶散的人彤敛,骨子里還是希望能夠突破現(xiàn)狀与帆,持續(xù)在技術(shù)上有所精進(jìn)。
在開(kāi)始正式的總結(jié)之前臊泌,還是希望各位同仁能否聽(tīng)我繼續(xù)發(fā)泄一會(huì)鲤桥,抱拳!
我翻開(kāi)自己2018年初立的flag渠概,覺(jué)得甚是慚愧茶凳。其中就有一條是保持一周寫(xiě)一篇博客,奈何中間因?yàn)楦鞣N原因沒(méi)能堅(jiān)持下去播揪。細(xì)細(xì)想來(lái)贮喧,主要是自己沒(méi)能真正靜下來(lái)心認(rèn)真投入到技術(shù)的研究和學(xué)習(xí),那么為什么會(huì)這樣猪狈?說(shuō)白了還是因?yàn)闆](méi)有確定目標(biāo)或者目標(biāo)不明確箱沦,沒(méi)有目標(biāo)或者目標(biāo)不明確都可能導(dǎo)致行動(dòng)的失敗。那么問(wèn)題來(lái)了雇庙,目標(biāo)是啥谓形?就我而言,短期目標(biāo)是深入研究某一項(xiàng)技術(shù)疆前,比如最近在研究mysql寒跳,那么深入研究一定要?jiǎng)邮謱?shí)踐并且有所產(chǎn)出,這就夠了么竹椒?還需要我們能夠舉一反三童太,結(jié)合實(shí)際開(kāi)發(fā)場(chǎng)景想一想日常開(kāi)發(fā)要注意什么,這中間有沒(méi)有什么坑胸完?可以看出书释,要進(jìn)步真的不是一件簡(jiǎn)單的事,這種反人類的行為需要我們克服自我的弱點(diǎn)赊窥,逐漸形成習(xí)慣爆惧。真正牛逼的人,從不覺(jué)得認(rèn)真學(xué)習(xí)是一件多么難的事誓琼,因?yàn)檫@已經(jīng)形成了他的習(xí)慣检激,就喝早上起床刷牙洗臉那么自然簡(jiǎn)單。
扯了那么多腹侣,開(kāi)始進(jìn)入正題叔收,先后進(jìn)行了螞蟻、拼多多和字節(jié)跳動(dòng)的面試傲隶。
準(zhǔn)備過(guò)程
先說(shuō)說(shuō)我自己的情況饺律,我2016先在螞蟻實(shí)習(xí)了將近三個(gè)月,然后去了我現(xiàn)在的老東家跺株,2.5年工作經(jīng)驗(yàn)复濒,可以說(shuō)畢業(yè)后就一直老老實(shí)實(shí)在老東家打怪升級(jí)脖卖,雖說(shuō)有螞蟻的實(shí)習(xí)經(jīng)歷,但是因?yàn)闀r(shí)間太短巧颈,還是有點(diǎn)虛的畦木。所以面試官看到我簡(jiǎn)歷第一個(gè)問(wèn)題絕對(duì)是這樣的。
“哇砸泛,你在螞蟻待過(guò)十籍,不錯(cuò)啊”,面試官笑嘻嘻地問(wèn)到唇礁。 “是的勾栗,還好”,我說(shuō)盏筐。 “為啥才三個(gè)月围俘?”,面試官臉色一沉問(wèn)到琢融。 “嘩啦啦解釋一通界牡。。漾抬』兑荆”,我解釋道奋蔚。 “哦,原來(lái)如此烈钞,那我們開(kāi)始面試吧”泊碑,面試官一本正經(jīng)說(shuō)到。
尼瑪毯欣,早知道不寫(xiě)螞蟻的實(shí)習(xí)經(jīng)歷了馒过,后面仔細(xì)一想,當(dāng)初寫(xiě)上螞蟻不就給簡(jiǎn)歷加點(diǎn)料嘛酗钞。
言歸正傳腹忽,準(zhǔn)備過(guò)程其實(shí)很早開(kāi)始了(當(dāng)然這不是說(shuō)我工作時(shí)老想著跳槽,因?yàn)槲颐靼赚F(xiàn)在的老東家并不是終點(diǎn)砚作,我還需要不斷提升)窘奏,具體可追溯到從螞蟻離職的時(shí)候,當(dāng)時(shí)出來(lái)也面了很多公司葫录,沒(méi)啥大公司着裹,面了大概5家公司,都拿到offer了米同。工作之余常常會(huì)去額外研究自己感興趣的技術(shù)以及工作用到的技術(shù)骇扇,力求把原理搞明白摔竿,并且會(huì)自己實(shí)踐一把。此外少孝,買(mǎi)了N多書(shū)继低,基本有時(shí)間就會(huì)去看,補(bǔ)補(bǔ)基礎(chǔ)稍走,什么操作系統(tǒng)袁翁、數(shù)據(jù)結(jié)構(gòu)與算法、mysql钱磅、jdk之類的源碼梦裂,基本都好好溫習(xí)了(文末會(huì)列一下自己看過(guò)的書(shū)和一些好的資料)。我深知基礎(chǔ)就像“木桶效應(yīng)”的短板盖淡,決定了能裝多少水年柠。
此外,在正式?jīng)Q定看機(jī)會(huì)之前褪迟,我給自己列了一個(gè)提綱冗恨,主要包括Java要掌握的核心要點(diǎn),有不懂的就查資料搞懂味赃。我給自己定位還是Java工程師掀抹,所以Java體系是一定要做到心中有數(shù)的,很多東西沒(méi)有常年的積累面試的時(shí)候很容易露餡心俗,學(xué)習(xí)要對(duì)得起自己傲武,不要騙人。
剩下的就是找平臺(tái)和內(nèi)推了城榛,除了螞蟻揪利,頭條和拼多多都是找人內(nèi)推的,感謝螞蟻面試官對(duì)我的欣賞狠持,以后說(shuō)不定會(huì)去螞蟻咯
平臺(tái):脈脈疟位、GitHub、v2
螞蟻金服
一面
一面就做了一道算法題喘垂,要求兩小時(shí)內(nèi)完成甜刻,給了長(zhǎng)度為N的有重復(fù)元素的數(shù)組,要求輸出第10大的數(shù)正勒。典型的TopK問(wèn)題得院,快排算法搞定。
算法題要注意的是合法性校驗(yàn)昭齐、邊界條件以及異常的處理尿招。另外,如果要寫(xiě)測(cè)試用例,一定要保證測(cè)試覆蓋場(chǎng)景盡可能全就谜。加上平時(shí)刷刷算法題怪蔑,這種考核應(yīng)該沒(méi)問(wèn)題的。
二面
- 自我介紹下唄
- 開(kāi)源項(xiàng)目貢獻(xiàn)過(guò)代碼么丧荐?
- Dubbo提過(guò)一個(gè)打印accesslog的bug算么
- 目前在部門(mén)做什么缆瓣,業(yè)務(wù)簡(jiǎn)單介紹下
- 內(nèi)部有哪些系統(tǒng),作用和交互過(guò)程說(shuō)下
- Dubbo踩過(guò)哪些坑虹统,分別是怎么解決的弓坞?
- 說(shuō)了異常處理時(shí)業(yè)務(wù)異常捕獲的問(wèn)題,自定義了一個(gè)異常攔截器
- 開(kāi)始進(jìn)入正題车荔,說(shuō)下你對(duì)線程安全的理解
- 多線程訪問(wèn)同一個(gè)對(duì)象渡冻,如果不需要考慮額外的同步,調(diào)用對(duì)象的行為就可以獲得正確的結(jié)果就是線程安全
- 事務(wù)有哪些特性忧便?
- ACID
- 怎么理解原子性族吻?
- 同一個(gè)事務(wù)下,多個(gè)操作要么成功要么失敗珠增,不存在部分成功或者部分失敗的情況
- 樂(lè)觀鎖和悲觀鎖的區(qū)別超歌?
- 悲觀鎖假定會(huì)發(fā)生沖突,訪問(wèn)的時(shí)候都要先獲得鎖蒂教,保證同一個(gè)時(shí)刻只有線程獲得鎖巍举,讀讀也會(huì)阻塞;樂(lè)觀鎖假設(shè)不會(huì)發(fā)生沖突凝垛,只有在提交操作的時(shí)候檢查是否有沖突
- 這兩種鎖在Java和MySQL分別是怎么實(shí)現(xiàn)的懊悯?
select... for update
- HashMap為什么不是線程安全的?
- 多線程操作無(wú)并發(fā)控制梦皮,順便說(shuō)了在擴(kuò)容的時(shí)候多線程訪問(wèn)時(shí)會(huì)造成死鎖定枷,會(huì)形成一個(gè)環(huán)
- 怎么讓HashMap變得線程安全?
- Collections的synchronize方法包裝一個(gè)線程安全的Map届氢,或者直接用ConcurrentHashMap
- 兩者的區(qū)別是什么?
- 前者直接在put和get方法加了synchronize同步覆旭,后者采用了分段鎖以及CAS支持更高的并發(fā)
- jdk1.8對(duì)ConcurrentHashMap做了哪些優(yōu)化退子?
- 插入的時(shí)候如果數(shù)組元素使用了紅黑樹(shù),取消了分段鎖設(shè)計(jì)型将,synchronize替代了Lock鎖
- 為什么這樣優(yōu)化寂祥?
- 避免沖突嚴(yán)重時(shí)鏈表多長(zhǎng),提高查詢效率七兜,時(shí)間復(fù)雜度從O(N)提高到O(logN)
- redis主從機(jī)制了解么丸凭?怎么實(shí)現(xiàn)的?
- 有過(guò)GC調(diào)優(yōu)的經(jīng)歷么?
- 有點(diǎn)虛惜犀,答得不是很好
- 有什么想問(wèn)的么铛碑?
三面
- 簡(jiǎn)單自我介紹下
- 監(jiān)控系統(tǒng)怎么做的,分為哪些模塊虽界,模塊之間怎么交互的汽烦?
- 用的什么數(shù)據(jù)庫(kù)?
- mysql
- 使用什么存儲(chǔ)引擎莉御,為什么使用InnnoDB撇吞?
- 支持事務(wù)、聚簇索引礁叔、MVCC
- 訂單表有做拆分么牍颈,怎么拆的?
- 垂直拆分和水平拆分
- 水平拆分后查詢過(guò)程描述下
- 如果落到某個(gè)分片的數(shù)據(jù)很大怎么辦琅关?
- 按照某種規(guī)則煮岁,比如哈希取模、range死姚,將單張表拆分為多張表
- 哈希取模會(huì)有什么問(wèn)題么人乓?
- 有的,數(shù)據(jù)分布不均都毒,擴(kuò)容縮容相對(duì)復(fù)雜
- 分庫(kù)分表后怎么解決讀寫(xiě)壓力色罚?
- 一主多從、多主多從
- 拆分后主鍵怎么保證惟一?
- UUID逮诲、Snowflake算法
- Snowflake生成的ID是全局遞增唯一么秸应?
- 不是,只是全局唯一腌且,單機(jī)遞增
- 怎么實(shí)現(xiàn)全局遞增的唯一ID?
- 講了TDDL的一次取一批ID榛瓮,然后再本地慢慢分配的做法
- Mysql的索引結(jié)構(gòu)說(shuō)下
- 說(shuō)了B+樹(shù)铺董,B+樹(shù)可以對(duì)葉子結(jié)點(diǎn)順序查找,因?yàn)槿~子結(jié)點(diǎn)存放了數(shù)據(jù)結(jié)點(diǎn)且有序
- 主鍵索引和普通索引的區(qū)別
- 主鍵索引的葉子結(jié)點(diǎn)存放了整行記錄禀晓,普通索引的葉子結(jié)點(diǎn)存放了主鍵ID精续,查詢的時(shí)候需要做一次回表查詢
- 一定要回表查詢么?
- 不一定粹懒,當(dāng)查詢的字段剛好是索引的字段或者索引的一部分重付,就可以不用回表,這也是索引覆蓋的原理
- 你們系統(tǒng)目前的瓶頸在哪里凫乖?
- 你打算怎么優(yōu)化确垫?簡(jiǎn)要說(shuō)下你的優(yōu)化思路
- 有什么想問(wèn)我么弓颈?
四面
- 介紹下自己
- 為什么要做逆向?
- 怎么理解微服務(wù)删掀?
- 服務(wù)治理怎么實(shí)現(xiàn)的翔冀?
- 說(shuō)了限流、壓測(cè)爬迟、監(jiān)控等模塊的實(shí)現(xiàn)
- 這個(gè)不是中間件做的事么橘蜜,為什么你們部門(mén)做?
- 當(dāng)時(shí)沒(méi)有單獨(dú)的中間件團(tuán)隊(duì)付呕,微服務(wù)剛搞不久计福,需要進(jìn)行監(jiān)控和性能優(yōu)化
- 說(shuō)說(shuō)Spring的生命周期吧
- 說(shuō)說(shuō)GC的過(guò)程
- 說(shuō)了young gc和full gc的觸發(fā)條件和回收過(guò)程以及對(duì)象創(chuàng)建的過(guò)程
- CMS GC有什么問(wèn)題?
- 并發(fā)清除算法徽职,浮動(dòng)垃圾象颖,短暫停頓
- 怎么避免產(chǎn)生浮動(dòng)垃圾?
- 記得有個(gè)VM參數(shù)設(shè)置可以讓掃描新生代之前進(jìn)行一次young gc姆钉,但是因?yàn)間c是虛擬機(jī)自動(dòng)調(diào)度的说订,所以不保證一定執(zhí)行。但是還有參數(shù)可以讓虛擬機(jī)強(qiáng)制執(zhí)行一次young gc
- 強(qiáng)制young gc會(huì)有什么問(wèn)題潮瓶?
- STW停頓時(shí)間變長(zhǎng)
- 知道G1么陶冷?
- 了解一點(diǎn)
- 回收過(guò)程是怎么樣的?
- young gc毯辅、并發(fā)階段埂伦、混合階段、full gc思恐,說(shuō)了Remember Set
- 你提到的Remember Set底層是怎么實(shí)現(xiàn)的沾谜?
- 有什么想問(wèn)的么?
五面
五面是HRBP面的胀莹,和我提前預(yù)約了時(shí)間基跑,主要聊了之前在螞蟻的實(shí)習(xí)經(jīng)歷、部門(mén)在做的事情描焰、職業(yè)發(fā)展媳否、福利待遇等。阿里面試官確實(shí)是具有一票否決權(quán)的荆秦,很看重你的價(jià)值觀是否match逆日,一般都比較喜歡皮實(shí)的候選人。HR面一定要誠(chéng)實(shí)萄凤,不要說(shuō)謊,只要你說(shuō)謊HR都會(huì)去證實(shí)搪哪,直接cut了靡努。
之前螞蟻實(shí)習(xí)三個(gè)月怎么不留下來(lái)?
實(shí)習(xí)的時(shí)候主管是誰(shuí)?
實(shí)習(xí)做了哪些事情惑朦?(尼瑪這種也問(wèn)兽泄?)
-
你對(duì)技術(shù)怎么看?平時(shí)使用什么技術(shù)棧漾月?(阿里HR真的是既當(dāng)?shù)之?dāng)媽病梢,
:joy:
) 最近有在研究什么東西么
你對(duì)SRE怎么看
對(duì)待遇有什么預(yù)期么
最后HR還對(duì)我說(shuō)目前穩(wěn)定性保障部挺缺人的,希望我盡快回復(fù)梁肿。
小結(jié)
螞蟻面試比較重視基礎(chǔ)蜓陌,所以Java那些基本功一定要扎實(shí)。螞蟻的工作環(huán)境還是挺贊的吩蔑,因?yàn)槲颐娴氖欠€(wěn)定性保障部門(mén)钮热,還有許多單獨(dú)的小組,什么三年1班烛芬,很有青春的感覺(jué)隧期。面試官基本水平都比較高,基本都P7以上赘娄,除了基礎(chǔ)還問(wèn)了不少架構(gòu)設(shè)計(jì)方面的問(wèn)題仆潮,收獲還是挺大的。
拼多多
面試前
面完螞蟻后遣臼,早就聽(tīng)聞拼多多這個(gè)獨(dú)角獸性置,決定也去面一把。首先我在脈脈找了一個(gè)拼多多的HR暑诸,加了微信聊了下蚌讼,發(fā)了簡(jiǎn)歷便開(kāi)始我的拼多多面試之旅。這里要非常感謝拼多多HR小姐姐个榕,從面試內(nèi)推到offer確認(rèn)一直都在幫我篡石,人真的很nice。
一面
- 為啥螞蟻只待了三個(gè)月西采?沒(méi)轉(zhuǎn)正凰萨?
- 轉(zhuǎn)正了,解釋了一通械馆。胖眷。。
- Java中的HashMap霹崎、TreeMap解釋下珊搀?
- TreeMap紅黑樹(shù),有序尾菇,HashMap無(wú)序境析,數(shù)組+鏈表
- TreeMap查詢寫(xiě)入的時(shí)間復(fù)雜度多少囚枪?
- O(logN)
- HashMap多線程有什么問(wèn)題?
- 線程安全劳淆,死鎖
- 怎么解決链沼?
- jdk1.8用了synchronize + CAS,擴(kuò)容的時(shí)候通過(guò)CAS檢查是否有修改沛鸵,是則重試
- 重試會(huì)有什么問(wèn)題么括勺?
- CAS(Compare And Swap)是比較和交換,不會(huì)導(dǎo)致線程阻塞曲掰,但是因?yàn)橹卦囀峭ㄟ^(guò)自旋實(shí)現(xiàn)的疾捍,所以仍然會(huì)占用CPU時(shí)間,還有ABA的問(wèn)題
- 怎么解決蜈缤?
- 超時(shí)拾氓,限定自旋的次數(shù),ABA可以通過(guò)原理變量AtomicStampedReference解決底哥,原理利用版本號(hào)進(jìn)行比較
- 超過(guò)重試次數(shù)如果仍然失敗怎么辦咙鞍?
- synchronize互斥鎖
- CAS和synchronize有什么區(qū)別?都用synchronize不行么趾徽?
- CAS是樂(lè)觀鎖续滋,不需要阻塞,硬件級(jí)別實(shí)現(xiàn)的原子性孵奶;synchronize會(huì)阻塞疲酌,JVM級(jí)別實(shí)現(xiàn)的原子性。使用場(chǎng)景不同了袁,線程沖突嚴(yán)重時(shí)CAS會(huì)造成CPU壓力過(guò)大朗恳,導(dǎo)致吞吐量下降,synchronize的原理是先自旋然后阻塞载绿,線程沖突嚴(yán)重仍然有較高的吞吐量粥诫,因?yàn)榫€程都被阻塞了,不會(huì)占用CPU
- 如果要保證線程安全怎么辦崭庸?
- ConcurrentHashMap
- ConcurrentHashMap怎么實(shí)現(xiàn)線程安全的怀浆?
- 分段鎖
- get需要加鎖么,為什么怕享?
- 不用执赡,volatile關(guān)鍵字
- volatile的作用是什么?
- 保證內(nèi)存可見(jiàn)性
- 底層怎么實(shí)現(xiàn)的函筋?
- 說(shuō)了主內(nèi)存和工作內(nèi)存沙合,讀寫(xiě)內(nèi)存屏障,happen-before跌帐,并在紙上畫(huà)了線程交互圖
- 在多核CPU下首懈,可見(jiàn)性怎么保證芳来?
- 思考了一會(huì),總線嗅探技術(shù)
- 聊項(xiàng)目猜拾,系統(tǒng)之間是怎么交互的?
- 系統(tǒng)并發(fā)多少佣盒,怎么優(yōu)化挎袜?
- 給我一張紙,畫(huà)了一個(gè)九方格肥惭,都填了數(shù)字盯仪,給一個(gè)MN矩陣,從1開(kāi)始逆時(shí)針打印這MN個(gè)數(shù)蜜葱,要求時(shí)間復(fù)雜度盡可能低
- (內(nèi)心OS:之前貌似碰到過(guò)這題全景,最優(yōu)解是怎么實(shí)現(xiàn)來(lái)著)思考中。牵囤。爸黄。
- 可以先說(shuō)下你的思路
- (想起來(lái)了),說(shuō)了什么時(shí)候要變換方向的條件揭鳞,向右炕贵、向下、向左野崇、向上称开,依此循環(huán)
- 有什么想問(wèn)我的?
二面
- 自我介紹下
- 手上還有其他offer么乓梨?
- 拿了螞蟻的offer
- 部門(mén)組織結(jié)構(gòu)是怎樣的鳖轰?
- 。扶镀。蕴侣。這輪不是技術(shù)面么,不過(guò)還是老老實(shí)實(shí)說(shuō)了
- 系統(tǒng)有哪些模塊狈惫,每個(gè)模塊用了哪些技術(shù)睛蛛,數(shù)據(jù)怎么流轉(zhuǎn)的?
- (面試官有點(diǎn)禿頂胧谈,一看級(jí)別就很高)給了我一張紙忆肾,我在上面簡(jiǎn)單畫(huà)了下系統(tǒng)之間的流轉(zhuǎn)情況
- 鏈路追蹤的信息是怎么傳遞的?
- RpcContext的attachment菱肖,說(shuō)了Span的結(jié)構(gòu)(parentSpanId + curSpanId)
- SpanId怎么保證唯一性客冈?
- UUID,說(shuō)了下內(nèi)部的定制改動(dòng)
- RpcContext是在什么維度傳遞的稳强?
- 線程
- Dubbo的遠(yuǎn)程調(diào)用怎么實(shí)現(xiàn)的场仲?
- 講了讀取配置和悦、拼裝url、創(chuàng)建Invoker渠缕、服務(wù)導(dǎo)出鸽素、服務(wù)注冊(cè)以及消費(fèi)者通過(guò)動(dòng)態(tài)代理、filter亦鳞、獲取Invoker列表馍忽、負(fù)載均衡等過(guò)程(嘩啦啦講了10多分鐘),我可以喝口水么
- Spring的單例是怎么實(shí)現(xiàn)的燕差?
- 單例注冊(cè)表
- 怎么保證線程安全的遭笋?
- HashMap + synchronize
- 為什么要單獨(dú)實(shí)現(xiàn)一個(gè)服務(wù)治理框架?
- 說(shuō)了下內(nèi)部剛搞微服務(wù)不久徒探,主要對(duì)服務(wù)進(jìn)行一些監(jiān)控和性能優(yōu)化
- 誰(shuí)主導(dǎo)的瓦呼?
- 內(nèi)部還在使用么?
- 逆向有想過(guò)怎么做成通用么测暗?
- 有什么想問(wèn)的么央串?
三面
二面老大面完后就直接HR面了,主要問(wèn)了些職業(yè)發(fā)展偷溺、是否有其他offer蹋辅、以及入職意向等問(wèn)題,順便說(shuō)了下公司的福利待遇等挫掏,都比較常規(guī)啦侦另。不過(guò)要說(shuō)的是手上有其他offer或者大廠經(jīng)歷會(huì)有一定加分。
小結(jié)
拼多多的面試流程就簡(jiǎn)單許多尉共,畢竟是一個(gè)成立三年多的公司褒傅。面試難度中規(guī)中矩,只要基礎(chǔ)扎實(shí)應(yīng)該不是問(wèn)題袄友。但不得不說(shuō)工作強(qiáng)度很大殿托,開(kāi)始面試前HR就提前和我確認(rèn)能否接受這樣強(qiáng)度的工作,想來(lái)的老鐵還是要做好準(zhǔn)備
字節(jié)跳動(dòng)
面試前
頭條的面試是三家里最專業(yè)的剧蚣,每次面試前有專門(mén)的HR和你約時(shí)間支竹,確定OK后再進(jìn)行面試。每次都是通過(guò)視頻面試鸠按,因?yàn)槎际侵岸际请娫捗婊颥F(xiàn)場(chǎng)面礼搁,所以視頻面試還是有點(diǎn)不自然。也有人覺(jué)得視頻面試體驗(yàn)很贊目尖,當(dāng)然蘿卜青菜各有所愛(ài)馒吴。最坑的二面的時(shí)候?qū)Ψ矫嬖嚬俚木W(wǎng)絡(luò)老是掉線,最后很冤枉的掛了(當(dāng)然有一些點(diǎn)答得不好也是原因之一)。所以還是有點(diǎn)遺憾的饮戳。
一面
- 先自我介紹下
- 聊項(xiàng)目豪治,逆向系統(tǒng)是什么意思
- 聊項(xiàng)目,逆向系統(tǒng)用了哪些技術(shù)
- 線程池的線程數(shù)怎么確定扯罐?
- 如果是IO操作為主怎么確定负拟?
- 如果計(jì)算型操作又怎么確定?
- Redis熟悉么歹河,了解哪些數(shù)據(jù)結(jié)構(gòu)
- 說(shuō)了zset
- zset底層怎么實(shí)現(xiàn)的
- 跳表
- 跳表的查詢過(guò)程是怎么樣的齿椅,查詢和插入的時(shí)間復(fù)雜度
- 說(shuō)了先從第一層查找,不滿足就下沉到第二層找启泣,因?yàn)槊恳粚佣际怯行虻模瑢?xiě)入和插入的時(shí)間復(fù)雜度都是O(logN)
- 紅黑樹(shù)了解么示辈,時(shí)間復(fù)雜度
- 說(shuō)了是N叉平衡樹(shù)寥茫,O(logN)
- 既然兩個(gè)數(shù)據(jù)結(jié)構(gòu)時(shí)間復(fù)雜度都是O(logN),zset為什么不用紅黑樹(shù)
- 跳表實(shí)現(xiàn)簡(jiǎn)單矾麻,踩坑成本低纱耻,紅黑樹(shù)每次插入都要通過(guò)旋轉(zhuǎn)以維持平衡,實(shí)現(xiàn)復(fù)雜
- 點(diǎn)了點(diǎn)頭险耀,說(shuō)下Dubbo的原理
- 說(shuō)了服務(wù)注冊(cè)與發(fā)布以及消費(fèi)者調(diào)用的過(guò)程
- 踩過(guò)什么坑沒(méi)有
- 說(shuō)了dubbo異常處理的和打印accesslog的問(wèn)題
- CAS了解么
- 說(shuō)了CAS的實(shí)現(xiàn)
- 還了解其他同步機(jī)制么
- 說(shuō)了synchronize以及兩者的區(qū)別弄喘,一個(gè)樂(lè)觀鎖,一個(gè)悲觀鎖
- 那我們做一道題吧甩牺,數(shù)組A蘑志,2*n個(gè)元素,n個(gè)奇數(shù)贬派、n個(gè)偶數(shù)急但,設(shè)計(jì)一個(gè)算法,使得數(shù)組奇數(shù)下標(biāo)位置放置的都是奇數(shù)搞乏,偶數(shù)下標(biāo)位置放置的都是偶數(shù)
- 先說(shuō)下你的思路
- 從0下標(biāo)開(kāi)始遍歷波桩,如果是奇數(shù)下標(biāo)判斷該元素是否奇數(shù),是則跳過(guò)请敦,否則從該位置尋找下一個(gè)奇數(shù)
- 下一個(gè)奇數(shù)镐躲?怎么找?
- 有點(diǎn)懵逼侍筛,思考中萤皂。。勾笆。
- 有思路么敌蚜?
- 仍然是先遍歷一次數(shù)組,并對(duì)下標(biāo)進(jìn)行判斷窝爪,如果下標(biāo)屬性和該位置元素不匹配從當(dāng)前下標(biāo)的下一個(gè)遍歷數(shù)組元素弛车,然后替換
- 你這樣時(shí)間復(fù)雜度有點(diǎn)高齐媒,如果要求O(N)要怎么做
- 思考一會(huì),答道“定義兩個(gè)指針纷跛,分別從下標(biāo)0和1開(kāi)始遍歷喻括,遇見(jiàn)奇數(shù)位是是偶數(shù)和偶數(shù)位是奇數(shù)就停下,交換內(nèi)容”
- 時(shí)間差不多了贫奠,先到這吧唬血。你有什么想問(wèn)我的?
二面
- 面試官和藹很多唤崭,你先介紹下自己吧
- 你對(duì)服務(wù)治理怎么理解的拷恨?
- 項(xiàng)目中的限流怎么實(shí)現(xiàn)的?
- Guava ratelimiter谢肾,令牌桶算法
- 具體怎么實(shí)現(xiàn)的腕侄?
- 要點(diǎn)是固定速率且令牌數(shù)有限
- 如果突然很多線程同時(shí)請(qǐng)求令牌,有什么問(wèn)題芦疏?
- 導(dǎo)致很多請(qǐng)求積壓冕杠,線程阻塞
- 怎么解決呢?
- 可以把積壓的請(qǐng)求放到消息隊(duì)列酸茴,然后異步處理
- 如果不用消息隊(duì)列怎么解決分预?
- 說(shuō)了RateLimiter預(yù)消費(fèi)的策略
- 分布式追蹤的上下文是怎么存儲(chǔ)和傳遞的?
- ThreadLocal + spanId薪捍,當(dāng)前節(jié)點(diǎn)的spanId作為下個(gè)節(jié)點(diǎn)的父spanId
- Dubbo的RpcContext是怎么傳遞的笼痹?
- ThreadLocal
- 主線程的ThreadLocal怎么傳遞到線程池?
- 說(shuō)了先在主線程通過(guò)ThreadLocal的get方法拿到上下文信息酪穿,在線程池創(chuàng)建新的ThreadLocal并把之前獲取的上下文信息設(shè)置到ThreadLocal中与倡。這里要注意的線程池創(chuàng)建的ThreadLocal要在finally中手動(dòng)remove,不然會(huì)有內(nèi)存泄漏的問(wèn)題
- 你說(shuō)的內(nèi)存泄漏具體是怎么產(chǎn)生的昆稿?
- 說(shuō)了ThreadLocal的結(jié)構(gòu)纺座,主要分兩種場(chǎng)景:主線程仍然對(duì)ThreadLocal有引用和主線程不存在對(duì)ThreadLocal的引用。第一種場(chǎng)景因?yàn)橹骶€程仍然在運(yùn)行溉潭,所以還是有對(duì)ThreadLocal的引用净响,那么ThreadLocal變量的引用和value是不會(huì)被回收的。第二種場(chǎng)景雖然主線程不存在對(duì)ThreadLocal的引用喳瓣,且該引用是弱引用馋贤,所以會(huì)在gc的時(shí)候被回收,但是對(duì)用的value不是弱引用畏陕,不會(huì)被內(nèi)存回收配乓,仍然會(huì)造成內(nèi)存泄漏
- 線程池的線程是不是必須手動(dòng)remove才可以回收value?
- 是的,因?yàn)榫€程池的核心線程是一直存在的犹芹,如果不清理崎页,那么核心線程的threadLocals變量會(huì)一直持有ThreadLocal變量
- 那你說(shuō)的內(nèi)存泄漏是指主線程還是線程池?
- 主線程
- 可是主線程不是都退出了腰埂,引用的對(duì)象不應(yīng)該會(huì)主動(dòng)回收么飒焦?
- (面試官和內(nèi)存泄漏杠上了),沉默了一會(huì)屿笼。牺荠。。
- 那你說(shuō)下SpringMVC不同用戶登錄的信息怎么保證線程安全的驴一?
- 剛才解釋的有點(diǎn)懵逼休雌,一下沒(méi)反應(yīng)過(guò)來(lái),居然回答成鎖了(大腦有點(diǎn)暈了肝断,此時(shí)已經(jīng)一個(gè)小時(shí)過(guò)去了挑辆,感覺(jué)情況不妙。孝情。。)
- 這個(gè)直接用ThreadLocal不就可以么洒嗤,你見(jiàn)過(guò)SpringMVC有鎖實(shí)現(xiàn)的代碼么
- 有點(diǎn)暈菜箫荡。。渔隶。
- 我們聊聊mysql吧羔挡,說(shuō)下索引結(jié)構(gòu)
- 說(shuō)了B+樹(shù)
- 為什么使用B+樹(shù)?
- 說(shuō)了查詢效率高间唉,O(logN)绞灼,可以充分利用磁盤(pán)預(yù)讀的特性,多叉樹(shù)呈野,深度小低矮,葉子結(jié)點(diǎn)有序且存儲(chǔ)數(shù)據(jù)
- 什么是索引覆蓋?
- 忘記了被冒。军掂。。
- Java為什么要設(shè)計(jì)雙親委派模型昨悼?
- 什么時(shí)候需要自定義類加載器蝗锥?
- 我們做一道題吧,手寫(xiě)一個(gè)對(duì)象池
- 有什么想問(wèn)我的么
小結(jié)
頭條的面試確實(shí)很專業(yè)率触,每次面試官會(huì)提前給你發(fā)一個(gè)視頻鏈接终议,然后準(zhǔn)點(diǎn)開(kāi)始面試,而且考察的點(diǎn)都比較全。
面試官都有一個(gè)特點(diǎn)穴张,會(huì)抓住一個(gè)值得深入的點(diǎn)或者你沒(méi)說(shuō)清楚的點(diǎn)深入下去直到你把這個(gè)點(diǎn)講清楚细燎,不然面試官會(huì)覺(jué)得你并沒(méi)有真正理解。二面面試官給了我一點(diǎn)建議陆馁,研究技術(shù)的時(shí)候一定要去研究產(chǎn)生的背景找颓,弄明白在什么場(chǎng)景解決什么特定的問(wèn)題,其實(shí)很多技術(shù)內(nèi)部都是相通的叮贩。很誠(chéng)懇击狮,很感謝這位面試官大大。
總結(jié)
從年前開(kāi)始面試到頭條面完大概一個(gè)多月的時(shí)間益老,真的有點(diǎn)身心俱疲的感覺(jué)彪蓬。最后拿到了拼多多、螞蟻的offer捺萌,還是蠻幸運(yùn)的档冬。頭條的面試對(duì)我?guī)椭艽螅俅胃兄x面試官對(duì)我的誠(chéng)懇建議桃纯,以及拼多多的HR對(duì)我的啰嗦的問(wèn)題詳細(xì)解答酷誓。
這里要說(shuō)的是面試前要做好兩件事:簡(jiǎn)歷和自我介紹,簡(jiǎn)歷要好好回顧下自己做的一些項(xiàng)目态坦,然后挑幾個(gè)亮點(diǎn)項(xiàng)目盐数。自我介紹基本每輪面試都有,所以最好提前自己練習(xí)下伞梯,想好要講哪些東西玫氢,分別怎么講。此外谜诫,簡(jiǎn)歷提到的技術(shù)一定是自己深入研究過(guò)的漾峡,沒(méi)有深入研究也最好找點(diǎn)資料預(yù)熱下,不打無(wú)準(zhǔn)備的仗喻旷。
這些年看過(guò)的書(shū):
《Effective Java》生逸、《現(xiàn)代操作系統(tǒng)》、《TCP/IP詳解:卷一》且预、《代碼整潔之道》牺陶、《重構(gòu)》、《Java程序性能優(yōu)化》辣之、《Spring實(shí)戰(zhàn)》掰伸、《Zookeeper》、《高性能MySQL》怀估、《億級(jí)網(wǎng)站架構(gòu)核心技術(shù)》狮鸭、《可伸縮服務(wù)架構(gòu)》合搅、《Java編程思想》
說(shuō)實(shí)話這些書(shū)很多只看了一部分,我通常會(huì)帶著問(wèn)題看書(shū)歧蕉,不然看著看著就睡著了灾部,簡(jiǎn)直是催眠良藥
最后,附一張自己面試前準(zhǔn)備的腦圖:
鏈接: https://pan.baidu.com/s/1o2l1tuRakBEP0InKEh4Hzw
需要腦圖密碼的加群:935654177