身为阿里面试官,我是如何招人的?

大家好,我是程序员小灰。小灰有一位读者朋友在阿里工作多年,担任面试官先后面试了1000+的程序员。

今天,这位小伙伴为我们写了一篇面试总结,希望可以帮到大家。

1. 面试官背景

本人在阿里3年,面试了1000人以上,经过我面试进来的同学有8人,招聘进来的同学有P5、P6、P7,面试通过率不到1%,所以内部有个说法,能进阿里的都是百里挑一的高手。

做为面试官,面试的同学形形色色,有一些同学非常优秀,也让我学到很多,今天主要讲讲作为面试官的经验,避免同学们因为非技术实力问题而拿不到offer的窘境。

2. 面试节奏

由于本人还未面试过P8因此被人主要针对P5、P6、P7讲一讲面试节奏,在阿里面试周期会比较长,一般会持续一个月之久,之所以持续这么长时间,因为每轮面试的节奏相对较长。

对于P5同学:一般4轮面试,第一轮、第二轮一般由部门的P6、P7做技术面试;第三轮会有部门主管面试综合能力;第四轮HR面试。

对于P6同学:一般也是4轮面试,和P5最大区别会增加其他部门主管的交叉面试。第一轮一般是部门P7技术面试,第二轮自己部门主管面试,第三轮其他部门主管面试,第四轮HR面试。

对于P7:一般也是4轮面试,和P6最大的不同会增加+2的面试官的面试,也就是说第二轮或者第三轮面试,一般需要有自己部门或者其他部门的P9面试。

面试周期长:一般情况下,面试周期长达一个月,基本每轮面试1周,4轮面试基本在1个月以上,因为阿里内部节奏快,事情非常多,基本上大家只有在晚上或者周末才有时间面试,导致面试周期也拖的久,面试过程中对于心理考虑非常大,要做好心理建设。

PS:阿里有一个规定面试官必须高于被面试同学应聘的岗位,之前出现过一个案例,一个P6的同学将一位面试P9岗位二面的大佬给拒绝掉了。

3. 面试各环节的坑

简历筛选阶段:阿里内部有3年2跳、5年3跳【含义3年内跳槽2次、5年内跳槽了3次,跳槽的次数包括进阿里的这次】的简历直接pass掉的要求,因为阿里工作压力和强度很大,对于员工的稳定性要求比较高。因此如果同学们有志于进入阿里,建议在一家公司一定要呆够3年以上。

学历要求:一般部门都是211及其以上,对于一些员工非常稳定的事业部,要求会更高,985或者C9才是入门劵,读书敲门砖在这个时候是非常有用的。

运气因素:但凡事都有例外,当一个新成立的部门,由于公司在和时间赛跑,需要尽快将业务上线,这时候会对相关条件适当放宽,例如我之前所在的部门,刚刚开始的时候大专生都能进来,对于稳定性也没有过高的要求,只要面试时技术、管理、沟通、抗压能力都行,基本都能进来。

但是随着人员补充到60%左右,慢慢就越收越紧了,基本和阿里集团的要求对齐。之所以将运气因素单独拿出来,是因为在面试过程中按照我的经验,70%的人会在第一轮面试被挂掉,一般都是硬实力的欠缺,例如八股文不过关、没有复杂项目的经验,其他的多多少少和运气有关系。

能力要求:只招聘高手,阿里对于新入职同学的要求会有一定要求,之前要求平凡人做非凡事 ,有段时间在公司内部提倡让不平凡人做非凡事情 ,这时对于新入职同学要求特别高。虽然具体要求一直在变化,但是有一点,新入职的同学的水平要大于团队的平均水平,确保团队整体实力随着时间的要求一致在提高。菜就是原罪,这句话真没错

熟人推荐:这一点非常重要,上面的要求都有例外,我团队招聘进来一位哥们,5年换了4家公司,学历也就一般本科,但是他和团队一位绩效非常好的同学是之前公司的老同事,这位同学强烈推荐,认为技术能力比自己还要强,因此得到了一次面试的机会。

要引导面试官:在面试过程中,切记问一答一,特别是对于面试P6、P7同学,必挂,因为阿里内部对于沟通能力、主动性要求非常高,进来后经常面临着需要自己主动抢活干,主动和外部协调的工作要做,如果只能被动接受任务,很容易被干掉。

PS:天无绝人之路,只要大家有想进大厂的想法,一定不要放弃,如果自身的硬件条件有限,那么重点关注新成立的部门,任何大厂新成立部门招人都会网开一面的,只要进来了,在内部转岗就比较容易了,除非绩效3.25,否则只要有空缺的HC,基本问题不大。

4. 印象最深的一次面试

谈一谈上面我提到的那位哥们A ,5年换了4家公司,学历也就一般本科,由于是团队小伙伴推荐的,还是想给同学一个面子,但是公司的硬性指标也在这里,因此采用了一些手段。正常面试一般面1个小时即可,这次我面了整整2个小时,全方面无视角的考察,终于得出结论,是个好苗子,公司不招聘他是公司的损失

后面果然在各个阶段非常顺利的过了,在HR面试前,HR就挑战了我,提出这位同学硬件不够,因为面试过程印象非常深刻,因此我详细的和HR聊了我的感受,HR被说服了。面试后HR感觉也非常好,立马就发了 offer。

如下是一些面试过程中的题,面试范围非常广,基本上对于一个程序员方方面面都涉及到了。

:开门见山,团队同学B推荐了你,但是你简历显示5年换了4家公司,能否方便介绍下为什么跳槽这么频繁。

A:是有原因的,第一家公司破产倒闭,第三家公司工作一段时间后被第四家公司收购,合同改签了,而我现在这家公司工作的时间已经超过三年,稳定性没有问题的。

解读:应该是B同学提前提到过3年2跳、5年3跳的硬性要求

基础知识方面:

:我们先做基础技术的面试,请介绍下JVM的工作原理,以及你了解哪些参数。

A:我有一张图可以介绍JVM的内部空间细分,在白板上画出这个图

常见的参数:

-Xmx12000m -Xms12000m -Xmn5600m

-XX:SurvivorRatio=8

-XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m

-Xss512k -XX:+UseParNewGC

-XX:ParallelGCThreads=4

-XX:+UseConcMarkSweepGC

-XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=0

-XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=60

-XX:+HeapDumpOnOutOfMemoryError

-Doracle.jdbc.V8Compatible=true -XX:+PrintGCDetails

-XX:+PrintGCDateStamps -Xloggc:/tmp/autodump/gc.log

-XX:HeapDumpPath=/tmp/autodump/

缓存方面:

:如何解决Redis缓存雪崩、击穿与穿透?

A:缓存雪崩是指大量的请求无法命中Redis中的缓存数据,也就是在Redis找不到数据了,那业务系统只能到数据库中查询,进而导致所有的请求都发送到了数据库。

数据库并不像Redis能处理大量请求,由缓存雪崩导致的请求激增必须会导致数据库所在宕机,这样势必会影响业务系统,所以如果发生缓存雪崩,对于业务系统肯定是致命的。

针对导致缓存雪崩的原因,有不同的解决方法:

针对大量缓存随机过期时间,解决方法就是在原始过期时间的基础上,再加一个随机过期时间,比如1到5分钟之间的随机过期时间,这样可以避免大量的缓存数据在同一时间过期。

而针对Redis解决宕机的导致的缓存雪崩,可以提前搭建好Redis的主从服务器进行数据同步,并配置哨兵机制,这样在Redis服务器因为宕机而无法提供服务时,可以由哨兵将Redis从服务器设置为主服务器,继续提供服务。

:说说布隆过滤器的原理及应用场景?

A:如果想判断一个元素是不是在一个集合里,我们一般想到的是将所有元素保存起来,然后通过比较确定。我们熟悉的链表,树等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。

不过世界上还有一种叫作散列表(又叫哈希表)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列中的一个点。这样一来,我们只要看看这个点是不是 1 就知道可以集合中有没有它了。这其实就是布隆过滤器的基本思想。

如果布隆过滤器说有一个说元素不在集合中,那肯定就不在。如果布隆过滤器说在,有一定可能性它在说谎。

比较热门的场景就是:邮件过滤,使用布隆过滤器来做邮件黑名单过滤,还有重复推荐内容过滤,网址过滤, web请求访问拦截器,等等

解读:能提到使用场景,实战经验比较丰富。

数据库方面:

:谈一谈你对事务的隔离级别理解?

A:Read Uncommitted(读未提交)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读提交)

这是大多数数据库系统的默认隔离级别(但不是 MySQL 默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓 的 不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的 commit,所以同一 select 可能返回不同结果。

Repeatable Read(可重复读)

这是 MySQL 的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。

Serializable(可串行化)

通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

线上经验:

:是否有遇到过线上问题,是怎么排查的?

A:又遇到了CPU和内存的问题,生产环境CPU过高如何解决:

1.top + H 指令找出占用 CPU 最高的进程的 pid

2.top -H -p

在该进程中找到,哪些线程占用的 CPU 最高的线程,记录下 tid

3.jstack -l

threads.txt,导出进程的线程栈信息到文本,导出出现异常的话,加上 -F 参数

4.将 tid 转换为十六进制,在 threads.txt 中搜索,查到对应的线程代码执行栈,在代码中查找占 CPU 比较高的原因。其中 tid 转十六进制,可以借助 Linux 的 printf "%x" tid 指令,jvm 多条线程疯狂 full gc 导致的CPU 100% 的问题和 JDK1.6 HashMap 并发 put 导致线程 CPU 100% 的问题。

内存使用如下命令,将当前的dump文件 导出,并通过mat进行分析:

jmap -dump:live,format=b,file=heap.bin 26525

抗压能力:

:谈一谈你从业以来遇到的压力最大的一件事情,以及你是怎么解决的

A:曾经主管交给我一个项目,非常紧急,需要在一个月内完成财务系统的大功能上线。我当时分析后发现涉及到财务5个大的模块,其中凭证、核销2个模块我之前完成没有接触过,工作量非常大,个人评估下来人力要50人日,因此将所有的功能点都列出来,标注上了开发工作量,希望能够有哪位同学协助一起,和领导沟通,最后领导同意对凭证、核销熟悉的同学支援我,并且和产品沟通后砍掉了部分需求。连续加班3周解决掉了。

解读:这位同学能够积极主动地向上寻找领导解决资源问题,而且对于软件管理有一定的了解,综合能力非常强。

好了,关于阿里的技术面试,我们就说这么多。最后,希望大家都能找到自己理想中的工作,一起加油哦~~

相关推荐
颜淡慕潇34 分钟前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
尘浮生1 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
尚学教辅学习资料2 小时前
基于SpringBoot的医药管理系统+LW示例参考
java·spring boot·后端·java毕业设计·医药管理
monkey_meng3 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马3 小时前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng3 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
阑梦清川3 小时前
在鱼皮的模拟面试里面学习有感
学习·面试·职场和发展
paopaokaka_luck7 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风9 小时前
详解K8S--声明式API
后端
Peter_chq9 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端