天天看點

今日頭條研發面經

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/a724888/article/details/82701510

今日頭條研發面經

今日頭條上海

背景開發工程師

今日頭條研發面經

今日頭條

後端研發工程師

找牛客大佬要了白金碼,跳過死亡筆試,直接視訊面,從3點開始,斷斷續續到晚上8點結束。

每個面試官給我的感覺都是怎麼這麼高冷啊。

今日頭條研發面經

1一面

一面:

1 寫一個題,找一個無序數組的中位數

2 寫了個快排,然後讓我找到無序數組第k大的一個數,我說先排序再找,實際上可以用快排的partition函數。

3 快排的時間複雜度,最壞情況呢,最好情況呢,堆排序的時間複雜度呢,建堆的複雜度是多少,nlgn。

4 作業系統了解麼,Linux和windows

5 說說Linux的磁盤管理,一臉懵逼

6 Linux有哪些程序通信方式,五大件

7 Linux的共享記憶體如何實作,大概說了一下。

8 共享記憶體實作的具體步驟,我說沒用過

9 socket網絡程式設計,說一下TCP的三次握手和四次揮手,中間網絡不好,面試官都沒聽清楚,很尴尬

10 跳過網絡,問了項目的一些東西

11 問我如何把docker講的很清楚,我從實體機,虛拟機到容器具體實作稍微說了下。

12 問我cgroup在linux的具體實作,不會。

13 多線程用過哪些,chm和countdownlatch在實習用過

14 不得不吐槽下今天牛客的視訊網速,不知道啥原因卡的一比,明明下載下傳網速很正常啊,牛客視訊每秒才20k。。瘋狂掉線搞得很蛋疼。

二面:

1 自我介紹

2 Java的集合類哪些是線程安全

3 分别說說這些集合類,hashmap怎麼實作的,扯了很多

4 MySQL索引的實作,innodb的索引,b+樹索引是怎麼實作的,為什麼用b+樹做索引節點,一個節點存了多少資料,怎麼規定大小,與磁盤頁對應。

5 MySQL的事務隔離級别,分别解決什麼問題。

6 Redis了解麼,如果Redis有1億個key,使用keys指令是否會影響線上服務,我說會,因為是單線程模型,可以部署多個節點。

7 問我知不知道有一條指令可以實作上面這個功能。不知道

8 Redis的持久化方式,aod和rdb,具體怎麼實作,追加日志和備份檔案,底層實作原理的話知道麼,不清楚。

9 Redis的list是怎麼實作的,我說用ziplist+quicklist實作的,ziplist壓縮空間,quicklist實作連結清單。

10 sortedset怎麼實作的,使用dict+skiplist實作的,問我skiplist的資料結構,大概說了下是個實作簡單的快速查詢結構。

11 了解什麼消息隊列,rmq和kafka,沒細問

12 寫題時間到。第一題:寫一個層序周遊。

13 第二題:寫一個插入樹節點到一顆排序樹的插入方法,使用遞歸方式找到插入位置即可。

14 第三題:一個有向圖用鄰接矩陣表示,并且是有權圖,現在問怎麼判斷圖中有沒有環。

15 我說直接dfs走到原點即為有環,剛開始寫的時候我又問了一嘴是不是隻要找到一個就行,面試官說是的,然後我說這樣應該用bfs,有一次通路到原節點就是有環了。

16面試官問我不用遞歸能不能做這個題,其實我都還沒開始寫。然後我就說沒有思路,他提示我拓撲圖。我沒明白拓撲圖能帶來什麼好處。現在一想,好像當通路過程中找不到下一個節點時就說明有環。做一個通路标記應該就可以。

17 第四題:一個二叉樹,找到二叉樹中最長的一條路徑。

我先用求樹高的方式求出了根節點的左右子樹高度,加起來便是。

18 然後面試官提示需要考慮某個子樹深度特别大的情況,于是我用周遊的方式重新整理最大值,用上面那個方法周遊完整個樹即可。

19 面試官說複雜度比較高,但是由于時間問題就說結束了。

三面:

三面的面試官真的高冷啊,不苟言笑就算了,我問他問他他都不愛搭理的,搞得我内心慌得一比,感覺涼涼。

1 介紹一下項目

2 你談到的并發技術,chm和countdownlatch怎麼使用的

3 為什麼要這麼處理,使用線程池是不是也可以。我說也可以

4 作業系統的程序通信方式,僵屍程序和孤兒程序是什麼,如何避免僵屍程序,我說讓父程序顯示通知,那父程序怎麼知道子程序結束了,答不會。

5 計算機網絡TCP和UDP有什麼差別,為什麼迅雷下載下傳是基于UDP的,我說FTP是基于TCP,而迅雷是p2p不需要TCP那麼可靠的傳輸保證。

6 他說不對,我說是不是因為要建立連接配接,開銷比較大,他說不對

7 我說p2p的發送節點很多,是以不是那麼需要各種傳輸保證,他說不對。

8 我說TCP會自動分包而TCP可以自己定義資料長度。。他還是說不對。

最後他說算了。我們問下一個吧。

9 作業系統的死鎖必要條件,如何避免死鎖。

10 寫一個LRU的緩存,需要完成逾時淘汰和LRU淘汰。

我說用lhm行不行,他說用linkedlist和hashmap可以。

于是我就寫了put和get函數,進行了隊頭隊尾操作。

他說get複雜度會不會太高,我瞎掰了半天沒找到辦法,他說那就這樣吧,今天面試到這。

11 媽蛋,過期淘汰的處理我還沒寫呢,你就說結束了,感覺涼了啊,我說我要不要把剩下邏輯下完,他說不用,心涼了一大截~

12 然後HR小姐姐讓我等結果了。溜了溜了

 微信公衆号【黃小斜】大廠程式員,網際網路行業新知,終身學習踐行者。關注後回複「Java」、「Python」、「C++」、「大資料」、「機器學習」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「筆試」、「面試」、「面經」、「計算機基礎」、「LeetCode」 等關鍵字可以擷取對應的免費學習資料。 

今日頭條研發面經

繼續閱讀