4月14日更新,嗚嗚嗚謝謝收留……接下來好好學習計網、操統!多多實踐!再整理整理我的Github……門面還是需要捯飭的!
======
希望我在之后能不用再說這句了:很后悔本科沒有學計算機網絡和操作系統,更沒有網絡實習和操統實習,缺少代碼的訓練和知識的錘煉,現在就被壓在地上狠錘。
2020年暑期實習,投的是字節跳動教育業務后端開發。
一面和二面是連着的,一面過了才會通知二面。從一面到三面都很注重項目經歷,因為我的實習經歷並不match這個職位,所以就沒有細講……
因為時隔太久,很多問題我都忘了,以下記錄一些我還能回憶起來的內容。
一面:
MySQL的底層數據結構(B+樹),為什么不用B樹、紅黑樹。
做了兩道題,一題是判斷是否是二叉搜索樹(前序遍歷就可以了),一題是股票買賣(一次買賣和無限次買賣,如果要做k次買賣我也不虛,但是會讓人頭皮發麻就是了……)
二面:
linux系統有了解嗎(並不非常了解,而且我這個人經常犯蠢,知道概念,但是和名詞對應不上……)
TCP和UDP的區別
HTTP狀態碼
(這一位面試官狠抓計網和操統,使我下決心在之后要迭代式快速學習,每次都過一遍大綱,然后對那些自己沒有記下來的內容狠狠再背一遍)
做了一道題,判斷是否是完全二叉樹。(是的,傻瓜就是我了,記不得完全二叉樹的定義,光知道長啥樣了,臨時問了面試官,面試官很nice地解釋了)
三面:
boss面真的不太一樣……這是我的感受
看你C++是熟練,那么重寫和重載的區別是什么。說說模板,再回來說說重寫和重載。(是的,我把重寫和重載說反了,面試官試圖挽救我,讓我說說模板,然而我還是說反了……override和overload的區別,從名字上看也很明顯。面完就感覺有點涼)
虛函數的作用是什么。純虛函數。
內核態和用戶態。為什么要有這樣的區分。
中斷是什么。
TCP的連接過程,為什么不能是二次握手。
死鎖的四個必要條件,如何預防處理死鎖(我說了預防、控制、檢測、處理,但其實我感覺面試官應該想讓我說的是銀行家算法……)。
做了一道題:在一維數組里找兩個數,加和為特定值,問有幾個這樣的數對。一開始是先sort,再雙指針。改進是空間換時間,用個map/unorder_map。然后遍歷,查看加和為特定值的另一個值是否在map中。如果有,就加上這個乘積,並且把這兩個map值置0,否則就過。不置0也可以,最后把加和除以2就可以了,但是最好不要,誰知道會不會溢出……還有一點比較重要,在兩個做法里都要注意的是,當這個值剛好為特定值的一半的時候,需要用組合數,而不是直接相乘。畢竟自己和自己不能組成一對。
最近在學什么,看什么書(我真的是嘴笨,其實面試之前是有想過這個問題的,但是面試的時候就嘴瓢了,亂說一通)。能准確地表達自己的意思真的是一件不容易的事。
最重要的一句話:面經總歸是別人的體驗,自己面試的時候會被問到什么問題都是不確定的。有規律可循,字節的面試官很注重基礎,也會根據你的簡歷調整詢問的方向。所以好好寫簡歷非常重要。比如我缺少開發經驗,而我在三面之前臨時抱佛腳看了軟工,花了大工夫在背記創建型、結構型、行為型三種設計模式,但是三面的時候並沒有問這些_(:3」∠)_大部分時間花在了如何優化系統上,一聽就很假大空,所以大概率已進備胎池,不知道啥時候涼,畢竟公司都是寧缺毋濫……
我只能是心懷期盼了。整個面試流程下來,我對我自己的評價是:缺少實戰,只知其然不知其所以然(都是書本知識,但是沒有實戰驗證)。還是要練習。盡管有點涼,還是給字節打個廣告吧!面試流程體驗絕佳,面試官很會把握問問題的深度,不會一上來就問很難的問題,問的都是你自己說出來的東西,這種拋磚引玉的問法還是需要適應一下,但是對於雙方都是一個很好的了解機會。
Anyway,加油!