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


























