以前有不少讀者會常常問我相似的問題:程序員
達到什麼水品才能進阿里? 阿里的P6有哪些要求? 我想進阿里,我要準備什麼?面試
其實本身也作過面試官,也面試過不少優秀的人,內心大概有一個標準,知道什麼樣的人才是咱們想要的人。算法
可是這個標準我一直都沒有仔細的去思考過,恰好最近有時間,我好好的思考了一下,根據個人理解,談一談我認爲的阿里的人才畫像是怎樣的。sql
我以爲阿里須要的人才大概須要具有這幾方面的能力:數據庫
一、軟件開發能力編程
二、架構設計能力緩存
三、項目管理能力安全
四、線上運維能力服務器
五、業務理解能力數據結構
六、學習能力
七、影響力
八、目標導向
以上,是我認爲是一個P6須要具有的能力的幾個方面,可是每一個方面的能力並不必定要求很是出衆,可是有些又很重要。
對於一個程序員來講,軟件開發能力固然是一個最最基礎的能力了,不少面試主要考察的也都是軟件開發能力。
那麼,到底須要掌握哪些知識,才能達到阿里的P6的標準呢?
在回答這個問題以前,我看了不少大廠的招聘要求,而且回顧了一下以往面試時本身對於候選人的要求,大概總結出一些我認爲比較重要的知識點。
能夠說,若是如下這些知識點,候選人不能徹底掌握的話,面試掛掉的機率很大。
一、基礎。這個是最最基本的,像集合類、IO、反射這些常見的內容必定要作到如數家珍。
二、併發編程。這個也是面試很看重的知識點,對於線程安全問題、相關關鍵字的用法及原理、併發包等知識也要掌握。
三、JVM相關。這部分幾乎是面試必考!JVM內存結構、GC相關的、調優、類加載等等這些的原理都要有了解的。
四、框架相關。目前主流的一些框架必定要了解的,如Spring等開源框架, 要知道用法及重要特性的原理、
四、分佈式相關。這是大廠比較看重的一點了,對於分佈式理論知識、緩存、消息、RPC等工具的用法和原理有了解的話,面試會輕鬆不少。
五、高併發、高性能方面只是。這部分也是挺重要的。
六、數據庫相關知識。如Mysql的一些知識、鎖、隔離級別、事務、索引等等。
七、數據結構與算法。這部分不少公司喜歡問一些算法題。
若是你能知足如下要求,那麼說明你已經基本達到了:
基礎篇:掌握70%;底層篇:掌握60% ;進階篇:掌握50%;高級篇:掌握30%。
那麼,你的知識面的廣度以及深度的話,我認爲算是達到了一個相對符合標準的程度。
不少人會認爲,我只是一個作開發的,又不是架構師,爲何要求我有架構能力呢?
這一點其實也能理解,由於一個P6在公司內部的定位應該是一個系統或者一個域的Owner,他須要負責這個系統和這個域的系統設計,那麼就須要具有必定的架構設計能力,這樣才能設計出合理的系統。
要想設計出好的架構,我以爲須要幾個方面:
一、瞭解常見的架構設計原則
二、對於常見的架構問題的解決方案有了解。
三、有必定的架構經驗。
首先,架構原則,那麼就須要掌握一些基本的原則,如單一職責原則、開放封閉原則、里氏替代原則、依賴倒置原則、接口分離原則等。還有一些理論,如破窗理論、康威定律、墨菲定律等等。
除此以外,還須要對於常見的架構問題的解決方案有了解,不少人以爲這個好像離開發很遠,到底什麼是架構問題的?
其實並不遠,簡單點說,分佈式一致性問題、性能問題、高併發問題。這些均可以理解爲是架構問題的,因此,須要掌握的就是一些分佈式相關知識。若是你能把如下幾個問題回答好,那麼你算是對於這些問題有必定的理解了:
一、如何分佈式系統的解決數據一致性問題
二、說一下想要設計一個高併發的秒殺系統,都須要作哪些事情?
好像不少公司有專職的項目經理,可是在阿里的的大部分技術團隊,都是不設立純項目經理職位的,通常都是由項目組中的某位技術人員兼任項目經理角色,負責項目推動。
因此,通常一個小型項目,都會須要一個P6來擔任項目經理的。那麼相關管理的能力就相當重要了。通常須要能夠做爲負責人領導部門內跨團隊的項目。
首先最基本的要求就是須要把控項目進度以及項目質量,這個就須要有很好的協調能力,能夠在項目中很好的瞭解到成員的狀況,適當的想辦法解決合做的問題。
稍微高一點的要求,就是要求能夠提早預知項目風險,並給出建設性建議。若是可以作到這一點的項目經理,就算是比較優秀的了。
還有一點我以爲也是比較重要的,那就是在項目管理中,如何協調業務方以及開發團隊之間的矛盾問題,如何作到業務方滿意,又讓兄弟們不那麼累。好的辦法就是既要適當下降業務方的預期,又要提高兄弟們的戰鬥力。
還有一點,我以爲也挺重要的,那就是項目經理須要保護項目組好兄弟們,不要由於項目倒排就壓榨兄弟們的時間,由於加班一方面會影響兄弟們的身體健康,另外加班加點上線的項目,一旦出了故障,仍是須要兄弟們扛的。。。
我以前看過一份調查報告,在僱主調查中,僱主們最但願程序員掌握的技能列表中,問題排查能力是排在前三名中的。
而問題排查就是線上運維的能力之一。
不要覺得線上運維就是專職的運維人員的工做,其實不是的。仍是那句話,P6的人是一個系統或者一個域的Owner,他是要對這個系統的全部狀況都負責的。
從開發到上線再到後期運維,他都要徹底掌握,要知道線上的正常水位是怎樣的,什麼指標是存在問題的。出了問題以後又如何排查,這些都是相當重要的技能。
關於這種部分,其實須要掌握的知識點並非特別的多,主要有如下這些:
一、常見的Linux命令的使用
二、常見的服務器指標(Load、CPU、內存、GC狀況等)的查看、問題排查
三、系統調優、性能調優、sql優化等技能
四、常見問題排查思路。如死鎖問題、慢SQL問題、內存溢出問題、Load飆高問題等等。
我在面試的時候,最開始都會問一下和業務有關的,若是候選人對於本身負責的業務都不是很理解的話,那麼基本就很難過關了。
由於技術是服務於業務的,尤爲是一個業務開發,若是本身作的業務都不瞭解,只是機械的完成本身負責的小功能的話,那麼我不認爲他是一個好的開發人員。
並且,咱們但願一個達到高級開發的人,不僅是一個只會作業務需求的人,達到這個層級的人,須要有本身的判斷,先用嘴解決需求,不行的話再用代碼解決。
一個好的P6應該是能夠獨立負責一個業務,而且分辨出需求的優先級,可以提出本身的意見。能夠影響業務的走向的。
因此,針對大部分程序員來講,首先要理解業務,而後要嘗試着提出本身意見,而且能夠分辨出需求的優先級,而且勇於對不合理需求說不。
固然,在提出問題的和意見的時候,若是可以給出好的方案,那就更好了。大多數狀況下,技術人員應該是整個項目組最瞭解業務的,畢竟代碼是他寫的。
學習能力不用我說,你們必定都以爲他很重要,這是毋庸置疑的。
可是通過這麼多面試下來,我發現,這個能力並非全部人都具有的。
P6這個層級在阿里並非一個很高的層級,還有很大的上升空間,因此,真的須要很強的學習能力才能不斷的提高本身。
並且,我理解的學習能力,不只僅是快速學會一個知識,而是能夠在實際工做中運用他。
因此,我面試的時候,通常會經過如下幾個問題考察候選人的學習能力:
一、你知道最新版的JDK是哪一個版本麼?新特性知道嗎?
二、lambda表達式用過嗎?
三、最近在看什麼技術書籍嗎?有什麼技術是你剛剛學會的嗎?
因此,一個高級開發,是能夠快速上手新的技術或者業務,能夠獨擋一面的。所謂獨當一面,並不僅是在本身熟悉的那一面能夠獨擋,而是換個面,你也能夠快速的獨擋起來!
影響力,這一點看起來很虛,可是確實也很重要的,這也是爲何不少招聘要求中會寫"有開源項目經驗優先"的一個緣由之一。
從外面招人的話還不是特別的明顯,阿里內部的晉升在影響力方面比較看重,由於提名晉升是要能夠服衆的,那麼怎麼讓別人信服?那就是這我的有足夠的影響力。
通常來講,對於一個P6的工程師來講,要求是要在本身的團隊內部有必定的影響力,能夠被團隊內重視,一提到某個領域,你們第一個想到你。
提高影響力的方式有不少,好比常常幫助團隊內同窗解決技術問題、常常在團隊內部作技術分享,常常分享技術文章等等。還有一些好比開源項目、專利、著做等也是很好的提高影響力的方式。
可是其實,影響力這東西,並非刻意培養就能作獲得的,這個是一個潛移默化的過程。真的作到能夠正面的影響到別人,影響力就出來了。
不少招聘都會說要求有鑽研精神、責任心、抗壓能力強等,不少人理解是要求能加班,可是其實這是對於候選人是否是目標導向的一個篩選。
對於P6來講,目標導向就是能夠作到指哪打哪,交給你的工做,你能夠全力的把他作好,不管遇到什麼樣的困難,均可以想辦法去克服。
目標導向,還能夠換成一個詞,那就是要性,一個要性強的人,必然是目標導向的人。
"要性"就是表明着我不只想作,我還必定要作成。
小編的程序員編程學習基地【點擊進入】!從零基礎到高級軟件開發工程師
涉及:遊戲開發、課程設計、經常使用軟件開發、黑客等等...
以上,說了不少不少,個人一些理解。相信不少人會有不一樣的意見,這也是正常的,每一個人的人才觀都不太同樣。
至少我面試的時候,招人的一個標準,就是和他聊下來以後,我以爲我能夠和他很好的合做,能夠把我認爲重要的事情交給他的,那麼他就能夠經過個人面試了。
那麼,如何在面試中給到我這種信任感,那就是讓我以爲他技術能力不錯,有必定的架構思惟、有線上問題排查的能力、瞭解本身的業務、能夠負責一個項目的管理、也能快速的學習一些新的知識。另外,若是可讓我感覺到他是一個目標導向的人,而且有必定的影響力的話,那麼我會更加願意接受他。
以上,這8點,不只僅是對P6這個層級的要求,其實不一樣的層級都適用,只是針對具體某一項,不一樣層級的要求不一樣而已。
固然,其實我並不以爲這只是阿里的要求,由於我只是在阿里當過面試官,因此我只能表達下我認爲的阿里須要的人才是什麼樣的。
若是之後我去到其餘公司了,或者本身創業了,那麼我相信我招人的標準也必定仍是這個。由於我始終認爲,高級開發工程師,必定不只僅是寫代碼的。
最後,但願我今天的文章可讓你找到一點方向。願全部讀者:長風破浪會有時,直掛雲帆濟滄海。