Java半年开发总结

转入Java开发刚好6个月了,一直想写个转岗后的心路历程,凑着半年机会,记录下。

先上技术结果!尽管之前读书时接触过Java,但是真的转过来后才发现,读书时那些连皮毛都不算。Java后台开发,这是一个成熟的技术栈,转过来后才发现需要了解的东西那么多,而且还得有深度。Java语言是基本,这点之前自学过,很多很基本的Java基础得懂,而且得倾向性的使用Java8中的小技术,也包括熟悉jdk中基础容器的实现原理及源代码,比如hashmap、concurrentmap等以及Java中GC的东东新生代,老年代blabla...其次Spring架构,整个互联网架构的一个精髓,各大公司普遍使用吧。这块内容转岗前漏了,导致刚开始做第一个项目时,各种不舒服不适应。Spring启动流程,AOP及IOC原理以及Spring MVC与Spring boot的使用及差异,这些真的是使用过后有了切身的体验,能把握的更准确。Mysql数据库,之前的水平一直停留在基本的sql语句,像mysql内部实现原理及各种锁机制和事务机制以及慢sql的优化,innodb跟myisam的差异,凡此种种都得了如指掌,这半年的开发工作并没有涉及到这块,后续还得在项目中靠拢及推动这块知识的学习。数据库中间件Mybatis,这个东西也是之前漏的,刚开始做项目也是一头雾水,不过这块操作的目前也不多。更多的是分布式数据库中间件Mycat,分库分表的利器。无论是水平分库还是垂直分库都有了深刻的体会,对内部分库机制以及均衡机制熟练使用了。消息中间件RabbitMQ,这个也是之前漏掉的。现在对RabbitMQ的使用深有体会,并了解其与RocketMQ以及kafka之间的差异,当小规模是怎么选择,考虑哪些方面,单机部署跟分布式部署时怎么选择,即使没用过后两者,也要对其特点,原理了解。说了这么多,竟然把redis跟落了,redis算是转岗前知识准备过的,其支持的类型以及内部垃圾清理的机制和memcache的差异,还得温故而知新,而且的关于redis的使用还是有很多需要掌握的,比如入库跟写缓存的顺序,写缓存失败如何处理等等。上述是典型的SSM架构,鉴于目前服务化盛行,项目中也接触到了微服务的东东。机房内部的服务化,网关http转rpc调用,hystrix的隔离,熔断,限流机制。由于项目,很自然的接触dubbo这个东东,不过这个还停留在使用中,其内部实现原理还在学习中,dubbo中的坑还需要踩下。zookeeper项目中dubbo服务注册使用,其zab协议的两个机制选举机制跟原子广播乃精髓,深度掌握。上述都是细粒度范畴上的技术知识点,项目中要学会跳出局限性,举一反三从全局的角度考虑问题,比如不同机房数据同步问题,这个还得分情况。同城不同机房的数据同步,异地数据的同步,然后结合自己项目的实际情况应该怎么做。这些就是这半年来技术上的成长吧,有的了解的深点,有的了解的浅了点,技术知识就是这样,需要循序渐进,螺旋式上升。

技术上的成长是直接的、明显的,然而转岗最痛苦的时期就是第2-3个月。这个时期开始做项目,第一个第二个项目,于我来说,都是新的,即使到了第二个项目,所接触的都是新的东西,无论基础技术还是业务逻辑,项目的开发压力是巨大的,尤其是从原来组的优秀员工到现在的一张白纸,项目中同事的容忍以及自身技术能力的认可都遭到了挑战。这段时期可以算得上黑色的两个月了,顶着巨大的心理压力踽踽独行着。这个时期,内心的委屈、巨大的压力与自身梦想的渴望,每天下班拖着疲惫的躯体回家心里都有道不完的苦。是的,技术成长带来的辛苦倒是其次的,内心的苦楚才是最累的。但...又如何?路是自己选的,跪着也得走完啊!就这样扛过了半年,真的感谢自己,熬过来了,总算是入门了。现在项目到手后能初步定位在技术框架的哪个位置,剩下的就是熟悉具体的技术点跟具体业务的熟悉了,不至于像刚开始两眼一抹黑那样。

C++转Java的最大变化在于何处?好几个同事都问过我这个问题,其实用C++描述之前的工作并不准确,之前更偏于嵌入式。我觉得嵌入式开发与Java后台开发最大的不同在于技术生态的截然不同。基于技术生态的差异,开发中思考问题的角度也不同。嵌入式中更多的偏向于单个机器内存中的深究及各种外接口的控制,而后台开发更多考虑的是数据库衍生的种种问题、访问流量大小与性能带来的问题以及机房数据访问及同步衍生的问题,最重要的是后台开发技术生态涉及的东西太多太多,成熟的优秀的框架也很多而且还有很多优秀的小伙伴一直在更新维护。单从语言方面的转变所带来的差异是可以忽略不计的,但是技术生态的转变给人内心的冲击的蛮大的。

上述是转入Java后台开发这半年来的心路历程,谨以此文记录下吧,期待下个半年后记录时在技术跟心态上能有更大的不同。

你可能感兴趣的:(心路历程)