写点什么

做了两年 P7 面试官,谈谈我认为的阿里人才画像,你配吗

用户头像
极客good
关注
发布于: 刚刚

业务理解能力 、学习能力:业务理解和学习能力强,善于与商业/合作伙伴交流,有很好的适应和沟通能力,具备责任心、耐心、细心的品质。


以上的岗位描述中,对于一些能力的描述都是使用了一些形容词或者程度副词,如突出的、扎实的、比较优秀的、熟悉、熟练掌握、比较强的、有强烈的、强、善于、很好的等。


那么,到底什么样算是优秀?做到什么程度又算是扎实、熟练呢?又要怎么做才能达到突出呢?


接下来我分别说说对于阿里的 P6 这个层级,以上这些能力大概需要达到什么样的标准。



1.软件开发能力


========


对于一个程序员来说,软件开发能力当然是一个最最基础的能力了,很多面试主要考察的也都是软件开发能力。那么,到底需要掌握哪些知识,才能达到阿里的 P6 的标准呢?


在回答这个问题之前,我看了很多大厂的招聘要求,并且回顾了一下以往面试时自己对于候选人的要求,大概总结出一些我认为比较重要的知识点。


可以说,如果以下这些知识点,候选人不能完全掌握的话,面试挂掉的概率很大:


**Java 基础:**这个是最最基本的,像集合类、IO、反射这些常见的内容一定要做到如数家珍。


**并发编程:**这个也是面试很看重的知识点,对于线程安全问题、相关关键字的用法及原理、并发包等知识也要掌握。


**JVM 相关:**这部分几乎是面试必考!JVM 内存结构、GC 相关的、调优、类加载等等这些的原理都要有了解的。


**框架相关:**目前主流的一些框架一定要了解的,如 Spring 等开源框架, 要知道用法及重要特性的原理。


**分布式相关:**这是大厂比较看重的一点了,对于分布式理论知识、缓存、消息、RPC 等工具的用法和原理有了解的话,面试会轻松很多。


**高并发、高性能方面:**这部分也是挺重要的。


**数据库相关知识:**如 MySQL 的一些知识、锁、隔离级别、事务、索引等等。


**数据结构与算法:**这部分很多公司喜欢问一些算法题。


2.架构设计能力


========


很多人会认为,我只是一个做开发的,又不是架构师,为什么要求我有架构能力呢?


之所以有这个要求,其实也能理解,因为一个 P6 在公司内部的定位应该是一个系统或者一个域的 Owner,他需要负责这个系统和这个域的系统设计,那么就需要具备一定的架构设计能力,这样才能设计出合理的系统。


要想设计出好的架构,我觉得需要几个方面:


  • 了解常见的架构设计原则。

  • 对于常见的架构问题的解决方案有了解。

  • 有一定的架构经验。


首先,架构原则,那么就需要掌握一些基本的原则,如单一职责原则、开放封闭原则、里氏替代原则、依赖倒置原则、接口分离原则等。还有一些理论,如破窗理论、康威定律、墨菲定律等等。


除此之外,还需要对于常见的架构问题的解决方案有了解,很多人觉得这个好像离开发很远,到底什么是架构问题的?


其实并不远,简单点说,分布式一致性问题、性能问题、高并发问题。这些都可以理解为是架构问题的,所以,需要掌握的就是一些分布式相关知识。


如果你能把以下几个问题回答好,那么你算是对于这些问题有一定的理解了:


  • 如何分布式系统的解决数据一致性问题

  • 说一下想要设计一个高并发的秒杀系统,都需要做哪些事情?


3.项目管理能力


========


好像很多公司有专职的项目经理,但是在阿里的的大部分技术团队,都是不设立纯项目经理职位的,一般都是由项目组中的某位技术人员兼任项目经理角色,负责项目推进。


所以,一般一个小型项目,都会需要一个 P6 来担任 PM 的。那么相关管理的能力就至关重要了。一般需要可以作为负责人领导部门内跨团队的项目。


首先最基本的要求就是需要把控项目进度以及项目质量,这个就需要有很好的协调能力,可以在项目中很好的了解到成员的情况,适当的想办法解决合作的问题。


稍微高一点的要求,就是要求可以提前预知项目风险,并给出建设性建议。如果能够做到这一点的项目经理,就算是比较优秀的了。


还有一点我觉得也是比较重要的,那就是在项目管理中,如何协调业务方以及开发团队之间的矛盾问题,如何做到业务方满意,又让兄弟们不那么累。好的办法就是既要适当降低业务方的预期,又要提升兄弟们的战斗力。


还有一点,我觉得也挺重要的,那就是项目经理需要保护项目组好兄弟们,不要因为项目倒排就压榨兄弟们的时间,因为加班一方面会影响兄弟们的身体健康,另外加班加点上线的项目,一旦出了故障,还是需要兄弟们扛的。



4.线上运维能力


========


我之前看过一份调查报告,在雇主调查中,雇主们最希望程序员掌握的技能列表中,问题排查能力是排在前三名中的。而问题排查就是线上运维的能力之一。


不要以为线上运维就是专职的运维人员的工作,其实不是的。还是那句话,P6 的人是一个系统或者一个域的 Owner,他是要对这个系统的所有情况都负责的。


从开发到上线再


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


到后期运维,他都要完全掌握,要知道线上的正常水位是怎样的,什么指标是存在问题的。出了问题之后又如何排查,这些都是至关重要的技能。


关于这种部分,其实需要掌握的知识点并不是特别的多,主要有以下这些:


  • 常见的 Linux 命令的使用。

  • 常见的服务器指标(Load、CPU、内存、GC 情况等)的查看、问题排查。

  • 系统调优、性能调优、SQL 优化等技能。

  • 常见问题排查思路。如死锁问题、慢 SQL 问题、内存溢出问题、Load 飙高问题等等。


5.业务理解能力


========


我在面试的时候,最开始都会问一下和业务有关的,如果候选人对于自己负责的业务都不是很理解的话,那么基本就很难过关了。


因为技术是服务于业务的,尤其是一个业务开发,如果自己做的业务都不了解,只是机械的完成自己负责的小功能的话,那么我不认为他是一个好的开发人员。


而且,我们希望一个达到高级开发的人,不只是一个只会做业务需求的人,达到这个层级的人,需要有自己的判断,先用嘴解决需求,不行的话再用代码解决。


一个好的 P6 应该是可以独立负责一个业务,并且分辨出需求的优先级,能够提出自己的意见。可以影响业务的走向的。


所以,针对大部分程序员来说,首先要理解业务,然后要尝试着提出自己意见,并且可以分辨出需求的优先级,并且敢于对不合理需求说不。


当然,在提出问题的和意见的时候,如果能够给出好的方案,那就更好了。大多数情况下,技术人员应该是整个项目组最了解业务的,毕竟代码是他写的。


6.学习能力


======


学习能力不用我说,大家一定都觉得他很重要,这是毋庸置疑的。但是经过这么多面试下来,我发现,这个能力并不是所有人都具备的。


P6 这个层级在阿里并不是一个很高的层级,还有很大的上升空间,所以,真的需要很强的学习能力才能不断的提升自己。


而且,我理解的学习能力,不仅仅是快速学会一个知识,而是可以在实际工作中运用他。


所以,我面试的时候,一般会通过以下几个问题考察候选人的学习能力:


  • 你知道最新版的 JDK 是哪个版本么?新特性知道吗?

  • Java 8 的 Lambda 表达式用过吗?

  • 最近在看什么技术书籍吗?有什么技术是你刚刚学会的吗?


所以,一个高级开发,是可以快速上手新的技术或者业务,可以独挡一面的。所谓独当一面,并不只是在自己熟悉的那一面可以独挡,而是换个面,你也可以快速的独挡起来!


7.影响力


=====


影响力,这一点看起来很虚,但是确实也很重要的,这也是为什么很多招聘要求中会写"有开源项目经验优先"的一个原因之一。


从外面招人的话还不是特别的明显,阿里内部的晋升在影响力方面比较看重,因为提名晋升是要可以服众的,那么怎么让别人信服?那就是这个人有足够的影响力。


一般来说,对于一个 P6 的工程师来说,要求是要在自己的团队内部有一定的影响力,可以被团队内重视,一提到某个领域,大家第一个想到你。


提升影响力的方式有很多,比如经常帮助团队内同学解决技术问题、经常在团队内部做技术分享,经常分享技术文章等等。还有一些比如开源项目、专利、著作等也是很好的提升影响力的方式。


但是其实,影响力这东西,并不是刻意培养就能做得到的,这个是一个潜移默化的过程。真的做到可以正面的影响到别人,影响力就出来了。


8.目标导向


======


很多招聘都会说要求有钻研精神、责任心、抗压能力强等,很多人理解是要求能加班,但是其实这是对于候选人是不是目标导向的一个筛选。


对于 P6 来说,目标导向就是可以做到指哪打哪,交给你的工作,你可以全力的把他做好,无论遇到什么样的困难,都可以想办法去克服。


目标导向,还可以换成一个词,那就是要性,一个要性强的人,必然是目标导向的人。"要性"就是代表着我不仅想做,我还一定要做成。



总结


==


以上,分别从 8 个方面说了一下优秀的程序员,或者说一名高级开发工程师应该具备哪些能力。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
做了两年P7面试官,谈谈我认为的阿里人才画像,你配吗