今日頭條上海
后臺(tái)開(kāi)發(fā)工程師
今日頭條
后端研發(fā)工程師
找?痛罄幸税捉鸫a,跳過(guò)死亡筆試,直接視頻面,從3點(diǎn)開(kāi)始,斷斷續(xù)續(xù)到晚上8點(diǎn)結(jié)束。
每個(gè)面試官給我的感覺(jué)都是怎么這么高冷啊。
一面:
1.寫(xiě)一個(gè)題,找一個(gè)無(wú)序數(shù)組的中位數(shù)
2.寫(xiě)了個(gè)快排,然后讓我找到無(wú)序數(shù)組第k大的一個(gè)數(shù),我說(shuō)先排序再找,實(shí)際上可以用快排的partition函數(shù)。
3.快排的時(shí)間復(fù)雜度,最壞情況呢,最好情況呢,堆排序的時(shí)間復(fù)雜度呢,建堆的復(fù)雜度是多少,nlgn。
4.操作系統(tǒng)了解么,Linux和windows
6.Linux有哪些進(jìn)程通信方式,五大件
7.Linux的共享內(nèi)存如何實(shí)現(xiàn),大概說(shuō)了一下。
8.共享內(nèi)存實(shí)現(xiàn)的具體步驟,我說(shuō)沒(méi)用過(guò)
9.socket網(wǎng)絡(luò)編程,說(shuō)一下TCP的三次握手和四次揮手,中間網(wǎng)絡(luò)不好,面試官都沒(méi)聽(tīng)清楚,很尷尬
10.跳過(guò)網(wǎng)絡(luò),問(wèn)了項(xiàng)目的一些東西
11.問(wèn)我如何把docker講的很清楚,我從物理機(jī),虛擬機(jī)到容器具體實(shí)現(xiàn)稍微說(shuō)了下。
12.問(wèn)我cgroup在linux的具體實(shí)現(xiàn),不會(huì)。
13.多線程用過(guò)哪些,chm和countdownlatch在實(shí)習(xí)用過(guò)
14.不得不吐槽下今天牛客的視頻網(wǎng)速,不知道啥原因卡的一比,明明下載網(wǎng)速很正常啊,牛客視頻每秒才20k。。瘋狂掉線搞得很蛋疼。
二面:
1.自我介紹
2.Java的集合類哪些是線程安全
3.分別說(shuō)說(shuō)這些集合類,hashmap怎么實(shí)現(xiàn)的,扯了很多
4.MySQL索引的實(shí)現(xiàn),innodb的索引,b+樹(shù)索引是怎么實(shí)現(xiàn)的,為什么用b+樹(shù)做索引節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)存了多少數(shù)據(jù),怎么規(guī)定大小,與磁盤(pán)頁(yè)對(duì)應(yīng)。
5.MySQL的事務(wù)隔離級(jí)別,分別解決什么問(wèn)題。
6.Redis了解么,如果Redis有1億個(gè)key,使用keys命令是否會(huì)影響線上服務(wù),我說(shuō)會(huì),因?yàn)槭菃尉程模型,可以部署多個(gè)節(jié)點(diǎn)。
7.問(wèn)我知不知道有一條命令可以實(shí)現(xiàn)上面這個(gè)功能。不知道
8.Redis的持久化方式,aod和rdb,具體怎么實(shí)現(xiàn),追加日志和備份文件,底層實(shí)現(xiàn)原理的話知道么,不清楚。
9.Redis的list是怎么實(shí)現(xiàn)的,我說(shuō)用ziplist+quicklist實(shí)現(xiàn)的,ziplist壓縮空間,quicklist實(shí)現(xiàn)鏈表。
10.sortedset怎么實(shí)現(xiàn)的,使用dict+skiplist實(shí)現(xiàn)的,問(wèn)我skiplist的數(shù)據(jù)結(jié)構(gòu),大概說(shuō)了下是個(gè)實(shí)現(xiàn)簡(jiǎn)單的快速查詢結(jié)構(gòu)。
11.了解什么消息隊(duì)列,rmq和kafka,沒(méi)細(xì)問(wèn)
12.寫(xiě)題時(shí)間到。第一題:寫(xiě)一個(gè)層序遍歷。
13.第二題:寫(xiě)一個(gè)插入樹(shù)節(jié)點(diǎn)到一顆排序樹(shù)的插入方法,使用遞歸方式找到插入位置即可。
14.第三題:一個(gè)有向圖用鄰接矩陣表示,并且是有權(quán)圖,現(xiàn)在問(wèn)怎么判斷圖中有沒(méi)有環(huán)。
15.我說(shuō)直接dfs走到原點(diǎn)即為有環(huán),剛開(kāi)始寫(xiě)的時(shí)候我又問(wèn)了一嘴是不是只要找到一個(gè)就行,面試官說(shuō)是的,然后我說(shuō)這樣應(yīng)該用bfs,有一次訪問(wèn)到原節(jié)點(diǎn)就是有環(huán)了。
16.面試官問(wèn)我不用遞歸能不能做這個(gè)題,其實(shí)我都還沒(méi)開(kāi)始寫(xiě)。然后我就說(shuō)沒(méi)有思路,他提示我拓?fù)鋱D。我沒(méi)明白拓?fù)鋱D能帶來(lái)什么好處,F(xiàn)在一想,好像當(dāng)訪問(wèn)過(guò)程中找不到下一個(gè)節(jié)點(diǎn)時(shí)就說(shuō)明有環(huán)。做一個(gè)訪問(wèn)標(biāo)記應(yīng)該就可以。
17.第四題:一個(gè)二叉樹(shù),找到二叉樹(shù)中最長(zhǎng)的一條路徑。
我先用求樹(shù)高的方式求出了根節(jié)點(diǎn)的左右子樹(shù)高度,加起來(lái)便是。
18.然后面試官提示需要考慮某個(gè)子樹(shù)深度特別大的情況,于是我用遍歷的方式刷新最大值,用上面那個(gè)方法遍歷完整個(gè)樹(shù)即可。
19.面試官說(shuō)復(fù)雜度比較高,但是由于時(shí)間問(wèn)題就說(shuō)結(jié)束了。
三面:
三面的面試官真的高冷啊,不茍言笑就算了,我問(wèn)他問(wèn)他他都不愛(ài)搭理的,搞得我內(nèi)心慌得一比,感覺(jué)涼涼。
1.介紹一下項(xiàng)目
2.你談到的并發(fā)技術(shù),chm和countdownlatch怎么使用的
3.為什么要這么處理,使用線程池是不是也可以。我說(shuō)也可以
4.操作系統(tǒng)的進(jìn)程通信方式,僵尸進(jìn)程和孤兒進(jìn)程是什么,如何避免僵尸進(jìn)程,我說(shuō)讓父進(jìn)程顯示通知,那父進(jìn)程怎么知道子進(jìn)程結(jié)束了,答不會(huì)。
5.計(jì)算機(jī)網(wǎng)絡(luò)TCP和UDP有什么區(qū)別,為什么迅雷下載是基于UDP的,我說(shuō)FTP是基于TCP,而迅雷是p2p不需要TCP那么可靠的傳輸保證。
6.他說(shuō)不對(duì),我說(shuō)是不是因?yàn)橐⑦B接,開(kāi)銷比較大,他說(shuō)不對(duì)
7.我說(shuō)p2p的發(fā)送節(jié)點(diǎn)很多,所以不是那么需要各種傳輸保證,他說(shuō)不對(duì)。
8.我說(shuō)TCP會(huì)自動(dòng)分包而TCP可以自己定義數(shù)據(jù)長(zhǎng)度。。他還是說(shuō)不對(duì)。
最后他說(shuō)算了。我們問(wèn)下一個(gè)吧。
9.操作系統(tǒng)的死鎖必要條件,如何避免死鎖。
10.寫(xiě)一個(gè)LRU的緩存,需要完成超時(shí)淘汰和LRU淘汰。
我說(shuō)用lhm行不行,他說(shuō)用linkedlist和hashmap可以。
于是我就寫(xiě)了put和get函數(shù),進(jìn)行了隊(duì)頭隊(duì)尾操作。
他說(shuō)get復(fù)雜度會(huì)不會(huì)太高,我瞎掰了半天沒(méi)找到辦法,他說(shuō)那就這樣吧,今天面試到這。
11.媽蛋,過(guò)期淘汰的處理我還沒(méi)寫(xiě)呢,你就說(shuō)結(jié)束了,感覺(jué)涼了啊,我說(shuō)我要不要把剩下邏輯下完,他說(shuō)不用,心涼了一大截~
12.然后HR小姐姐讓我等結(jié)果了。溜了溜了