我以前学过下棋,现在在天天象棋里也升级到了8-1,如果认真下外带适度训练,估计我的瓶颈是弱8-3,据说是弱上海市级水平,最近也打算参加些区级市级比赛挣些外快。

    当我在自我训练提升下棋水平时,意外发现,其中的门道和面试提升之法是相通的。我用这套方法在帮我兼职培训的学生去准备面试时,竟然发现准备面试的效率和成功率有一定程度的提升。所以我将在这篇文章里,从提升象棋的角度,趣说面试提升之法,希望大家在一笑了之以后有所启迪。另外,如果你也想提升象棋的水平,本文至少能帮你战胜公园大爷。

1 对于零基础的小白,首先让他们背基本定式

     在我培训班里,通过4,5次课,一些Java零基础的小白,至少能跑通一个Spring Boot+前端+数据库的项目,而且也会基本的Java、数据库和框架的语法。

     这个阶段想当于刚会下棋,就知道面试流程,以及还能够自说自话地叙述项目,但一旦遇到面试官的提问,估计撑不过3个问题。这时候,我就让他们背定式。

     象棋里,可以通过梅花谱,梅花泉和自出洞来无敌手等古谱来熟悉基本杀招,可以通过看残局书熟悉八步取士等基本走法,更可以通过背开局定式了解最初的走法。而对于这些小白,我会让他们由浅入深地背如下的定式说辞。

    1 Java和数据库方面的基本面试题,比如HashCode为啥要重写等,这些资料网上太多,当然我也有,为了不打广告就不多提了。

    2 “介绍下你自己的项目?”,针对这个问题,让他们结合自己项目实践背熟说辞。

    3 背些关于自我介绍,英文介绍的说辞,以及关于“你有什么优缺点”等面试常见问题的说辞。

    4 再背熟些基本的算法和笔试题等。

    如果下棋能熟悉基本开局残局和杀招,那么就能摆脱乱下的阶段,对于面试小白,到这个程度,至少就能和面试官对上话了,虽然可能还是败多胜少,但至少能撑过一刻钟,或者能避免问题大多回答不上的窘困局面了。

2 通过多练习,尽量避免错误

    然后我让他们相互发问,比如小张介绍项目给小李听,让小李听是否有“项目时间不对”或“技术介绍串门”等明显问题,或者让他们相互问些网上找到的Java数据库或框架方面的面试题。

    这就相当于以前考试前背题,以及在答题时,少犯低级计算错误。Java面试方面,该背哪些题呢?Java核心、数据库、Java Web、Spring Boot和中间件组件,题目哪来?网上搜,多搜几套,就会发现基本一样。

    这样做的目的,第一让他们进一步积累面试题以及答案,第二让他们多说几遍,避免低级错误,比如在这阶段,真有人会有“Dubbo是消息中间件”的错误。在这阶段,凡是遇到不熟悉的技能,一定不能光背理论答案了事,一定得动手实践下。比如遇到hashcode和equals的问题,一定得写Java代码调试一遍,遇到Dubbo问题,一定得配置个基本程序,从而了解用法和配资方法。

    在象棋里,会走子+少送子,然后再坐等对方犯错,这样估计就有和街头大爷下棋的资格了,在面试场景,会说基本的问题,外加能介绍项目,再别出明显的技术漏洞,这个时候去面试小公司,估计还真能碰运气面上。

3 针对特定的场景,告诉他们展示亮点的技巧

    但面试绝对不能靠运气,而且小公司也绝非我们的目标,所以后面我就会教我的学生一些亮点说辞,当然这也要经过反复练习,才能说好。下面就给出部分的亮点说辞方面点。

    Java核心方面。

    1 结合ArrayList和迭代器或HashMap等底层源码,说下这些集合的运行流程。

    2 结合项目实际说下用过的设计模式。

    3 结合CorrentHashMap综合展示线程并发和数据结构。 

    4 结合案例说下如何解决OOM问题等等。

    数据库方面。

    1 通过索引以及索引的数据结构,说下数据调优的技巧。

    2 通过看日志,说下排查解决慢SQL的问题。

    3 通过Redis+MySQL集群+MyCAT,说下分布式调优的技巧,当然这里要具体给出案例。

    等等

    框架和分布式组件方面。

    1 结合案例说下Spring Boot的全栈流程以及关键注解的含义。

    2 通过日志等案例,说下AOP,IOC等的用法。

    3 然后就是结合秒杀等案例,说下Redis,Dubbo,Kakfa等组件的用法。

    等等

    这些技术,Java小白在经过学习项目磨练过以后,上手绝非难事,在上手运行看效果的基础上,再边画边讲清楚这些亮点,在短暂训练后,也是可能的。

    这就好比让一些会下棋的人,背熟基本古谱,并背熟一些基本开局和基本残局的走法。下棋下到这种程度,就不会仅仅靠对方送子失误获胜了,还能靠自己主动进攻来赢棋。而对于一些想找工作的候选人,做到这种程度以后,就不会让面试官感觉仅仅会干基本的活,比如增删改查,而且还能给面试官留下“熟悉底层,对框架和调优一定基本了解”的印象,这样至少就能和大厂面试官过招,而且即使失败,也不会让人家感觉“太差”了。

4 善战者无痕,要结合项目自然地叙述

    学棋学到这种程度,由于看了不少妙手和古谱,就恨不得每步棋都走得惊天动地。而我的学生一旦背熟了若干亮点说辞,大多也会跃跃欲试,恨不得在每个问题中都夹带出“分布式组件”、“底层源码”和“设计模式”等话语。

    在下棋时,如果每步都看上去很华丽,比如吃子做杀目标性很明显,这样一旦遇到高手,第一能针对性挡掉三板斧,第二就从对方大开大合里找出破绽,一般估计就要落败。而如果在面试中不断炫耀值钱技术点,而没有项目背景或基础知识支撑,顶多能得到“熟悉理论”的评价,这样面试些外包公司小公司,估计问题不大,但面试有一定规模但软件公司,就比较悬了。

    这时我对应会给出如下的建议。

    1 心态放平和,你学会值钱技能的说辞,不能用来炫耀。

    2 给每个值钱点找个铺垫,比如通过项目里的全栈需求讲工厂模式,以订单并发需求为铺垫讲分布式组件,以排查迭代问题入门,再讲下底层源码。这也是个功夫活,具体怎么铺垫,我也会让我的学员反复练习。

    3 杜绝平庸,在回答好一个问题时,别停留下用法和配置方法,争取想下能否挂靠到值钱技能。

    4 同时更要做技术积累,比如积累Spring Boot,这样才能挖掘更多的值钱技术说辞。

    我看一些特大下辅导棋的时候,单看每步,几乎都很平淡,不过由于几步棋配合得当,所以走个3到5步,立马能积累优势,再走个7,8步,这种优势还能越来越大。由于一些高手能把一个目的融入到若干步战术组合里,所以对方就在会不知不觉地落入下风了。其实面试时也差不多,可以通过一个回答铺垫项目背景和基本知识,再通过一个回答展示值钱技能的配置和基本方法参数,然后再通过若干问题通过底层源码等方式讲述值钱技能,这样面试官可能就不知不觉中招了,就能感受到确实你行,还能认为你的值钱技能具有项目背景。

    其实我让我的学生所说的那些技术点吧,和象棋里飞象运车等走法一样,说穿了谁都会,比如OOM说辞和多线程说辞,网上一找一大堆,但我让他们融入项目,通过3到5个回答,让面试官发现一个技术亮点,这样到面试结束,就能积小胜为大胜,能综合展示Java核心、数据和框架乃至分布式组件和调优方面的技能。相比那些只会被动展示平庸的“针对增删改查”的技能的候选人,说实在的,我的学生真在做项目时真能好到哪里去,这也未必,但面试官两厢一对比,大概率就会要我的学生。

5 知己知彼,了解面试官提问的动机

    下棋时,最好能知道对方下棋的目的,当然对方如果没目的乱走,这更好赢。面试时,面试官在提问时,一定也会有目的,我会针对性分析,并给出对应的应对之道。 

    比如面试官在问项目多少人数和开发模式时,就是在确认项目的真实性,那么我对应给出的说辞里,就会让我的学生综合展示敏捷开发的实践要点,以及在项目里具体还干了测试部署发布等活,这样就能最大程度地用项目说辞证明能力。

    比如面试官在问能否加班和遇到问题怎么办时,大多是在确认候选人的承压能力和工作态度,网上关于此类团队协作和工作态度的标准答案太多了,对此我就会让我的学生举例说明自己很敬业。

    再如面试官在询问某个技术点(比如Redis缓存)的细节时,估计就在考察相关技术在项目里的用法,这时,我就会让我的学生在回答好相关问题后,再多说一句,结合解决过的项目问题,实际说下相关技能的用法,细节乃至底层源码。

    哪怕是面试官看上去和你在聊天,比如问你有什么爱好,平时一般干嘛?这绝非是和你拉家常,而是通过你平时的事情判断你的承压能力学习能力和上进心,明白这点以后,再对应地准备说辞也就不难了。

    当然,在了解面试官提问动机后,更应该揣着明白装糊涂,此时更应该在应对好当前问题后,再不露声色地讲些面试官爱听的话,绝不能自作聪明地显出看穿面试官提问用意的样子,否则的话,那真的可能弄巧成拙了。

6 不仅要战术得当,更要会把控局面

     学下棋时,不仅要学习应对静态局面的走法,更需要学会综合把控局面的手段。比如需要在一些看似平淡的局面里,通过积极的运子或战术手段,让自己的局面占据主动权。尤其更需要在一些关键的节点中,通过积极的进攻走法,进一步确定局面优势。

    在学棋过程中,如果真能做到这种程度,估计至少有资格参加区级比赛了。为了达到这个程度,一定得多揣摩王天一等特级大师下棋时思考的动机,尽量模拟用特级大师的想法去分析判断和处理局面,这听上去不大容易。不过我在辅导我学生面试的时候,会通过一个个的案例,告诉他们在面试的关键节点该采用什么样的展示方式,以此达到把控面试局面的效果。当然前提是我的学生事先得背熟各种“自我介绍”、“介绍项目”、“回答技术问题”和“介绍解决过的问题”等方面的静态说辞(这是体力活)。

    有人或许会说,面试中面试官是占主导地位,所以候选人只能被动回答,无法把控面试。其实未必,面试官也是人,事先可能也就用2,3分钟扫一下候选人的简历,所以候选人只要技术得当,绝对可以把控。一般来说,我给出的面试技巧会涉及到面试中如下几个关键节点,如下给出些范例。

    在自我介绍阶段,一般的候选人会介绍年龄学校等,然后说下上家公司,然后大致说下用到的技术,估计还未必说全。但我更会让我的学生第一讲清楚所熟悉的所有技术,另外立马讲述在项目里有用这些技术的经验,而且解决过实际问题,这样就能为后面用项目经验展示值钱技能打下很好的基础,同时立即能让面试进入到项目介绍的阶段,免得有些面试官再胡乱发问。

    在介绍项目阶段,一般的候选人可能会着重说业务需求,哪怕涉及到技术,由于可能缺乏准备,还未必能展示全所掌握的值钱技术点,而我会让我的学生略说业务,着重结合需求点说(分布式组件等)相关技术的应用背景,而且争取把面试前准备过的亮点说全,同时一定要提到(在值钱技术方面)有解决过实际线上问题的经验。这样之后的前几个问题,就大概率会被控制在之前提到过的点上。而且由于我的学生之前准备过,所以哪怕项目经验再不足,也能说好。

    当下,分布式组件是面试必问点,我给我的学生建议是,要么不问,面试官如果一旦问及,比如问项目里怎么用缓存,那么第一说使用场景,第二说使用时的重要参数和配置,如果事先背过底层源码说辞的话也一并抛出,第三说解决过的实际问题,最后再收一句,说还用过其它组件。这样相比其它没准备过的候选人,我的学生第一能确保回答好,第二还能一定概率控制后面的提问。

    而且,哪怕面试官只问及基础问题,比如集合,我也不会让我的学生就事论事,只回答好问题本身然后坐等面试官问后一个问题,而是通过“多说一句”的方法,想办法再找机会边画边说“底层源码”方面的亮点。    

    在下棋里,在关键局面下出强手棋从而获得优势,这是战术问题,而想办法下到这种局面是战略问题,更要靠把控局面的能力,如果能做好这点,在业余人群里应该能算强的了。和这对应,面试中能在被问及问题时回答好,这也是战术问题,同时我更会教我的学生如何让面试官提出你准备过的问题的方法和说辞。通过这种“把控面试局面”的技巧,我的候选人可能真实做项目的能力未必比别人强多少,但一定能更全面地展示技术,尤其是值钱技术。 

7 更通过具体实战,了解每次面试的缺陷和改进点

    关于面试技巧方面,我给我的学生集中培训顶多一周以后,一定得让他们出去面试,如果是面对面面试,一定得让他们最大程度记住问题以及回答,如果是电话面试,更会让他们全程录音,这是为了复盘所用,具体要做如下的事情。

    第一,遇到没回答上的问题,得举一反三,比如多线程方面线程池没回答好,一定得再全程复习并发这块,如果遇到Redis组件部署,一定得再动手操练一遍,这些事情一般让学生自己做。

    第二,如果遇到“自我介绍”或者“有哪些优缺点”这种定式问题没说好,我也一般让他们自己去准备。

    第三,遇到没讲好技术细节,或者没有结合项目需求说好,比如Netty粘包问题没结合实际应用讲好,我会让学生自己再组织一遍然后说给我听。

    第四,面试好以后,一定得对比下事先准备好的诸多亮点,比如准备好了结合实际问题说OOM,或结合项目说设计模式等,如果发现没说出来,那么就得再练习一下,以后面试中该通过哪些方式引导出来。

    第五,我一般拿些案例,从中分析,比如某同学讲好HashMap以后没有引导到ConcurrentHashMap等典型问题,这就需要统一讲解,这样我的学员就能进一步掌握“最大程度展示技能和亮点”等的面试技巧。

    下棋时如果下好不分析,那么第一未必能总结亮点,第二以后还会犯同样的错,这样所谓下一百盘也不会有提高,面试也一样。一般我的学生出去面试个3家以后,再好好准备,至少我给他们做模拟面试时就有模有样了,而且出去再面试个小公司,大概率能成。在这个基础上,在技术上针对性地缺啥补啥,外带再综合提升下面试技巧,出去哪怕面大厂,成功的概率一般也不会太低了。

8 总结,其实面试官未必比你更会博弈

    论干项目的能力,可能大多数面试官要比候选人强,而且不止强一点,但所谓有算胜无算。

    在很多情况下,面试官在面试前还在开会和别人扯皮,或者还在伤透脑筋地修改bug,在更多的情况下,面试官也是被领导临时抽调去面试别人,所以大多数面试官也就事先用1,2分钟,边走边看简历,而在面试时,无非也会从网上找些题目来问,而在面试中,更有可能是顺着候选人提到的话继续接茬向下问。相反,作为候选人,你可以在面试前背题背亮点说辞,可以准备“自我介绍”等固定问题,更能排练好“随口一说”的“引导话术”,而对于大多数问题,也能找到现成答案。

    况且,你在面试中的目的不是“证明比面试官强”,而是“防守住别出漏洞”即。谓求胜难,求和容易,就拿我的学生来说,比如一个班40个人,只要是想,大多都能成功跳槽,而且最终涨薪涨2成的,都算少的。而且提升面试技能,只要方法得当,所需的时间不会太长,一般一个月就顶了天了。

    这篇文章是我“面试复盘系列”文的第一篇,也算是个尝试吧,如果大家感觉好,请帮忙点下赞,或者通过评论说出你的想法。如果大家反响好,我会继续在这个系列中写下去,比如给出我让我学员背的诸多定式说辞,以及综合给初级开发也能使用的亮点说辞。

    这篇文章就写到这里,最后请大家关注我的公众号:一起进步,一起挣钱,在本公众号里,会有更多精彩文章。

面试复盘系列:从象棋提升之道趣说面试提升之法-LMLPHP面试复盘系列:从象棋提升之道趣说面试提升之法-LMLPHP

03-04 00:36