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