之前有很多读者会常常问我相似的问题:
达到什么水品能力进阿里?阿里的 P6 有哪些要求?我想进阿里,我要筹备什么?
这些问题我之前素来都是不答复的,因为我那个时候也不太晓得标准答案是什么。
前几天,写了一篇《没想到,我都来阿里 5 年了》,总结了一下本人这五年的经验与成长。在这过来的 5 年里,真的经验了太多太多,我也从一个刚刚毕业的糊涂少年,成长成一个独当一面的技术专家了。也回过头思考了很多很多。
刚好当初本人在阿里待了 5 年了,前 4 年里经验了两次降职,从 P5 到 P7,算是大略理解了一些阿里对于人才的要求。
所以,明天斗胆来谈一谈我认为的阿里的人才观,试着答复一下这几个问题。
本文所有内容都是我的个人观点,所有舆论仅代表我集体,不代表我供职的公司!!!
阿里的人才画像
其实最近两年本人始终在做面试官,也面试过很多优良的人,心里大略有一个规范,晓得什么样的人才是咱们想要的人。
然而这个规范我始终都没有认真的去思考过,刚好最近有工夫,我好好的思考了一下,依据我的了解,谈一谈我认为的阿里的人才画像是怎么的。
我感觉阿里须要的人才大略须要具备这几方面的能力:
1、软件开发能力
2、架构设计能力
3、项目管理能力
4、线上运维能力
5、业务理解能力
6、学习能力
7、影响力
8、指标导向
以上,是我认为是一个 P6 须要具备的能力的几个方面,然而每个方面的能力并不一定要求十分出众,然而有些又很重要。
到阿里巴巴的招聘网站上,轻易找几个 P6 的岗位,看一下岗位要求:


这些岗位形容和要求外面的内容,根本都能和以上几个能力对应的上:
负责平台外围性能、公共模块的布局及架构设计,包含零碎架构设计、接口标准制订、技术文档、单元测试的编写等;—–> 架构设计能力
业务模型了解和形象 能力突出 ,参加科学决策、数字兴业、数字治理等相干零碎的架构设计,承当外围模块的代码编写。—–> 架构设计能力
业务了解和建模 能力突出 , 能独立实现 零碎(或外围模块)的设计、开发和系统维护;—–> 业务理解能力
扎实的 Java/JEE 常识根底和功底(重点包含包含 JVM、类装载机制、多线程并发、IO、网络等),有 比拟优良的 入手能力;—–> 软件开发能力
扎实的 Java 编程根底,了解 io、反射、多线程、汇合等, 分明 JVM 的原理;—–> 软件开发能力
熟练掌握 支流 JAVA 框架,并且能理解到它的原理和机制;相熟 MySQL/Oracle 数据库中的一种或多种,有肯定的 SQL 性能 优化教训 ;—–> 软件开发能力
良好的 面向对象设计能力,对互联网高并发、高可用和高复用 有肯定的了解和实际 , 相熟 分布式技术(包含缓存、音讯零碎、热部署、JMX 等)优先;—–> 软件开发能力
具备 比拟强的 问题剖析和解决能力,有 比拟优良的 入手能力,热衷技术,精益求精;—–> 线上运维能力
有强烈的 责任心,抗压能力强;—–> 指标导向
保障数字农村业务零碎的稳定性和我的项目品质,参加平台外围零碎的架构设计。—–> 项目管理能力
业务了解和学习能力 强,长于 与商业 / 合作伙伴交换,有 很好的 适应和沟通能力,具备 责任心、急躁、仔细的品质;—–>业务理解能力
、 学习能力
以上的岗位形容中,对于一些能力的形容都是应用了一些形容词或者水平副词,如 突出的
、 扎实的
、 比拟优良的
、 相熟
、 熟练掌握
、 比拟强的
、 有强烈的
、 强
、长于
、 很好的
等。
那么,到底什么样算是优良?做到什么水平又酸是扎实、纯熟能?又要怎么做能力达到突出呢?
接下来我别离说说对于阿里的 P6 这个层级,以上这些能力大略须要达到什么样的规范。
软件开发能力
对于一个程序员来说,软件开发能力当然是一个最最根底的能力了,很多面试次要考查的也都是软件开发能力。
那么,到底须要把握哪些常识,能力达到阿里的 P6 的规范呢?
在答复这个问题之前,我看了很多大厂的招聘要求,并且回顾了一下以往面试时本人对于候选人的要求,大略总结出一些我认为比拟重要的知识点。
能够说,如果以下这些知识点,候选人不能齐全把握的话,面试挂掉的概率很大。
1、Java 根底。这个是最最根本的,像汇合类、IO、反射这些常见的内容肯定要做到一五一十。
2、并发编程。这个也是面试很看重的知识点,对于线程平安问题、相干关键字的用法及原理、并发包等常识也要把握。
3、JVM 相干。这部分简直是面试必考!JVM 内存构造、GC 相干的、调优、类加载等等这些的原理都要有理解的。
4、框架相干。目前支流的一些框架肯定要理解的,如 Spring 等开源框架,要晓得用法及重要个性的原理、
4、分布式相干。这是大厂比拟看重的一点了,对于分布式理论知识、缓存、音讯、RPC 等工具的用法和原理有理解的话,面试会轻松很多。
5、高并发、高性能方面只是。这部分也是挺重要的。
6、数据库相干常识。如 Mysql 的一些常识、锁、隔离级别、事务、索引等等。
7、数据结构与算法。这部分很多公司喜爱问一些算法题。
那么,具体如何掂量本人的知识面和深度是否足够呢,有一个简略的方法,那就是关上我之前总结的《Java 工程师成神之路》,从头到尾浏览一下知识点列表。如果你能满足以下要求,那么阐明你曾经根本达到了:
根底篇。把握 70% 底层篇。把握 60% 进阶篇。把握 50% 高级篇。把握 30%
那么,你的知识面的广度以及深度的话,我认为算是达到了一个绝对符合标准的水平。
架构设计能力
很多人会认为,我只是一个做开发的,又不是架构师,为什么要求我有架构能力呢?
这一点其实也能了解,因为一个 P6 在公司外部的定位应该是一个零碎或者一个域的 Owner,他须要负责这个零碎和这个域的零碎设计,那么就须要具备肯定的架构设计能力,这样能力设计出正当的零碎。
要想设计出好的架构,我感觉须要几个方面:
1、理解常见的架构设计准则
2、对于常见的架构问题的解决方案有理解。
3、有肯定的架构教训。
首先,架构准则,那么就须要把握一些根本的准则,如繁多职责准则、凋谢关闭准则、里氏代替准则、依赖倒置准则、接口拆散准则等。还有一些实践,如破窗实践、康威定律、墨菲定律等等。
除此之外,还须要对于常见的架构问题的解决方案有理解,很多人感觉这个如同来到发很远,到底什么是架构问题的?
其实并不远,简略点说,分布式一致性问题、性能问题、高并发问题。这些都能够了解为是架构问题的,所以,须要把握的就是一些分布式相干常识。如果你能把以下几个问题答复好,那么你算是对于这些问题有肯定的了解了:
1、如何分布式系统的解决数据一致性问题
2、说一下想要设计一个高并发的秒杀零碎,都须要做哪些事件?
项目管理能力
如同很多公司有专职的项目经理,然而在阿里的的大部分技术团队,都是不设立纯项目经理职位的,个别都是由项目组中的某位技术人员专任项目经理角色,负责我的项目推动。
所以,个别一个小型我的项目,都会须要一个 P6 来负责项目经理的。那么相干治理的能力就至关重要了。个别须要能够作为负责人领导部门内跨团队的我的项目。
首先最根本的要求就是须要把控我的项目进度以及我的项目品质,这个就须要有很好的协调能力,能够在我的项目中很好的理解到成员的状况,适当的想方法解决单干的问题。
略微高一点的要求,就是要求能够提前预知项目风险,并给出建设性倡议。如果可能做到这一点的项目经理,就算是比拟优良的了。
还有一点我感觉也是比拟重要的,那就是在项目管理中,如何协调业务方以及开发团队之间的矛盾问题,如何做到业务方称心,又让兄弟们不那么累。好的方法就是既要适当升高业务方的预期,又要晋升兄弟们的战斗力。
还有一点,我感觉也挺重要的,那就是项目经理须要爱护项目组好兄弟们,不要因为我的项目倒排就压迫兄弟们的工夫,因为加班一方面会影响兄弟们的身体健康,另外加班加点上线的我的项目,一旦出了故障,还是须要兄弟们扛的。。。
线上运维能力
我之前看过一份调查报告,在雇主考察中,雇主们最心愿程序员把握的技能列表中,问题排查能力是排在前三名中的。
而问题排查就是线上运维的能力之一。
不要认为线上运维就是专职的运维人员的工作,其实不是的。还是那句话,P6 的人是一个零碎或者一个域的 Owner,他是要对这个零碎的所有状况都负责的。
从开发到上线再到前期运维,他都要齐全把握,要晓得线上的失常水位是怎么的,什么指标是存在问题的。出了问题之后又如何排查,这些都是至关重要的技能。
对于这种局部,其实须要把握的知识点并不是特地的多,次要有以下这些:
1、常见的 Linux 命令的应用
2、常见的服务器指标(Load、CPU、内存、GC 状况等)的查看、问题排查
3、零碎调优、性能调优、sql 优化等技能
4、常见问题排查思路。如死锁问题、慢 SQL 问题、内存溢出问题、Load 飙高问题等等。
业务理解能力
对于业务了解这部分,我之前独自写过一篇文章,外面其实论述了我的观点,原文在这里:一条来自面试官的忠告:肯定要十分相熟你负责的业务
我在面试的时候,最开始都会问一下和业务无关的,如果候选人对于本人负责的业务都不是很了解的话,那么根本就很难过关了。
因为技术是服务于业务的,尤其是一个业务开发,如果本人做的业务都不理解,只是机械的实现本人负责的小性能的话,那么我不认为他是一个好的开发人员。
而且,咱们心愿一个达到高级开发的人,不只是一个只会做业务需要的人,达到这个层级的人,须要有本人的判断,先用嘴解决需要,不行的话再用代码解决。
我之前写过一篇文章,对于砍需要,大略论述了一些我的观点:在家办公的我,砍需要砍得更狠了
一个好的 P6 应该是能够独立负责一个业务,并且分辨出需要的优先级,可能提出本人的意见。能够影响业务的走向的。
所以,针对大部分程序员来说,首先要了解业务,而后要尝试着提出本人意见,并且能够分辨出需要的优先级,并且敢于对不合理需要说不。
当然,在提出问题的和意见的时候,如果可能给出好的计划,那就更好了。大多数状况下,技术人员应该是整个项目组最理解业务的,毕竟代码是他写的。
学习能力
学习能力不必我说,大家肯定都感觉他很重要,这是毋庸置疑的。
然而通过这么多面试下来,我发现,这个能力并不是所有人都具备的。
P6 这个层级在阿里并不是一个很高的层级,还有很大的回升空间,所以,真的须要很强的学习能力能力一直的晋升本人。
而且,我了解的学习能力,不仅仅是疾速学会一个常识,而是能够在理论工作中使用他。
所以,我面试的时候,个别会通过以下几个问题考查候选人的学习能力:
1、你晓得最新版的 JDK 是哪个版本么?新个性晓得吗?
2、Java 8 的 lambda 表达式用过吗?
3、最近在看什么技术书籍吗?有什么技术是你刚刚学会的吗?
所以,一个高级开发,是能够疾速上手新的技术或者业务,能够独挡一面的。所谓独当一面,并不只是在本人相熟的那一面能够独挡,而是换个面,你也能够疾速的独挡起来!
影响力
影响力,这一点看起来很虚,然而的确也很重要的,这也是为什么很多招聘要求中会写 ” 有开源我的项目教训优先 ” 的一个起因之一。
从里面招人的话还不是特地的显著,阿里外部的降职在影响力方面比拟看重,因为提名降职是要能够服众的,那么怎么让他人服气?那就是这个人有足够的影响力。
一般来说,对于一个 P6 的工程师来说,要求是要在本人的团队外部有肯定的影响力,能够被团队内器重,一提到某个畛域,大家第一个想到你。
晋升影响力的形式有很多,比方常常帮忙团队内同学解决技术问题、常常在团队外部做技术分享,常常分享技术文章等等。还有一些比方开源我的项目、专利、著述等也是很好的晋升影响力的形式。
然而其实,影响力这货色,并不是刻意造就就能做失去的,这个是一个耳濡目染的过程。真的做到能够侧面的影响到他人,影响力就进去了。
指标导向
很多招聘都会说要求有钻研精力、责任心、抗压能力强等,很多人了解是要求能加班,然而其实这是对于候选人是不是指标导向的一个筛选。
对于 P6 来说,指标导向就是能够做到指哪打哪,交给你的工作,你能够全力的把他做好,无论遇到什么样的艰难,都能够想方法去克服。
指标导向,还能够换成一个词,那就是要性,一个要性强的人,必然是指标导向的人。
我之前写够一篇文章,表白了一下我本人对于要性的了解:谈谈阿里所谓的 ” 要性 ”
“ 要性 ” 就是代表着我不仅想做,我还肯定要做成。
总结
以上,说了很多很多,我的一些了解。置信很多人会有不同的意见,这也是失常的,每个人的人才观都不太一样。
至多我面试的时候,招人的一个规范,就是和他聊下来之后,我感觉我能够和他很好的单干,能够把我认为重要的事件交给他的,那么他就能够通过我的面试了。
那么,如何在面试中给到我这种信任感,那就是让我感觉他技术能力不错,有肯定的架构思维、有线上问题排查的能力、理解本人的业务、能够负责一个我的项目的治理、也能疾速的学习一些新的常识。另外,如果能够让我感触到他是一个指标导向的人,并且有肯定的影响力的话,那么我会更加违心承受他。
以上,这 8 点,不仅仅是对 P6 这个层级的要求,其实不同的层级都实用,只是针对具体某一项,不同层级的要求不同而已。
当然,其实我并不感觉这只是阿里的要求,因为我只是在阿里当过面试官,所以我只能表白下我认为的阿里须要的人才是什么样的。
如果当前我去到其余公司了,或者本人守业了,那么我置信我招人的规范也肯定还是这个。因为我始终认为,高级开发工程师,肯定不仅仅是写代码的。
最初,心愿我明天的文章能够让你找到一点方向。愿所有读者:长风破浪会有时,直挂云帆济桑田。