作為一個看過幾千份簡歷,面試過幾百人的面試官,常常會看到簡歷中有如下文字:
對業(yè)務(wù)邏輯解耦,高并發(fā)等有比較深入的研究和豐富的開發(fā)實戰(zhàn)經(jīng)驗
對解決高并發(fā)問題有深入理解
熟悉大并發(fā)技術(shù),如:反向代理、負(fù)載均衡、Keepalived
而當(dāng)我在面試中,問及對方的職業(yè)規(guī)劃的時候,也有一大半人會回答
希望將來可以處理高并發(fā)業(yè)務(wù)
希望學(xué)習(xí)高并發(fā)相關(guān)技術(shù)
希望開發(fā)數(shù)千萬/數(shù)億級別并發(fā)的應(yīng)用
但是當(dāng)我問及以下問題的時候,絕大多數(shù)人都會麻爪:
負(fù)載均衡有幾種分配方式?(大概不到1/10的簡歷提及高并發(fā)的人能答出來)
有沒有用任何方式(比如虛擬機(jī))模擬過各種集群(API服務(wù)器,數(shù)據(jù)庫,CDN等等)?
有沒有用任何方式測試過采用了高并發(fā)應(yīng)對策略后對項目的改進(jìn)和提升?數(shù)據(jù)有什么變化?
如果業(yè)務(wù)規(guī)模再次擴(kuò)大,下一階段應(yīng)該用什么技術(shù)和策略?
問題就在這里了,
為什么我會把簡歷里提及“高并發(fā)”的絕大多數(shù)人KO掉,或者在面試中,對職業(yè)規(guī)劃只有“高并發(fā)”的人發(fā)拒信?
很愛“高并發(fā)”的面試者,應(yīng)當(dāng)如何在簡歷中體現(xiàn)自己的能力和期待?
首先,絕大多數(shù)人沒有考慮過如何把技術(shù)應(yīng)用于高并發(fā)場景
以PHP碼農(nóng)圈子而言,絕大多數(shù)用PHP的企業(yè)都是初創(chuàng)或者早期公司或者技術(shù)儲備并不豐富的中小企業(yè),這些企業(yè)做正常業(yè)務(wù)的很難有做高并發(fā)的使用場景。(例外:涉黃,涉賭,超大企業(yè)【騰訊華為之類】外包團(tuán)隊)
因此,大多數(shù)的初中級PHP碼農(nóng)是沒有機(jī)會在生產(chǎn)環(huán)境應(yīng)用高并發(fā)相關(guān)技術(shù)的,自然也就不會有什么積累和心得。
我經(jīng)常會問沉迷于高并發(fā)的面試者:當(dāng)你有了一個數(shù)千萬乃至數(shù)億級別的高并發(fā)解決方案的時候,你準(zhǔn)備用在哪里?讓誰買單?
顯而易見,買單的是企業(yè),企業(yè)為用戶服務(wù),但是這樣規(guī)模的企業(yè)本身已經(jīng)不是很多,而且它們使用的方案或者是已有的成熟方案,或者是企業(yè)內(nèi)部長期迭代得來,不太會有人冒業(yè)務(wù)中斷的風(fēng)險去應(yīng)用一套外部的沒來頭的方案。
另外,解決高并發(fā)的方案不是單純的三五項技術(shù),而是許多套完整的技術(shù)棧,把它運行起來需要一個完整的研發(fā)、運維團(tuán)隊來進(jìn)行支持,沒有幾個單獨的個人可以百分百解決,那么這個人的技能短板會立刻導(dǎo)致方案不可靠。
因此,脫離使用場景的技術(shù)價值是要大打折扣的。
第二,高并發(fā)背后的高成本是大多數(shù)人沒有考慮過的
硬件成本的問題:一般在企業(yè)中做開發(fā),都至少要有開發(fā)環(huán)境,集成測試環(huán)境,生產(chǎn)環(huán)境,有的時候還需要有鏡像的災(zāi)備環(huán)境。如果用了服務(wù)器集群,那么高并發(fā)方案的服務(wù)器的數(shù)量就要比堆硬件硬抗的方案翻好幾倍。而且運維的成本也會增加很多。
人力因素也很重要,人肉運維自然是成本貴,能寫程序搞自動運維的工程師顯然更貴。
成本需要企業(yè)來買單,程序員學(xué)了用了新技術(shù)開心了,企業(yè)成本提高做掛了顯然不是企業(yè)想看到的。
因此,如何用各種方式降低你的方案的成本【比如在虛擬環(huán)境做各種測試】并且說服企業(yè)應(yīng)用,是面試者要思考的問題。
第三,高并發(fā)只是業(yè)務(wù)規(guī)模巨大導(dǎo)致的眾多嚴(yán)重問題中的一個,還不一定是最重要的那個
高并發(fā)只是表象,業(yè)務(wù)規(guī)模用戶規(guī)模巨大會導(dǎo)致一系列嚴(yán)峻問題,不僅僅是高并發(fā)。
舉例來說,團(tuán)購秒殺拍賣之類的場景是常見的高并發(fā)應(yīng)用場景??偠灾际琴u貨,但是在賣貨的大前提下,商品庫存數(shù)字的變化(要不要實時,要不要各端同步),訂單狀態(tài)變化對業(yè)務(wù)流程的影響(下單減庫存還是付款減庫存還是發(fā)貨減庫存,預(yù)售和返現(xiàn)等營銷行為導(dǎo)致的錢款卡券變化)都有可能導(dǎo)致整個方案變化?!鞠胂?2306,處理商品庫存數(shù)據(jù)的實時性要比處理高并發(fā)請求復(fù)雜的多】
因此,結(jié)合具體業(yè)務(wù)場景,展示出面試者在整個業(yè)務(wù)場景中,包含但不限于高并發(fā)技術(shù)而體現(xiàn)出來的價值,才能為面試加分。
第四,你說你擅長高并發(fā),你得要證明給我看
從面試的角度來說,我除了預(yù)設(shè)的面試題之外,還會很細(xì)致的詢問對方的簡歷細(xì)節(jié)。
知乎用戶:為什么有面試官喜歡讓面試者用紙筆寫代碼?
面試者在簡歷上寫了擅長高并發(fā),那我就要三段論問一下:是什么問題,怎么解決的,效果如何?
即使去掉偽造簡歷和過度美化簡歷的人,仍然有大多數(shù)人無法回答第三個“效果如何”的問題。
大量的聲稱研究過負(fù)載均衡的面試者都是用兩三臺電腦搭一個環(huán)境測試能夠?qū)崿F(xiàn)平均分配的負(fù)載均衡策略,但是如果問“如果我想測試三五臺或七八臺服務(wù)器的場景應(yīng)該如何實現(xiàn)?”就又答不出來了。
(答案:現(xiàn)在有docker,古時候有各種虛擬機(jī)【vmware,virtual box】和云端部署【gae,sae之類】,實在不行還可以用各種云服務(wù)器的按量付費按小時啟動服務(wù)就好)
因此,用豐富的細(xì)節(jié)和深刻理解的心得體會來證明面試者的技能水平,是面試要解決的一個最核心的問題
總結(jié):
掌握高并發(fā)技術(shù)不是壞事,技術(shù)好不僅僅體現(xiàn)在能處理高并發(fā)
有水平需要證明,證明需要實踐(企業(yè)沒有責(zé)任挖掘面試者的價值,面試者需要自己證明)
能解決實際業(yè)務(wù)問題的技能才是企業(yè)需要的,企業(yè)里沒有龍,面試者的屠龍之技就沒有賣點
不要過度美化簡歷(我的建議:至少要能夠抗住3-5個刨根究底的問題才能寫到簡歷上)
以上就是我的分享。感謝各位耐心的看完文章,最后再分享一個我自己的后端技術(shù)群,群里自己收集了很多Java架構(gòu)資料,大家可以進(jìn)群免費領(lǐng)取群號:680075317,也可以進(jìn)群一起交流,比如遇到技術(shù)瓶頸、面試不過的,大家一些交流學(xué)習(xí)!