如何在较为恶劣的大环境下,从海量候选人中脱颖而出,获得心怡的工作机会,升职加薪,开启职场新篇章呢?
大家需要先搞清楚,面试官是从哪些方面考察候选人的呢?
整体上主要分为:专业能力、解决问题能力、沟通协作能力、成长潜力、文化匹配这五大方面。
于是就可以,在面试之前,积极做系统性的准备;面试中,全力展现这些能力;面试后,复盘总结、查缺补漏、继续提高自身能力。
下面结合具体案例分析下这五大方面。
一:专业能力
专业能力主要分为深度和广度这两块。
1、技术深度
无论工作经验多少,学海无涯,知识储备都是会存在盲区的,但是对于简历里提到的技术点,就需要具备一定的深度了。比如提到了Redis,不仅要能说出来String、Hash、List、Set、ZSet这几种数据类型。当你又补充说了各个类型的应用场景、每种类型内部的数据结构实现、以及持久化的策略、缓存淘汰的策略、还有与其他存储组件的选型对比时,面试官就会眼前一亮。
当面试官又问到Redis做分布式锁的用法,你不仅说出了SetNX还有超时自动释放锁的机制,还说出了单机模式下系统可用性的问题,以及集群模式下,Master宕机后和Slave数据不一致造成的安全性问题,又提到了Redlock算法如何来提高可用性和安全性的时候,你的专业能力深度,就可以给面试官留下一个深刻的印象了。
再举个栗子,有的同学简历里写了Java基础扎实,在面试官眼里,那可能就代表着你至少看过并深入理解了比如String、HashMap、ArrayList、ConcurrentHashMap等常用类的源码了。
简单总结下,专业能力深度这一块,就是不仅要会用,还要懂原理,看源码,深入到各种细节中去。功夫在平时,要养成习惯,多多积累。
面试过程中,回答问题,要注意体现自己专业能力的深度,需要主动展现你对简历提到技术点的深入理解,不要让面试官挤牙膏一样的问。
2、技术广度
技术广度主要包括技术视野和思维模式这两方面。
关于技术视野,举个栗子,比如你项目使用的是微服务分布式架构,面试官大概率会问,你们数据一致性是怎么保障的?
这时就要先体现你的技术深度了,详细说出你们系统在数据一致性方面做的具体工作,比如最大努力通知、兜底补偿之类的方案。
紧接着,面试官又问,还了解其他的数据一致性解决方案吗?如果你能说出强一致性的2PC、3PC、Paxos、Raft、Zab;最终一致性的Saga、TCC、Seata(AT和MT模式)以及MQ事务消息等等,这些解决方案的演进过程,各自优缺点和适用场景的话,技术视野这块,面试官应该会给个高分了。
再举个栗子,面试官问到了MySQL 的Update操作执行过程,你提到了WAL技术,先写Redolog,防止机器Crash造成数据丢失,也能提高性能,通过配置还可以减少磁盘IO的次数;紧接着又补充到,Kafka、Rocketmq等消息中间件以及Elasticsearch、HBase、Leveldb、Rocksdb、TiDB、Tair等高性能存储组件都用到了这种技术,这同样也可以体现你的技术视野。
面试的岗位级别越高,对广度的要求也就越高,上文我举了一个分布式事务解决方案的例子,作为一个资深技术人员,主流的解决方案是应该了解的,可以体现我们的技术视野,因为较高级的岗位需要经常做一些方案设计和选型的,甚至需要做一些架构设计,如果没有足够广的视野,需要长期支撑业务迭代的技术架构,企业不敢让你搞;扛着整个部门季度KPI的业务大需求,也不敢让你来做方案设计。
大家可以想想自己项目中有哪些技术点,可以体现自己的技术视野呢?
下面再来介绍下,同样可以体现技术广度的,思维模式这块。美团的同学可能听过,BeafQPS方法论,具体如下。
BenchMark(对标),做方案搞架构,要了解部门、公司内、业内的通用和先进解决方案,进行对标。
Efficiency(效率),方案设计要高内聚、低耦合,易扩展,易维护;重复的工作自动化等等,要经常思考如何提高效率。
Architecture(架构),要符合简单、合适、可演进的原则,好的架构,可以提高迭代效率,降低研发成本,提高系统稳定性。
Function(功能),这个是 beafqps 7要素中最基础的一个,勿忘初心,要实现功能。
Quality(质量),一方面是指可靠性,系统要可测试、质量保障要做好;另一方面是指可用性,要高可用,稳定性要好,需要采取熔断降级、限流、 耗时重试、兜底补偿、立体化监控等措施。
Performance(性能),高并发、低延迟,需要采用无状态、串行改并行、同步改异步、读写分离、分库分表、慢查询优化、JVM优化等措施。
Safety(安全),权限要做好控制、鉴权和越权治理,另外还要防范SQL注入、XSS攻击、CSRF等等。
如果在与面试官的交流中,上面7个要素,你都提到了,绝对是可以说明你的思考已经比较全面了,具备了较好的技术广度了,如果面试官对你的技术深度,也是有较高评价的话,专业能力这一块,就过关了。
二、解决问题能力
我认为整体分为:设计能力、编码能力、问题排查能力,这三方面。
如果说专业能力主要是考察你的知识储备的话,那么解决问题能力,则是考察你灵活运用专业知识的能力。
面试官问道,如何设计一个xx功能/服务/系统,这时候,前面提到的BeafQPS方法论就派上用场了。
不仅要实现功能和业务,还要准确的识别出功能/服务/系统的难点,可能是需要高性能,或者需要高可用,或者需要高扩展,也可能是三者都要兼顾等等。
过程中就体现了你的设计能力,既要有敏锐的洞察力,也要有结构化的全方位思考,以及可实操的落地方案。
下面我们来说说编码能力,有不少工作经验较长的朋友,出去面试前,都不刷题,认为企业不会让自己写代码,这个侥幸心理不能有呀。
现在越来越多的企业看重候选人的编码能力,有的团队,架构师甚至tl,工作中也时常需要写代码。
这里推荐大家面试前要至少把经典题目刷一下,比如二分查找、快速排序、反转链表、层序遍历二叉树、给定两数之和求下标、最近公共子节点、爬楼梯的算法等。
另外比较务实(缺人)的公司会考些工程类的题目,比如懒加载的单例模式、实现生产和消费的demo、多线程交替打印有序数组、负载均衡算法等。
还有的公司会考Sql,需要把join、group by having count、sum、avg等用法复习一下,现在leetcode上也有sql的题了,可以刷两道找找感觉。
也有的公司会考linux,需要把awk、sed、sort、uniq等关键命令熟悉下,典型题目是统计文本中出现次数最多的ip。
再来说下问题排查能力,回答相关问题时,要先定位再修复。
先从监控和异常日志入手。
如果是业务问题,那么可能是代码bug或者网络抖动造成的业务流程中断,也可能是某种原因造成的数据不一致,现象就是业务不正确或者业务不完整。
如果是系统问题,比如负载过高、内存不足、磁盘io过高、接口耗时变长、吞吐量降低等问题,需要借助top、jstack、free、jmap、gcutil等命令,以及apm监控和链路追踪系统,完成定位。
定位之后,要给出短期和中长期的解决方案,比如负载过高,短期可以通过扩容机器来缓解,中长期可以去优化代码,调整线程池参数,减少线程上下文切换次数,优化慢查询,防止请求堆积,消耗cpu和内存等。
再比如,发现是数据不一致导致的问题,短期的话,可以完善监控,并通过修复接口手动修数据;中长期的话,如果是主从延迟问题,可以核心链路强制读主库;如果是分布式事务问题,可以采取最大努力通知、事务消息、tcc、seata等解决方案。
解决问题能力,只靠积累专业知识是不够的,需要多实践,多总结。
如果说专业能力和解决问题能力是硬实力的话,那么下面我们要讨论的就是软实力。
三、沟通与协作能力
无论作为leader还是团队成员,我们都需要与很多同事一起工作,如果沟通与协作能力有问题的话,可能会降低团队的整体工作效率和质量、影响团队的士气和氛围。因此,面试官也会观察候选人这方面的能力。
如何在平时提高沟通与协作能力,并在面试过程中,更好的体现出来呢?
很多内向的朋友可能会觉得这是一种天赋,与性格有关,自己不是那块料没法提高呀,我想说,因为大多数人的努力程度是非常低的,所以还远远没有到拼天赋的地步。
建议这些朋友,抓住团建、聚会、吃饭、散步、打电话的时间,多与身边人交流聊天,久而久之,沟通能力一定会提高。这里也有个短期的特训技巧,去app商城搜一下“语音聊天”,试着下载两三个,每天与上面的陌生人聊30分钟,坚持一周,沟通能力就会有明显效果~
下面再说下协作能力,首先要有同理心,人无完人,我们不能用对家人和朋友的期望,来要求每一个同事、每一个面试官。
比如面试官迟到了、或者说话不好听了、作为候选人,可以适当理解包容、恶劣情况下也要审时度势,权衡利弊,当然,必要时我们也要坚守自己的底线和原则。
另外要补充的一点就是,很多较为高级的职位,工作职责都会包含日常指导初中级工程师、跨团队沟通、统筹协调、项目管理、团队管理等,因此越是工作经验丰富的朋友,越要注意提高自己的沟通协作能力。
面试过程中,不卑不亢、语速正常、注意抑扬顿挫,不要想机关枪一样,一个声调突突突,那样面试官会听的很累,抓不住重点。保持微笑,与面试官真诚的交流互动。沟通协作能力这块就会有个不错的分数。
四、成长潜力
企业招一个人的成本是很高的,尤其是高端岗位,企业一定不希望候选人入职待个一年半载就走的,这样不利于团队的稳定性和梯队建设,也不利于企业的发展,因为新人入职的前半年,基本都在熟悉业务、系统、流程、团队等,真正做出重大贡献的时候,往往是需要一些时间去积累和沉淀的。
因此,企业对候选人的成长性是有期望的,面试官会看,候选人过往的经历有没有在较短时间内,完成新业务或系统的熟悉,快速做出业绩的事例;也会看候选人,对自己做过的事情,有没有较为深刻的理解,是否善于发现问题,并提出解决方案以及执行落地。
典型的场景是,我们在描述完自己很拿手的项目之后,面试官问,这个项目有没有可以优化的地方?如果候选人能够脱口而出,把当前的问题,短期、中期、长期的规划,清楚的说出,就可以体现出很好的主动性,这也意味着成长潜力。
最近面试了一个同学,简历里写的项目,用到了限流的高可用手段,上面还写了具体用的是令牌桶算法,于是我就问,还了解其他的限流算法吗?他表示不清楚,由此可以初步判断,这位同学的主动性和成长潜力可能是一般的,这个例子,给我们的启示就是,工作中使用的技术,不要仅仅停留在使用层面上,也要去了解原理,深入细节,了解选型的原因,这体现了主动性,也体现了成长潜力。
五、文化匹配
通常这方面都是由主管、总监、vp、hr来考察的,有的面试官很坦诚,“我们这里加班很多,早10晚10,996,你能接受吗?”,也有的会通过询问离职原因了解候选人的三观,面对这种问题,offer收割机可以如实作答,因为面试也是双向选择;对于手上没有offer的朋友,可以适度修饰作答。
每个企业都有自己的使命、愿景和价值观,候选人面试前可以提前做好功课,如果顺利面到后面,适当的表达自己对企业文化的认可,会有很大加分的。
最后要说的是,面试其实没有攻略,功夫在于日复一日一点一滴的积累和思考,希望这篇文章,能让大家对技术人的能力模型、思考框架,有个较为系统的认知。
人生路漫漫,帮助我们走向人生巅峰的,一定是我们真实的能力~~
期待与大家一起成长~