一、走向面试的深处
在上一篇中,我们探讨了互联网公司面试官如何通过一系列细致入微的问题,进行候选人的技术考察。本篇,我们将继续揭示互联网公司如何全方位、无死角地考察候选人,具体涵盖项目经验、系统设计、履历学历素质、岗位匹配度以及多轮面试官的协作等方面。
二、深度挖掘项目经验
项目经验是面试官最为关注的部分。面试官往往会要求候选人描绘出项目的整体架构,并深入了解候选人在项目中使用的技术及其核心业务思路。从项目入手,面试官会精细地考察候选人对各项技术的掌握程度,通过一系列问题对候选人的技术深度进行探究,甚至对一些高阶技术的考察会直达底层。
举个例子,如果候选人在项目中使用了dubbo作为服务框架,面试官可能会询问dubbo底层的通信框架是什么,进而探讨NIO的原理,以及网络通信中的长连接和短连接的区别。面试官还可能进一步询问候选人是否阅读过dubbo的源码,对其中的并发技术运用有何印象。
有些面试官喜欢从项目展开,探讨各项技术的运用,而有些则直接从简历上的技术入手,深入探究技术的运用细节。但无论如何,面试官总会关注项目的业务细节。优秀的面试官会要求候选人将某个业务细节讲清楚,并了解候选人如何结合业务设计技术方案,如何在业务中运用各种技术。
比如,候选人提到了在项目中使用Redis,面试官可能会进一步询问在哪个业务场景使用了Redis,使用Redis的具体流程是什么。面试官还会关注候选人在Redis中选择了哪种数据结构存放数据,数据的过期时间设置以及缓存过期后的数据回查策略等细节问题。候选人还会被问及如何设计Redis的key值以及如何为设计做决策等。这些问题的目的都是深入了解候选人对技术的实践程度以及对复杂线上业务的处理能力。通过深入挖掘项目经验,面试官能够评估候选人是否经历过复杂业务架构下的分布式系统的设计和开发挑战,以及是否能够在高并发、大流量的场景下解决实际问题。同时面试官还能判断候选人负责过的项目的复杂度和难度级别以及其技术定位。针对不同的岗位级别有不同的项目经验要求:中级岗位可能要求候选人独立负责过核心模块的开发并对各种技术都有一定的实践经验;高级或资深岗位则可能要求候选人带领小团队独立负责过有一定复杂度和难度的完整系统的架构设计和开发;而架构师的岗位则要求候选人在大型且复杂的项目群中起到主导作用具备深度的系统架构思考和整体把控能力且该项目需面临足够的技术挑战如大用户量、高并发、海量数据等场景的挑战。因此项目经验考察在整个面试过程中占据了举足轻重的地位。然而许多候选人可能在日常学习中积累了大量的技术知识但却由于缺乏实际项目的历练而在项目经验考察环节表现不佳被面试官判定为技术不错但经验不足。因此拥有丰富的项目经验对于面试成功至关重要。三、系统设计的考察
在系统设计的考察方面,许多互联网大厂,特别是针对高级工程师及以上的候选人,常常会选择通过实际业务场景来检验应聘者的架构设计思维。这种考察方式主要是为了了解应聘者面对未知业务场景时的应对策略和系统设计能力。
例如,面试官可能会提出:“如何设计一个能应对电商秒杀的系统架构?”“在双11大促期间,如何设计系统的动态扩容与缩容机制?”这些问题旨在了解应聘者如何处理高并发、大数据量等极端情况。而真正的挑战在于应聘者如何在未接触过的业务场景中,展现出出色的架构设计思维。因为在实际工作中,你可能会被要求迅速适应新的业务环境,并提出合理的架构设计方案。
为了提升自己的系统设计能力,应聘者应对各种业务场景进行深入思考,主动设定挑战。例如,假设公司的请求量或数据量突然增长100倍,应聘者应思考在这种情况下,系统架构应如何调整?通过自我挑战和尝试设计,才能真正积累出系统设计的思维和能力。
四、基本功的考察
在面试过程中,数据结构和算法是基本功的重要部分,很多大厂都会要求候选人现场手写常见的算法题。这一环节其实不仅仅是对应届生的考察,也是对工程师甚至架构师基本技术素养的评估。保持对数据结构、算法的熟悉,是保持技术素养不可或缺的部分。因为复杂的分布式系统中,往往涉及到自定义的数据结构和算法。
五、履历背景、学历背景、过往经验及综合素质
除了技术层面,候选人的履历背景、学历背景、过往经验和综合素质也是考察的重要部分。面试官会考虑你过去的公司背景、学历水平、所做项目的性质以及你的沟通、团队协作等能力。这些都是决定你是否适合某个岗位的重要因素。例如,如果你过去在大型互联网公司工作,或者做过上千万用户量的系统,或者有扎实的项目实践经验,都会为你的面试加分。
六、候选人与岗位需求的匹配
经过多轮面试和全面考察后,面试官会将候选人与岗位需求进行匹配。这包括技术面的完整性、项目经验、团队管理和项目把控能力、全新业务场景的系统设计能力以及基本功、综合背景和素质等方面的考察。例如,如果你要应聘的是一个资深Java开发岗位,你需要熟悉公司的技术栈,如dubbo、zk、kafka、redis等,并且要有处理高并发、大数据量的经验。你还需要具备带领团队的能力,因为在实际工作中,你可能需要带领一个团队共同开发公司的核心子系统。这样的匹配度决定了候选人是否适合该岗位。经过细致的考察和评估,对于候选人的技术能力是否匹配岗位需求,技术深度能否应对线上系统常见故障,就有了清晰的了解。
当线上系统出现故障时,能否迅速分析、定位并解决问题,这依赖于候选人的源码功底。而面对高并发和海量数据的项目经验,也能看出候选人的应对能力。
除此之外,还需要深入了解候选人是否独立把控过核心系统的架构设计和开发,其过去的公司背景、学历背景以及综合素质如何。经过这些细致的了解,对于候选人和岗位需求的匹配度,就有了明确的判断。
在面试过程中,不同轮次的面试官分工协作是常见的模式。一轮面试主要关注技术内容,连环发问以深入考察技术深度和算法功底。二轮面试则着重于项目经验、系统设计,同时继续考察技术深度。三轮面试可能会涉及到项目规模、团队管理能力、规范和流程设计能力、整体工作履历背景和经验、软素质等多方面。
不同公司和团队的分工可能会有所不同。有的公司可能在前面两轮主要考察技术面和技术深度,后面再涉及到项目和综合素质的考察。职位越高,如总架构师等,可能会有CTO或技术VP出面进行更高轮的面试。
无论是怎样的分工和流程,核心考察内容都是围绕候选人的技术能力、项目经验、综合素质等方面展开。
本文由拥有多年BAT架构经验的中华石杉撰写,其个人公众号为“石杉的架构笔记(id:shishan100)”,欢迎关注交流。 |