前言
從面試到現在已有一個多月了,面試的問題還記得八九成。端午節前剛從上家離職趁著假期有空把面試問題總結一下。主要是記錄一下問題,答案三言兩語寫不完,網上有蠻多文章講的挺好所以本文不再展開。
技術棧
java
, golang
, js
, python
主要是前面兩個。
面試總結
- 其他Java團隊leader面
- 其他Golang團隊leader面
- 本團隊leader面
- 總監面
之所以把面試總結放前面是因為頭一次寫文章沒經驗下面排版太樸素了,怕大家看不下去所以先簡單幾句話概況。面試總共4小時,4輪。回憶了一下大概回答了90~95%左右,總體感覺還可以。給我的印象這幾個面試官都很專業,問題質量也挺高,人也很nice。
這次面試像是照鏡子知道了自身的不足,接下來還需紮實沉澱技術。加強演算法能力。理解原始碼。努力不負每次機會。
2年前從sz回到wh 然後才感受到sz的好。屬於後知後覺型別。看著以前用友的同事們一個個跳的都挺棒(阿里、騰訊、阿里、百度、京東、美團、網易等等)自己再看下自己感覺在荒野求生
。
沒啥愛好這幾年除了玩玩遊戲就是看看技術,也沒考慮過人生追求,但是最近半年思考了一下人生突然知道了自己想要什麼(都二十八九歲馬上奔三了這也太后知後覺了)
統計下資料算個帳
19年wh 投了50+ 面了4個 拿到2個。。大部分是不回覆。
17年wh 投了10多個 面了7個 拿到4個。(後來某種原因拒絕了訊飛的offer、選擇了某公司)
12~16年sz 資料不記得了。雖然自己是個弱雞但是感覺工作挺好找。(16年用友)
所以19年wh真是神奇,我一度懷疑是簡歷太水了,發給sz、hz朋友看他們說還好啊沒問題。難道是川普貿易戰搞的招聘困難?【微笑】
本文標題怎講
講個真實的笑話,前一陣子在wh面一家小公司架構師職位 場景:4個人同時面我,一個大桌子,總經理辦公室
總經理:你要不要做銷售啊 以前做過銷售嗎?
我:尷尬的說做銷售太難了我沒這個能力。(【黑人問號】為啥一開始就跟我聊這個,難道我看起來這麼沒有技術含量?我投了幾十個簡歷了興奮的來這裡你跟我說這?這對的起我認真的態度嗎?)
總經理:哦!你公司做硬體產品的啊!(我簡歷裡有寫NLP機器人專案)
我:“這是個軟體產品”(what the f**k,大哥哥你對我有嚴重的誤解。)
總經理:那就讓技術總監來面一下吧(估計是讓他沒面子了)
開始技術面
他: 介紹一下你做的專案
我: 介紹某個專案的背景,說了下專案是幹啥用的,簡單提了一下技術棧 大概5~6分鐘 因為要互動所以不能一個人說太久
他:GRPC是幹什麼用的,你們為什麼不用http restful來做呢
我:遠端呼叫 基於http2 有4中呼叫方式 序列化協議採用protobuf(心裡想這麼多內容了你一個個的問吧)
他:好的,我技術面完了
總經理補了幾句總結性的客套話 面試結束
【WTF 這就結束了?】這才15分鐘不到?我就這樣被淘汰了?嗯是的【微笑】
ok 綜上所述 抱著終於得到了一次技術面的心情寫下這個題目。
一面 Java
主要是Java基礎 框架原理
- 詳述
執行緒池
構造方法有哪些各有什麼用、ctl
、allowCoreThreadTimeOut
變數的作用,初始化階段、大量提交任務階段、執行完所有任務階段這寫過程。(addWorker
過程和其它部分回答得不錯runWorker
getTask
的一些細節回答的不好。執行緒池是Java躲不開的問題 網上有很多答案不再細說。) HashMap
資料結構,resize
過程,如果多執行緒去操作會出現哪些問題,1.7和1.8有什麼變化,既然提到了紅黑樹
那麼來聊聊它和BST
、AVL
各自有啥特點有啥區別,說一下平衡過程(ok。這個是基礎內容網上一大把答案不再細說)- 接下來聊聊
concurrenthashmap
怎樣保證執行緒安全的1.7和1.8區別(ok) - 執行緒有幾種狀態,
sleep
wait
區別(ok) synchronized
Lock
區別,synchronized工作原理物件頭、JVM中鎖的優化,再聊聊併發包的AQS、公平鎖非公平鎖 讀寫鎖、CAS和底層的unsafe(ok)JVM記憶體結構
,堆的記憶體結構哪些是執行緒共享的呢,使用過javap命令嗎結合這個命令你個談談對JVM記憶體各個區的理解。調優相關。(ok)- 聊一下
GC
,可達性分析演算法
、哪些物件可以作為GC ROOT
,根據新生代老年代特點的不同來說一下他們適合使用哪些垃圾回收演算法。對比一下標記清除
和標記整理
。(ok) 類載入器
,雙親委派
,安全沙箱機制
(ok)- 聊聊IO吧,
BIO
、NIO
,IO模型
,jvm怎樣實現NIO的呢(ok。還好之前略看了一下JVM這一塊的c c++程式碼。多路複用 非阻塞之類的就不細說了。說幾個關鍵點,IO模型參照《unix網路程式設計》。select
、poll
、epoll
。fcntl
) - 巴拉巴拉聊專案牽扯出一堆問題 一致性hash演算法、分散式事物、Service Mesh實踐、rabbitmq(基本ok)
TCP滑動視窗
ACK機制。(ok)- zuul、hystrix、feign工作原理,springmvc工作原理(ok)
- 舉例說明spring中使用到的設計模式(ok,掘金有這個文章)
- git使用規範、gitflow(ok)
- dubbo 相關問題(ok)
二面 golang
- Golang 的併發模型(回答的一般 M、P、G)
- 聊聊gin原始碼 路由、group、middleware &設計模式(路由的實現用到了字首樹這個回答得不好 ,其它ok)
- grpc4種呼叫方式,你看過grpc golang版原始碼 client --> server這個過程你講一下。protobuf協議 GRPC 效能優化,http2 (ok,這個印象深刻在上家公司時候還做過分享)
- cap原理,註冊中心選型AP or CP。
- etcd是CAP的哪種?etcd資料一致性演算法是?詳述raft協議,發生分割槽隔離之後會怎樣,隔離恢復之後怎樣保證資料一致性?(ok,說raft之前先說了一下Paxos 後來引出了Raft 對比一下,然後開始講raft各種情況 極力推薦去這裡看看 raft.github.io/)
- 你說看過原始碼那聊一下gomicro吧(說了一下各種元件每種適合做什麼事,講了一下我們的專案中微服務用到了哪些,上家公司gomicro技術棧是我推動的所以這裡回答得還可以。)
- 聊一下你們沒有采用gomicro的時候你們的微服務是怎樣實踐的(註冊中心發現用的etcd,lease續期、服務降級、限流、熔斷、快取、一致性hash等負載均衡策略實現,GRPC,golang版rabbitmq客戶端&斷網重連。不像spring cloud或gomicro很多現成的可以用這些都是手擼 當然這是我的團隊共同完成的,這過程中收穫蠻多所以不要排斥學習另一門語言或者技術棧 往往會對自己開啟一扇窗)
- golang壓測pprof,火焰圖,結合專案講一下架構推演 效能提升點(OK)
- 你們專案結構和依賴管理(OK,這裡不得不吐槽一下 godep、glide真的不如maven好用)
- 遇到過哪些坑(使用etcd過程中遇到的坑,使用不當造成的協程洩露以及如何避免的,watch、lease、空間壓縮、等)
- 使用golang你印象深刻的是啥(協程,chan、select這是絕壁是巨好用的,defer,panic&reverse)
- golang編碼規範、日誌規範(這裡要提一句規範很重要,架構演進的時候做重構深有體會,然而並沒有很統一的規範像Java阿里規範那種,對於分包官方並沒有給出一個推薦的目錄劃分方式 所以google然後根據自身體會制定了一個團隊內部規範 後來發現掘金有一篇文章有所共鳴並嚴重贊同 draveness.me/golang-101 日誌框架並沒有Java直接採用slf4j 下面用 log4j2或logback那麼果斷,選之又選決定用logrus,團隊的QL同學根據需求定製了)
三面 綜合
- kafka工作原理、零拷貝、分組協調器工作原理、offset相關問題
- 鏈路追蹤 SkyWalking、zipkin 各自特點和實現原理,Java探針
- mysql 鎖、索引、事務,大資料量優化 分表分庫方案
- redis執行緒模型 skiplist ziplist資料結構,持久化方案 rdb快照備份的過程(copy-on-write這個回答的不好 我只知道Java的copyonwrite ,Linux fork程式具體操作不清楚)。淘汰策略,快取穿透 大規模失效解決方案
- 手寫程式碼演算法題 假設有兩種操作符*和- *代表×2 -代表減一,給你兩個數 a,b 要求計算出從a經過這兩種運算得到b最少多少步 (ok,演算法不是我強項,這題刷演算法的時候也沒做過還好給的比較簡單,大概10多秒有思路 幾分鐘寫了一下不太完整 讓我講了講思路 使用二叉樹去做)
- 聊一聊感興趣的技術 未來發展方向(技術方面)
四面 總監
不詳述了 就是以下這些問題
職業規劃、為什麼跳槽、興趣愛好、瞭解一下性格、自我評價上一份工作經歷等,我也問了一些問題互動了一下。
面試結束,回去等HR通知。
最終拿到offer
這兩年的經歷一句話概括。
對就是這樣,不要看輕一個人。
最後祝團隊剩下的小夥伴猥瑣發育。