分享一篇面經(jīng),作者拿到了 PingCAP,今日頭條的 offer 以及螞蟻金服的口頭 offer盹牧。
關(guān)注公眾號(hào):“程序員白楠楠”免費(fèi)獲取励幼!
下面是該作者的經(jīng)驗(yàn)分享:準(zhǔn)備過程
我自己是本科畢業(yè)后在老東家干了兩年多汰寓,老東家算是一家”小公司”(畢竟這年頭沒有 BAT 或 TMD 的 title 都不好意思報(bào)出身),畢業(yè)這兩年多我也沒有在大廠待過苹粟,因此找坑的時(shí)候是非常非常虛的有滑。迫于心慌,我好好思考了一陣來給自己打氣嵌削,當(dāng)時(shí)真正找坑和準(zhǔn)備面試的過程大概分為這幾個(gè)階段:
反思:自己是不是真的要離職毛好,假如不離職,在老東家接下來應(yīng)該做什么才能繼續(xù)提升苛秕?
定位:我在硬性技能(編碼肌访、架構(gòu))上的長處在哪?我在軟技能(溝通艇劫,團(tuán)隊(duì))上的長處在哪场靴?這步順帶寫了簡(jiǎn)歷
尋找平臺(tái):哪些平臺(tái)能同時(shí)滿足:1、有挑戰(zhàn)有上升空間港准;2、符合我的定位方向咧欣;3浅缸、團(tuán)隊(duì)氛圍和老東家一樣好(或更好)
找人內(nèi)推:基本都是在 v2 上找的(誠摯感謝各位幫助我內(nèi)推的大佬)
面試談 offer
定位這一步其實(shí)花了好幾天時(shí)間,我先是梳理了自己的項(xiàng)目經(jīng)歷和工作內(nèi)容的專長魄咕,把 Java + Golang衩椒,做過的面比較廣(業(yè)務(wù),中間件,基礎(chǔ)架構(gòu)都做過)以及對(duì) k8s 云原生有專長和興趣作為自己的”硬招牌”毛萌。然后把學(xué)習(xí)能力強(qiáng)苟弛,喜歡溝通合作,渴望挑戰(zhàn)作為我的”軟招牌”阁将,最后把自己定位成一個(gè)”在過往經(jīng)歷中展現(xiàn)出了過人學(xué)習(xí)能力和鉆研能力膏秫,同時(shí)渴望挑戰(zhàn),不愿意呆在舒適區(qū)”的形象(媽呀打這段話的時(shí)候太羞恥了W鲋选g拖鳌!)吹榴。
接下來就進(jìn)入正題亭敢,逐家講一下自己的面試體驗(yàn):
PingCAP - Cloud 方向
螞蟻 - 容器調(diào)度方向(CTO線)
頭條 - 工程效能方向
![image](https://upload-images.jianshu.io/upload_images/24674627-47b76a96e1304498.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_9,x_6,y_6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
PingCAP
面試前
PingCAP 的簡(jiǎn)歷響應(yīng)是最快的,內(nèi)推之后第二天 HR 小姐姐就聯(lián)系了我图筹。電話接通之后先是簡(jiǎn)單聊了一下人生帅刀,然后就是社招三問 [”為啥離職啊?”,”現(xiàn)在待遇咋樣啊?”,”期望待遇咋樣啊?”],天知道這通電話是我開始投簡(jiǎn)歷之后的第一通電話面試远剩,之前還完全沒有準(zhǔn)備過類似的問題扣溺,只能稀里嘩啦用[”現(xiàn)在自己的技術(shù)成長有點(diǎn)碰到瓶頸,加上一直對(duì)您公司欽慕有加??”,”我現(xiàn)在待遇是xxx但我司除了base之外還有xxx以及我馬上要提薪了??”,”其實(shí)比起待遇我更看重平臺(tái)和挑戰(zhàn)(狗頭)民宿,但是基本的薪資需求我還是希望能xxx??”]這樣和稀泥應(yīng)付過去娇妓。內(nèi)心稍稍平靜之后小姐姐跟我講了講我意向部門的結(jié)構(gòu)和主體業(yè)務(wù),然后交代了一下接下來的面試流程活鹰,約了”一面”并且加了微信哈恰。“一面”加了引號(hào)志群,這是因?yàn)椤币幻妗逼鋵?shí)是在微信上布置了一個(gè)小項(xiàng)目着绷,然后約定好時(shí)間驗(yàn)收。這里要特別感謝一下 PingCAP 的 HR 小姐姐锌云,加了微信之后全程幫助我協(xié)調(diào)面試時(shí)間并不厭其煩地回答我各種奇奇怪怪的問題荠医,最后談 offer 的時(shí)候還給我準(zhǔn)備了一個(gè)驚喜。面試體驗(yàn)直接滿星<3!
一面
早就聽說 PingCAP 一面要寫小項(xiàng)目桑涎,我自己心里其實(shí)是躍躍欲試的彬向。面試官給的項(xiàng)目要求大體是這樣:K8S 容器化之后應(yīng)用容器里幾乎沒有什么可用的調(diào)試工具,可以利用容器 Namespace 共享的思路攻冷,啟動(dòng)一個(gè)包含各種調(diào)試工具(比如 netstat, gdb)的容器娃胆,加入到 pod 的 pid、net 等 namespace 中等曼, 實(shí)現(xiàn)對(duì)任意 pod 的 debug 功能±锓常現(xiàn)在希望利用 kubectl plugin 機(jī)制實(shí)現(xiàn)一個(gè)插件凿蒜,用于 debug 任意一個(gè) pod 里的容器,達(dá)到 kubectl exec 的使用體驗(yàn).當(dāng)時(shí)因?yàn)楣ぷ魅粘椴怀鰰r(shí)間胁黑,就隔了幾天到周五晚上開始寫废封,周六晚上寫完并且把 項(xiàng)目地址 分享到了 Reddit 上。沒想到運(yùn)氣不錯(cuò)收了 100 多個(gè) star丧蘸,這下我就覺得”哦豁漂洋,這輪應(yīng)該穩(wěn)了吧!”(結(jié)果后來發(fā)現(xiàn)這幾乎是我唯一一把覺得自己”穩(wěn)了的”面試…)
二面
二面是一位 Cloud 方向的前輩面我,全程大概微信語音聊了50多分鐘:
問項(xiàng)目經(jīng)歷,聊了兩個(gè)項(xiàng)目
對(duì) Kubernetes 了解怎么樣籍胯,看過源碼嗎?
k8s 的代碼我以前其實(shí)只看過 kubelet爽冕,臨陣磨槍的時(shí)候把 apiserver、scheduler披蕉、controller-manager 都看了一遍颈畸,笑容漸漸出現(xiàn)。
Kubernetes 的 Service 是什么概念没讲,怎么實(shí)現(xiàn)的眯娱?
你剛說到 Informer,Informer 是怎么實(shí)現(xiàn)的爬凑,有什么作用徙缴?
StatefulSet 用過嗎?有什么特點(diǎn)嘁信?
StatefulSet 的滾動(dòng)升級(jí)是如何實(shí)現(xiàn)的于样?
現(xiàn)在我們希望只升級(jí) StatefulSet 中的任意個(gè)節(jié)點(diǎn)進(jìn)行測(cè)試, 可以怎么做? 這題沒有思路,只好強(qiáng)答用”兩個(gè) StatefulSet”潘靖,后來一想起一個(gè)新的 StatefulSet 那 PV 里的數(shù)據(jù)就丟了穿剖,其實(shí)正確辦法是利用 partition 機(jī)制,笑容漸漸消失卦溢。
Kubernetes 的所有資源約定了版本號(hào), 為什么要這么做?第二個(gè)拿不準(zhǔn)的問題糊余,我面試前就反復(fù)告訴自己”不要強(qiáng)答“以及”不知道的題就講思路“,于是就說這塊代碼確實(shí)沒看過单寂,但是根據(jù)微服務(wù) API 的設(shè)計(jì)理念贬芥,版本號(hào)的作用有巴拉巴拉。答完似乎面試官還算滿意宣决,于是又往下挖了一句:
假如有多幾個(gè)版本號(hào)并存, 那么 K8S 服務(wù)端需要維護(hù)幾套代碼?這題完全不知道誓军,內(nèi)心逐漸焦灼,立馬走老套路”這我沒看過 k8s 代碼怎么寫的無法確定(想表達(dá)自己真正看過代碼才會(huì)確認(rèn)疲扎,凸顯自己嚴(yán)謹(jǐn)…我的媽呀)昵时,但假如由我來寫這份代碼(裝作非常自信),我會(huì)只會(huì)維護(hù)一份最新的 Model椒丧,然后設(shè)計(jì)對(duì)應(yīng)一個(gè)版本段的 Adpater 將老版本的 Model 轉(zhuǎn)化過來巴拉巴拉”壹甥。到這里我已經(jīng)虛的不行了
OK,那接下來我們聊聊 Golang (我:長舒一口氣)
看一下這段代碼有沒有問題(一段 golang for-range 里 goroutine 閉包捕獲的代碼)壶熏,為什么?
goroutine 是怎么調(diào)度的句柠?
goroutine 和 kernel thread 之間是什么關(guān)系?
有什么想問我的棒假?
面完之后感覺答得一般溯职,心里有點(diǎn)忐忑。結(jié)果第二天 HR 小姐姐就來安排三面了帽哑,長舒了一口氣谜酒。
三面
三面是和整個(gè)大部門的 Leader 聊,面試官很能聊(聲音還很好聽F拚怼)而且技術(shù)非常全面僻族,全程大概微信語音聊了80多分鐘:
給我介紹 PingCAP 相關(guān)團(tuán)隊(duì)的職責(zé)與挑戰(zhàn)
聊為什么出來看機(jī)會(huì),以及未來的職業(yè)規(guī)劃
聊我之前做的一個(gè)數(shù)據(jù)同步的項(xiàng)目屡谐,大概內(nèi)容是訂閱 MySQL Binlog述么,sink 到搜索索引、分庫分表以及業(yè)務(wù)事件訂閱流中
為什么數(shù)據(jù)同步里選擇了 xxxx 開源項(xiàng)目愕掏,優(yōu)勢(shì)在哪度秘?
訂閱分庫分表的 Binlog 怎么訂閱?
分庫分表的數(shù)據(jù)源中假如存在主鍵沖突要怎么解決饵撑?
怎么保證下游對(duì) Binlog 的消費(fèi)順序剑梳?
如何在下游保證消費(fèi)時(shí)的事務(wù)原子性?
描述了一下 tidb 的 binlog 架構(gòu)肄梨,問這種場(chǎng)景下怎么保證 Binlog 順序
聊一個(gè)上了 Kubernetes 的項(xiàng)目阻荒,問了一些細(xì)節(jié)和坑
用 Kubernetes 之后,解決了哪些問題众羡?
聊我之前做的監(jiān)控警報(bào)項(xiàng)目侨赡,問背景和產(chǎn)出
Prometheus 單實(shí)例數(shù)據(jù)量級(jí) hold 不住了,有什么解決方案粱侣?
有什么想問我的羊壹?
簡(jiǎn)歷里的”數(shù)據(jù)同步”這個(gè)項(xiàng)目我是好好復(fù)習(xí)過自己當(dāng)年寫的調(diào)研文檔和架構(gòu)文檔的,也做了被問的準(zhǔn)備(換位思考齐婴,是我我也問油猫。這個(gè)其實(shí)就是我專門希望面試官來挖細(xì)節(jié)的項(xiàng)目)。最后確實(shí)被問最多的就是這個(gè)項(xiàng)目柠偶,運(yùn)氣真的不錯(cuò)??情妖。
四面
四面到了現(xiàn)場(chǎng)面睬关,有兩位面試官一起跟我聊,大約聊了 40 多分鐘:
聊”配置中心”項(xiàng)目的細(xì)節(jié)
為什么不用 ZK毡证,要自己再寫一個(gè)”配置中心”, 這個(gè)問題讓我措手不及电爹,我只好坦白:當(dāng)時(shí)年輕,想刷經(jīng)驗(yàn)料睛,事后才領(lǐng)悟到不要重復(fù)造輪子丐箩,當(dāng)然最后系統(tǒng)的產(chǎn)出也不錯(cuò)(后面這兩句是我臨時(shí)加的,不能讓面試官覺得我是一個(gè)不看全局只顧自己刷經(jīng)驗(yàn)的人)
配置中心怎么做服務(wù)發(fā)現(xiàn)的恤煞?怎么做 failover 的屎勘?
用 Kubernetes 碰到過哪些坑?
對(duì) Prometheus 做了哪些改動(dòng)居扒?
對(duì) Alertmanager 做了哪些改動(dòng)概漱?
監(jiān)控系統(tǒng)怎么做”自監(jiān)控”?
跨機(jī)房的網(wǎng)絡(luò)問題怎么監(jiān)控苔货?
有什么想問我們的犀概?
四面是純項(xiàng)目,里面的經(jīng)驗(yàn)就不太通用了夜惭。但這里面有個(gè)細(xì)節(jié)姻灶,就是到中途的時(shí)候兩個(gè)面試官互相對(duì)了一下”還有什么想問的嗎?”我意識(shí)到面試官們想問的問題不多了诈茧,可時(shí)間大約才過了20分鐘(面試時(shí)間過短是一個(gè) bad smell)产喉。于是之后幾個(gè)監(jiān)控的問題我都盡量說得很細(xì),同時(shí)順便提一下”還有一個(gè)方面我們當(dāng)時(shí)也做了挺多工作”敢会,暗示面試官往下挖的線索曾沈。不知道這招有沒有奏效,反正這一面算是有驚無險(xiǎn)過啦鸥昏。
五面
技術(shù)面到四面就結(jié)束了塞俱,五面是創(chuàng)始人面(有幸和崔秋大佬聊了20多分鐘人生),面完之后就是 offer call 了吏垮。
PingCAP 小結(jié)
一些主觀評(píng)價(jià):
面試難度:正常
面試體驗(yàn):我給滿分
問題偏向:項(xiàng)目經(jīng)歷障涯、工程能力
這里真的想夸一下 PingCAP(因?yàn)槊嬖圀w驗(yàn)超棒呀!)膳汪。投 PingCAP 的初衷是覺得這個(gè)團(tuán)隊(duì)的工程師文化非常濃唯蝶,大牛云集,同時(shí) TiDB 夠牛逼遗嗽,項(xiàng)目開源的模式我內(nèi)心也很認(rèn)可粘我。只是掛羊頭賣狗肉的公司也不少,好多 JD 上寫著工程師文化濃郁痹换,其實(shí)很多根本不是那么回事兒征字。但是經(jīng)過 PingCAP 的五輪面試之后都弹,我實(shí)打?qū)嵉馗惺艿搅斯こ處熚幕好嬖嚴(yán)餂]有任何一個(gè)”刁難人的問題”,每一位面試官感興趣的是我的工程思維柔纵、學(xué)習(xí)能力缔杉、技術(shù)見解,同時(shí)還非常熱衷于與我討論和深挖一些坑與技術(shù)決策搁料。這種感覺就很爽:面試官是懂我的,我作為工程師的思維能力與技術(shù)見解得到了認(rèn)可與尊重系羞。這種氛圍是口號(hào)喊不出來的郭计,因?yàn)樗挠残灾笜?biāo)就是這其中的每一個(gè)人要熱愛技術(shù)并且工程經(jīng)驗(yàn)豐富。
![image](https://upload-images.jianshu.io/upload_images/24674627-5584905d1bf3b777.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_18,x_12,y_12?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
螞蟻
面試前
螞蟻的面試挺獨(dú)特椒振,每輪面試都沒有 HR 約時(shí)間昭伸,一般是晚上 8 點(diǎn)左右面試官來一個(gè)電話,問是否能面試澎迎,能的話開始面庐杨,不能就約一個(gè)其它時(shí)間。全程 6 面夹供,前五面技術(shù)面灵份,電話面試,最后一面是 HR 面哮洽,現(xiàn)場(chǎng)面填渠。
一面
介紹一下自己
問項(xiàng)目經(jīng)歷, 聊”數(shù)據(jù)同步”
接著聊上了 K8S 的項(xiàng)目
有沒有什么鉆研得比較深得技術(shù)?(我:kubernetes, golang, prometheus, java)
kubernetes 的架構(gòu)是怎么樣的?這個(gè)問題很大鸟辅,拆成 apiserver氛什、controller、kubelet匪凉、scheduler 講了一下
golang 與 java 的比較, 這個(gè)問題又很大枪眉,當(dāng)時(shí)主要對(duì)比了 vm、協(xié)程支持再层、面向?qū)ο蠛头盒偷膮^(qū)別贸铜、以及自己對(duì)各自使用場(chǎng)景的一些理解
golang 的 gc 算法, 知道是三色標(biāo)記,不過細(xì)節(jié)說不上來
從無限的字符流中, 隨機(jī)選出 10 個(gè)字符, 沒見過也沒想出來树绩,查了一下是蓄水池采樣算法萨脑,經(jīng)典面試題,沒刷題吃虧了
怎么擴(kuò)展 kubernetes scheduler, 讓它能 handle 大規(guī)模的節(jié)點(diǎn)調(diào)度
單節(jié)點(diǎn)提速:優(yōu)選階段隨機(jī)取部分節(jié)點(diǎn)進(jìn)行優(yōu)選饺饭;水平擴(kuò)展 scheduler 節(jié)點(diǎn)渤早,pod 做一致性 hash 來決定由哪個(gè) scheduler 調(diào)度
你有什么想問我的?
一面其實(shí)有點(diǎn)僵,我自己完全沒放開瘫俊,面試官對(duì)我的回答沒有什么反饋和深入鹊杖,都是”哦好的”然后就過了悴灵。所以我當(dāng)時(shí)面完覺得自己其實(shí)已經(jīng)掛了(我自己要是對(duì)候選人不感興趣,有時(shí)候也就問完問題走個(gè)過場(chǎng)溜了)骂蓖,后來收到二面電話著實(shí)吃驚了一下积瞒。
二面
先聊了聊項(xiàng)目
給 Prometheus 做了哪些改動(dòng)?
自研配置中心, 具體做了哪些內(nèi)容登下?
有用過 MySQL 的什么高級(jí)特性嗎?這里不太理解茫孔,我問什么算高級(jí)特性,面試官就切換到了下一個(gè)問題
配置中心的核心數(shù)據(jù)表是怎么設(shè)計(jì)的?
為什么在業(yè)務(wù)里用 Redis, Redis 有什么優(yōu)點(diǎn)?
單線程:并發(fā)安全被芳;高性能缰贝;原語與數(shù)據(jù)結(jié)構(gòu)豐富;采用廣泛畔濒,踩坑成本低
對(duì) Redis 里數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)熟悉嗎?說了一個(gè) zset 跳表
用過 Redis 的哪些數(shù)據(jù)結(jié)構(gòu), 分別用在什么場(chǎng)景?
Java 初始化一個(gè)線程池有哪些參數(shù)可以配置, 分別是什么作用?
自己寫的 Java 應(yīng)用調(diào)優(yōu)過哪些 JVM 參數(shù), 為什么這么調(diào)優(yōu)?這個(gè)問住了剩晴,我只知道最大堆最小堆,開 G1侵状,開 GC 日志以及 OOM dumper 這些基本的
用 Jetty 的時(shí)候有沒有配什么參數(shù), 為什么這么配?
Jetty QTP 等待隊(duì)列配置成無限的話, 你覺得好嗎? 會(huì)有什么問題嗎?
用過 Linux Bash 里的哪些命令, 分別用它們干嘛?
一道筆試題: 需要在給的鏈接中作答, 不能 google, 不能跳出, 不能用 IDE:
題目是這樣的:
我: 我用 Go 實(shí)現(xiàn)吧面試官: 不可以赞弥,用 Java 的 notify 機(jī)制實(shí)現(xiàn)我: (還沒意識(shí)到問題的嚴(yán)峻) 那我用 Java BlockingQueue面試官:說不可以, 要求用 Java 的 wait + notify 機(jī)制來實(shí)現(xiàn)我完全沒寫過 wait + notify,只能表示不會(huì)(菜雞本雞了), 面試官說那行吧你可以用 go 寫最后用 go channel 實(shí)現(xiàn)了一版, 不過給的網(wǎng)頁上不能運(yùn)行代碼趣兄,也不知道寫得對(duì)不對(duì)绽左,然后面試結(jié)束。這一輪面試官延續(xù)了一面的風(fēng)格诽俯,問完一題就趕忙下一題了妇菱,似乎沒有表現(xiàn)出對(duì)我的回答有興趣或認(rèn)可。因此這輪面完暴区,我又覺得自己掛了…
三面
依然先聊項(xiàng)目
對(duì)監(jiān)控警報(bào)的項(xiàng)目很感興趣, 問了挺多細(xì)節(jié), 最后問了一個(gè)問題: 現(xiàn)在要你實(shí)現(xiàn)一個(gè)語義不弱于 PromQL 的查詢語言, 你能實(shí)現(xiàn)嗎?
這里雖然看過一些 Prometheus 的代碼闯团,但其實(shí)對(duì) PromQL 的 lexer 和 parser 部分沒有細(xì)看,還好之前因?yàn)閿?shù)據(jù)同步項(xiàng)目里想寫聲明式 Stream SQL 研究過一點(diǎn) ANTLR仙粱,用 ANTLR 寫語法 + AST 遍歷塞查詢邏輯給糊弄過去了房交。
問我覺得做得最深入的項(xiàng)目是什么, 當(dāng)然是數(shù)據(jù)同步(狗頭)
聊數(shù)據(jù)同步項(xiàng)目(這個(gè)很符合我的預(yù)期,哈哈哈哈)
問 Linux 掌握得怎么樣伐割?
沒有系統(tǒng)學(xué)習(xí)過候味,基本上是自己運(yùn)維踩坑積累的
問 Golang 掌握得怎么樣?
用了半年, 看過 effective go
問算法掌握得怎么樣隔心?到圖為止都可以
問最短路算法
只記得 dijkstra 了白群,描述了代碼流程
k8s 掌握得怎么樣?不怎么樣,沒有自己寫過 controller 和 scheduler硬霍,但是對(duì)概念都很熟悉帜慢,看過 xxx 這幾部分的源碼
k8s 的 exec 是怎么實(shí)現(xiàn)的?這個(gè)問題正中下懷,之前寫了 PingCAP 的小作業(yè)正好對(duì)這塊特別熟悉
這輪聊得順暢多了。同時(shí)發(fā)現(xiàn)螞蟻的面試官似乎挺喜歡讓你自己評(píng)價(jià)自己的:”你覺得自己 xxx 掌握得怎么樣粱玲?”(只有五位面試官躬柬,樣本不夠大,不能作數(shù)哦)抽减,這類問題其實(shí)我慌得要死允青,怕自己吹過頭了答不上來,面試掛了事小卵沉,丟了面子事大颠锉。早知道就預(yù)習(xí)一下怎么吹噓自己了。
四面
介紹一下自己
覺得自己基礎(chǔ)知識(shí)掌握怎么樣
平時(shí)一般會(huì)用到哪些數(shù)據(jù)結(jié)構(gòu)史汗?
鏈表和數(shù)組相比, 有什么優(yōu)劣木柬?
如何判斷兩個(gè)無環(huán)單鏈表有沒有交叉點(diǎn)
如何判斷兩個(gè)有環(huán)單鏈表有沒有交叉點(diǎn)
如何判斷一個(gè)單鏈表有沒有環(huán), 并找出入環(huán)點(diǎn)
TCP 和 UDP 有什么區(qū)別?
描述一下 TCP 四次揮手的過程中
TCP 有哪些狀態(tài)
TCP 的 LISTEN 狀態(tài)是什么
TCP 的 CLOSE_WAIT 狀態(tài)是什么
建立一個(gè) socket 連接要經(jīng)過哪些步驟
常見的 HTTP 狀態(tài)碼有哪些
301和302有什么區(qū)別
504和500有什么區(qū)別
HTTPS 和 HTTP 有什么區(qū)別
寫一個(gè)算法題: 手寫快排
這一輪全程問的基礎(chǔ)知識(shí),基礎(chǔ)扎實(shí)的話就沒問題了淹办,不過個(gè)人感覺有一點(diǎn)像校招的問法。
五面
介紹一下自己
在 k8s 上做過哪些二次開發(fā)?
自己用 Helm 構(gòu)建過 chart 嗎恶复?有哪些怜森?
有沒有考慮過自己封裝一個(gè)面向研發(fā)的 PaaS 平臺(tái)?
配置中心做了什么谤牡?
為什么不用 zookeeper副硅?
配置中心如何保證一致性?
Spring 里用了單例 Bean, 怎么保證訪問 Bean 字段時(shí)的并發(fā)安全翅萤?
用并發(fā)安全的數(shù)據(jù)結(jié)構(gòu)恐疲,比如 ConcurrentHashMap;或者加互斥鎖
假如我還想隔離兩個(gè)線程的數(shù)據(jù), 怎么辦套么?ThreadLocal培己,然后舉了個(gè)例子
Golang 里的逃逸分析是什么?怎么避免內(nèi)存逃逸胚泌?這個(gè)不知道省咨,認(rèn)慫了
對(duì)比一下 Golang 和 Java 的 GC,答了一下 CMS、G1和三色標(biāo)記玷室,我對(duì)比的點(diǎn)是 JVM 有分代回收零蓉,Go 的 Runtime 沒有,沒能深入地講
Golang 的 GC 觸發(fā)時(shí)機(jī)是什么?閾值觸發(fā)穷缤;主動(dòng)觸發(fā)敌蜂;兩分鐘定時(shí)觸發(fā);
有沒有寫過 k8s 的 Operator 或 Controller津肛?(我:沒有寫過)
談一談你對(duì)微服務(wù)架構(gòu)的理解大體思路”微服務(wù)本質(zhì)是人員組織架構(gòu)演進(jìn)與關(guān)注點(diǎn)分離”
談一談你對(duì) Serveless 的理解,大體思路”Serveless 是繼 docker 與容器編排之后的又一次應(yīng)用開發(fā)與基礎(chǔ)設(shè)施提供方之間的邊界劃分”
你認(rèn)為 Serveless 是未來嗎? 為什么?大體思路”是云服務(wù)的未來章喉,把蛋糕從企業(yè)的IT、運(yùn)維與中間件部門切走,形成規(guī)模效應(yīng)囊陡,做得越多賺得越多芳绩;公司內(nèi)的話 servless 能夠幫助加速前臺(tái)業(yè)務(wù)迭代,但對(duì)中后臺(tái)的收益還看不到撞反,未來可能會(huì)有比 servless 更適合中后臺(tái)的架構(gòu)”
最后你有什么要問我的妥色?我:為什么足足安排了五輪技術(shù)面,而且其中有兩輪似乎和 k8s 沒有關(guān)系岸羝嘹害?面試官:我們覺得你做過的東西挺多的,各個(gè)方向都想讓你嘗試一下 (我的內(nèi)心:……)我:那這輪是最后一輪技術(shù)面嗎吮便?面試官:不一定(我的內(nèi)心:……)
后續(xù)還問了面試官一些業(yè)務(wù)相關(guān)的問題笔呀,就不贅述了
六面
HR 面,之前就聽說過阿里系的 HR 是來”聞味道的”(看你是否適合阿里的風(fēng)格)髓需,而且有一票否決權(quán)许师。所以還是挺有壓力的。
問經(jīng)歷
為什么要考慮出來看看呢僚匆?金句:”現(xiàn)在自己的技術(shù)成長有點(diǎn)碰到瓶頸微渠,加上一直對(duì)您公司欽慕有加??””
現(xiàn)在公司的主營業(yè)務(wù)是什么?(這塊往技術(shù)上問了很多咧擂,感覺是想考察我解釋復(fù)雜問題的能力)
現(xiàn)在帶人嗎逞盆?report 層級(jí)是怎樣的?
對(duì)自己這幾年的經(jīng)歷滿意嗎松申?
覺得自己有什么缺點(diǎn)云芦?
碰到過什么很挫敗的事情嗎?
未來的職業(yè)規(guī)劃是怎樣的贸桶?
看機(jī)會(huì)的時(shí)候舅逸,主要考慮的是待遇、平臺(tái)刨啸、人員還是什么其他因素堡赔?
現(xiàn)在的待遇如何
有什么想問我的
整體聊了 40 多分鐘,話題挺廣的设联,面試官也說了系統(tǒng)部這邊壓力挺大的善已,優(yōu)秀的人才才能留下來。個(gè)人覺得 HR 面里除了談薪酬的部分沒有什么可準(zhǔn)備的离例,想說什么直說就行换团。因?yàn)榈搅?HR 面至少證明你的技術(shù)沒什么問題,直說出來方便 HR 判斷兩邊的價(jià)值觀是否合拍宫蛆,假如真的不合拍艘包,那其實(shí)在 HR 這一面掛了比起進(jìn)去之后再后悔又跳槽要好很多的猛,畢竟大家都不喜歡頻繁跳槽的簡(jiǎn)歷。
小結(jié)
一些主觀評(píng)價(jià):
面試難度:正常
面試體驗(yàn):正常
問題偏向:基礎(chǔ)知識(shí)想虎,開發(fā)常識(shí)卦尊,技術(shù)見解
螞蟻的面試風(fēng)格比較”高冷”,面試官給我的一致感受就是很強(qiáng)舌厨,臥虎藏龍岂却。面試內(nèi)容上在基礎(chǔ)知識(shí)部分相對(duì)考察得多一些,沒有偏門和獵奇的問題裙椭,基礎(chǔ)知識(shí)扎實(shí)的同學(xué)可以大膽投投看螞蟻躏哩。
![image](https://upload-images.jianshu.io/upload_images/24674627-c98782bde3fa37f4.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_9,x_6,y_6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
頭條
面試前
頭條每次面試前會(huì)有 HR 約時(shí)間,并提前發(fā)一個(gè) zoom 地址過來揉燃,三場(chǎng)技術(shù)面與一場(chǎng) HR 面全都是視頻面試扫尺。不得不說視頻面試體驗(yàn)比電話面試好很多(尤其是對(duì)我這種很關(guān)注面試官反應(yīng)的),假如有 HR 同學(xué)看到這篇文章炊汤,推薦考慮一下用視頻面試取代電話面試正驻,效率會(huì)更高。頭條的三場(chǎng)技術(shù)面風(fēng)格都很類似:
問項(xiàng)目抢腐,抓出一些你擅長的領(lǐng)域或場(chǎng)景
問系統(tǒng)設(shè)計(jì)題拨拓,每題都會(huì)不斷深化需求讓你應(yīng)變和權(quán)衡
問一道算法題(不難不偏),先看思路氓栈,再要求寫一下偽代碼看邊界條件能不能一次過
這個(gè)面試流程我自己也一直在用,尤其是系統(tǒng)設(shè)計(jì)加上不斷的需求變更婿着,能比較全面地考察后端的基本功和工程思維授瘦。因此頭條的面試套路很對(duì)我胃口,甚至好多類似的問題我自己也都問過候選人竟宋。
一面
介紹一下自己, 為什么選擇出來看看機(jī)會(huì)
聊項(xiàng)目, 警報(bào)怎么做的, 統(tǒng)一接入監(jiān)控項(xiàng)怎么做的
聊項(xiàng)目, 配置中心項(xiàng)目, 問實(shí)時(shí)配置推送怎么做
討論為什么選擇所有的組件依賴放在配置中心中控制
我現(xiàn)在要做一個(gè)限流功能, 怎么做?令牌桶這個(gè)限流要做成分布式的, 怎么做?令牌桶維護(hù)到 Redis 里提完,每個(gè)實(shí)例起一個(gè)線程搶鎖,搶到鎖的負(fù)責(zé)定時(shí)放令牌
怎么搶鎖?Redis setnx, 鎖怎么釋放?搶到鎖后設(shè)置過期時(shí)間丘侠,線程本身退出時(shí)主動(dòng)釋放鎖徒欣,假如線程卡住了,鎖過期那么其它線程可以繼續(xù)搶占,加了超時(shí)之后有沒有可能在沒有釋放的情況下, 被人搶走鎖,有可能蜗字,單次處理時(shí)間過長打肝,鎖泄露,怎么解決?
換 zk,用心跳解決,不用 zk 的心跳, 可以怎么解決這個(gè)問題呢?
每次更新過期時(shí)間時(shí)挪捕,Redis 用 MULTI 做 check-and-set 檢查更新時(shí)間是否被其他線程修改了粗梭,假如被修改了,說明鎖已經(jīng)被搶走级零,放棄這把鎖
假如這個(gè)限流希望做成可配置的, 需要有一個(gè)后臺(tái)管理系統(tǒng)隨意對(duì)某個(gè) api 配置全局流量, 怎么做断医?
在 Redis 里存儲(chǔ)每個(gè) API 的令牌桶 key,假如存在這個(gè) key,則需要按上述邏輯進(jìn)行限流
某一個(gè)業(yè)務(wù)中現(xiàn)在需要生成全局唯一的遞增 ID, 并發(fā)量非常大, 怎么做
snowflake (這個(gè)其實(shí)答得不好鉴嗤,snowflake 無法實(shí)現(xiàn)全局遞增斩启,只能實(shí)現(xiàn)全局唯一,單機(jī)遞增醉锅,面試結(jié)束后就想到了類似 TDDL 那樣一次取一個(gè) ID 段兔簇,放在本地慢慢分配的策略)
算法題, M*N 橫向縱向均遞增的矩陣找指定數(shù), 只想到 O(M+N)的解法 補(bǔ)充: 這幾天刷 leetcode 碰到這題了, 240. Search a 2D Matrix II. 辦法是從左下角或右下角開始查找.
有什么想問我的?限流,分布式鎖荣挨,UUID 都屬于后端的經(jīng)典面試題男韧,這輪面試的參考價(jià)值挺大的。
二面
平時(shí)用的工具鏈和技術(shù)棧是什么
golang 踩過坑嗎?答了之前 PingCAP 面試時(shí)面試官問的 for-range 里的 go-routine 閉包捕獲問題,這段 golang 代碼有沒有 bug(還是一個(gè) for-range 的坑), 有 bug默垄,for-range 的 value 引用拷貝問題
Java 中 HashMap 的存儲(chǔ), 沖突, 擴(kuò)容, 并發(fā)訪問分別是怎么解決的, Hash 表此虑,拉鏈法(長度大于8變形為紅黑樹),擴(kuò)容*2 rehash,并發(fā)訪問不安全, 拉鏈法中鏈表過長時(shí)變形為紅黑樹有什么優(yōu)缺點(diǎn)?優(yōu)點(diǎn):O(LogN) 的讀取速度更快口锭;缺點(diǎn):插入時(shí)有 Overhead朦前,O(LogN) 插入,旋轉(zhuǎn)維護(hù)平衡
HashMap 的并發(fā)不安全體現(xiàn)在哪?拉鏈法解決沖突鹃操,插入鏈表時(shí)不安全韭寸,并發(fā)操作可能導(dǎo)致另一個(gè)插入失效,
HashMap 在擴(kuò)容時(shí), 對(duì)讀寫操作有什么特殊處理?不知道
ConcurrentHashMap 是怎么做到并發(fā)安全的?
segment 分段鎖
Java 有哪些鎖機(jī)制, 分別有什么特點(diǎn)?
Synchronized荆隘、可重入鎖
知道 CAS 嗎? Java 中 CAS 是怎么實(shí)現(xiàn)的?Compare and Swap恩伺,一種樂觀鎖的實(shí)現(xiàn),可以稱為”無鎖”(lock-free)椰拒,CAS 由于要保證原子性無法由 JVM 本身實(shí)現(xiàn)晶渠,需要調(diào)用對(duì)應(yīng) OS 的指令(這塊其實(shí)我不了解細(xì)節(jié))
MySQL 的存儲(chǔ)引擎用的是什么?(InnoDB)為什么選 InnoDB?幾乎所有公司用 MySQL 都用 InnoDB,降低踩坑成本燃观;聚簇索引褒脯,MVCC
MySQL 的聚簇索引和非聚簇索引有什么區(qū)別?
聚簇索引的葉子節(jié)點(diǎn)是數(shù)據(jù)節(jié)點(diǎn)(比如定義了主鍵時(shí)的主鍵索引),非聚簇索引葉子節(jié)點(diǎn)是指向數(shù)據(jù)塊的指針
B+樹和二叉樹有什么區(qū)別和優(yōu)劣?B+樹是多叉樹缆毁,深度更小番川,B+樹可以對(duì)葉子節(jié)點(diǎn)進(jìn)行順序遍歷,B+樹能夠更好地利用磁盤扇區(qū)脊框;二叉樹:實(shí)現(xiàn)簡(jiǎn)單
針對(duì)一個(gè)場(chǎng)景設(shè)計(jì)索引颁督,具體場(chǎng)景忘記了,反正考察的是聯(lián)合索引與列選擇性的知識(shí)
現(xiàn)有一個(gè)新的查詢場(chǎng)景, 要怎么解決?假如要查 A in () AND B in (), 怎么建索引?
只給選擇性高的一列建索引浇雹,這里因?yàn)閮蓚€(gè)都是范圍查詢所以另一個(gè)是走不到索引的(這里答的不好适篙,其實(shí)也可以建聯(lián)合索引然后用 (A,B) in ((1,2),(3,4)) 的方式去查)
查 A in () AND B in () 時(shí), MySQL 是怎么利用索引的?
先走一個(gè)非聚簇索引,查詢出行數(shù)據(jù)后再用另一列回表做篩選
假如查詢 A in (), MySQL 是針對(duì) N 個(gè)值分別查一次索引, 還是有更好的操作?不知道箫爷,有了解的同學(xué)可以留言 (補(bǔ)充, @BillyLu 貼出了文檔 equality-range-optimization, 大意是對(duì)非唯一索引 MySQL 會(huì)使用 index dive 的方式估算這個(gè) range index 涉及的行數(shù), 結(jié)合where optimization 中說明的在走 index 時(shí)假如涉及行數(shù)過多會(huì)走 full table scan, 那么假如 estimation 認(rèn)為這次 IN 不夠好, 是會(huì)走全表掃描的. 不知道除此之外, 面試官還有沒有想考察的點(diǎn))
用過 Redis 的哪幾種數(shù)據(jù)結(jié)構(gòu)? (都用過) ZSET 是怎么實(shí)現(xiàn)的?跳表
zrange start, stop, 總長度為 n, 復(fù)雜度是多少?O(logN) (答得不好嚷节,實(shí)際是 O(M+log(N)), M 是結(jié)果集基數(shù) stop-start)
Kafka 的消費(fèi)者如何做消息去重?
MySQL 去重聂儒、Redis 去重、假如場(chǎng)景量極大且允許誤判硫痰,布隆過濾器也可以
介紹一下 Kafka 的 ConsumerGroup挺長的衩婚,略
Kubernetes 和 Docker 用得怎么樣? (我:在公司推行布道)給它們貢獻(xiàn)過代碼嗎?(我:沒有…)
時(shí)序型數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)是怎么樣的?
講了 prometheus 1.x 和 2.x 的存儲(chǔ)結(jié)構(gòu)
LSM 樹了解嗎? 是一種什么存儲(chǔ)結(jié)構(gòu)?
Log-Structured Merge Tree,犧牲讀性能換取性能效斑,RocksDB非春、HBase、Cassandra 都在用缓屠,結(jié)構(gòu)有點(diǎn)忘了奇昙,只說了先寫 memtable 再刷盤成 sstable
在生產(chǎn)中用過 Cassandra 和 RocksDB 嗎? 量有多大?用過,Cassandra 存調(diào)用鏈敌完,RocksDB 做 flink 和 Kafka Stream 的本地狀態(tài)存儲(chǔ)
Cassandra 的墓碑機(jī)制是什么?不知道储耐,對(duì) Cassandra 停留在使用階段
二面問了好多中間件的基礎(chǔ)知識(shí),最后都沒有時(shí)間問算法了滨溉。面完之后心里就想:頭條的面試真是耿直啊什湘,Java 的 HashMap、鎖機(jī)制晦攒、CAS 到 MySQL 的索引闽撤,Redis 的 zset,再到 LSM 樹脯颜,全都是后端或中間件相關(guān)的熱門面試題哟旗。當(dāng)然這些問題熱門也是有原因的,即使候選人準(zhǔn)備過栋操,多扣一點(diǎn)細(xì)節(jié)也能很快就能看出來候選人是真的理解還是僅僅只是看了相關(guān)資料热幔。
三面
聊項(xiàng)目和工作經(jīng)驗(yàn)
用 Kubernetes 的過程中踩過哪些坑?
考慮一個(gè)業(yè)務(wù)場(chǎng)景: 頭條的文章的評(píng)論量非常大, 比如說一篇熱門文章就有幾百萬的評(píng)論, 設(shè)計(jì)一個(gè)后端服務(wù), 實(shí)現(xiàn)評(píng)論的時(shí)序展示與分頁我: 需不需要支持頁碼直接跳轉(zhuǎn)?面試官: 支持和不支持兩種場(chǎng)景都考慮一下我: 不需要支持頁碼翻頁就傳評(píng)論 id 用 offset 翻頁
假如用 id 翻頁的方式, 數(shù)據(jù)庫表如何設(shè)計(jì)? 索引如何設(shè)計(jì)?(文章id, 評(píng)論id) 建聯(lián)合索引,評(píng)論 id 需遞增,
假如量很大, 你覺得需要分庫分表嗎? 怎么分?需要分讼庇,分表有個(gè)權(quán)衡,按文章 id 分表近尚,讀邏輯簡(jiǎn)單蠕啄,但寫有熱點(diǎn)問題;按評(píng)論 id 分表戈锻,讀邏輯復(fù)雜歼跟,但寫壓力就平均了。寫是要首先保證的格遭,而讀總是有緩存等方案來折中哈街,因此按評(píng)論 id 分表好。
分庫分表后怎么查詢分頁?每張表查 N 條數(shù)據(jù)由 client 或 proxy merge
分庫分表后怎么保證主鍵仍然是遞增的?講了 TDDL 的辦法:有一張專門用于分配主鍵的表拒迅,每次用樂觀鎖的方式嘗試去取一批主鍵過來分配骚秦,假如樂觀鎖失敗就重試
現(xiàn)在需要支持深分頁, 頁碼直接跳轉(zhuǎn), 怎么實(shí)現(xiàn)?不能做精準(zhǔn)深分頁她倘,否則壓力太大,找產(chǎn)品進(jìn)行妥協(xié)作箍,在50或100頁后數(shù)據(jù)分頁是否可以不完全精確硬梁,假如可以,那么緩存深頁碼的起始評(píng)論 id
瞬時(shí)寫入量很大可能會(huì)打掛存儲(chǔ), 怎么保護(hù)?斷路器
斷路器內(nèi)部怎么實(shí)現(xiàn)的?可以用 ringbuffer
斷路器會(huì)造成寫入失敗, 假如我們不允許寫入失敗呢?
先寫進(jìn)消息隊(duì)列胞得,削峰填谷異步落庫
算法題: N 場(chǎng)演唱會(huì), 以 [{startTime, endTime}…] 的形式給出, 計(jì)算出最多能聽?zhēng)讏?chǎng)演唱會(huì),先講了思路, 按 endTime 升序排列荧止,再順序取最多場(chǎng)次,(講完思路之后)屏幕共享給我, 用你最熟悉的語言把這個(gè)算法實(shí)現(xiàn),用 go 實(shí)現(xiàn)了一版
你用了貪心法, 貪心可能會(huì)存在什么問題?局部最優(yōu),在這個(gè)問題里阶剑,只能找到一個(gè)可能解跃巡,無法找到所有排列方式
我覺得三面這個(gè)架構(gòu)設(shè)計(jì)問得還不錯(cuò),一個(gè)問題把后端的工程能力考的很全面了牧愁。
HR 面
大同小異素邪,問經(jīng)歷,問離職原因递宅,問職業(yè)規(guī)劃娘香,問待遇,問期望办龄。
小結(jié)
面試難度:正常
面試體驗(yàn):挺好
問題偏向:架構(gòu)設(shè)計(jì)烘绽,算法
頭條面試流程很專業(yè):每輪都會(huì)提前約好時(shí)間,面試時(shí)長都在40~50分鐘俐填,按時(shí)開始面安接,每輪之后發(fā)反饋短信邀請(qǐng)候選人評(píng)價(jià)面試,精準(zhǔn)地過兩天再約下一輪英融。整個(gè)像一臺(tái)精密運(yùn)作的機(jī)器盏檐。頭條的面試我個(gè)人挺欣賞的,考察得比較全面驶悟,面試官會(huì)抓住你沒有說清楚的地方來深入或者變換場(chǎng)景讓你應(yīng)變胡野,大家可以試試看去面一下,即使不打算去也可以作為一次免費(fèi)的能力評(píng)定痕鳍。再說說面試官硫豆,每位面試官都聽得出來是在一線寫代碼的,而且很認(rèn)真地在聽我說話(這當(dāng)中有視頻的功勞笼呆,我可以看到面試官在認(rèn)真聽)熊响,感覺工作中也都會(huì)是好相處好合作的類型∈模總結(jié)回頭看面試的過程汗茄,有好多不盡如人意的地方,不過最后能夠拿到三家的 offer 還是很幸運(yùn)铭若。最后再做一些補(bǔ)充性的小結(jié):一些經(jīng)驗(yàn):
簡(jiǎn)歷里寫了的項(xiàng)目洪碳,以及熟練程度在”掌握”以上的領(lǐng)域與中間件要好好準(zhǔn)備递览,當(dāng)面試官問你一個(gè)偏門的問題時(shí),他內(nèi)心其實(shí)也沒希望你能答上來偶宫。而當(dāng)面試官問你簡(jiǎn)歷上涉及的問題時(shí)非迹,假如你答不上來,那面試官就覺得這個(gè)人要么是眼界太低纯趋,會(huì)了一點(diǎn)就覺得自己掌握了憎兽,要么是簡(jiǎn)歷造假在胡吹,這兩種都非常不利吵冒;
在上一條的基礎(chǔ)上纯命,可以準(zhǔn)備一個(gè)最得意的項(xiàng)目,在簡(jiǎn)歷上和面試過程中引導(dǎo)面試官往這塊聊痹栖;
面試前心里可以準(zhǔn)備一個(gè)方法論:明確面試官想招怎樣的人有哪些特質(zhì)亿汞,在面試過程中努力表現(xiàn)出這些特質(zhì)。這聽起來是句正確的廢話揪阿,但面試的過程不可控因素太多疗我,有一個(gè)清晰的目標(biāo)在腦子里能幫你在手足無措時(shí)想到說什么。舉個(gè)例子南捂,有一輪中面試官問我有什么問題時(shí)吴裤,我就問貴司的對(duì)應(yīng)崗位會(huì)面臨哪些技術(shù)挑戰(zhàn)(當(dāng)然要先說清楚這不是在質(zhì)疑他們沒有挑戰(zhàn),只是自己渴望挑戰(zhàn))溺健;
一些各領(lǐng)域的資料與心得:
本倉庫大部分內(nèi)容來自我近幾年的收集和整理麦牺,整體文章思路也是圍繞著【面試備戰(zhàn)計(jì)劃】來進(jìn)行整理的,主體內(nèi)容包含:職業(yè)規(guī)劃篇鞭缭,跳槽篇剖膳,實(shí)操篇,一線大廠面試題篇岭辣,以及高頻面試必備綜合篇等知識(shí)內(nèi)容吱晒。>關(guān)注公眾號(hào):“程序員白楠楠”免費(fèi)獲取沦童!
一線大廠面試題篇(350+題)
![image](https://upload-images.jianshu.io/upload_images/24674627-4b1ca2a67d71bdba.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_27,x_17,y_17?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://upload-images.jianshu.io/upload_images/24674627-ab56170a0f71ee3f.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_27,x_17,y_17?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
JVM面試題匯總(100+題)
![image](https://upload-images.jianshu.io/upload_images/24674627-5547d8c7511b6c0d.png@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_27,x_17,y_17?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Mysql面試題匯總(一)
![image](https://upload-images.jianshu.io/upload_images/24674627-7f016d0358baded8.jpeg@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_27,x_17,y_17?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Java高頻核心面試題庫(1000+題)
![image](https://upload-images.jianshu.io/upload_images/24674627-aa7a84c2397ed3ad.png@wm_2,t_55m+5a625Y+3L+eZvealoOaloDUyMA==,fc_ffffff,ff_U2ltSGVp,sz_23,x_15,y_15?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
資料獲取方式
關(guān)注公眾號(hào):“程序員白楠楠”免費(fèi)獲嚷乇簟!