对于java开发,只要入门,就可以做模块性开发了,这样做了几年开发,发现只是开发速度快了、出错率低了、解决问题的能力提升了,但依旧处于“搬砖”的层级上,平时也看书,但发现看书只是似懂非懂状态,过不了多久就忘了。如果把做软件项目比作盖楼,盖一座大楼需要各种人,如何在身处做技工的你,一步步提升呢?两个字:尝试。
软件行业的尝试成本基本上是0。比如你的框架现在用的springMVC,你可以在业余时间尝试springboot。如果你的tomcat使用的NIO模式,你可以尝试换成APR模式。尝试做工具、做插件。尝试做运维等等。在不停的尝试中,广度的接触不同技术,然后在解决问题上,进行深度学习,进一步学习源码,从源码里分析出设计模式。如何进行循序渐进的系统性学习呢,这里说下大概的学习路线:
一、基础
设计模式
设计模式其实跟你的生活模式密切相关,所以这里说下怎么能将设计模式灵活的运用到开发中,而不是死记硬背。
- 单例模式:做饭用的锅,不能每次做饭,都得买个新锅,如果你钱够多,房间够大,如果物业好,还能定期清理
- 工厂模式:主要分为简单工厂和抽象工厂,二者就像是一开始就一个工厂能造机器人,后来呢,很多工厂都会造机器人,简单工厂是把造机器人的方法抽象了,而抽象工厂是把能造机器人的工厂抽象了
- 代理模式:只需要把需求告诉“专业”代理人,你只需要等待结果就好了_ 这个也是我最喜欢的
- 观察者模式:这个就厉害了,就像是有个间谍一直给你监听消息
- 模板模式:玩个魂斗罗,每次都得选人、选关,或者还得上上下下左左右右ABAB,按照他的模板搞就行了
- 原型模式:这个核心思想就是复制,将原型复制出一份成为克隆对象。比如每天写工作日报,会把昨天的复制一份,再修改成今天的,这是浅克隆。深克隆是把别人日报里能跟你牵扯到的,都复制了。
- 策略模式:一听就是得需要动脑子的模式,就像生活中你出去旅游,需要做多少攻略,选择什么样子的交通工具,选择多少行李等等
- …
多线程
-
线程状态
1.1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 1.2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 1.3. 阻塞(BLOCKED):表示线程阻塞于锁。 1.4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。 1.5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。 1.6. 终止(TERMINATED):表示该线程已经执行完毕。
-
线程管理
2.1. 线程的创建与运行,继承Thread类或者事项Runnable接口。 2.2. 线程信息的获取和设置,Thread类有一些保存信息的属性,这些属性可以用来标示线程,显示线程的状态或者控制线程的优先级。 2.3. 线程的中断,Java提供中断机制,可以使用它来结束一个线程。这种机制需要检查线程是否被中断,然后决定是否响应这个中断请求,线程允许中断请求并继续执行。 2.4. 线程中断控制,使用Java异常InterruptedException()来控制控制。 2.5. 线程的休眠和恢复,使用sleep()方法控制线程休眠。 2.6. 等待线程的终止,Java中使用Thread类里的join()方法实现线程终止。当一个线程对象的join()方法被调用时,调用它的线程将被挂起,直到这个线程对象完成它的任务。 2.7. 守护线程的创建和运行,Java有一种特殊的线程叫守护线程。这种线程优先级比较低,通常来说,当同一个应用程序里没有其他线程运行的时候,守护线程才运行。当守护线程时程序中唯一运行的线程时,守护线程执行结束后,JVM也就结束了这个线程。 2.8. 线程局部变量的使用,共享数据是并发程序最核心的问题之一,对于继承Thread类或者实现Runnable接口对象来说尤其重要。
-
线程安全
3.1. 线程锁:如果按照名称来说,锁大概有以下名词:
自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁 ,乐观锁 ,公平锁 ,偏向锁, 对象锁,线程锁,锁粗化, 锁消除,轻量级锁,重量级锁, 信号量,独享锁,共享锁,分段锁。常见的锁Synchronized和Lock,分布式锁
3.2. 锁机制:锁的happens-before关系,程序顺序规则:在一个线程中,前面的操作happens-before后面的操作
锁规则:对同一个锁,解锁happens-before加锁。
传递性规则:A happens-before B,B happens-before C,则A happens-before C -
线程池
4.1 线程池作用
4.2 线程池核心类
4.3 线程池原理
4.4 任务缓存队列及排队等策略 -
Fork/Join框架
5.1 使用场景
5.2 ForkJoin 实现原理
5.3 容错处理
spring
spring这里就不详细介绍了,因为有太多的东西需要介绍了,但是一定要明白它是怎么实现的,比如请求是如何分发的,页面是如何加载的,orm框架的session是如何管理的、懒加载是如何实现的等等。spring包含以下大的方面,可以逐个突破。
- spring core包类
- spring AOP
- spring ORM
- spring Dao
- spring Web
- spring Context
- spring WebMvc
二、分布式
分布式架构
- 分布式架构的演进
- CDN加速
- 负载均衡
- 系统监控、容灾、存储动态扩容
- 架构设计及业务驱动设计
- CAP
分布式中间件
- 消息通信:mq、kafka
- redis主从复制、持久化方式策略
- Nginx反向代理服务器及负载均衡配置
- 基于Netty的高性能IM聊天
- Netty与tomcat apr场景应用
分布式架构实战
- 分布式事务解决方案
- 分布式锁的解决方案
- 分布式下定时任务
- 分布式下Session跨域共享及单点登录解决方案
三、微服务
springCloud
- Eureka 服务注册
- Ribbon 负载均衡
- Feign 服务请求
- Hystrix服务熔断处理
- Zuul微服务网关
- Admin服务监控
- Config配置中心
Docker
- Docker镜像、仓库、容器
- 基于Swarm构建Docker集群
- Docker在框架里的配置
微服务实战
- springCloud里的security配置
- springCloud里的Outh2.0配置
- springCloud里的mq、tomcat等优化
- 应该如何设计服务,如何进行服务拆分
- …
四、性能优化
Tomcat优化
- tomcat运行机制
- 分析tomcat线程模型
- tomcat 系统参数优化
- 基准测试
JVM优化
- JVM工具检测占用内存比较大线程
- 内存模型
- GC日志
- 实战MAT分析dump文件
- 了解垃圾回收器及场景优化
数据库调优
- sql执行计划详解
- 索引优化
- SQL语句优化
- 分区、主从
欢迎大家关注我,联系我进行技术讨论。