前段时间有人问我:「你是怎么成为一名软件架构师的?」我们就此探讨了必备技能、经验,以及储备相关知识所需的时间和精力。除此之外,我也回顾了自己走过的路、使用或尝试过的技术,以及我从那些五花八门的工作中学到的东西。
1、自我介绍。自我介绍其实是个比较关键的过程,这基本上决定了后续环节将会问哪些问题以及初步给你的评分定位(作为无数候选人的面试官,这一点主观上个人也是如此认为)。自我介绍的要点是重点讲述一两个最近自己主要参与或者负责的项目,着重说明自己承担的角色,所负责角色具体所做的事情,思路一定要清晰。
2、完了之后,基本上面试官会对着其擅长和当前尚未解决的或者心存疑虑的问题进行提问或者说相互沟通、交流。因为面试的是架构师,所以纯粹的技术性问题(比如aop,bean生命周期,jdk基本的并发,常见缓存方式等等)已经没有问了,直接就是针对项目里面的具体架构、业务问题进行深入的讨论。
比如整体架构他会问道为什么我要用F5以及LVS而不是其他的。问到的包括对于性能,如何进行排查,通用的答复(比如说我说先看前台还是后台,前台findbugs、chrome f12,后台先看哪台服务器负载高,top、vmstat、sar等等,如果oracle则看awr,mysql看performance schema。应用服务器的话看jstack,jprofiler等等)之后,一般会进一步问具体哪些指标等等,基本上如果答复足够清晰的话,一般面试官不会再进一步细问。
讨论到分布式事务回滚的时候,我们沟通到由发起方负责传递分配被发起方ID可实现,服务的可重复执行以及补偿。另一个面试官问道,他要确保缓存中取到的值必须是最新的,要么取不到,我说那就先删除缓存,再插入库,最后插入缓存,就不会有问题,或者用handersocket实现,这样也可以保证没有问题。再然后相互聊了下restful的优势与劣势,nginx,rpc框架与架构。谈到MQ的时候,因为MQ很早的时候研究过,后来因为公司自己开发了一个定制的MQ,所以基本上不了解各种MQ的差别以及实现机制,直接答复不清楚即可,这一点其实问题不大,每个人总会有弱项的。
最后,一般来说,好像面试官是技术出身的,通常会再问,工作外是否关注新技术,如果答复是的话,通常面试官会进一步问看哪些新技术,哪些论坛的哪些板块,对于具体的新技术,如果面试官有接触的,他会进一步问这个技术的特点、相对于现在的优势。
基本上,技术面试会问六七个左右,一般会从概述性开始,到实现层面具体如何实现都问进行,这一点其实跟面试官很有关系,国外通常认为架构师必须是写代码的,虽然不一定工作中的职责是写代码,但他必须知道如何验证他设计的架构是否合理,而不是脑袋一拍,丢给程序员去自由发挥。
有些公司或者部门招聘架构师或者相对比较高级的开发时,通常面试官是非技术出身或者技术并非其强项的,这个时候面试就不会这个讨论,很大程度上可能围绕着4+1模型去问。如果面试官在DB方面擅长,可能为重点放在数据库设计上。
3、技术面试在2个小时左右结束,随后根据两个面试官出去时的表情可以看出基本上技术面过关了,随后跟两个面试官的主管差不多沟通了半个多小时,最后又跟人事沟通了差不多半个小时,人事答复他们会内部沟通下定级的问题,再行通知我,可以认为基本上搞定了。
4、第二天晚上就收到收到人事的通知了,因为开的薪资不满意,直接拒绝了,并给出了最低要求。人事表示,会和部门再行沟通,又过了2天,人事答复,薪资按我要求进行调整了调整,五一一回来,OFFER就发过来了。
5、补充一点,作为惯例的一部分,技术面、二面、人事面基本都问关于我们公司或者其他方面,你有什么需要了解的或者想问的么,这一点大家就随意了,感觉怎么回答问题都不大,主要还是看自己对候选公司的了解情况或者主观意愿。
由于篇幅原因,这份面试宝典已经被整理成了PDF文档,有需要Android面试宝典全套完整文档的麻烦点赞+点击GitHub即可获取资料免费领取方式!
本文在开源项目:GitHub中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…