金三银四,很多人都准备跳槽面试,我这里梳理下自己准备社招面试时的一些经验,给需要的人,希望能帮到大家,祝大家拿到满意的offer。
如何准备面试呢?我从五个模块来说说自己的经验
1、基础知识
以自己做过的东西所使用的知识为主,以行业认可的基础知识为次。
为啥要把项目中使用的基础知识放在首位呢?会用是基础,如果知其然也知其所以然,可以让自己更好的使用,也可以避免一些不必要的错误,更能让面试官对你好感爆棚。再者也是看大家有没有深入了解一项技术的行动,想做的事情和做了的事情是两码事,而职业又是一个需要不断深入学习的过程。
当然用的东西那么多,不可能每一个都去了解原理细节,这是不现实的,那么重点就应该是那些最最最常用的东西,比如对于java开发来说,jdk源码是需要去学习了解的,而jdk源码又那么多不可能全部看完,那么就是那最常用的HashMap会被面试官问的最多。面试过程中面试官很可能会以你的项目为切入点,慢慢展开,问一些技术细节,然后再深入到原理,对于自己项目所用的知识掌握比较好的话,完全可以把面试官引导到项目中,让他围绕项目所用技术来发问。当你没有一个很好的切入点时,面试官就会这个技术点问下,那个技术点问下(面试官也是在找你所擅长的地方),时间就那么长,他问的越多越散,你就越危险,你要把所有技术点都掌握是比较难的。
对于自己项目中使用的中间件,也需要做深入的学习和了解,最好是系统的学历下,比如项目用到了rocketMq,那么就去系统的了解下rocketMq架构设计是怎样的,各种类型的消息是怎么实现的,部署结构是怎样的,最好再做个横向学习对比下kafka是怎样的,两者有什么区别和各自的特点,这就是一个对技术的探索过程。
另外对于一些最常见的面试问题,最好还是找找面经,看看最常问的问题是什么,然后自己总结下问题的答案,这算是一条捷径吧,只适合本来就有全面的了解,再通过面经画重点一样。自己要是掌握的知识面没有那么广和深时,刷面经还是要从这个问题入手,系统的学习了解下,避免看到的这个问题回答上来了,面试官稍微深入的问以下就不会了,这样就很容易挂。再者就是一定要至少有自己深入了解的一个点,最好是达到让面试官没有更深入的问题来问你。
对于基础知识,要慎用【精通】二字,精通的定义是很熟练的使用,并且对原理特别清楚,可以达到任意改动的地步。为了显示自己谦虚,还是不要用精通二字。
2、项目经历
在准备项目经历时最好是带着一个模板来准备,这样可以避免漏掉什么——项目名称、时间、简介、你的角色、你负责的内容、碰到的难点、你的解决思路、复盘你的收获和总结。
换个角度想想,如果你是面试官,当别人给你讲述一个项目时你最关注什么?当然是这个项目是干啥的,业务项目的话是为了解决什么业务问题,技术项目的话,又是为了解决什么问题(碰到的问题),你采用什么方法来解决(解决思路),结果怎样(用什么衡量),以及你从这个项目中得到了什么(收获和总结),这个问题还可以怎么解决(有没有其他解决方式或者业内怎么解决)。
从上面的描述中就可以看出来,应该带着这些问题去准备项目。可能你会问,当时做的时候时间特别紧(尤其是业务项目)哪有时间思考这么多,但是现在不就是个好时间来思考这个问题嘛?虽然项目上线后可能没有继续跟进去看看有什么问题然后去解决,那就趁现在这个时间来想想当时的解决方式是不是最优解,如果现在去做的话你会怎么做,这些都是体现你的思考,如果什么思考都没有,做再多的项目那永远只是个写代码的,而大部分大公司不会要这样不去思考的人。另外还有一点就是找找业内对于你做的项目&遇到的问题都是怎么做的(横向对比)这点对于年限越高的技术人员越重要,面试官会从这里去看你的技术视野。
千万不要因为简历上内容太少而将一些自己不熟悉的项目写上去,一定要保证写上去的项目自己一定非常了解,否则会让面试官觉得不是你做的,会大大的扣分!
3、简历
简历用单独的篇幅来进行总结
4、软性技能
这是字节的面试考察内容,我理解的软性技能就包含,沟通能力、逻辑表达、性格,因为业务复杂,工作涉及到的部门/人员很多,怎样才能让别人配合你,怎样才能更好的配合别人,怎样才能更好的合作,这个也是很重要的点。
怎么展现自己的软性技能呢?
沟通能力:首先做到不抢话,等面试官说完话/描述完问题后再说,当接到一个问题时,可能这个问题描述得不那么清晰,也可能你觉得问题很清晰但实际和面试的问题不是同一个——理解偏差(这种情况很常见),还没搞清楚问题就开始侃侃而谈,这样的人不少,目的够搞错了,你觉得结果能对嘛?工作中也是这样,和领导确认清楚工作内容再开干,不然干了半天发现和领导说的不是一件事,你是领导你怎么想?所以在回答问题前首先要做到明确问题,达成共识(也没必要各个问题这么来,简单明确的问题就没必要),再做回答,当问题不明确时,询问不明确的点,确定好题目划定的可操作范围,当都描述清楚后,自己简述下你理解的问题是什么,和面试官就问题达成共识。
比如面试官让你说说你知道&理解的锁,锁也有多种,本地锁、分布式锁,所以可以进一步询问,您是指jvm本地锁还是分布式锁。
逻辑表达:其实也就是在回答问题时自己脑海中要有根线,把答案中的多个点串起来,达到层层递进、次序分明,这样会让面试官觉得你对问题有自己的思考,并且思路清晰,思考全面。这样的回答模式要在临场总结出来的可能性不大,所以要在准备阶段针对问题做这样的梳理和准备。也要注意在回答问题时要化被动为主动,将问题引导到你熟悉的方向,让自己进入【装逼模式】
以一个简单的问题为例:线程和进程有什么区别?
随口回答:线程更轻量级;一个进程可能包含多个线程;进程是内存分配的最小单位,线程是调度的最小单位等等
找了一个生动的回答:
不仅用一个很形象的例子来说明自己的理解,还从进程和线程的区别中可以延伸到线程通信(前提是你对线程通信掌握的比较好),从面试官提问到自己从一个点引出另一个点,自然而然的,面试官就会问问你线程通信的问题了,这不,你就主导了面试官的提问方向了,就变成你的主场了。面试官也不会百分比按你思路走,有时也会不按套路出牌的。
性格:适当的表现的积极乐观点,遇到不会的问题先根据自己掌握的知识尝试去回答(可别瞎回答一通),面试官也会给你提示引导你回答,让面试官觉得你是在积极的面对问题。
之前在牛客收到了一个模拟面试的点评邀请,然后发现一些问题,觉得可能大部分都会存在就在这里说说,希望大家注意
回答问题有点磕磕绊绊(紧张除外),这样会给人一种边说边思考,掌握不牢的感觉,大家在回答问题时,可以先思考一会,但不要太长,然后流畅、清晰的回答,这样会很加分哦
5、问答
一般在每次面试快结束时面试官会问问你有没有问题要问他,把握这个机会,了解公司/留个好印象。建议大家都能提前想几个问题,能显示出自己关注的点(更建议你把关注点放到工作相关的),例如
想了解下当前公司/部门对校招生/新人都有怎样的培训/辅导计划—————体现你对发展的重视
问问面试官当前负责的业务————体现你对这个公司,这个岗位有兴趣
问问团队氛围——————关注融入
问问团队当前面临的挑战————————————关注工作有没有挑战,以及挑战点
薪资福利就不要问技术面试官了,留给hr吧
面试就是双向选择的过程,面试官的表现有时也就代表了公司文化/氛围,一个良好的面试体验也是一家公司的宣传门面,面试你的人一般都是你以后的同事/leader,要是觉得面试时他们的态度很差,让你很不舒服,酌情考虑是否终止后面几轮的面试,尊重是前提,要是有这样的leader,以后进入待的舒心的可能性不大。
最后建议大家在面试过程中,适度的装装逼,但是注意,小装怡情,大装伤身。