寫(xiě)在 2019 年后的螞蟻颊乘、頭條、拼多多的面試總結(jié)

寫(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

此群帶你了解了解更多Android知識(shí)惯退,加入本群可免費(fèi)獲取Gradle赌髓,RxJava,小程序催跪,Hybrid锁蠕,移動(dòng)架構(gòu),NDK懊蒸,React Native荣倾,性能優(yōu)化等技術(shù)教程!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骑丸,一起剝皮案震驚了整個(gè)濱河市舌仍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌通危,老刑警劉巖铸豁,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異菊碟,居然都是意外死亡节芥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)框沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人增炭,你說(shuō)我怎么就攤上這事忍燥。” “怎么了隙姿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵梅垄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我输玷,道長(zhǎng)队丝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任欲鹏,我火速辦了婚禮机久,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赔嚎。我一直安慰自己膘盖,他們只是感情好胧弛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著侠畔,像睡著了一般结缚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上软棺,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天红竭,我揣著相機(jī)與錄音,去河邊找鬼喘落。 笑死茵宪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揖盘。 我是一名探鬼主播眉厨,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兽狭!你這毒婦竟也來(lái)了憾股?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤箕慧,失蹤者是張志新(化名)和其女友劉穎服球,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颠焦,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斩熊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伐庭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粉渠。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圾另,靈堂內(nèi)的尸體忽然破棺而出霸株,到底是詐尸還是另有隱情,我是刑警寧澤集乔,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布去件,位于F島的核電站,受9級(jí)特大地震影響扰路,放射性物質(zhì)發(fā)生泄漏尤溜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一汗唱、第九天 我趴在偏房一處隱蔽的房頂上張望宫莱。 院中可真熱鬧,春花似錦哩罪、人聲如沸梢睛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绝葡。三九已至深碱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藏畅,已是汗流浹背敷硅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愉阎,地道東北人绞蹦。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像榜旦,于是被迫代替她去往敵國(guó)和親幽七。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容