要获得高并发经验要去大公司,然后大公司招聘要求高并发经验,感觉这是个死循环,没有高并发经验的人如何才能获取高并发方面的经验呢?
先说具体的做法。
1 首先得在自己电脑上鼓捣出Redis,kafka,dubbo,mycat等高并发分布式组件的环境,通过这些环境了解分布式组件的基本api。
2 为这些分布式组件找个项目场景,证明自己用过,并且解决过实际问题。这里需要指出的是,单纯背高并发的面试题没用。
3 修改简历,找到高并发面试的机会,然后通过多场面试,不断调整自己讲述高并发项目经验的水平。这时,如果能直接用高并发的说辞进大厂,那是最好的,如果不能,找个过渡性的能提供高并发实践的岗位。
4 如果有高并发项目的实践经验,那么后面就不用说了,只要多开发,多解决实际问题,高并发技能一定能很快掌握。这时掌握的高并发技能,那就不是单纯的理论说辞和简单的API技能了,而是正宗的高并发项目实践技能。
可以这样说,能否找到高并发项目的实践经验,决定着程序员能否升级到架构师,不过这不容易。下面就以我自己为例,说下我是怎么从只会吹高并发项目经验到真正掌握高并发技能的。
1 我在从17年年初的时候,在项目组里只用简单的Spring + JDBC/ORM做业务,开发是在windows上的,接触到的高并发组件,估计也就是nginx和mysql集群,没有linux上部署和调试组件的经验,没有高并发组件的使用经验。相信当下不少程序员朋友和我一样,只会做windows系统上的增删改查,没有任何分布式组件和高并发经验。
我就想,如果就这样下去,只会基本的增删改查,我再干个几年,等年纪上来了,估计连跳槽的机会都没,当时就想博一下,争取能升级到架构师。
2 刚开始的时候,我就去背题,什么redis数据结构,dubbo协议,kafka流程等等,高并发情况下防幂等,netty堆外内存的使用要点,jvm调优等。凡是和高并发有关的,我基本都背了一下。然后就开始修改简历,就写,在xx项目里,并发量是每秒xx,用到了Redis,kafka, dubbo(省略其它分布式组件)等等,然后投简历。
3 由于我当时的公司不错,是家一线的外企,所以投出去的简历很快得到回应,也得到了不少大厂的面试机会。刚开始面试时,Java,数据库等方面,我是秒通过。但是如果问到分布式组件,我基本就说不上来。
因为我背的是脱离项目的理论,比如mysql集群的搭建方法和redis数据结构等,面试官是结合项目问的,比如问,你项目里Redis如何确保高可用,用nginx部署spring boot项目时,配置文件中注意的要点是什么。由于我是单纯背理论,所以回答不上。
4 尝试了几次,我意识到单纯背题一定不行,我就在我电脑上,搭建了诸多高并发组件的开发环境。虽然组件在项目里都运行在linux上,但大多高并发组件都有windows版。
当时我搭建了mysql主从集群,redis主从集群,rabbitmq, dubbo+zookeeper,nginx,mycat等开发环境,了解各组件的基本用法,然后为每个组件找了个项目背景。比如说redis,我就说,我们项目需要缓存员工信息,所以用到了Redis里的xxx API,对应的Java代码是什么,类似的,我为每个组件都找个了应用背景。
5 这个时候我去面试,在分布式组件方面,就能和面试官有来有去了,甚至还面试成功几家小公司。但如果面试官问些实践要点,比如redis如何防穿透,redis cluster的失效转移等,我就答不上来。所以我估计,当时给面试官的印象是,有分布式组件的使用经验,也会用分布式组件开发基本的高并发技能,但缺乏系统的用分布式组件实现高并发的能力。
6 这个时候,我就回想起刚开始背题的一些内容,比如netty防堆外内存溢出,netty如何解决半包粘包,redis如何防穿透,mycat如何实现读写分离,还有限流和熔断等机制等。这时我才感到,原来这些题目是要等掌握一定高并发说辞后再用,不是一开始就用的。
明白这些以后就好办多了,这些技能和开发无关,只需要结合项目背景讲下实现要点。比如以限流为例,我先准备一个限流场景,比如公司查询系统每秒只能放1000个请求,然后说下实践要点,无非是redis+lua,再说下异常情况下怎么处理,无非就超量情况下抛异常。其它熔断防穿透都要点都按这样准备。
7 请注意,到了这个时间点,我的分布式高并发经验,也仅仅是停留在理论层面,但这个时候我去面试,就能通过用法+实践要点的说辞,成功把自己包装成有高并发项目经验的人了,后面的面试成功率就高很多了。
不过在这个阶段,为了挑战大厂的岗位,我还准备了“项目中解决过的实际问题”。套路说辞基本一样,首先遇到什么问题,比如redis穿透,或oom异常,或kafka死信堆积过多,然后说表现,表现无非是系统宕机,卡死,或功能异常,再说如何排查,无非是通过看日志,日志中遇到什么异常,发现什么问题,最后再说怎么解决的。网上这种问题一搜一大堆,但网上的说辞大多是纯理论的,得为这些问题找个项目背景。比如xx支付系统遇到oom异常,xx优惠券分发系统遇到死信过多,xx支付系统遇到redis穿透等等。
8 也就是说,通过不断面试,我整理了高并发方面的基本用法+实践要点+解决过问题等说辞。这样虽然我还是没高并发项目经验,但已经能确保我进大厂了。事实上我就这样进大厂的。
9 进大厂以后,其实我日子很难过,一方面项目组通过面试,认定我有高并发项目经验,其实我没有,但我不这样说我还只能在原来的公司做基本的增删改查,另一方面我以高并发零基础的条件实现高并发的要点也不容易。
这时,我除了自己到处查以外,只能一方面厚着脸皮到处问人,另一方面多加班。由于我的项目用到高并发,所以日常工作中有大量的开发,部署,调试机会,平时也经常解决高并发的问题。所以我苦日子也就过了3个月,后面我不仅能解决高并发的问题,还能参加压力测试,通过压力测试提升高并发的性能,做到这个程度,我才算获得了高并发的项目经验。
10 掌握高并发经验的红利是相当大的。当我掌握高并发经验后,后面找工作,基本上可以说是我找工作,因为大多数的技术面试我都能过。而且我有认识不少人,掌握了高并发技能,能通过出书出视频变现,或者如果年纪上来了,也可以凭借高并发技能进个外企养老,或者是找个小公司做技术总监,不至于在35岁被淘汰。
其实我发现,不少人掌握高并发技能的经历和我的很相似。
1 在公司项目没有提供高并发实践机会的前提下,通过背题等,哪怕根据一些所谓的思维导图,把相关全学了一遍,只要没有高并发的项目实践机会,一定无法掌握高并发技能。
2 只有进入到提供高并发实践机会的项目里,才能得到相关经验。这是句正确的废话,但很多人就卡在这块,无法通过掌握高并发技能,升级到架构师,从而只能以“资深增删改查工程师”的身份等待年龄瓶颈的到来。
3 可以分两步走,首先通过背题+提升面试经验,得到高并发的实践机会,其次再通过项目真正掌握高并发的技能。
最后做个总结,高并发能力包括哪些,如何该怎么掌握?这无法通过短短的文章来说明,要知道我用3个月的时间在项目组里掌握高并发的基本技能,再用了半年才算全面掌握。如果要把这些经历经验和要点写全,估计得出本书。
但是,你就照着我在上文里给出的步骤,先掌握搭建环境,再掌握分布式组件的基本用法,再了解高并发的实践要点和解决问题的说辞,你至少能通过面试得到高并发项目的实践机会。掌握高并发经验的难点在于得到实践机会,进了项目组,有了实践机会,高并发技巧就不用我说了,你自己就能知道如何掌握。
这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。