拼多多PDD-4.24服務(wù)端研發(fā)實(shí)習(xí)生一面面經(jīng)
??面試公司:拼多多
??面試崗位:服務(wù)端研發(fā)實(shí)習(xí)生
??面試過(guò)程:全程問(wèn)八股,沒(méi)聊項(xiàng)目,最后做道題。
- 自我介紹
- CMS和G1垃圾回收器,為什么現(xiàn)在生產(chǎn)環(huán)境主要用G1而不用CMS了?我沒(méi)答到點(diǎn)上,面試官希望我回答的是CMS的Full GC會(huì)導(dǎo)致STW(stop the world)的時(shí)間很長(zhǎng),以及時(shí)間很長(zhǎng)的原因
- synchronized鎖升級(jí)的流程,說(shuō)一下什么時(shí)候會(huì)發(fā)生鎖升級(jí)?我三階段答上來(lái)了,但是升級(jí)的觸發(fā)時(shí)機(jī)有點(diǎn)忘了
- 有沒(méi)有了解過(guò)HTTPS,講一下會(huì)話密鑰是如何決策出來(lái)的,講一下流程。如果有個(gè)中間人偽造了一個(gè)公鑰下發(fā)給客戶端,導(dǎo)致中間人將客戶端和服務(wù)器之間的信息被截獲了,如何防止這個(gè)攻擊?我背八股時(shí)有看到過(guò),但印象不深,只回想起CA啥的,沒(méi)答上來(lái)。
- 有了解過(guò)消息隊(duì)列嗎?有聽(tīng)說(shuō)過(guò)Kafka嗎?這個(gè)我簡(jiǎn)歷上只有RabbitMQ,不了解Kafka,和面試官說(shuō)后他就換了個(gè)問(wèn)題
- RabbitMQ底層是用什么語(yǔ)言實(shí)現(xiàn)的?答:Erlang。為什么Erlang實(shí)現(xiàn)RabbitMQ延遲會(huì)比較低?這個(gè)問(wèn)題面試官覺(jué)得可能有點(diǎn)難就跳過(guò)了
- 講講RabbitMQ的優(yōu)先級(jí)隊(duì)列、延遲隊(duì)列是用來(lái)干嘛的嗎?舉兩個(gè)實(shí)際場(chǎng)景。面試官說(shuō)如果他們要用RabbitMQ的話,是因?yàn)橛羞@些RabbitMQ特有的feature,Kafka沒(méi)有,所以才會(huì)去用RabbitMQ,不然還是會(huì)用吞吐量更高的Kafka。
- MySQL存儲(chǔ)引擎InnoDB,它會(huì)有一個(gè)內(nèi)存的BufferPool,為什么要有這個(gè)區(qū)域?答的緩存減少磁盤(pán)IO
- 你知道一般的緩存命中率會(huì)有多少嗎?什么情況下BufferPool需要擴(kuò)大?不太了解生產(chǎn)環(huán)境,猜測(cè)是查詢結(jié)果集較大時(shí)需要擴(kuò)大。
- MySQL的分庫(kù)分表有了解過(guò)嗎?如果有個(gè)訂單表,數(shù)據(jù)量有1億條,你怎么去拆?答的水平分表,一開(kāi)始我想的是按順序分表,但是如果不斷有新訂單產(chǎn)生的話,這個(gè)策略還合適嗎?后來(lái)我就改成了hash去分。
- 現(xiàn)在表已經(jīng)改完了,那么我需要怎么修改業(yè)務(wù)代碼去適配?你知道代碼為什么要改造嗎?如何盡可能減少代碼侵入去修改?面試官希望我回答的是通過(guò)Spring的AOP動(dòng)態(tài)代理去做,但我當(dāng)時(shí)只想到了代理,沒(méi)處理過(guò)這種業(yè)務(wù),所以答得不好。
- MySQL的事務(wù)隔離等級(jí)有哪些?可重復(fù)讀會(huì)不會(huì)出現(xiàn)幻讀?我回答的是MySQL在一定程度上解決了幻讀,但還是存在幻讀現(xiàn)象,比如前面用快照讀,后面用當(dāng)前讀,這種情況可能會(huì)出現(xiàn)。如果統(tǒng)一用快照讀(MVCC)或者當(dāng)前讀(間隙鎖)的話可以避免。
- MVCC是存在哪里的?面試官希望我回答的是undo log,但我沒(méi)get到。
- bin log和redo log有什么區(qū)別?為什么需要redo log?為什么不直接刷到磁盤(pán)?這一塊的八股有點(diǎn)忘了,應(yīng)該回答“順序?qū)憽焙汀半S機(jī)寫(xiě)”的。為什么順序?qū)懕入S機(jī)寫(xiě)快?面試官希望我回答磁盤(pán)的工作原理。
- 拋開(kāi)價(jià)格因素不談,固態(tài)硬盤(pán)和機(jī)械硬盤(pán)分別會(huì)用在什么場(chǎng)景??jī)烧叻謩e有什么好處和弊端?沒(méi)答上來(lái),面試官說(shuō)固態(tài)速度快但不容易恢復(fù),所以他們的數(shù)據(jù)倉(cāng)庫(kù)一般會(huì)用機(jī)械硬盤(pán)存,會(huì)比較好恢復(fù),當(dāng)然價(jià)格上機(jī)械硬盤(pán)也會(huì)比固態(tài)低很多。
- 代碼題:題干有點(diǎn)長(zhǎng),概括講就是有一個(gè)log文件里存了多條命令,命令分為四種,input、delete、undo、redo,input命令輸入,delete命令刪除、undo命令撤銷上個(gè)操作、redo命令重做上個(gè)被撤銷的操作,最終給出執(zhí)行完所有命令后的結(jié)果。面試官先讓我看題想思路,然后用偽代碼寫(xiě)一下就行。思路就是用了兩個(gè)棧,一個(gè)記錄最終需要執(zhí)行的操作opStack,另一個(gè)記錄被撤銷的命令undoStack。在遇到input、delete命令時(shí),將命令壓入opStack中;遇到undo命令時(shí),把opStack棧頂?shù)拿顝棾?,壓入undoStack中;遇到redo命令時(shí),把undoStack棧頂?shù)拿顝棾?,壓入opStack中。在讀完所有命令后,去執(zhí)行opStack里的命令就行。雖然中間因?yàn)閭€(gè)人對(duì)題意有點(diǎn)誤解,寫(xiě)了一個(gè)比較復(fù)雜的版本,但后面在面試官的提示下還是寫(xiě)出來(lái)了這個(gè)最終版本。
- 最后反問(wèn)環(huán)節(jié)問(wèn)了一下如果去拼多多實(shí)習(xí)的話,會(huì)做什么工作。面試官說(shuō)一般入職后會(huì)有個(gè)新手項(xiàng)目,一邊做這個(gè)新手項(xiàng)目,一邊看各種文檔,主要是學(xué)習(xí),不會(huì)參與業(yè)務(wù)代碼開(kāi)發(fā)。新手項(xiàng)目是用來(lái)熟悉公司內(nèi)部的各個(gè)中間件的,后面會(huì)做一些影響不大的業(yè)務(wù)需求,了解業(yè)務(wù)流程,這時(shí)的需求還只是一些影響不大的小優(yōu)化或者之前擱置的非核心需求。大概兩個(gè)月后可以參與一些正式的業(yè)務(wù)需求了,這時(shí)因?yàn)橐鄙暇€,而且涉及多個(gè)團(tuán)隊(duì)進(jìn)度,強(qiáng)度就上來(lái)了,一開(kāi)始可能就參與一個(gè)需求,后面如果適應(yīng)了就會(huì)加大需求的并發(fā)量,總體是這個(gè)節(jié)奏。
??面試體驗(yàn):今天早上面了榮耀,面試官似乎是做安卓開(kāi)發(fā)的,所以問(wèn)的都算比較基礎(chǔ),手撕也是最基礎(chǔ)的鏈表反轉(zhuǎn),20分鐘就結(jié)束了,如果去的話大概率需要換方向。晚上面拼多多,雖然對(duì)難度早就有心理預(yù)期,不過(guò)確實(shí)難度大了不少,有些問(wèn)題挺底層的。面試官人挺好的,對(duì)于每個(gè)沒(méi)答上來(lái)的問(wèn)題都會(huì)解答,只不過(guò)我答得確實(shí)太差了,估計(jì)大概率是要涼了。因?yàn)橥兜帽容^晚,所以這是我面的第二場(chǎng),只能說(shuō)還需要繼續(xù)沉淀,再多背幾家八股準(zhǔn)備充分一點(diǎn),到時(shí)候再多海投幾家吧,先攢個(gè)實(shí)習(xí)經(jīng)歷再說(shuō)。