拼多多PDD-5.5服務(wù)端研發(fā)實(shí)習(xí)生二面面經(jīng)
??面試公司:拼多多
??面試崗位:服務(wù)端研發(fā)實(shí)習(xí)生
??面試問題:先項(xiàng)目穿插八股,后純八股,最后手撕,后面幾個(gè)問題都答得不怎么樣,大概率掛了
- 自我介紹(簡歷上的項(xiàng)目:黑馬點(diǎn)評(píng) + RPC框架 + 兩個(gè)科研項(xiàng)目)
- 首先問了一下研究方向,因?yàn)槲夷莾蓚€(gè)科研項(xiàng)目是用Python寫的,所以面試官首先問我對(duì)Python的基本原理了解嗎?本來估計(jì)想問我線程模型、內(nèi)存管理機(jī)制啥的,但我也只是使用了Python,并沒有對(duì)底層做研究,就沒繼續(xù)問
- 你第一個(gè)項(xiàng)目是科研項(xiàng)目還是課題項(xiàng)目?老實(shí)回答說是自學(xué)項(xiàng)目。是你獨(dú)立開發(fā)的嗎?依舊老實(shí)回答。
- 說說項(xiàng)目亮點(diǎn)。答的緩存那一套東西以及緩存穿透、緩存擊穿、緩存雪崩。
- 緩存穿透怎么解決?存儲(chǔ)空對(duì)象。那存儲(chǔ)的key是什么?那如果我是一名攻擊者,我每次都隨機(jī)生成不同的key去查詢,那每一次都是穿透的,你怎么解決?(應(yīng)該用布隆過濾器的,沒想到)
- 緩存擊穿怎么解決?雙重檢測鎖。緩存雪崩怎么解決?設(shè)置隨機(jī)的過期時(shí)間去盡可能預(yù)防。
- redis怎么設(shè)置過期時(shí)間?set命令+ex或ps參數(shù)。你用過這個(gè)參數(shù)嗎?一般是在SpringBoot上用RedisTemplate去設(shè)置的。除了set+ex外,還有其他命令去設(shè)置過期時(shí)間嗎?印象中有個(gè)expire命令。
- 緩存擊穿是有大量熱Key并發(fā)訪問,那redis中如何檢測熱key?那熱key會(huì)有什么問題呢?(檢測沒想起來,后者答的一個(gè)緩存雪崩,另一個(gè)是節(jié)點(diǎn)壓力過大,可以考慮集群)
- 集群怎么讓一個(gè)請(qǐng)求打到不同的節(jié)點(diǎn)上?負(fù)載均衡
- redis對(duì)過期key的刪除策略有哪些?(忘了,應(yīng)該回答惰性刪除和定期刪除的)
- redis中ZSet底層是用什么數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的?存儲(chǔ)元素?cái)?shù)量在多少時(shí)會(huì)從ziplist切換到skiplist?這個(gè)閾值的默認(rèn)值是多少?(麻了,太久沒背想不起來了,答得不咋地)
- 那講講第二個(gè)項(xiàng)目吧。注冊(cè)中心用的是zookeeper是吧?那zookeeper掛了會(huì)有什么影響嗎?我那個(gè)項(xiàng)目有個(gè)本地緩存,服務(wù)發(fā)現(xiàn)完后會(huì)記錄到本地,所以答的是會(huì)從本地去找,直到zookeeper恢復(fù)。
- 你的RPC框架負(fù)載均衡是怎么實(shí)現(xiàn)的?有實(shí)現(xiàn)基于權(quán)重的負(fù)載均衡策略嗎?如果要你去實(shí)現(xiàn)的話,你怎么實(shí)現(xiàn)?
- 有了解其他RPC框架嗎?比如gRPC、Dubbo這種?你知道Dubbo的基于權(quán)重的負(fù)載均衡策略是怎么實(shí)現(xiàn)的嗎?(又麻了,不了解這些)
- 你序列化用來Json和Hessian兩種是吧?你這個(gè)Json是FastJson還是Jackson?FastJson。為啥不用Jackson呢?這兩者相關(guān)的性能你了解嗎?相同點(diǎn)與不同點(diǎn),有了解嗎?(再度麻了,總不能說網(wǎng)上教程用的是FastJson,所以沒用Jackson吧)
- 你項(xiàng)目是用的SpringBoot是吧,你項(xiàng)目是怎么打包發(fā)布的?用pom.xml文件設(shè)置,并用IDEA配置的Maven進(jìn)行的打包。有直接使用命令嗎?
- Maven里面有哪些包依賴管理的原則?傳遞性依賴如果最終有版本沖突了,最終是由哪個(gè)版本決定的?依賴沖突怎么解決,通過什么手段?(這個(gè)Maven屬于是忘完了,就只會(huì)用IDEA那些了生命周期)
- 你了解JVM的垃圾回收嗎?G1垃圾回收器哪些過程可以和用戶線程并行呢?
- G1和CMS對(duì)比之后,你覺得CMS有哪些優(yōu)勢呢?
- G1里還有Survivor區(qū)域嗎?所以它垃圾回收的時(shí)候也是按照S1、S2來做回收嗎?
- G1中的Region可以分為哪幾種類型呢?
- 你對(duì)card table了解嗎?(這個(gè)也太冷門了吧
)
- MySQL有哪些方式可以解決回表問題?只想起一個(gè)覆蓋索引,后面面試官問我索引下推了解嗎?我答上來了(應(yīng)該是面試官在暗示我這個(gè)操作也可以減少回表)
- 你知道Read View里面有哪些比較重要的關(guān)鍵字的嗎?為了實(shí)現(xiàn)事務(wù)的版本并發(fā)控制,MySQL表里面有哪些隱藏字段來實(shí)現(xiàn)事務(wù)功能?(這兩問一面之前背過,結(jié)果忘了
)
- 你知道order by是怎么實(shí)現(xiàn)的嗎?我想不到,就答了如果有索引的話,B+樹這個(gè)數(shù)據(jù)結(jié)構(gòu)可以優(yōu)化order by。后續(xù)我去查了一下,如果沒有索引,是通過filesort里的sort_buffer實(shí)現(xiàn)的(之前完全沒聽過
)
- 你這些項(xiàng)目都是用git去管理的嗎?有用過哪些命令?你知道git pull和git fetch的區(qū)別嗎?(沒背過,查了一下兩者都可用于從遠(yuǎn)程倉庫獲取數(shù)據(jù),但后者只會(huì)獲取遠(yuǎn)程倉庫的最新代碼和更新信息,但不會(huì)更改本地代碼,前者則還會(huì)嘗試自動(dòng)將這些更改合并到你的當(dāng)前分支中,也就是git pull == git fetch + git merge)
- 最后是手撕lc hot100里的4. 尋找兩個(gè)正序數(shù)組的中位數(shù),??蜕弦灿羞@題兩個(gè)升序數(shù)組的中位數(shù),要求最低的時(shí)間和空間復(fù)雜度。面試結(jié)束后搜了一下,是hard題,可惜之前沒刷過,就只能先和面試官講了最基本的歸并找中位數(shù)的思路,也說了這種方法的時(shí)間復(fù)雜度和空間復(fù)雜度,但不符合題目要求的最低時(shí)間與空間復(fù)雜度,臨時(shí)想的話沒想出來,后續(xù)再補(bǔ)刷一下吧
。
- 反問環(huán)節(jié),因?yàn)椴畈欢嘁呀?jīng)能看到感謝信(如果有的話
)在向我揮手了,所以就只問了面試結(jié)果大概多久可以出來。
??面試體驗(yàn):雖然面試官?zèng)]給壓力,語氣挺溫和的,沒答上來的也沒多問,但是問的題目個(gè)人感覺難度都挺高,加上我個(gè)人準(zhǔn)備不充分,感覺基本是無了,面到一半心就差不多涼了,不報(bào)什么希望了。只能再投幾家了多找找了。