我认为的高级开发工程师到底应该是怎样的?你又具有这些能力吗?

       以前有不少读者会常常问我相似的问题:程序员

       达到什么水品才能进阿里? 阿里的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这个层级的要求,其实不一样的层级都适用,只是针对具体某一项,不一样层级的要求不一样而已。

       固然,其实我并不以为这只是阿里的要求,由于我只是在阿里当过面试官,因此我只能表达下我认为的阿里须要的人才是什么样的。

       若是之后我去到其余公司了,或者本身创业了,那么我相信我招人的标准也必定仍是这个。由于我始终认为,高级开发工程师,必定不只仅是写代码的。

       最后,但愿我今天的文章可让你找到一点方向。愿全部读者:长风破浪会有时,直挂云帆济沧海。