我認爲的高級開發工程師到底應該是怎樣的?你又具有這些能力嗎?

       以前有不少讀者會常常問我相似的問題:程序員

       達到什麼水品才能進阿里? 阿里的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這個層級的要求,其實不一樣的層級都適用,只是針對具體某一項,不一樣層級的要求不一樣而已。

       固然,其實我並不以爲這只是阿里的要求,由於我只是在阿里當過面試官,因此我只能表達下我認爲的阿里須要的人才是什麼樣的。

       若是之後我去到其餘公司了,或者本身創業了,那麼我相信我招人的標準也必定仍是這個。由於我始終認爲,高級開發工程師,必定不只僅是寫代碼的。

       最後,但願我今天的文章可讓你找到一點方向。願全部讀者:長風破浪會有時,直掛雲帆濟滄海。

相關文章
相關標籤/搜索