赞
踩
本人写了不少Java程序员提升写简历和面试技术的文章,其实java程序员通过这些文章里给出的方法,哪怕不提升技术直接去面试,应该能提升面试成功的可能。
不过单纯提升面试技术总是过于讨巧,所以在本文里,就结合本人兼职Java讲课老师的经历,讲讲Java程序员如何提升。
为了更好地讲提升方法,这里先介绍下本人做兼职培训的一些情况。
1 这个培训班是面企业的,是周末讲课,每次讲Java课的周期是10次课,每次课是6个小时。也就是说,培训的总体时长是60小时。
2 培训的对象是一些企业里的员工,这些员工大多数是有1到3年的开发基础。由于是面向企业的员工培训,所以在培训过程中不能讲面试话题,甚至这个话题还是个禁忌。所以本人在讲课过程中都是讲Java技术。
3 来听课的学员,刚开始的情况大多是只会做增删改查,但听好我这个课以后,程度好一点的,应该能熟悉各种分布式组件技术和微服务开发技术,哪怕是学得再差,多少也能掌握些分布式组件的API,或者说能大致知道后面该如何继续向资深开发和架构方面升级。
接下来我就说说我的讲课内容以及带领学生进步的方式,其实这就是大多数java初级开发升级到资深开发甚至架构的一般步骤,从中大家能看到Java提升程序员提升到技巧。
1 在第一和第二次课里,我会讲一些在平时开发过程中经常会遇到,但会忽视的问题。这两次课里,我会用我出的如下的书。由于我是面向企业员工培训,在给学员资料中,我会去掉面试相关的内容。
其中我会着重讲如下的技能。通过String引出不可变类,同时引出虚拟机调优话题,讲述企业级异常处理的机制,即不仅要抛出和处理异常,更要把异常控制在最小范围内。讲述集合里的Hash Map,TreeSet等数据结构,同时讲述快速失效的技能,同时会引导学生如何看底层源码,当然在集合方面,我还会用ConcurrentHashMap综合讲述多线程和数据结构的技能。
前两次课的要点是多线程和虚拟机调优,在多线程方面,我除了会讲一些基本技能外,还会从volatile开始讲起线程内存模型,同时会讲线程池和ThreadLocal方面的技巧。而在虚拟机调优方面,我除了会讲虚拟机结构外,还会讲排查OOM问题的步骤和实践要点。
其实Java开发在升级前,也有必要按上述步骤巩固下Java方面的基础。但是更为重要的是,在升级前,更要锻炼自己搭建开发环境和解决问题的动手能力。比如在前两次课里,我会留出足够多的时间,让同学们搭建IDEA,JDK,MySQL等的开发环境,同时在自己的电脑上运行我给出的代码。
其实代码反倒不重要,但在升级过程中,不免会遇到搭建各种脚手架环境和自己排查解决各种异常或错误的情况。在我的课里,我会尽量帮同学解决,但是我还是会要求大家尽量把看到的错误放到网上搜一下,尽量锻炼自己解决实际问题的能力。其它Java程序员在升级时,也需要通过此类方法提升自己相关的动手能力和实际解决问题的能力。
2 在第2和第3次课里,我会开始用我自己出的spring boot书来和大家讲述Spring boot开发的技能。其实不少同学已经掌握了用Spring boot+JPA做增删改查业务的能力,但我还是会突出讲述AOP,Restful,Swagger,Junit,Spring Security等项目开发中的实践要点。
而且在这两次过程中,我会以ELK日志组件为例,让大家实践下搭建组件和配置组件最终和Spring boot框架整合的技能。通过这两次课,我的学生就会不单纯只会做增删改查,他们一方面能知道Spring boot框架里的各常用要点,另一方面,他们还会通过动手练习,实际掌握必要的搭建和配置组件的能力,这其实才是后面学分布式组件和微服务组件的必备要点。
如果Java初级开发要升级,绝不能仅仅在做业务需求上下功夫,一方面得熟练掌握spring boot内部的各组件,比如AOP等,另一方面绝对应该向组件方面迈进,通过使用组件解决实际问题,当然这个前提依然是要能在机器上搭建和配置组件环境。
3 通过前3次课,我的学生应该全面掌握用spring boot做业务的能力,其实这时已经能达到初级开发阶段里的高阶水准,所以在第4到第6次的3次课里,我会全面用我上文提到的spring boot书,讲述Redis,Dubbo,RabbitMQ,Mycat,nginx和zookeeper组件的使用技巧。
在讲这些组件的过程中,我不会让学员自己敲代码,而是会提供我书里的代码,让学生自己直接运行。因为这些组件本身就比较复杂了,如果是让学员自己敲代码,万一有地方敲错就会影响学习,而且这种影响对积累分布式组件的技能是阻碍性的。
当然在学习这些组件的过程中,我会综合高并发的需求,告诉学员如何用nginx解决负载均衡问题,用mysql+redis+mycat解决数据库性能问题,用rabbitmq解决异步业务处理的问题,用dubbo+zookeeper解决远程调用的问题。在讲述这些组件的过程中,我同样会流出足够多的时间,让学员自己练习搭建环境和运行代码。
如果大家要自学分布式组件方面的技能,也可以遵循上述要点。第一搭建好环境,第二通过运行现成代码熟悉各组件的API,同时更要结合并发需求了解各组件解决实际问题的步骤,当然如果可以,还可以了解下各组件在项目开发过程中的常见坑,比如Redis缓存穿透,Dubbo的服务降级等问题。
4 其实我的学员在学好分布式组件以后,应该能跳出只会做增删改查的局限,能尝试着用分布式组件解决一些实际问题,这其实已经开始向架构师迈进了。如果大家自学的话,在学好Spring Boot以后也可以立即通过分布式组件来提升。
为了进一步加深学员对分布式组件的理解,同时进一步锻炼他们搭建分布式组件的环境,我在第7次课会用我出的Redis书来讲。
这部分我只讲部分内容,主要讲MySQL集群+Redis集群+MyCAT架构的数据库层面的解决方案。从中我的学员还能了解集群的概念,并能动手搭建集群。
也就是说,大家在学好分布式组件后,更可以实践集群方面的技能,由此一定能进一步提升分布式组件方面的搭建环境的动手能力,并能直观地从集群中了解高并发系统里解决高可用性的方法。
5 随后,在本次课的第8次到第10次课里,我会讲另一套高并发的解决方案,即基于Spring Cloud Alibaba的微服务组件解决方案。
在以前,我是会用我如下的书来讲Spring cloud微服务。
但现在Spring Cloud组件已经升级到了第二代,即Spring Cloud Alibaba,所以我讲课的内容也做了升级。这方面我是用我自己写的教案。
现在相关教案也快出版了。其中我会讲用Nacos做服务治理,用Ribbon做负载均衡,用Sentinel做安全管理,用gateway做网关,用OpenFeign做服务调用。
同时,我再会讲些服务降级,限流,熔断,灰度发布,负载均衡以及扩容的技能,当然我还会结合我的项目经验,讲用组件解决实际问题时所踩过的坑。这样的话,我的学生不仅能掌握两套分布式组件的用法,还能直接知道在使用时经常可能会遇到的问题,以及对应的解决方法。
当然如果大家自学的话,其实学好其中一套就够了,就可以去准备面试了。不过如果大家要进一步提升,而且有时间提升的话,不妨再通过spring cloud alibaba组件来进一步积累对组件乃至对高并发架构的经验。在学相关组件的API的同时,更可以找些资料,看看实现服务降级等高并发场景实用性问题的做法。
一般我的学员能用10个周末的时间学好这个系列的课程,这样他们通过听讲+运行我的代码+搭建组件能开发环境,虽然可能会学得很辛苦,但多少能掌握基于分布式组件和微服务组件实践高并发项目的技能,同时我会在课程中,用我的书里的项目案例,让学员通过项目综合理解相关技能。
这样的话,学员在学成后,以后只要在项目里多加练习,一定能比其它程序员更快地升级,至少可以说,他们已经知道了从Java初级开发升级到java架构的相关方法,而这些方法不是所有java初级开发都知道的。
对应地,如果初级Java开发如果要提升的话,其实会者不难,一般需要60到80个小时,就能掌握资深开发和初级架构方面的技能。当然前提是不仅要看,更要练习。
相关升级的路径一般是,先熟悉Spring Boot开发技能,当然在此过程中可以再巩固些Java方面的基础,再熟悉分布式组件或spring cloud alibaba组件的api,并在此基础上熟悉用相关组件以及集群解决高并发问题的方法。其实做到这块,技术上要说达到架构师的水平可能有些勉强,但说已经达到了资深开发的水平,这也不能说没有道理。
在这过程中,不必去了解组件的底层源码,不必去深挖java对象的语法,更不必去做复杂的业务,可以直接从架构师所要面对的高并发需求方面入手,通过学和练分布式组件来提升。
在我企业培训的课程中,我是只讲技术,不能讲面试。但是大家提升技术的目的无非是为了找更好的工作从而提升收益,所以面试部分的技能不可少,在如下的文章里,我整理了我之前写的,但被大量抄袭和转载,但很少能被超越的面试文。
而在如下的文章里,我写了Java程序员面试中关于控场和引导面试官提问的相关技能。
面试时需要知己知彼,所以在下文里,大家还能了解到不同等级的Java面试官的做法,以及相应的应对方法。
如果大家在面试过程中要进一步了解写简历和面试等方面的技巧,或者想提升java面试的成功率,可以向我发起咨询。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。