本人之前写了一篇博文,程序员如何获得高并发的经验?得到了不少点击量,所以在这篇博文里再来补充一波,着重讲下零高并发项目经验的人如何通过面试得到实践机会。

    前文也已经说了,要得到高并发经验,一般得分两步走,第一通过面试得到实践机会,第二在项目中提升,其实难点在第一点,在零基础前提下,准备高并发方面的面试,确实难。而通过面试找到项目实践机会后,可能会被人鄙视,也会被领导认为很水,但好歹得到了能进一步提升的机会。

    这里特别提一句,大厂技术面试官一般眼睛都很毒,高并发项目经验,或者高并发方面只有理论经验的候选人,通过寥寥几个问题就能问出。这点大家不要有侥幸心理,就说我吧,我至今高并发经验不足3年,没法和大厂一些大牛面试官相比,但我都能排查出大部分高并发方面只会说不会做的的求职者。

    在零基础前提下,准备高并发方面的面试的难点在哪里呢?

    1 高并发的组件大多是运行在linux上,windows很难搭建环境,没有环境其它就不用说了。

    2 大多数零基础的同学,不知道高并发场景下的分布式组件怎么用,或者只知道如何用简单的api。由于缺乏项目经验,所以大多数同学不知道分布式组件在项目里是怎么用的。

    3 在学分布式组件解决高并发问题方面,往往只会孤立地使用某个组件,比如孤立使用redis做缓存,孤立使用rabbitmq做消息中间件,但现实场景下,往往是综合使用多个分布式组件,协同解决高并发问题。

    4 由于只会理论,没有在项目里接触过高并发开发,所以普遍缺乏分析排查解决高并发方面问题的经验。在高并发场景下,往往会用到集群,熔断,限流等。在使用高并发组件的时候,往往也会踩到不少坑,比如mycat方言不对,netty半包,消息中间件重发等。大厂面试官往往是会通过这些经常遇到的问题,来确认求职者的高并发方面的经验,而一些没有高并发项目经验的求职者,在这方面往往是不堪一击的。

    下面就以我考核高并发技能的方式,让大家体验一下零项目经验高并发求职者的难度。

    1 不问概念,比如redis数据结构,netty重要组件。因为零项目经验的高并发求职者一定背过。

    2 第一层难度,这块问题不固定,我先问,你项目里用到哪些分布式组件,然后指着用过的分布式组件,问下Java环境下的基本api和配置。比如用过Redis我就问Jedis的语法,用过Netty就问java层面如何做通讯协议,用过RabbitMQ就问Spring Boot要做哪些配置。

    我就问你用过的组件,java里是怎么用的。我发现不少只会背理论的求职者,单纯讲组件(比如Redis或netty等)很熟悉,但不知道怎么和Java整合,这就说不过去了。

    3 第二层难度,有些求职者自己搭建过环境,知道分布式组件的api。对这些求职者,我进一步提问,和我说下你用(Redis,Kafka,Netty,nginx等的)分布式组件的项目场景,比如你说你用Redis,你们项目的数据量是多少?你们项目是用单机版Redis还是Redis集群,如果是单机版Redis,你们怎么确保高可用?

    这样当我结合项目背景问的时候,会发现不少高并发方面的求职者露馅。用他们的话说,nginx都是部署在windows上的,redis只用单机版,而且数据量不高。这也能说明不少求职者没有高并发分布式组件的使用经验。

    4 其实如果求职者能结合项目背景说分布式组件的用法,至少能说明有高并发的经验,在一些高并发要求比较低的岗位,这样的表现,至少在分布式组件这块,就可以过关了。但如果要面试资深开发或架构,那么还需要问 第三层难度,即在高并发分布式组件方面解决过哪些问题?这样能证明求职者有一定的高并发项目实践经验。

    这方面网上有现成的问题,比如Dubbo超时问题,多注册中心问题,Redis内存溢出问题等。

    不过话说回来,零高并发项目经验的求职者,如果准备方法得当,其实也能通过项目背景和实际解决过的问题,证明自己有高并发项目经验。本人当时就做到了,而且我目前在辅导不少学员,让他们在面试中能很好地展示高并发经验。也就是说,广大朋友,哪怕你高并发方面缺乏项目经验,只要好好准备,一样能通过面试得到实践机会,大家应当有信心。我甚至还根据我的培训经验,出了一本Spring Boot整合分布式组件,实现高并发功能的书。

    京东链接:https://item.jd.com/10038484613526.html。 

    我就用这本书里的内容举例,来说下我是怎么辅导成功我的一个小弟。我小弟用了我的书,听了我的课,目前也成功找到了一个高并发项目的实践机会,公司虽然不是大厂,但在业内也算有名。

    1 我小弟本书具备Spring Boot+JPA开发经验,这其实也是高并发经验的基础。

    2 我这本书里,讲了在windows环境下搭建Redis,MyCAT,RabbitMQ,nginx,dubbo+zookeeper,MongoDB等组件运行环境的步骤,请注意是windows环境,而不是linux环境。虽然生产环境中,这些组件都在linux环境下,因为大家平时都用windows,而且这些组件在windows和linux环境下的开发差异不大,所以这本书就在windows下搭环境,这样大家能很方便地重现开发环境,有了环境后,后面的事情就好办了。

    3 我让我小弟环境搭建好以后,首先照着书里的步骤,运行一通spring boot整合诸多分布式组件的项目,这样他好歹知道怎么用,而不会仅仅知道怎么说。然后我就让他为每个组件,找个业务背景。其实也不用找,书里自然讲了背景,比如redis组件是用在库存环境等。

    4 会用+结合业务背景使用高并发分布式组件以后,我再让我的小弟背些分布式组件方面的常用坑,以及常规的使用经验,无非是dubbo调用超时,redis超时,redis内存溢出,dubbo整合zookeeper的要点等。这方面不要太深,不用涉及到算法,也不用涉及到底层技能。而且这方面内容我书里大多也提到。最后我让我小弟通过书里给出的秒杀案例,串起来讲多个分布式组件的使用要点。

    5 这个是要点,我让我小弟主准备了不少解决高并发问题的说辞。高并发问题其实也很普遍,无非是redis超时,kakfa由于重发而导致的不幂等,dubbo注册中西中心失效等。这些方面,我让我小弟准备哪些点呢?问题是如何发现(无非是通过日志告警或系统卡顿发现),如何排查(到linux看日志,日志中看到哪些具体的关键字),如何解决(改文件或改配置)

    在听我讲之前,我小弟基本上只会背理论,面试时很快会被打回原形。但看了我的书,听了我多次讲解以后,(我小弟和我公司很近,前后加起来大概听了我不到2个小时辅导,但他回家后用了很多功夫),我小弟再出去面试,面了4次以后就找到一份高并发的开发工作了。

    这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。

 

posted on 2021-11-29 10:58  hsm_computer  阅读(778)  评论(0编辑  收藏  举报