今天下午面了字節跳動飛書後臺的一面,一共面了差不多一個半小時,面試官很耐心,問的有深度有廣度。
首先是一段自我介紹
然後問的操作系統和組成原理相關的:
1、線程和進程的區別 答:進程有獨立資源,線程是進程的子結構,共享一個進程的資源
2、設計線程和進程的目的 答:線程主要是爲了充分利用CPU資源,在耗時操作的時候掛起I/O線程,CPU可以計算其他線程
3、在什麼情景下使用多線程什麼情景下使用多進程 (I/O密集型場景和計算密集型場景)答:想了半天,I/O密集型場景用多線程,不知道對不對
4、你知道哪些進程調度算法 答:FIFO、短作業優先、優先級調度、多隊列優先級調度
5、死鎖瞭解嗎,是怎麼產生的,如果發生了死鎖,操作系統會怎麼做 答:線程互相爭搶資源,系統有死鎖檢測,根據資源需求矩陣,成環意味着發生死鎖,通過釋放資源來解鎖,搶佔式。
6、堆和棧的區別瞭解嗎 答:不太瞭解,棧空間主要儲存運行時申請的變量和函數調用,堆放一些固定量和全局量(不知道對不對)
7、堆在內存空間中和棧的位置關係 答:好像堆在下面
8、棧分配空間是從低地址向高地址還是高地址向低地址 答:棧應該是向高地址分配(大小端問題,確實沒複習到,盲點)
9、併發控制 (講了一下鎖機制,結合自己的項目講了一下讀寫鎖)
這一段有些問題問的很籠統,在你回答完後面試官會就細節繼續問下去,很考驗知識廣度和理解
接下來問了一些網絡相關的
1、5層和7層網絡模型說一下 答:OSI五層和七層
2、TCP是哪一層的 答:傳輸層
3、TCP數據包有哪些字段 答:記得有端口號、序列號其他不記得了
4、講一下TCP建立連接和釋放連接的過程 答:三次握手、四次揮手
5、TCP擁塞控制算法瞭解嗎 答:慢啓動、擁塞避免
6、TCP是怎麼知道網絡擁塞了的 答:應該是根據超時重傳來檢測,底層可能是ICMP
問完網絡接下來就是問編程語言相關了,飛書團隊好像技術棧是python和goland,而我說自己碩士期間主要用的python就主要問我python相關
上來先問了幾個python2.7的問題,一下子就蒙了,趕緊說我用的都是3.5之後
然後問了一個ASCII和Unicode的區別,Unicode和UTF8什麼關係 答:ASCII是一個字節的編碼表,0-255對應字符,另外兩個不太瞭解
3、迭代器和生成器瞭解嗎 答:不太瞭解
4、GIL瞭解嗎 答:全局鎖,不能充分發揮多核算力,需要多開CPython解釋器解決問題,等於多進程
5、dict的底層是怎麼實現的 答:hashtable實現,2/3裝填因子會拉長大小,衝突後採用一個僞隨機探查法(記不清了)
6、有沒有處理過併發 答:簡單結合項目說了一下
7、你用python的時候有進行過性能優化嗎 答:吹了兩個點,一個是for改矩陣運算 還有一個是做實驗的時候用多線程讀取訓練數據。
最後手撕代碼,說實話面到這裏緊張的很,也很疲憊,導致後面發揮失常
問題是leetcode原題 543 二叉樹最長路徑,我正好沒刷過
一開始講了一下思路,計算葉子節點間的最長路徑即可,想當然認爲最長路徑必然經過根,快寫完了面試官說你這裏好像有問題,我才反應過來,後面一下子就蒙了。
幾分鐘後面試官給提示,其實已經是明示了,問我一棵樹和它左右子樹的最長路徑之間有什麼關係,我才反應過來,寫完之後。
面試官給了一個例子,然後構建一下這個樹,並跑一下寫好的代碼,用中序+前序的方法構建了,最後跑出來結果還差1,邊界條件差了一個地方。
整個手撕代碼過程磕磕絆絆的,非常差,對二面不報太大期望了,最後面試官問我有啥想問他的,然後就說有結果會7天內通知。
總結一下,基礎知識要牢固,特別是很多細節,不能浮於表面,算法也要多刷,前面面試50多分鐘再來考算法真的壓力很大,再來一道陌生題可能當場就炸了,可能也是面試經驗不足吧