阿里、拼多多面試分享:已獲技術專家Offer
先做個自我介紹,本人坐標魔都,2013 年畢業,工作 6 年,之前一直在互聯網公司工作,曾經在阿里系公司下擔任資深工程師的職位。
圖片來自 Pexels
今年大環境不好,但還是毅然決然的出去試了試,而我這次面試的目標期待,是找一個知名互聯網公司的技術專家的職位。下面跟大家分享一下我的面試經歷。
拼多多
首先說說我面試上海拼多多的經歷,我是朋友內推過去的,面試的是拼多多的商品中心部門,內推人說是拼多多技術要求高的幾個部門之一。自己之前做過商品相關業務,業務上有些對口。
一面面試官首先讓我寫一下觀察者模式代碼(設計模式有專門準備),然后跟技術官聊技術業務,聊分布式鎖的實現,Redis 用的什么命令,問 Redis 集群緩存數據不均衡怎么做。
我就說計算機領域有一句名言:計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決,我感覺在客戶端和 Redis 服務之間加一層就能解決了,問我具體怎么做,我說了我的思路。
接著面試官問我們公司的一些緩存架構,我們公司一般都是使用的堆內緩存+Redis 緩存(二層緩存架構方案)。
然后圍繞著這個,問了數據一致性怎么做的?有沒有做過相關壓測?指標是多少?熔斷降級有沒有做過?
然后說說 Sentinel 和 Hystrix 的區別?我知道拼多多這兩個框架都有使用,限流的一些參數怎么設置,依據是什么?
這個是真的考驗有沒有在生產上玩過了。然后讓我設計一個高并發系統,從哪些方面考慮。
最后面試官問我有什么問題想問他,這一塊我是精心準備過的,我就問他之前我在設計商品域的時候走的彎路。
比如商品快照問題怎么解決的,因為當時我們做這一塊的時候,所有涉及到商品域屬性變更都會生成快照,造成數據量暴增。
然后面試官說他們也是這么做的,所以他說他們的一些操作日志表有的表已經有分庫分表上萬張了。
我問面試官的第二個問題是詳情頁的設計,怎么做的緩存設計?(比如從不同的業務緯度拆分 Key,更新頻率拆分 Key)
因為我一直想了解一下大公司在庫存和價格這塊有沒有應用緩存這種形式,因為我們之前因為 QPS 都不算高,價格,庫存都是直接實時查詢數據的,結合兜底方案來解決。
所以這兩個問題一提,一面面試官覺得我之前有過思考,就讓我進入了二面。二面是 HR,聊了薪水,加班,補助等。
問我有沒有買房,有沒有在上海買房的打算?如果有的話,兩年拼多多就可以湊足首付了。(拼多多二面都是 HR,這個是槽點)。
三面商品部的老大來面試,也是聊設計技術方案為主,因為之前我做過訂單,然后他問我下單要建幾張表?我說訂單主表,訂單條目表(有的場景下,訂單條目會創建很多條)。
面試官問我怎么優化?(針對創建的訂單條目太多的問題)首先我說訂單表可以分庫分表來解決單 DB 的寫入瓶頸。
面試官不滿意,我說可以先創建訂單主表,如果訂單條目表是瓶頸那么梳理一下業務,看看訂單條目是否可以異步創建,走 MQ,然后面試官還是不滿意,我說我只能這么優化了,暫時沒想到更多的方案。
然后又聊了下分布式事務,可靠消息最終一致性的方案講了一下,講解了我們目前怎樣使用這套架構來采集上游數據,清洗數據,然后消費落到業務數據庫的。
又聊了一些其他的方案設計,細節的技術點聊的少,大多數都是系統設計方面。
我其實 Care 到他的核心思路,因為拼多多商品應用的流量特別大,更多的時候在設計可以避免一些性能問題,而不是簡單的堆機器。
整體下來,我感覺有些高并發的優化經驗欠缺,整體技術二面還可以(自我感覺)。
面完,HR 讓我回去等消息,說明天下午 4 點給回復,我很開心,覺得應該差不多了,懷著加班都是浮云,買房才是主要道理的心理,開開心心的回家了。
第二天 HR 告訴我說,我掛了,掛在最終面的技術面上,我淚崩,很無奈。
阿里
再說說面試阿里,先是面的螞蟻金服。一面是電話面試,聊了 40 分鐘的業務,當時我正在坐地鐵,然后在一站下車就直接在地鐵站聊了 40 分鐘。
面試官問了我在上家公司做的訂單模塊,正向下單流程業務是怎樣的,系統流轉怎樣的,涉及到哪些域。
我的回答是下單流程根據不同的業務涉及到的流轉都不一樣,一般涉及到庫存,訂單,營銷。訂單完成之后涉及到調度域,積分域,用戶等等。
然后又問我具體的訂單模型是怎樣設計的,拆單的依據是什么?我把訂單的模型說了一下,一般都是訂單主表和訂單條目表,根據供應商的維度進行訂單拆分。
接著問了正向下單流程中,優惠劵,庫存,訂單三者的事務如何保證的?
我們做的很 Low,沒有用分布式事務,直接在訂單這邊 Catch,Catch 里面做一些異常反向流程,比如說釋放存儲,更改優惠券狀態等。
面試官緊接著問這樣做的問題在哪里?問題肯定非常明顯了,就是 Catch 中失敗如何去做。
當時我們只是記錄了相關接口調用日志,會有 1 分鐘的 Job 會去輪詢這些狀態記錄,并告警通知的。我們也考慮過調研過一些分布式事務框架,目前也在調研中。
然后就一直聊的是業務和方案設計,聊完我自己覺得一面應該是過了。過幾天接到電話約二面。
二面是現場面試,兩個面試官,問我為什么從阿里出來,為什么想回阿里。這個問題我之前沒有準備過,就臨場發揮了一下。
接著就是一連串連環炮:
- 現在公司用戶中心怎么設計的?為什么這么設計?
- 為什么用 Redis?更新策略是什么?
- 下單的鏈路怎么樣的?
- 怎么解決正向下單流程中庫存,訂單,積分的分布式事務問題?履約的過程?履約的后續流程?畫出系統架構圖(感覺每個面試官都會問)。
- 平時架構設計中要畫哪些圖?
我說一般會畫一些數據庫 ER 模型,重要的流程時序圖,邏輯架構圖,物理架構圖等等。
問我哪些中間件了解的特別深入,我說 ES,Redis,聊了聊使用場景,怎樣同步 MySQL 數據到 ES 的,這樣的架構有沒有遇到問題,Redis 的一些性能優化等等。
二面結束了,下樓的時候我問二個技術官什么時候有結果,他們說一周吧,然后等了三周才有結果,整個到接到三面通知大概接近了二個月,在這期間我已經選了另一家在線教育公司。
當時新公司已經入職二周了,周五接到螞蟻金服 HR 的電話約三面,當時剛入職新公司一段時間,因為太忙了,于是就沒去,放棄了三面。
又過了一段時間,阿里的一個面試官又打我電話,當時我在下班的路上,大概晚上 9 點 40 左右,說他是阿里的另外一個部門,在系統上看到我的面試結果超時了,問我要不要面試這個杭州的職位。
我就試試跟面試官聊了聊,聊到了最近做的一個面向 B 端的招聘項目使用的技術棧,數據的采集來源,怎么清洗數據,怎么維護數據池,面試官說很符合他們現在做的業務,一面過了。
我說平時太忙了,沒啥時間去杭州二面,面試官講周六在盒馬生鮮他們部門會來上海有個面試專場,這次周末時間,再去學習學習。
二面的面試官應該是個 P7,技術大牛,聊了一個多小時,Java 技術棧最考驗候選人功底的就是 Java 并發和 JVM。
面試官問我怎樣寫一個程序,快速打滿方法區;讓你設計一下可達性分析,思路大概是什么;可重復讀有用到鎖等等。
三面的面試官是部門主管(大概 P8,P9 職位),聊聊 DDD 的理解;3 點 15 時針分針的角度是多少😂;最了解的中間件是什么,說說你的理解;了解 Hive 嗎,等等。
第四面,HR 面,為什么之前離開阿里;工作中學到哪些,怎樣覺得跳出到另外一個環境成長會更多;到新公司之后發現成長環境并不是自己期望,怎么辦?
然后問了我之前面試螞蟻金服什么情況,因為 HR 只能在系統看到我今年面試超時,問原因,我說面試周期太長了,三面沒時間。
這邊我也犯傻了,問了一個問題,說我面試如果過了能在阿里評級是什么,她反問我,你覺得呢。
面試結束的時候,我問 HR 大概多久面試結果出來,HR 說月底之前通知。
然后在月底接到了阿里 HR 的電話,通知我面試過了,薪水大概和我現在這家在線教育差不多,問職級,給了 P6+。
最終做了一些對比,還是覺得去阿里做 P6 或者 P6+ 并不是我現階段的意愿,在中等公司做技術專家或許可以能做更多的事情,因此拒絕了阿里的 Offer。
某在線教育公司
第一家公司是一家在線教育公司,Boss 上投的,整體面試的還不錯。
一面的問題都是一些基礎知識點的考察,面試官主要問了 Java 內存模型,ReentractLock 與 Synchronized 之間的區別,HashMap 1.7 和 1.8 之間的區別,分庫分表怎么做的,MQ 怎樣做到消息的可靠性,順利通過。
二面的時候,和面試官聊了一些業務知識,交易相關的一些設計思路見解,由于我對自己做過的項目的業務很熟悉,聊的也比較順利,面試也順利通過。
三面面試官就是我入職的直接領導,問了對共享業務(大中臺)的理解,服務邊界怎么劃分的,微服務的治理一般包括哪些,監控一般監控哪些等等,面試的都還不錯。
然后 HR 來了談了薪水,聊了換工作的原因,下一份工作的期望等等,加了微信,路上說讓我發給他之前公司流水,然后 HR 又具體聊了一下薪資期望,當天晚上 23 點發了 Offer(汗,當時就覺得這公司加班挺狠的,HR 都如此)。
最終我選擇了這家 Offer,給的職級是技術專家的崗位,平臺和發展個人都比較看好,也有不少技術挑戰。
喜馬拉雅
喜馬拉雅是朋友內推的,技術經理職位,在浦東。之前這一家的公司面試成功,讓我喜馬拉雅的面試很有自信。
一面面了一個多小時,整體面試的還不錯,大概 2,3 個回答的不好,比如說雙親委任機制和 SPI,線程池執行的時候怎樣在服務停止的時候優雅關閉線程池。不過我也在面試過程中給了對方很多思路。
最后結束的時候面試官讓我手寫一個隊列,我覺得是一個比較簡單的面試題,就口述了下思路,然后面試官堅持問了我第二遍,要不要手寫出來,我說還是不要了。
然后面試官走了,我以為進入二面了,因為我自己也一直做面試官,也有一些面試經驗,以為這個一面差不多過了。
但是過了 5 分鐘,一面面試官說今天就到這邊,讓我回去了,很是驚訝。灰溜溜的走了,因為是內推,自己堅持要了沒過的答案,是不是一面最后不手寫代碼的原因,打聽了一些,大意如此,汗......
其他公司
上面就是一些面試的主要公司,除此之外,還面了比如上海本土的一家生鮮平臺公司,面試通過了,HR 問我有沒有 Offer,我承認有,最后也談了 Offer。
不過后來我拒絕了,一是因為首先這家公司不是 Java 技術棧(PHP,面試的時候說要重構平臺,Java 在分布式架構中的生態優勢),二是 HR 給我考慮的時間太短了。
還面試了上海的一家出行公司,這家公司需要我降薪,給期權,最后拒絕了,因為職位沒給到期望,薪水方面感覺也沒受到尊重。
我有之前的不少同事在這家公司,之前印象還不錯,但是 HR 真的給我太差的印象了,面試第二天說打電話跟我聊薪水,拖到下周二的晚上給我打電話。
然后我拒絕大幅度降薪(4K),說幫我談降薪 2K,第二天給回復,然后第二天又沒給回復,也推到周五,反正后來 HR 加我微信,跟 HR 吵了一架。
另外一個關于這家公司的槽點是,我面的是技術專家崗,最終技術面第四面,不知道什么職位的大佬過來問我 Synchronize 和 Lock 的區別,Volatile 關鍵字的作用。
問完了 2 個問題然后就走了,前后不到 5 分鐘,感覺面試太不專業了,這個也是我拒絕不去這家公司的原因。