前言
你知道什么叫同步,什么叫异步,什么是锁,悲观锁,乐观锁,可重入锁、不可重入锁等等概念吗?
小建议
研究深的可以看源代码aqs,ReentantLock框架,自旋锁(lock-free),更深点什么是cas,以及aba问题,甚至cache line同步问题,多看源代码jdk,util包,concurrent包都要看,很多情况下,学会在一定场景下不使用同步原语实现线程同步等等,强调一下,源代码要多看,数据结构,并发的数据结构(不仅要看,还要了解不同数据结构引用场景,空间复杂度,时间复杂度,非常重要,非常重要,非常重要)
怎样学习呢?
一些框架要常看guava,一定要看,netty,zk等框架都非常学习的必要性,然后就是定时器,线程池,对象池等等,各种序列化,线程调度一定要了解,什么CyclicBarrier ,CountDownLatch,阻塞队列,jctool等等,了解其中原理,多看源代码,看一遍,2遍,3遍。。。。。就是要多看,自然你就会了。
不要老是去盯着那些应用框架去浮于表面的学习,列如你总盯着struct2去看,你随便看一下netty里面都有http协议具体实现,看一下jredis,spymemcache就能学会如何使用负载均衡思想,学的东西比你了解api价值要大几十倍,其他就是项目思想了,但是这些很难从书中学习,都只能项目中学习。
例如大型分布式架构基本很难学到,但是那些实实在在核心算法写死在书里和代码里,对你整个技术人生都有决定性作用,到最终你终究会发现,计算机核心东西就是算法,数据结构,架构等等。
至于Jvm参数:我项目遇到内存溢出直接应用崩溃的情况,项目的jvm参数没有使用年亲代,但是内存出现直接内存溢出,你只要控制直接内存做最大限制就行了,jvm也做了调整,启用年轻代(为此跟我们技术老大说了好久,我坚持使用,老大拿我没办法),调整eden s0 s1配比,调整回收多少代进入老年代,是否控制直接内存大小等等,总得来说你只要学会使用大概参数什么意思就行,一般来说官方推荐参数是很好的选择,学会是些命令,jps,jinfo,jstatck,jmap,就行,如果程序出现线程死亡,死锁,学会用jstack,jvmvusual查看(代码经验技巧,生成一个线程的时候一定要指定名称,我告诫我我带的人写代码一定要注意这些,出现问题,非常容易找到是哪个线程出现问题)。
对于高并发锁,小编这里推荐学习这本《Java高并发实战》
“如果你正在编写、设计、调试、维护以及分析多线程的Java程序,那么本书正是你所需要的。(对锁的诠释非常的清晰,讲解的也特别深入)
Java高并发实战
基础知识—结构化并发应用程序—活跃性、性能与测试—高级主题
线程安全性
对象的共享
对象的组合
基础构建模块
任务执行
取消与关闭
线程池的使用
图形用户界面应用程序
避免活跃性危险
性能与可伸缩性
并发程序的测试
显式锁
构建自定义的同步工具
原子变里与非阻塞同步机制
Java内存模型
Java程序员都要经历的阶段(一到十年开发)
身为一个做了十年开发的老司机程序员,这十年中我获得了项目经理、CTO、大公司架构师的经历。但再仔细一想,这十年中我至少浪费了五年时间走了很多弯路,这五年可以足够让自己成长为一个优秀的程序员,只可惜我在前五年的时间里和很多程序员一样在困惑中找不到出路!
这不仅是一个刚刚踏入职场的初级程序员,也是工作三五年之后开始迷茫的老程序员,都必须要面对和想明白的问题,希望以下的经历会对你有帮助。
初级—初阶
掌握java基础,熟悉常用类库。理解javaweb中的servlet,jsp,并了解常用的框架对java web的封装原理,能够借助框架完成增删改查功能。理解数据库在web开发中的地位。
初级—中阶
理解java中较为高级的特性,如反射,动态代理,JVM,内存模型,多线程等等。熟练使用框架,对框架中遇到的bug,能够借助日志和搜索引擎分析出问题的原因。在团队中,能够独立完成普通后台业务功能的开发。了解数据库的高级特性,如索引,存储引擎等等。
初级—高阶
理解java分布式架构,微服务架构(如rpc框架dubbo,motan,或springcloud一类)了解其与集中式架构的区别,并能保证分布式代码质量。熟练使用各个中间件如redis,mq,zookeeper等等,并了解其工作原理和使用场景。能够在中级或高级程序员的带领之下,完成非核心功能的研发。能够关注开源,并且具有阅读源码的能力。
中级
初级高阶已经很厉害了,但是往往缺乏的是一些项目经验,所以在我这里还是初级。脱离初级程序员不仅仅需要技术方面的支撑,还需要具备一定的项目开发经验(3年之上一线互联网产品研发经验),拥有线上bug的处理能力,JVM调优能力,以及完成核心业务功能的开发。并且带领团队的新人,能够按能力分配任务。(本想把初级高阶分为中级初阶,但我还是觉得中级必备的水平是线上解决bug的能力)
高级
团队的核心人物,把控整个项目的质量,包括代码漏洞和规范问题。具有5年以上项目开发经验,2年以上架构搭建的经验,能够根据业务选择不同的架构类型;根据团队组成,分配不同的任务。具有将自己的知识分享出去的能力,带领初级程序员走向中级,中级程序员走向高级的能力。
学好JVM那么你一定很强了,下面来说说架构师的成长之路
从初级到高级最后成为架构师不是单单靠看时间积累就能达到的,你必须付出对应的代价去学习才有可能达到架构师级别
Java架构师对应学习资料免费领取—阿里P7级
全套Java架构师进阶视频教程、阿里巴巴出版全套架构学习文档
JAVA高级架构师包含:微服务架构,亿级高并发,分布式架构,源码剖析系列,项目实战,设计模式实战,数据结构与算法,消息中间件,并发编程多线程,服务器系列,数据库,分布式事务,主流框架,单点登录,日志分析,全文检索,任务调度,权限管理,性能优化,集群,团队协作,负载均衡,安全架构,分布式事务解决方案,健康项目实战,秒杀系统实战,微服务电商项目实战,在线教育项目实战,P2P金融项目实战,集群高可用,图形数据库,虚拟机原理,缓存架构实战,脚本编程,系统架构设计,SpringBoot,SpringCloud,Nosql,Mybatis,RabbitMQ,RocketMQ,ActiveMQ,Kafka,Git,Elasticsearch,Docker,K8S,Dubbo,Nginx,Tomcat,Maven,Solr,Jenkins,Springmvc,CAS,ElasticSearch,Ehcache,SSO,SpringSecurity,SpringData,Activiti,Quartz,Mysql,Redis,MongoDB,Zookeeper,Mycat,Oracle,VueJS,RectJS,AngularJS,NodeJS,Hadoop,Hbase,Spark,HttpClient,Json大型分布式综合电商项目实战等视频教程
对应阿里P7技术栈—Java核心知识体系文档
Java核心知识体系把每个知识点解析的很深,Java程序员需要学习的知识在这边文档里面都有概括到如:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Hetty与PC、网络、日志、Zookeeper、Kafks、Rabbi tMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARIN、机器学习、云计算。
阿里巴巴整理架构PPT、PDF学习文档免费分享
对应阿里P7架构视频全套视频
推荐阅读:
阿里大牛都在读的10本Java实战书籍,Java开发进阶必备书单
网友评论