我招了個「水貨」程序員

這篇文章對不少沒有高併發經驗的程序員來講,會很是有幫助。程序員

不少程序員可能都遇到過相似的困惑:web

我沒有高併發項目經驗,可是面試的時候常常被問到高併發、性能調優方面的問題,該怎麼辦?面試

這個問題怎麼解決?和你們說說我招人的一個經歷。算法

程序員小張參加工做已 5 年,是一位高級工程師,是我親自招進公司,表現很出色。數據庫

前一陣子,我把小張叫進會議室,想讓他單獨帶個團隊。其中,我談到了面試時,他簡歷注水的問題。緩存

事情是這樣的,大概兩年前,公司有個核心項目缺人,須要一位高級程序員。這個崗位很是重要,因此對面試人要求不低:性能優化

  • 有高性能、高併發開發經驗
  • 有高可用系統經驗
  • 參與中間件研發、優化和系統存儲優化

招聘持續了兩個月,面試了許多工做五年以上甚至十年的人選,卻依然沒有招到一個特別合適的。服務器

就在咱們快不抱但願的時候,同事讓我去面試一個有趣的人,他強烈推薦,並順手把簡歷遞給了我,這人正是小張。網絡

接過簡歷後,我先翻了翻。這一翻,讓我皺起了眉頭。多線程

簡歷裏,小張的工做經驗只有區區三年,這三年全都在一家公司,公司自己尚未什麼名氣。

更重要的是,我懷疑他的簡歷作了手腳。

他說本身三年裏,負責過兩個項目,一個是電商項目,一個是關於這個電商項目的對外開放平臺。對這兩個項目,他着重強調了項目的高併發,並說本身解決了不少技術難題。

就是這裏出現了問題。咱們當時也有電商項目,市面上稍微有點名氣的電商平臺我都很是清楚,卻沒據說過他簡歷裏的產品。因此我懷疑,這份簡歷是包裝過分了。

可是,對於這麼明顯的問題,我不信前面的面試官們都沒看出來。那麼,爲何他們還推薦我去見見呢?

說內心話,對簡歷包裝過分我是比較惱火的,可是這只是個人懷疑。同時,前面的面試官居然是帶着一種從未有過的滿意語氣,叫我必定面面他,對同事們的承認我又比較好奇。

就這樣,我帶着惱火又好奇的矛盾心思見到了小張。

見到小張的時候,我因爲有點惱火,臉色顯得很是嚴肅。他可能看到我如此嚴肅,不由侷促了起來。可是,從他的眼神中,我又看到了很強的自信。我內心想,確實挺有趣的人。我決定要好好的面試下這我的,看看他到底有什麼本事,能讓個人同事如此滿意。

問了下他大概背景後,開始了進入了正題。當進入了正題以後,小張的回答態度就讓我大加讚揚。態度自信,不卑不亢,邏輯表達也十分清晰明白。

這時候,我內心決定,若是小張後續的回答,能證實他的實力達到簡歷描述的八成水平,我會傾向於把 offer 給他。

我先問了問他對高併發的理解,好比

高併發須要參考哪些指標?

他告訴我,高併發因爲產品類型不一樣,因此指標都不同。以他負責的電商系統來講,根據模塊的不一樣,關注的指標不一樣。商品瀏覽看得是 QPS,訂單模塊則是看得 TPS。同時,他們還須要關注活躍的用戶量等等。

這回答真不錯。面試以來,哪怕是工做多年的人,絕大多數的答案就是 QPS,無非再多一個 TPS。能把產品類型的不一樣和不一樣的高併發指標之間關聯起來,這說明小張是仔細對這個問題思考過的。

我愈發滿意了。在後面,我又追問了集羣部署、多級緩存、複雜查詢優化等有關性能優化的問題,還附加了系統高可用的各類策略,和如何拆分去保證靈活擴展等實際中咱們正在採用的問題。

等面試完畢後,時間已通過了一個多小時。小張當時並無百分百答好我問的問題。

從實際回答來看,關於性能優化的細節,好比,系統瓶頸的檢測和優化,程序邏輯的優化,JVM 優化甚至數據庫的優化都答得異乎尋常的出色。

可是,對於高可用的大概策略,好比降級處理,限流處理等,他只知道大的方向,不少答案一聽就知道是從書本上或者互聯網上看來的。

而對於系統的擴展性相關問題,他甚至答的很是差,不少都回答不上來。

不過瑕不掩瑜,小張依然拿到了 offer,他指望的薪資我也沒有打任何折扣,這足以給他一份大大的驚喜了。

在後來的兩年裏,小張的出色表現,證實我沒有看錯他。

他爲了公司的核心項目作出了巨大貢獻,而他的技術水平,也有了肉眼可見的巨大提高。他成爲了一名高併發經驗豐富的高級程序員。因此,如今打算讓他帶團隊了。

「那麼,就剩一個問題了。你面試以前究竟是如何作到熟悉高併發的性能優化的?」 我好奇的問出了我壓在心底的問題。

小張不太好意思的撓了撓頭,他詳細給我講述了他是如何搞定高併發經驗的。

我聽完後,真的是對他這些準備讚不絕口。我認爲該分享出來,讓更多的人看到。

劃重點!若是你也渴望有高併發經驗,那麼下面的內容你要格外關注了。

小張確實是作了電商平臺開發的。可是,這個電商平臺沒多少訪問量,QPS 可能一隻手都能數的過來。說句難聽話,也就是掛在網上而已。

他剛畢業入職開始,就參與維護了這套電商平臺。就這樣持續了一年後,他發現本身已經沒法再有任何提升了。

他想跳槽,可是發現不少高級崗位都是要求高併發經驗的,他對此很着急。若是他繼續在之前的公司發展,就勢必接觸不了什麼高併發。可是跳槽的話,他又必須有高併發經驗才能找到一個不錯的崗位去繼續提高本身。

這貌似成了一個死結。

在百般無奈之下,他決定本身模擬高併發去得到經驗。

如今總結下來,其實他的練習能夠粗略分爲三個階段:

第一階段

這個階段,小張完成了在高併發條件下,對單機性能優化的學習。

小張用 Docker 容器去運行他維護的電商項目。而後用 jmeter、wrk 等工具去壓測。

在壓測期間,他敏銳地發現了因爲系統每一個模塊不一樣,因此性能表現就不同,這種現象引起了他的思考。他通過網絡搜索和查詢資料,明白了不一樣模塊、不一樣產品對併發指標的要求是不同的。

基於這種狀況,他又根據產品的業務邏輯編寫了複雜的壓測腳本,能自動實現不一樣模塊的壓測任務。

就是在這種不斷地壓測探測下,他明白瞭如何探測問題,如何經過優化代碼、JVM 去解決問題。

好比,解決誤用 HashMap 致使死循環的問題。又好比,誤用不帶緩存的文件 IO 流,去讀取文件的問題等等。

在程序和 JVM 優化完畢後,他又發現數據庫也存在問題。因而,他又學會了如何優化數據庫 SQL,如何對數據庫分表等問題。

也是在這個階段,他認識到了緩存的必要性以及同步緩存數據狀態的重要性等重要知識點。

小張在搞了單機優化後,他以爲也沒有辦法再經過單機的壓測學到什麼新的東西了。因而,他轉向了第二階段。

第二階段

小張從阿里雲買了兩臺機器,他開始嘗試使用負載均衡去分擔高併發的壓力

一樣的,也是藉助壓測工具去模擬了高併發。在壓測期間,負載均衡和系統屢屢出現和單機徹底不同的問題。

好比,負載均衡自己的性能問題。好比,在一些時候,負載均衡後面的機器負載是不平衡的,須要對負載算法進行調整。

這個階段,小張理解了負載均衡中大部分的細節。

可是,高併發中,不少系統的構成會很複雜,以致於須要分佈式架構系統的程度。他們須要各類中間件作通訊,作存儲。

因此,小張根據招聘的一些需求,他作了第三階段的練習。

第三階段

爲了能熟悉市面上各中間件的使用,小張把他那套電商平臺改了又改。

好比,一些本地調用的方法,被他替換成了 Dubbo 遠程調用。好比,一些模塊間調用,被他替換成了 MQ 中間件傳消息。再好比,一些放在關係數據庫的被頻繁訪問的數據,被他改存在了 MongoDB 中……

固然,壓測依然繼續。就這樣,小張又實踐了不少中間件和分佈式框架的使用。

在模擬高併發練習的同時,小張不忘去讀各類高併發高性能的書籍。好比,《大型網站服務器容量規劃》、《互聯網創業核心技術:構建可伸縮的web應用》等書籍。

在來到咱們公司面試以前,小張如此練習了兩年左右。

雖然小張面試的時候表現也存在不少不足,可是我當時看中他的一些優勢是:

1. 小張知足具備高併發經驗的要求

爲何咱們須要找有高併發經驗的人?

說白了,咱們想找的程序員實際上是:

  • 不會亂寫性能不好的代碼
  • 能敏銳感知到影響系統的問題
  • 能獨立的處理因爲高併發引起的問題

小張經過他的練習是掌握了這些技能的。

2. 小張知足熟悉高可用的要求

咱們找熟悉高可用的人,其實並不要求這我的必定能給出什麼獨特的高可用方案。咱們要求的是,他能知道高可用的知識後,去意識到高可用的重要性。

好比限流功能出現問題,他要能立刻認識到這是個很重要的問題,從而把解決的優先級提到很高。

小張經過學習,明白了高可用的重要性,也知道了高可用的大方向,這就夠了,剩下的細節,咱們有信心帶小張在實際工做中學出來。

3. 小張能參與咱們的中間件研發和存儲優化

小張主動改造過他們的電商系統,並且使用了不少的中間件,並對這些中間件都進行過優化。對這些中間件的特性比較熟悉,而且在實踐中,他也瞭解了不少原理。

除此以外,小張的主觀能動性尤爲打動咱們。他對技術的主動鑽研、主動學習,代表了他是一個喜歡走出溫馨區,願意挑戰本身的人。而這樣的人,有哪一個團隊不歡迎呢?

因此,其實沒有高併發經驗並不可怕。

若是在工做中你接觸不到高併發的項目,那麼也不必太糾結。公司作什麼項目你改變不了,你能改變的只有你本身。關鍵仍是本身要去主動學習,主動練習,主動提高。只有這樣的人,機會纔會去垂青。

最後,畢竟在程序員這個圈子,90% 以上的人可能都沒有真正的高併發經驗,因此在此也但願各位面試官,在招人的時候,若是遇到好苗子能夠適當寬容一些,給新人們一點機會,說不定能找到一匹千里馬。

碼字不易,看完以後若是以爲有幫助,但願你能幫忙隨手點個贊,你的支持對我很重要

最最後,推薦一本高併發相關的開源書籍:《深刻淺出Java多線程》

本書的做者們都是阿里、ThoughtWorks 等大廠的高級程序員。

我看了一部分,雖然還沒所有看完,可是我已經火燒眉毛的想給這本書點讚了。

很少說了,咱們直接看目錄:

書裏還有不少例子,能夠說是圖文並茂。

獲取方式:關注個人公衆號【四猿外】,關注後在後臺回覆 666

還有更多幹貨資料不按期更新


你好,我是四猿外,一家上市公司的技術總監,管理的技術團隊一百餘人。

我從一名非計算機專業的畢業生,轉行到程序員,一路打拼,一路成長。

我會把本身的成長故事寫成文章,把枯燥的技術文章寫成故事。

相關文章
相關標籤/搜索