面經:兩年半經驗,面10個公司,經28輪面試,拿9個offer,漲麻了!

語言: CN / TW / HK

你好呀,我是歪歪。

給大家分享一個讀者的面試經歷。

我看了一下我們的聊天記錄,他 2020 年的時候就加了我,討論過幾次技術相關的問題。然後他也慢慢開始寫文章,我看了他的文章隱隱感覺到是個工作多年的大佬。

沒想到是大佬不假,但是他居然才畢業不到三年時間。

他是二本畢業,工作年限是 2 年半。

以下是他的面試分享。

面試準備

複習

你信我,真學習還得看書,看書能讓你的知識體系更加健全。

當然,平時也可以看一些大佬的文章擴充一下知識庫。

我看過的 Java 相關的書單如下:

  • Java:《Java 併發程式設計的藝術》、《Java 併發程式設計實戰》

  • JVM:《深入理解 Java 虛擬機器》第三版、《深入 Java 虛擬機器:JVM G1GC 的演算法與實現》、《新一代垃圾回收器 ZGC 設計與實現》、美團技術團隊相關 JVM 的文章、R 大相關 JVM 文章

  • MySQL:《MySQL 技術內幕:InnoDB 儲存引擎》、《高效能 MySQL》、《MySQL 實戰 45 講》、《從根兒上理解 MySQL》、《從零開始帶你成為 MySQL 實戰優化高手》

  • Redis:《Redis 設計與實現》、《Redis 開發與運維》、水滴與銀彈Redis 系列文章

  • Kafka:半獸人部落格、《Apache Kafka 實戰》

  • Zookeeper:《從 Paxos 到 Zookeeper:分散式一致性原理與實踐》

  • 架構:《鳳凰架構》、《領域驅動設計:軟體核心複雜性應對之道》

還有一個點是,看書的時候可以嘗試記一下筆記,這樣效率會高一些,不至於看完就忘記了。

演算法

演算法的話,沒有那麼多高超的技巧,LeetCode 前 200 道反覆刷就行了,應付社招綽綽有餘。

我只刷了 170 道題,面了十幾個大公司,大多的演算法題都是原題。

剛開始刷的時候會很痛苦,堅持幾天,沒有思路的就看答案,看完答案繼續寫程式碼,寫不出程式碼繼續看答案,反反覆覆堅持下來演算法就搞定了。

簡歷

簡歷的話,從大學畢業到現在,我一直用的是超級簡歷,我感覺挺好用的:

https://www.wondercv.com/

至於怎麼寫簡歷,我也不是專家,不說些花裡花哨的,直接給一個我的簡歷模板吧,僅供參考。

提一個點,你寫的簡歷就是劃了一個知識範圍,然後讓面試官從題庫裡面選題,如果你自己劃的知識點你都不清楚,那你面試肯定沒有把握的。

所以,一定要對你簡歷上面的每一字負責,要對你在簡歷上寫的每一個技術點都熟悉。

面試過程

自我介紹

自我介紹是簡歷的精簡,不需要說一些沒意義的事情,面試官也不關注你喜不喜歡打籃球,愛不愛唱歌,你只需要把你做過的最牛逼的事情,解決過的最複雜的問題講出來就行了。

舉個例子:

面試官你好,我叫 CoderW,19 年畢業於哈佛大學。

從畢業到現在一直從事後臺研發相關工作。

19 年-22 年在谷歌中介軟體團隊,主要負責 xx 中介軟體的設計與開發,在這期間,完成了對 xxx 進行改造和優化,整體效能提升了 80%;

22 年去了微軟電商團隊,負責微軟電商體系的設計,兩年的時間,完成了微軟電商從 0 到 1 的搭建過程。上線至今,日活量達到了 10 億,系統平均 QPS 達到 1W。

這一次應聘的是貴公司中介軟體團隊的資深專家崗位,在業務方向和技術棧方面,我個人認為我的匹配度還是比較高的,非常希望能夠加入貴公司,一起打造 xx 系統。謝謝!

技術討論

自我介紹完之後,一般就是技術討論環節,這個環節一般 30 到 50 分鐘,是整個面試最重要的一個環節。

1. 不卑不亢

記住,這個環節是技術討論環節,不是問答環節。一場好的技術討論一定是有來有回,而不是單方面的你問我答。

在尊重面試官的前提上,可以對面試官的一些結論提出質疑和探討,在我看來,敢於提出自己的不同看法是一個加分項。

如果遇到不尊重你,甚至侮辱你的面試官,我建議你直接把簡歷要回來,大家都是打工人,有什麼好裝的?

2. 真誠以待

有些面試官喜歡問一些比較冷門的知識來驗證候選人的技術深度,這是一個很正常的事情,你也不需要太過於緊張,真誠一點,會就是會,不會就是不會,沒什麼關係。

千萬不要自作聰明強行去編造,真誠永遠是第一要義!

3. 深入發散

如果聊到你熟悉的一個知識點,你一定要好好把握,可以嘗試著深入和發散,讓面試官慢慢的進入你的節奏。

舉個例子,聊到 Kafka 零拷貝的時候。

  • 深入:你可以繼續深入,聊一下 sendfile+DMA Scatter/Gather。

  • 發散:深入後再發散,聊一下為什麼 RocketMQ 寫日誌用到了零拷貝,但是 Kafka 寫日誌的時候不用零拷貝。

深入是展現你對技術的瞭解程度,發散是展示你的視野寬度。

回答完一個問題之後,可以小小的總結一下,這樣不至於你一個人在那裡講的雲裡霧裡,讓面試官都找不到你想要表達的重點了。

程式設計環節

如果你的工作年限不是太長,技術討論環節過後一般會有一個程式設計環節(這個環節也有可能會放到技術討論之前)。

程式設計題分為兩種,一種是演算法題,一種是語言技巧題。

演算法題可能大家都能理解,像什麼“兩個執行緒交叉列印 A 和 B”、“手寫單例模式”、“手寫一個簡單工廠設計模式”就屬於語言技巧題。

演算法題上面提過了,狂刷就行;語言技巧題也就那幾個,背一下就好。

反問環節

個人認為,反問環節沒啥用,根本就不能改變整個面試結果。

所以我一般就固定兩個問題:

  • 我面試的這個崗位需要用到哪些技術棧?

  • 我面試的這個崗位的最大挑戰是什麼

面經

面經奉上,不是很全,希望有幫忙。

順豐

1.HashMap,擴容過程,怎麼解決雜湊衝突?

2.聊了一篇之前寫過的 MySQL 的一篇部落格,講講 MySQL 慢 SQL 優化思路?解決流程,應該從哪些方面考慮?

3.APM,怎麼監控,原理是什麼?Java Agent 瞭解過嗎?

4.G1,最大的特點,標記點陣圖,卡表卡頁,SATB。

5.介紹 TiDB,什麼是分散式資料庫?和 MySQL 比優缺點是什麼?

6.怎麼做資料冷熱分離?怎麼做分庫分表?為什麼要用 ES?

7.分散式事務幾種實現方式,講講本地訊息表、盡最大努力通知、TCC。你們選用的是什麼?AT 有什麼問題?

8.報表 DSL 優化,享元模式優化過程,優化效果怎麼樣?

9.單機和微服務的區別,微服務有什麼問題?資料一致性問題怎麼解決?冪等問題怎麼解決?

10.現在負責的系統分為幾個模組?如何劃分?怎麼治理?

11.MQ 使用場景有哪些?在專案中具體哪些地方用到了?

12.MQ 訊息傳送不在 MySQL 事務中如何保證一致性?

13.Kafka 四個選舉,Controller 選舉、Partition leader 選舉、GroupCoordinator 選舉、消費組協調器選舉。整體設計問題,使用場景,流量規劃怎麼做的?

14.快取使用的具體場景,一致性問題,快取使用常見問題有哪些?

15.熔斷和降級的區別,具體使用場景有哪些?

16.QPS 和 TPS 的區別是什麼?你們系統的最大 QPS 是多少?QPS 大了會有什麼問題,怎麼解決?

17.如何設計一個 RPC 框架?需要考慮哪些點?

18.有沒有關注新技術?log4j2 問題關注沒有?能簡單介紹一下嗎?

總結:面試難度偏低,總監面基本是聊一下場景設計問題,面試體驗很好,總監特別尊重人,強烈好評。待遇還行。

拼多多

1.介紹自己做過的最滿意的一個專案

2.介紹 TiDB、RocksDb、levelDB、LSM 樹、SSTable。

3.XXL-Job 二次分片怎麼做的?有些什麼問題?怎麼去優化的?

4.HashMap 的位操作,HashSet 的 contains 方法複雜度是多少,紅黑樹簡單講一下?

5.byte[] a = new byte[10 * 1024]記憶體分配過程?多大的物件直接進入老年代?通過什麼引數配置?

6.介紹 TLAB,PLAB,CAS 分配。

7.為什麼要指標壓縮,為什麼能指標壓縮?原理是什麼?

8.類載入過程?類隔離了解過嗎?

9.多型和過載的底層實現原理,位元組碼層面的瞭解過嗎?

10.Springboot 自動裝配,SPI 原理講一下?

11.攔截器和過濾器的區別?使用場景?

12.Spring 事務實現原理,Spring 的 ACID 如何實現的?如果讓你用 JDBC 實現事務怎麼實現?

13.MySQL 的鎖,表級鎖是哪一層的鎖?行鎖是哪一層的鎖?

14.MySQL 索引?B+樹?主鍵索引每一個節點的大小?一個 page 多大?如果一條資料大於 16KB 怎麼存?text 最多存多少資料?行溢位問題?資料儲存格式有哪些?溢位頁如何管理?15.Redis ssd,Redis 記憶體空間優化的點,embstr 和 row、intset、ziplist。

16.Kafka 的服務端的物理儲存架構是什麼?零拷貝,mmap,sendfile、DMA gather。

17.你做的方案怎麼讓別人信服?要考慮哪些點?你是怎麼做的?有哪些你覺得可以改進的地方?

18.如果系統流量突然上升 10 倍,怎麼處理?100 倍呢?

19.白板程式設計:單例模式,為什麼要加 volatile

20.白板程式設計:用棧實現一個執行緒安全、高效的佇列

21.白板程式設計:二叉樹兩個節點的距離

總結:一面難度較高,會一直追問問到你不會為止,後幾輪的面試偏業務和設計,比較輕鬆。待遇拉滿。

美團

1.多少個服務,多少臺機器?K8S,怎麼做到隔離?

2.服務之間的資料一致性怎麼做?業務上怎麼保證?

3.TCC?二階段提交,三階段提交?

4.Synchronized,偏向鎖聊了很久聊到了原始碼,升級過程,Synchronized 的 JVM 原始碼?(面試官對 JVM 很感興趣)

5.安全點,安全點的作用?一些 JVM 原始碼(之前的文章寫過,面試官和感興趣)

6.垃圾回收演算法;PS+PO,CMS 為什麼要用標記清除演算法?CMS 的前身,R 大的文章。

7.ZGC,聊到了彭寒成的《新一代垃圾回收器 ZGC 設計與實現》和美團技術團隊的文章。

8.G1,聊到了中村成洋的《深入 Java 虛擬機器:JVM G1GC 的演算法與實現》。

9.寫屏障和讀屏障的區別是什麼?

10.JMV 優化過程,效果。為什麼要升級垃圾收集器?

11.介紹一下 Spring IOC,註解和 XML 兩種方式有什麼區別?後置處理器,擴充套件點有什麼用?在專案中有用到過嗎?

12.MySQL 的 binlog、redo log、undo log 寫入過程?刷盤機制和引數設定。MVCC 機制瞭解嗎?

13.遇到的死鎖問題?唯一鍵衝突導致的死鎖問題,MySQL 為什麼要這麼設計?隱式鎖是什麼瞭解嗎?

14.還了解 MySQL 的哪些鎖?間隙鎖、臨檢鎖.....

15.ZK 的選舉過程是怎麼樣的?如果選舉過程中網路故障怎麼辦?ZAB 和 RAFT 的最大區別是什麼?

16.Redis 用的 Gossip 協議有哪些具體訊息?謠言傳播,為什麼要去中心化?有哪些優缺點?

17.Redis 分散式鎖和 ZK 分散式鎖的比較。AP 和 CP,CAP 理論講一下?

18.Kafka 的優勢是什麼?RocketMQ 延遲佇列怎麼做的?如果讓你優化你會怎麼做?Kafka 能實現延遲佇列嗎?

19.Kafka 能保證資料一條都不丟失嗎?為什麼?業務上丟資料了怎麼辦?

20.白板程式設計:順時針列印矩陣

總結:美團的面試官很喜歡問併發程式設計和 JVM,一面一直在聊這些東西,後幾輪的面試偏業務和場景問題,比較輕鬆。

面試官很尊重人,還加了面試官的微信,後來面試官還給我打電話要我去美團,因為有其他選擇了就拒掉了,祝好!

位元組

總結:演算法難度拉滿,一輪一道演算法,因為面的是 GO 崗位,對基礎要求比較高,沒有問太多 Java 的知識點。待遇不錯。

58 集團

1.MySQL 遷移到 TiDB 做了哪些工作,自增主鍵,資料量多大?

2.TiDB 的效能問題,做了哪些調研?TP90、TP95 是多少。

3.TiDB 上線步驟是怎麼樣?怎麼做到資料不丟失?怎麼保證可靠性?

4.XXL-Job 怎麼封裝的?任務跑失敗了怎麼辦?

5.DAG 是如何實現的?二次分片怎麼做的?

6.Redis 使用場景、快取什麼資料?怎麼保證資料一致性?

7.還了解 Redis 哪些知識、Redis 的優勢、CP 還是 AP?CAP 理論。

8.Redis 儲存資料需要注意哪些問題?熱 key 問題、大 key 問題怎麼處理?

9.Redis 分散式鎖、紅鎖。紅鎖有什麼問題?

10.介紹 SpringBean 建立過程、AOP 實現原理?

11.BeanFactory 和 FactoryBean 的區別?

12.Spring 是怎麼解決迴圈依賴的?Spring 解決構造方法注入的迴圈依賴了嗎?解決多例下的迴圈依賴了嗎?

13.動態代理,JDK 動態代理和 CGlib 動態代理的區別?Spring 是如何選用的?怎麼配置?

14.如何做降級的?如何做限流?

15.負載均衡演算法有哪些?自適應負載均衡怎麼做的?有什麼問題?怎麼優化的?

16.Java 的集合都有哪些,都有什麼特點?

17.HashMap、ConcurrentHashMap 的區別?擴容過程是怎麼樣的?

18.介紹 AQS、CountDownLatch、Semaphore、volatile、synchronized

19.執行緒池、自定義執行緒池、自定義拒絕策略有了解過嗎?什麼場景用?

總結:面的是風控部門,老牌公司了,面試難度較低,錢也給的少。

滴滴

1.程序和執行緒的區別是什麼?程序之間怎麼通訊的?執行緒之間呢?

2.HTTPS 和 HTTP 對比;CA 數字證書;對稱加密非對稱加密過程?

3.常見的加密演算法有哪些?

4.MySQL 測試,TiDB 測試,如何做到平滑遷移?如何保證資料不丟失?

5.任務呼叫中心怎麼做的?負載均衡?怎麼收集執行器的 CPU 和記憶體使用情況?任務分片是怎麼做的?

6.任務冪等性改造?ZK 怎麼部署的,幾臺機器,掛了一臺怎麼辦?

7.ZAB 協議,ZK 選舉過程,ZXID 的結構是怎麼樣的?ZXID 有什麼用?

8.Redis 的 String 底層結構,hash 底層結構,rehash 過程是怎麼樣的?

9.Redis 的 AOF 和 RDB 區別,能配合使用嗎?熱 key 問題和大 key 問題怎麼解決?

10.Kafka 的 log,index,稀疏索引。零拷貝,mmap,sendfile、DMA gather

11.Kafka rebalance 策略,具體過程。GroupCoordinator 選舉、消費組協調器選舉過程?kafka 預設 topic 幹什麼用的?

12.Spring 的迴圈依賴怎麼解決的,為什麼需要加個三級快取,二級不行麼?

13.Springboot 有什麼特點,瞭解 springboot 的自動裝配原理麼?

14.寫了一道 LeetCode 原題,交換連結串列節點。

總結:面的是網約車部門,主要語言是 GO,面試體驗不錯,面試官比較尊重人,錢給的還行。

歐科雲鏈

1.QUIC/HTTP3 瞭解嗎?

2.用筆畫 MySQL 一條記錄的入庫過程,寫日誌過程,日誌兩階段提交?

3.JVM 調優過程?怎麼發現 JVM 的問題的?怎麼做預警處理?

4.Minor GC 與 Full GC 的觸發機制是什麼?

5.Eden 和 Survivor 比例可以調整麼,引數是什麼?還用到了哪些引數?

6.介紹 TiDB 和 MySQL 的遷移過程?遇到了些什麼問題?怎麼解決的?

7.瞭解 RocksDb 嗎?levelDB、LSM 樹、SSTable?

8.Paxos 演算法瞭解嗎?介紹 RAFT 和 ZAB,以及它們之間的區別?會有腦裂問題嗎?為什麼?

9.Kafka 訊息的寫入過程簡單介紹一下,Kafka 為什麼這麼快?

10.Kafka 幾種選舉過程簡單介紹一下?

11.Kafka 高水位瞭解過嗎?為什麼 Kafka 需要 Leader Epoch?

12.Netty 用到過嗎?講講 reactor。Netty 的空輪詢 bug 有了解嗎?

13.講講 BIO、NIO、AIO 的區別?

14.Dubbo 的服務發現是怎麼做的?

15.Redis 的幾種資料結構,底層分別是怎麼做的?用 Redis 快取什麼資料?怎麼更新資料?怎麼淘汰資料?

16.快取和資料庫一致性問題怎麼解決?為什麼要刪快取而不是更新快取?刪快取刪失敗了怎麼辦?

17.有一個包含 100 億個 URL 的大檔案,假設每個 URL 佔用 64B,請找出其中所有重複的 URL。

18.給了一張紙,上面有一段併發的程式碼,問執行結果是什麼,考的是 volatile。

總結:面的是數字貨幣交易系統,去現場面的試,畫了很多架構圖。面試體驗很好,還加了面試官的微信。待遇不錯,而且可以居家辦公。

京東

1.介紹一下你做的專案?

總結:這個面試官放了我兩次鴿子,後面突然打電話過來,我匆匆忙忙接電話,介紹完專案之後,他隨便問了幾個問題就結束了,整個過程不超過 10 分鐘。可能是因為我不是東哥的兄弟?

結果

說一下結果吧,除了京東,其餘的都拿到了口頭 offer。

至於為什麼沒有面阿里和騰訊,因為那個時候阿里和騰訊在進行財年清算,鎖 HC 了,也就沒有面了。

至於為什麼位元組的面試題沒寫,懂得都懂...

最後,祝大家都能成為 offer 收割機!

好了,那本文的技術部分就到這裡啦。

下面這個環節叫做[荒腔走板],技術文章後面我偶爾會記錄、分享點生活相關的事情,和技術毫無關係。我知道看起來很突兀,但是我喜歡,因為這是一個普通博主的生活氣息。

你要不喜歡,退出之前記得文末點個“在看”哦。

荒腔走板

上週的一個晚上,我去食堂吃晚飯,本來只是想簡簡單單的吃碗麵,賣面的地方一般都會有煎蛋賣。

我並沒有吃煎蛋的打算,但是刷卡的時候,看到在眾多煎蛋裡面看到一個愛心形狀的煎蛋,想著:買個煎蛋吧,萬一工作人員就從這麼多煎蛋裡面給我夾了這個呢,就說明我今天運氣好呀。

然後我刷了卡,說:給我加個煎蛋吧。

我看到他拿著夾子先夾了一個其它的煎蛋,但是他似乎也看到了這個“愛心”形狀的煎蛋,放棄了已經夾好的,重新給我夾了“心”形的這個。

看到他這個舉動,我也是突然一下就笑了出來。

他抬頭看了我一眼,看到我在笑。他雖然戴著口罩,但是我也感覺到了他也在笑。他給我說:來,我給你整個好看的。

有的時候,快樂很簡單,一個煎蛋,就足夠讓兩個人笑的很開心。

對了,多說一嘴。這周我在做一個 PPT,其中有一頁就是談寫作之後的收穫,我在裡面專門提到了“荒腔走板”環節,我保留這個環節兩年有餘的時間,它會讓我更加仔細的觀察並記錄生活。

平淡如水裡面,一絲絲漣漪都彌足珍貴,這就是荒腔走板。

··················END················

推薦:+1: 什麼是高併發?

推薦:+1: 對不起,是我錯怪IDEA了。

推薦:+1:  : 細節都在魔鬼裡。

推薦:+1:  : 之後,我再也沒去過北京。

推薦:+1:  : 2021,我這一年。

你好呀,我是歪歪。我沒進過一線大廠,沒創過業,也沒寫過書,更不是技術專家,所以也沒有什麼亮眼的title。

當年高考,隨緣調劑到了某二本院校計算機專業。純屬誤打誤撞,進入程式設計師的行列,之後開始了運氣爆棚的程式設計師之路。

說起程式設計師之路還是有點意思,可以 點選藍字,檢視我的程式設計師之路