開頭
這個世界都是并發的,程式設計裡更是這樣,俗話說:并發知識大,一口吃不下。想成為一名優秀的 Java 開發,學好并發,絕對是你走入高薪行列的必備能力之一。
并發涉及的知識點,其實十分瑣碎。學完記不住,記住了用不對。在并發底層原理中,不僅涉及 Java 語言,更涉及 JVM、作業系統、記憶體、CPU 指令等,令人一頭霧水。
這份筆記+學習腦圖可以幫你系統地學習Java 并發程式設計知識,并告别碎片化擷取知識的弊端。
一面
- 介紹一下自己
- 問項目經曆, 聊"資料同步"
- 接着聊上了 K8S 的項目
- 有沒有什麼鑽研得比較深得技術?(大佬:kubernetes, golang, prometheus, java)
- kubernetes 的架構是怎麼樣的?
- 這個問題很大,拆成 apiserver、controller、kubelet、scheduler 講了一下
- golang 與 java 的比較
- 這個問題又很大,當時主要對比了 vm、協程支援、面向對象和泛型的差別、以及自己對各自使用場景的一些了解
- golang 的 gc 算法
- 知道是三色标記,不過細節說不上來
- 從無限的字元流中, 随機選出 10 個字元
- 沒見過也沒想出來,查了一下是蓄水池采樣算法,經典面試題,沒刷題吃虧了
- 怎麼擴充 kubernetes scheduler, 讓它能 handle 大規模的節點排程
- 單節點提速:優選階段随機取部分節點進行優選;水準擴充 scheduler 節點,pod 做一緻性 hash 來決定由哪個scheduler 排程
- 你有什麼想問我的?
一面其實有點僵,大佬自己完全沒放開,面試官對大佬的回答沒有什麼回報和深入,都是"哦好的"然後就過了。是以大佬當時面完覺得自己其實已經挂了(要是對候選人不感興趣,有時候也就問完問題走個過場溜了),後來收到二面電話着實吃驚了一下。
二面
- 先聊了聊項目
- 給 Prometheus 做了哪些改動?
- 自研配置中心, 具體做了哪些内容?
- 有用過 MySQL 的什麼進階特性嗎?
- 這裡不太了解,我問什麼算進階特性,面試官就切換到了下一個問題
- 配置中心的核心資料表是怎麼設計的?
- 為什麼在業務裡用 Redis, Redis 有什麼優點?
- 單線程:并發安全;高性能;原語與資料結構豐富;采用廣泛,踩坑成本低
- 對 Redis 裡資料結構的實作熟悉嗎?
- 說了一個 zset 跳表
- 用過 Redis 的哪些資料結構, 分别用在什麼場景?
- Java 初始化一個線程池有哪些參數可以配置, 分别是什麼作用?
- 自己寫的 Java 應用調優過哪些 JVM 參數, 為什麼這麼調優?(這個問住了,大佬隻知道最大堆最小堆,開 G1,開 GC 日志以及 OOM dumper 這些基本的)
- 用 Jetty 的時候有沒有配什麼參數, 為什麼這麼配?
- Jetty QTP 等待隊列配置成無限的話, 你覺得好嗎? 會有什麼問題嗎?
- 用過 Linux Bash 裡的哪些指令, 分别用它們幹嘛?
- 一道筆試題: 需要在給的連結中作答, 不能 google, 不能跳出, 不能用 IDE:
題目是這樣的:
啟動兩個線程, 一個輸出 1,3,5,7…99, 另一個輸出 2,4,6,8…100 最後 STDOUT 中按序輸出 1,2,3,4,5…100
大佬:用 Go 實作吧 面試官:不可以,用 Java 的 notify 機制實作 大佬::(還沒意識到問題的嚴峻) 那用 Java BlockingQueue 面試官:說不可以, 要求用 Java 的 wait + notify 機制來實作
因為完全沒寫過 wait + notify,隻能表示不會, 面試官說那行吧你可以用 go 寫
最後用 go channel 實作了一版, 不過給的網頁上不能運作代碼,也不知道寫得對不對,然後面試結束。
這一輪面試官延續了一面的風格,問完一題就趕忙下一題了,似乎沒有表現出對我的回答有興趣或認可。是以這輪面完,他覺得自己可能又挂了…
三面
- 依然先聊項目
- 對監控警報的項目很感興趣, 問了挺多細節,。最後問了一個問題::現在要你實作一個語義不弱于 PromQL 的查詢語言, 你能實作嗎?(這裡雖然看過一些 Prometheus 的代碼,但其實對 PromQL 的 lexer 和 parser 部分沒有細看,還好之前因為資料同步項目裡想寫聲明式 Stream SQL 研究過一點 ANTLR,用 ANTLR 寫文法 + AST 周遊塞查詢邏輯給糊弄過去了。)
- 覺得做得最深入的項目是什麼(當然是資料同步)
- 聊資料同步項目
- 問 Linux 掌握得怎麼樣?(沒有系統學習過,基本上是自己運維踩坑積累的)
- 問 Golang 掌握得怎麼樣?(用了半年, 看過 effective go)
- 問算法掌握得怎麼樣?(到圖為止都可以)
- 問最短路算法(隻記得 dijkstra 了,描述了代碼流程)
- k8s 掌握得怎麼樣?(沒有自己寫過 controller 和 scheduler,但是對概念都很熟悉,看過 xxx 這幾部分的源碼)
- k8s 的 exec 是怎麼實作的?(這個問題正中下懷,之前寫了 PingCAP 的小作業正好對這塊特别熟悉)
這輪聊得順暢多了。同時發現螞蟻的面試官似乎挺喜歡讓你自己評價:“你覺得自己 xxx 掌握得怎麼樣?”(隻有五位面試官,樣本不夠大,不能作數哦),這類問題其實我慌得要死,怕吹過頭了答不上來,面試挂了事小,丢了面子事大。早知道就預習一下怎麼吹噓了。
四面
- 介紹一下自己
- 覺得自己基礎知識掌握怎麼樣
- 平時一般會用到哪些資料結構?
- 連結清單和數組相比, 有什麼優劣?
- 如何判斷兩個無環單連結清單有沒有交叉點
- 如何判斷兩個有環單連結清單有沒有交叉點
- 如何判斷一個單連結清單有沒有環, 并找出入環點
- TCP 和 UDP 有什麼差別?
- 描述一下 TCP 四次揮手的過程中
- TCP 有哪些狀态
- TCP 的 LISTEN 狀态是什麼
- TCP 的 CLOSE_WAIT 狀态是什麼
- 建立一個 socket 連接配接要經過哪些步驟
- 常見的 HTTP 狀态碼有哪些
- 301和302有什麼差別
- 504和500有什麼差別
- HTTPS 和 HTTP 有什麼差別
- 寫一個算法題: 手寫快排
這一輪全程問的基礎知識,基礎紮實的話就沒問題了,不過大佬感覺有一點像校招的問法。
五面
- 介紹一下自己
- 在 k8s 上做過哪些二次開發?
- 自己用 Helm 建構過 chart 嗎?有哪些?
- 有沒有考慮過自己封裝一個面向研發的 PaaS 平台?
- 配置中心做了什麼?
- 為什麼不用 zookeeper?
- 配置中心如何保證一緻性?
- Spring 裡用了單例 Bean, 怎麼保證通路 Bean 字段時的并發安全?
- 用并發安全的資料結構,比如 ConcurrentHashMap;或者加互斥鎖
- 假如我還想隔離兩個線程的資料, 怎麼辦?
- ThreadLocal,然後舉了個例子
- Golang 裡的逃逸分析是什麼?怎麼避免記憶體逃逸?
- 這個不知道,認慫了
- 對比一下 Golang 和 Java 的 GC
- 答了一下 CMS、G1和三色标記,我對比的點是 JVM 有分代回收,Go 的 Runtime 沒有,沒能深入地講
- Golang 的 GC 觸發時機是什麼
- 門檻值觸發;主動觸發;兩分鐘定時觸發;
- 有沒有寫過 k8s 的 Operator 或 Controller?(大佬:沒有寫過)
- 談一談你對微服務架構的了解
- 大體思路"微服務本質是人員組織架構演進與關注點分離"
- 談一談你對 Serveless 的了解
- 大體思路"Serveless 是繼 docker 與容器編排之後的又一次應用開發與基礎設施提供方之間的邊界劃分"
- 你認為 Serveless 是未來嗎? 為什麼?
- 大體思路"是雲服務的未來,把蛋糕從企業的IT、運維與中間件部門切走,形成規模效應,做得越多賺得越多;公司内的話 servless能夠幫助加速前台業務疊代,但對中背景的收益還看不到,未來可能會有比 servless 更适合中背景的架構"
面試官:最後你有什麼要問我的?
大佬:為什麼足足安排了五輪技術面,而且其中有兩輪似乎和 k8s 沒有關系啊?
面試官:我們覺得你做過的東西挺多的,各個方向都想讓你嘗試一下
我:那這輪是最後一輪技術面嗎?
面試官:不一定
後續還問了面試官一些業務相關的問題,就不贅述了
五面最後的三個吹水問題大佬說還挺感興趣,可惜面試官隻是聽他講,沒有跟他讨論。還有就是問了面試官才知道,二面四面的面試官是 PaaS 平台那邊的,是以主要問 Java 沒有涉及到 k8s 和 go。
六面(HR 面)
之前聽說過阿裡系的 HR 是來"聞味道的"(看你是否适合阿裡的風格),而且有一票否決權。是以還是挺有壓力的。
- 問經曆
- 為什麼要考慮出來看看呢?
- 金句:“現在自己的技術成長有點碰到瓶頸,加上一直對您公司欽慕有加relaxed”"
- 現在公司的主營業務是什麼?(這塊往技術上問了很多,感覺是想考察我解釋複雜問題的能力)
- 現在帶人嗎?report 層級是怎樣的?
- 對自己這幾年的經曆滿意嗎?
- 覺得自己有什麼缺點?
- 碰到過什麼很挫敗的事情嗎?
- 未來的職業規劃是怎樣的?
- 看機會的時候,主要考慮的是待遇、平台、人員還是什麼其他因素?
- 現在的待遇如何
- 有什麼想問我的?
整體聊了 40 多分鐘,話題挺廣的,面試官也說了系統部這邊壓力挺大的,優秀的人才才能留下來。
大佬覺得 HR 面裡除了談薪酬的部分沒有什麼可準備的,想說什麼直說就行。因為到了 HR 面至少證明你的技術沒什麼問題,直說出來友善 HR 判斷兩邊的價值觀是否合拍,假如真的不合拍,那其實在 HR 這一面挂了比起進去之後再後悔又跳槽要好很多,畢竟大家都不喜歡頻繁跳槽的履歷。
最後
畢竟工作也這麼久了 ,除了途虎一輪,也七七八八面試了不少大廠,像阿裡、餓了麼、美團、滴滴這些面試過程就不一一寫在這篇文章上了。我會整理一份詳細的面試過程及大家想知道的一些問題細節
美團面試經驗
位元組面試經驗
菜鳥面試經驗
螞蟻金服面試經驗
唯品會面試經驗
因篇幅有限,圖文無法詳細發出,感興趣的朋友可以點選這裡前往我的騰訊文檔免費擷取上述資料!
H5-1621843257978)]
菜鳥面試經驗
[外鍊圖檔轉存中…(img-aSs72914-1621843257980)]
螞蟻金服面試經驗
[外鍊圖檔轉存中…(img-Z1HZuJMI-1621843257982)]
唯品會面試經驗
[外鍊圖檔轉存中…(img-u1VUFAt2-1621843257984)]
因篇幅有限,圖文無法詳細發出,感興趣的朋友可以點選這裡前往我的騰訊文檔免費擷取上述資料!