Go 技術一面一般考哪些內容
沒有假如,我就是一個Golang面試官,來自百度。同時我到百度之前也面過頭條,騰訊,小米,高德的golang,基本都過了。我回答應該還是比較有說服力。
事實上,golang的問題只占我面試問題的20%左右。問東西的順序不一定是下面的順序,有的時候我會根據(jù)簡歷選擇二分法難度來問,直接問一個難度適中的問題。說上來就繼續(xù)二分法篩。下面是我問過的問題。
Go 技能考察
1.make和new差別,引用類型的意義
2.逃逸分析
3.channel的實現(xiàn)
4.gmp與gc,重點問題(網(wǎng)絡io等待隊列,讀寫屏障)
5.map的實現(xiàn),重點問題(sync.map的實現(xiàn),map實現(xiàn)隨機的方法)
期間會根據(jù)實際情況,從這幾個題發(fā)散問一些細節(jié),但是難度不會太難了。因為我面的是p6級別的,問源碼有點欺負人了。另外會問一個開發(fā)性問題,你寫go遇到的坑點。從這里也可以發(fā)散問一些,但是不會問太多了。這幾個問題在10分鐘之內肯定要問完的。我的面試范圍和我之前遇到過的面試基本都在 https://draveness.me/golang/ ,這個教程還是非常不錯的。
PS:除了網(wǎng)頁版 https://draveness.me/golang/ 的作者還出了紙質書,全書彩印,裝訂也十分精美,喜歡讀紙質書的可以考慮入手。
這些問題不一定都要答上來,我是綜合考察的,我寫這幾個題目也不是讓大家去背這幾個題的,只是想告訴大家面試的難度一般如何,順便說幾個經(jīng)典題目。另外我主要關注的問題其實主要是mysql,redis,mq,算法,分布式。有人看的話,我就補充一下。
MySQL 考察
先聲明一下,我說的面試題都是個人向的,其實大家要面哪家公司的時候,搜那家公司的面試題用處其實不大,因為面試官并沒有說題庫,或者統(tǒng)一標準的說法。如果我去了其他家公司當面試官我一樣也會這么問(注意是提問方式和難度,題目我會換的)。而你碰到百度其他面試官,也很可能不會按我這么問。另外,因為我面的校招到10年的都有,所以具體問法也會靈活調整。說到校招,這次大校招我也被安排當面試官了,校招的朋友也可以關注一下,如果能答出來,那就驚喜級別
補充一下我對mysql的考察方式。
1.八股,為什么用b+樹不用b樹
以第一題為分界線,答出來了問下面的
2.說說對mvcc的理解
3.幻讀是怎么解決的
4.redo,undo的作用和實現(xiàn)
5.事務的實現(xiàn)
答不出第一題就問,下面就是純八股了
2.索引怎么建
3.聯(lián)合索引最左前綴
4.聚簇索引與回表
如果覺得前半部分回答得不行,就會轉問后半部分的簡單題。和上面一樣,我問的問題和我遇見過的問題,基本都在《 MySQL技術內幕 :InnoDB存儲引擎》姜承堯老師的書里面。
Redis 考察
redis的東西雖然不多,但是也是必問的。
?1.底層數(shù)據(jù)結構實現(xiàn),重點問題如:壓縮列表
2.aof與rdb,重點問題如:aof重寫機制
3.為什么用跳表
4.分布式鎖與redlock
5.三種分布式的結構
6.大KEY?
基本上說明白一半就行了,和上面一樣,我問的問題和我遇見過的問題,大部分都在《Redis設計與實現(xiàn)》里面。因為redis的問題都不算難,如果全答上來了,我可能會問一個:在擴容rehash的時候scan掃集合,會不會掃到重復的數(shù)據(jù)。
9月9日 補充mq+es+分布式
那就補一下剩下的常問問題吧,mq主要是kafka。下面基本上工作3年之內不怎么問,3年以上的說上1/3到1/2就通過。
?1.kafka的零拷貝和順序io 零拷貝最好說說細節(jié),其實就是用戶空間和內核空間mmap
2.kafka的分片,分片的讀一致性(水位和活躍組?忘了叫什么了)和寫一致性怎么保證
3.es的倒排索引,和分片的查詢召回
4.分布式鎖,redis redlock etcd
5.分布式事務 2pc 3pc tcc
6.分布式共識協(xié)議 raft和paxos
7.分布式數(shù)據(jù)庫 CAP BASE的概念 etcd tidb的了解?
額外的問題,只有簡歷寫了我才會問
1.k8s的應用和架構(k8s其實我也沒深入研究,隨便)
2.監(jiān)控prometheus,比如里面時序數(shù)據(jù)庫TSDB
3.微服務架構的內容,比如服務發(fā)現(xiàn)和鏈路追蹤的工具
4.校招的話問問tcp
5.其他我感興趣的東西
6.算法題必問,一般先選一個中等偏難的,難度參見周賽第三題。要是很順暢就加一個第四題難度(困難),做不出來就換一個第二題難度(中等偏簡單)。
7.架構設計,因為我只是一面,這種問題一般留給二面問。不過我給的建議是,mysql分表,redis緩存,kafka削峰這三板斧
最后
寫在最后,其實我的標準只有一個,我的所有提問也是圍繞這一標準來的,就是讓我感受到你對技術的熱情,對技術路線有清晰規(guī)劃,并且正在進行系統(tǒng)性地有條理的學習持續(xù)一年以上,比如看書,事實上我也是這么要求自己的。我相信滿足了這個條件,你面其他公司也很容易。