分享一篇很不错的文章!本文做者曾经写过《Java Web轻量级开发面试教程》和 《Java核心技术及面试指南》这两本书。我以为了解简历和面试的技巧能够帮助你更好的去学习重要的知识点以及更好地去准备面试以及面试,说实话,我我的以为这些东西还挺重要的。原文地址:https://dwz.cn/P6G0F6jH 做者:hsm_computerhtml
文末有公众号二维码,欢迎关注获取笔主最新更新文章,并可免费获取笔主总结的《Java面试突击》以及Java工程师必备学习资源。nginx
在18年末到19年3月,陆续面试了几家公司,有成有不成的,最终进了一家比较满意的知名外企。在本文里,我将介绍我这段时间里更新简历和面试的相关经历。可能面试相关的一些方法,你们能从我以前的博文里看到,但在本文里,你们更能从相关实战性的例子中进一步体会到面试技巧的使用方法。git
我打算要换工做,就更新了简历,这时就有很多猎头来找我,刚开始,我不敢面大公司,只是去些规模小的互联网公司。由于一方面,当时我好久不面试了,面试实战技能不免有些荒废,另外一方面,离我以前的面试毕竟过了一阵,我不知道当前市面上哪些技术比较值钱。github
并且,我在面试前会准备一些针对项目和值钱技术的说辞,这些说辞总要通过实战来演练下。事实上,在和小公司沟通的过程当中,进一步提高了个人相关表述能力和相关话术,至关于用小公司来踩坑。相反,若是用大公司的面试失败来换得这些进步,就未免有些惋惜了。面试
因此,我和猎头明说,我想去大公司,但以前,你得让我到一些小公司去练练手,同时,我面试好之后,会告诉你这些小公司的面试题和相关技巧。这样一些猎头就肯先推荐我去小公司了。算法
1 公司A在职位介绍里,提到对分布式组件有要求,尤为是负载均衡集群。这块技术我在通用版简历中只是笼统写了下,有nginx+lvs实际经验,既然这个公司有相似要求,我就在简历中细化了这块:用到了lvs+keepalive集群和nginx,它们分别工做在4层和7层,(后省略相关技术使用点描述),最后介绍下效果:用了这个负载均衡组件外,咱们系统承受住了xx的并发量。 数据库
2 在公司B的职位介绍里,提到了高并发的需求,那么我就着重写了我压测的相关经验,包括压测环境怎么部署,用到哪些组件,再同时列了些压测后改善系统性能的若干方法。网络
3 公司C比较小,须要一位比较资深的能带团队的架构师,那么我在简历中除了介绍技术外,还着重写了带团队的若干经验。架构
对你们来讲,其实面试任何一家公司,它们的职位要求绝对不可能同样。这时你们最好是微调下简历。这种微调,绝对不是胡乱编写,好比上个项目干的是测试,简历中改为开发。而是挖掘下侧重点。并发
就像我以前给出的案例,对于分布式技术,我上个项目确实用过,但简历中篇幅有限,我不可能面面俱到地写,但既然大家公司有要求,那么我就针对性地详细介绍。
其实这块谈不上是面试技巧,而是语文技巧。首先是审题,理解职位介绍的主要内容,而后再像写做文那样,详细扩展下上个项目里相关技术点。甚至这只是中考语文的考点而不是高考的,但我本身的体会是,在这段时间里针对每份职位介绍我都作了微调,因此基本上是投一份简历就能获得一次面试机会。
我见过很多人,面试成了就进去了,结果虽然钱达到预期,但工做环境和行业背景都不是本身想要的,对本身将来发展很不利。
目前很多公司的状况,好比行业背景(好比金融保险电商等)还有工做强度(加班状况)在网上都能查到,用什么技术(好比分布式技术仍是云仍是AI)经过打听也能问到。互联网是万能的,甚至若是仔细些,一些离职率,每一年工资的增加幅度,甚至这个公司是第几轮融资,通常也能看到。
并且,你们在面试的时候,能够经过现场观察以及和面试官交流,旁敲侧击地打探到上述状况。在这个基础上,你们须要结合本身当前的需求和将来3到5年的发展方向,找若干类适合本身的公司,下面就给些我我的的和我所见到的例子。
1 (这是我我的的观点)好比我不大愿意进创业型公司,也比较排斥长时间的996,因此这类公司我只是拿来练手。
2 有段时间,很多P2P金融公司踩雷,因此哪怕面试时,这类公司的面试官会说得天花乱坠(不多有说本身很差的),但这类公司得慎重。
3 有次我到一个现场去面试,发现公司规模不大,是在一个园区里占1个楼层,且大可能是业务人员,开发的很少,并且人事总会说本身公司正在融资,那么这个公司就有可能不稳定,在有其它选项时,我就没去。
4 我认识一我的,他想在Java分布式这块有所发展,他5年后的目标是架构师,在面试过程当中,他就详细问了将来新进组的技术栈,等肯定能够了再入职。
换工做是个折腾人的事情,虽然没有十全十美的事情,进新公司后必定会发现和当初的预期有所不一样,但若是事先不调查,那么入职后后悔这仍是小事,耽搁本身的发展才是大事。
在上文里,我一直介绍的是准备简历和定目标,从这部分开始,将介绍准备面试。在以前的博文里,我一直强调项目介绍的重要性,因此当我本身出去面试的时候,这块绝对重视。在准备项目介绍前,我仍是会通读应聘职位的技术介绍,而后按以下的步骤来准备。
1 介绍项目的基本状况,好比这个项目是干吗的,有哪些模块流程是什么,本身作了哪些,持续了多久,有多少我的参与。这块切记,能够谈下业务,但别深刻,由于面试官不熟悉,也不想熟悉候选人的业务,这块时间控制在1分钟以内。
2 经过介绍项目用到的软件,以及项目的管理方式,来进一步验证项目的真实性,不然很难和培训班给出的项目有差异。
我介绍的时候,就说,项目管理用Maven,部署用jenkins,静态扫描用Sonar,任务管理和bug管理用jira,平时采用敏捷的项目迭代方式,天天有站会,大约1月一个迭代版本。这块你们能够根据本身的状况来介绍,时间也别太长,估计用1分钟也就够了。
3 这块最重要,是结合业务,抛出项目用到的技术,但别展开。
好比我见过一个职位介绍,里面写到须要有数据库优化的经验,那么我就说,项目里我用过MyCat做为分库分表,(不展开技术),结果上线后,咱们数据库能承受住每秒2000个并发请求(说下用好的结果)。
又如一个JD里说要用到微服务技术,那么我就说,项目里用到了Spring Cloud框架,用到了Ribbon,Eureka等组件,容器是Docker。用好之后,在发布时会发现,各模块之间的调用耦合性大大下降。
这块为何不用展开?第一,当前还在介绍项目,若是展开技术,就会主次不分,面试官会对你的逻辑思路产生质疑。第二,因为在JD里有要求,面试官必定会深刻来问,别人问你说总比本身自吹自擂要好。 第三,就比如以前考文科内容,当前在介绍项目时,先应当把全部的点说出来,面上自有机会发挥。
这块其实和介绍项目经验时密不可分,这里就拿我介绍过的Netty组件来讲明。
1 准备如何过渡到相关技术的说辞。
这里必定别让面试官感受你在自说自话。好比我准备的方案1是,在介绍好项目背景后,若是面试官没打断,我就询问,可否介绍其中的Netty细节?获得容许后再说。方案2是把这些技术关联到面试官可能会问的问题上,好比问及网络通信时介绍Netty,这个事先我会整理一个问题列表,遇到此类问题,我会抛出Netty说辞。对于其余技术也能够照此准备。
2 结合业务需求点,说下为何要用这个技术,以及用了有什么好处。
好比为了优化网络通信协议,因此用基于TCP协议的Netty,我业务模块里的xxx功能是用到netty,再稍微结合业务和Netty展开下。这样的话,面试官就会感受这个技术你不是仅仅在学习中用到,并且在项目业务里用到。
3 准备下这个技术里我踩过的坑。
好比通信过程当中我遇到了半包和粘包问题,对此我更是深刻了底层代码说明,还有Netty里的堆外内存管理问题,我准备了一个因为管理不善而致使的OOM问题的排查和解决过程(这类问题网上相关的也不少)。
4 我再准备了用了这个技术后对项目的帮助。
好比Netty是基于TCP协议的,它要比Http协议要轻,因此通信性能高,且Netty内部的Reactor线程模型对系统的IO帮助很大。
其实准备到这个程度,通常的面试官就不怎么再问了,哪怕面试官再问了一个我不知道的问题,我也能够义正词严地说不知道了,毕竟我以前已经介绍了很多底层代码,再精通Netty的人也未必能面面俱到地在脱稿的状况下回答出任何问题。
但为了以防万一,我更准备了“源于项目但高于项目”的说辞,一方面证实我平时还会不断专研,另外一方面进一步证实我熟悉并能合理使用Netty的底层代码。这方面我准备了以下的内容:
1 Netty的重要组件以及一个请求过来时各模块工做的时序图。2 Netty内部零拷贝的原理和好处,对此还专门准备了代码。3 Netty读写索引的工做方式。4 Netty异步处理的机制。
你们能够想象下,若是在面试中,你们很自信地边写底层代码边解释问题,面试官会对你们有什么评价?其实这些都是能够准备的,我一直没明白,为何有些人面试前不作任何准备?这些准备的素材又不是找不到。
下面我再略讲下我MyCAT的准备要点。
1 仍是讲下业务背景,为何要用?2 如何使用,无非是设置分库规则,改写SQL语句等。3 准备下踩到的坑,好比自增加主键在每台机器上都要保证惟一。4 而后再结合些底层代码,准备下一条SQL语句是如何分发到对应的分库上的,而后执行好之后又如何返回的。
基本上我面试时说到这个程度后,面试官就不怎么问了。
哪怕事先再准备,咱们也不能保证本身必定能达到职位介绍里的要求,这时候就得准备一个本身薄弱技术的列表,而后想办法在面试中绕过去,若是绕不过去,就找些替代方案。
好比我对消息通信组件不熟悉,在面试前我哪怕看代码看文档也没法进一步理解,我就在面试中,故意不提这个环节,抛出其它值钱技术,引诱面试官来问,通常交流一个技术点大约耗时10分钟(边画图边介绍再提问),因此面试过程当中详细交流到的最多也就5个点,少的话就3个,在很多面试里就根本没涉及到这块。
有两场面试,技术面试官问及到了,我就说项目里用过,同时多介绍些使用场景,好比用Kafka进行异步消息通知,经过消息中间件来保证交易的幂等性。这样面试官听到我介绍了应用场景,就至少会认为我用过。只有一场面试,面试官在kafka方面问得很细,问到如何集群内防止消息重发的细节,我就没回答上。
也就是说,我经过刻意回避外加介绍业务应用场景,很大程度上隐藏了我了解不深的技术。相反,若是我在简历中大大咧咧地写上用过kafka,那么可能每场面试都会被问到,毕竟在面试中被问倒不是件好事。
又如,我对分布式集群里的失效转移底层细节始终没理解透彻,那么在相关问题上就得很是当心。
有一场面试里,我被问到dubbo+zk集群,这块若是细问,必定会问到失效转移的选举算法,我对此不熟,那么我就先说dubbo的通信协议,序列化方式以及经过设置超时时间实现服务降级的思路,而后再说zk的部署。最终面试官果真问到选举算法,但以前我已经结合业务谈了dubbo底层代码和zk的相关部署,因此不理解选举算法并无产生太大的影响。
这里用到的技巧是“偷换概念”,一个问题有多个回答方向,你先让面试官感受到你在不少领域很是熟悉,那么在个别领域不熟悉就无伤大雅了。
1 猎头和咱们是一伙的,咱们成了猎头也能拿到提成,因此和猎头谈时必定得坦诚,把你优势和弱点都说,猎头会帮忙想办法(好比问面试题)或者是帮忙优化简历。
2 面试前,必定和猎头谈次,或者问下对这家公司该说什么话,以及以前人的成功失败经验,若是问题,去问下面试题(包括笔试题和口头技术问题)。
3 面试后,必定第一时间和猎头沟通,这时我的直接去问不合适。并且还能够经过猎头说,哪怕这个岗位没面上,还能够尝试这个公司的其它岗位。
4 谈工资时必定得先听猎头的建议,很多人对当前行情不了解,或者信心不足,工资没要足,这时让猎头谈是比较合适的,由于猎头就干这个的。通常来讲,跳槽后,工资大约有20%到50%的涨幅,有些公司会要前家公司的收入证实,相关问题也能够问猎头。
但和人事谈,就要当心了,毕竟人事是公司开工资的。
1 人事会问以前公司的离职缘由,这时千万别让人事感受出你不稳定,你能够说为了进一步提高本身的能力,此类问题网上太多,你们能够本身查。
2 在谈发展方向时,别和JD上的背离。好比JD上是招个技术开发人才,你却和人事说,干了1年后想转Team leader管理岗位,或者说同时想作测试,那么人事就会感受到,你将来的发展规划和公司想要的不匹配。
总之,面试时人事会很是nice地和你交流,有时候甚至是套话,看你是否稳定,是否能很好地和团队协做,可否加班,我就见过有人卡在人事这关,甚至还不知道为啥被拒。
并且通常你在和人事谈工资前,最好向猎头打探下这个职位的工资范围,在此基础上,若是你感受面试很是好,或者他们着急要人,或者你感受加班会不少,能够适当多要些,相反若是你很是想进这个公司,那么就本身斟酌。
在上文里,我经过最近换工做的经历,向你们介绍了相关经验,比起个人两本书,Java Web轻量级开发面试教程和Java核心技术及面试指南,自认为本文介绍的技巧更有实战性。
我不推荐常常换工做,好比一年换个两家,那么公司会质疑稳定性,但对于咱们作IT的人来讲,若是手头技术停滞不前,那么本身的竞争高工资的能力也会大大下降。
那么目前该了解哪些技术?以及在这个技术方面我当前掌握得如何?这当然能够经过工做来检验,但工做中接触到的技术毕竟是有限的,这时就能够经过面试来检验本身当前的学习状况,同时也能够经过面试题去了解本身的努力方向。
若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号。
《Java面试突击》: 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本公众号后台回复 "Java面试突击" 便可免费领取!
Java工程师必备学习资源: 一些Java工程师经常使用学习资源公众号后台回复关键字 “1” 便可免费无套路获取。
我本身总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclimb...