java不学分布式可以面试找工作吗?
先说下结论。
1 找需要3年开发经验之内的Java初级开发工作时,可以不用在面试中展示分布式技能,相反,应当着重展示增删改查 的开发技能。
2 在找初级开发的工作时,在充分展示增删改查技能的前提下,如果展示分布式的使用技能,是个加分项。但相反,如果只展示分布式技能,忽略基本的用增删改查做开发的技能,一定面不成。
3 在找需要3年以上开发经验的java高级开发工作时,最好要有分布式经验,否则会降低应聘成功的可能。在找需要5年开发经验的资深开发时,一定得会分布式。
4 如果去应聘架构师的岗位时,分布式技术是个必问项。
下面就说说在找各阶段Java开发的工作时,如何学分布式,以及如何用分布式帮自己加分。
在找java初级开发工作时,公司更看重的是做Spring Boot等web框架业务的能力。在这个过程中,应当尽量展示用jpa连数据库,用logback写日志,以及IOC和AOP方面的能力。
在这个阶段,如何把spring boot等技能学到能面试的程度,以及如何准备面试,这些和主题无关所以就不再展开,大家可以参考我的如下文章。
在此基础上,面试里如何通过分布式组件技能加分呢?
1 就从最基本的api入手,比如准备些redis缓存,dubbo远程调用,kafka发消息的例子,从中看下api怎么调用。
2 结合业务说用法,比如在项目里,下订单时需要频繁去访问用户数据库,所以用redis缓存,用的时候是用redisTemplate对象缓存数据,是用list缓存用户数据。注意一定要结合业务说,这样能证明自己在项目里用过。
3 再准备些很基本的问题,比如解决了Redis缓存穿透或Dubbo消息重发的问题,这样不仅能进一步证明相关项目经验,还能多少证明自己在这方面还有解决实际问题的经验。
4 同时再背些面试题,比如去背redis面试题,dubbo面试题。
这里千万注意,对初级开发来说,分布式组件如果说用深了,面试官未必能信,比如说个搭建个redis集群,面试官就会问细节。反正对初级开发来说,分布式只是个加分项,过犹不及。
这里我再多说一句,我在面试不少培训班学员时,他们虽然没有什么项目经验,但分布式组件倒是用了全套,比如nginx,redis,dubbo,kafka等,Spring cloud alibaba组件也是nacos,openfeign,ribbon,gateway等全套都用过,这就是过犹不及。
初级开发在找工作时,一定是得优先准备web框架技术,比如spring boot,你分布式组件用过api,这已经足够了,再说全套用过,有些恨不得还部署在docker和k8s里,那么很容易就能被甄别出是学习项目,或者被认出是培训班出身。
而在找Java高级开发的工作时,如何突出“高级”呢?一般是两个方向,一个是深挖spring boot,比如深入了解aop和拦截器,同时知道整合事务等。另一方面就是分布式组件。
这时就不能单单证明自己会用api了,而得证明自己用分布式组件解决过高并发方面的能力,或者是有搭建分布式组件等的经验,具体该怎么准备呢?
1 每个组件,比如redis,dubbo等,最好找个linux环境,如果没就找个mac或docker,实际搭建个开发环境,然后和java的spring boot整合下。如果可以,再搭建个集群,比如redis主从集群,dubbo+zookeeper集群,kafka集群等。这样在面试中就可以说,我搭建过分布式组件环境以及集群,哪怕面试官来问,大致步骤也应该能说得出。
2 再用会api的前提下,一定得准备些解决过的实际问题,这方面的问题网上太多,比如redis超时时间导致oom,kafka消息重发导致业务不幂等,或是dubbo协议用错导致效率低下。然后找个业务背景塞进去。这样就能在面试中说,自己有解决过分布式组件方面的经验。
3 高级开发应该对分布式底层有所了解,比如dubbo线程模型,服务暴露,或者是netty序列化模型和流程等,当然还有redis数据结构之类的。这方面也可以按八股文 的方式去准备,但底层源码最好是面试时边说边写。
做到上述到程度,哪怕是单凭分布式技能,也应该能过java高级开发的面试了。这些事情在没有项目经验的前提下,虽然是难,但依然可以准备。相关细节大家可以看我如下的文章。
而如果去应聘架构师,分布式组件是必问的。如果说,还可以在没项目经验的前提下准备高级开发级别的分布式面试的话,那么架构师级别的分布式组件面试,没项目实践经验一定过不了。
1 架构师级别的面试,一定会问分布式集群,而且会问如何设计集群应对高并发。
2 同时会针对限流熔断服务降级等细节展开提问。
3 虽然说对分布式组件的底层不做要求,但架构师应该对底层能信手拈来,比如说改了哪个参数能解决什么问题。
况且,分布式组件虽然要掌握到架构师级别不怎么容易,但要过初级开发和高级开发方面的面试其实不难,这里我倒出过本书,讲在spring boot框架内如何整合和使用分布式组件。
其中讲了nginx,dubbo, zookeeper,mongodb,mycat,rabbitmq,redis等组件的用法。
而且,一定是先通过面试得到分布式组件的项目实践机会,然后再到项目里通过实践深入学习。同时,在面试中能证明分布式组件的开发能力和项目经验,一定比实际掌握要简单的多,所以一般的学习建议是,先准备面试说辞,再到项目实践,再通过解决实际问题提升。但是,如果在面试中不展示分布式组件方面的能力,找找初级开发的工作还凑合,要找高级开发的活,难。