给大家总结了一份Java架构师学习路线的最新版,非常的详细,希望对大家进阶Java架构师有所帮助@mikechen
Java高级必备
1.深入理解面向对象
如何设计类,类的设计原则以及构造函数,内部类,抽象类,接口,对象的多态性,接口和抽象类的区别。
理解异常处理
2.Java 常见异常种类
- Java Exception
- Error
- Runtime Exception 运行时异常
- Exception
- throw 用户自定义异常
java标准里也提到过,希望能用异常来处理错误信息以及后续流程,所以异常不仅仅只是异常,而是一个标准错误处理机制,并且也鼓励这样使用错误信息。
3.Java反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
4.Java虚拟机JVM
- JVM内存结构
- 堆内存(Heap)
- 方法区(Method Area)
- 虚拟机栈(JVM Stack)
- 本地方法栈(Native Stack)
- 程序计数器(PC Register)
- 直接内存
- JVM内存参数设置
- 典型JVM参数配置
- 标记清除
- 复制算法
- 标记整理
- 分代收集算法
常见的垃圾收集器有3类
1.新生代的收集器包括:
2.老年代的收集器包括:
3.回收整个Java堆(新生代和老年代)
新生代垃圾收集器
1.Serial串行收集器-复制算法
2.ParNew收集器-复制算法
3.Parallel Scavenge(并行回收)收集器-复制算法
老年代垃圾收集器
1.Serial Old 收集器-标记整理算法
2.Parallel Old 收集器-标记整理算法
3.CMS收集器-标记清除算法
新生代和老年代垃圾收集器
G1收集器-标记整理算法
G1收集器的优势:
G1收集器的运作步骤
- JVM内存调优
- JVM性能调优方法和步骤
- JVM调优参数参考
5.Java并发编程
- 线程的生命周期
- 线程状态的控制
- 多线程的5种创建方式
- 线程的3种同步方式
- 多线程引入的3种问题
Volatile的重要性非常高,需要重点掌握:
- Volatile关键字
- Java内存模型
- Volatile内存模型可见性
- Volatile的工作原理
- Volatile的源码案例
- 为什么需要线程池
- 线程池的处理流程
- 线程池相关的核心参数
- 线程池使用的注意事项
主要讲了Java 4大常用的线程锁,整体包含如下4点:
- 多线程的缘由
- 多线程并发面临的问题
- 4种Java线程锁(线程同步):synchronized、ReentrantLock等
- Java线程锁总结
最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁
在Java并发场景中,会涉及到各种各样的锁
- 公平锁/非公平锁
- 可重入锁
- 独享锁/共享锁
- 乐观锁/悲观锁
- 分段锁
- 自旋锁
1.并发工具类
提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。
2.并发容器
提供各种线程安全的容器:最常见的ConcurrentHashMap、有序的ConcurrentSkipListMap,实现线程安全的动态数组CopyOnWriteArrayList等。
3.并发队列
各种BlockingQueue的实现:常用的ArrayBlockingQueue、SynchorousQueue或针对特定场景的PriorityBlockingQueue。
4.Executor框架
可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。
Java 开发框架
首先,从整体来掌握好Spring,了解Spring的体系结构是如何组成的。
其次,一定要深入理解Spring的两大核心之一:IOC。
- IOC的核心定义
- IOC与DI的关系
- 依赖注入方式
- 属性注入
- Set注入
- 构造器注入
- IOC的优缺点
- IOC的实现原理
其次,一定要深入理解Spring的两大核心之一:AOP。
- AOP的作用于应用场景
- Spring AOP的核心定义
- Spring AOP 通知分类
- Spring AOP 织入时期
- Spring AOP三种使用方式
再次,学习掌握SpringMVC。
其次,Spring事务一定要掌握。
这篇文章主要讲了以下几点:
- Spring事务
- 事务的ACID
- Spring中的隔离级别
- Spring事务的传播属性
- Spring 事务的两种管理方式
- Spring事务实现原理
- Spring事务实现总结
以及Spring Cloud体系,需要重点掌握。
数据库
首先,数据库设计的基本原则还是需要掌握
数据库设计原则和范式
第一范式,确保每列保持原子性。
第二范式,确保表中的每列都和主键相关。
第二范式,在第一范式的基础之上更进一层。
第三范式,确保每列都和主键列直接相关,而不是间接相关。
Sql与NoSql的优缺点以及使用场景分析
SQL 关系型数据库:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)
NoSQL泛指非关系型数据库 :MongoDB,Redis,Memcached,Hbase,CouchDB。
大型互联网项目常用的数据库选型方案:
采用MySQL + NoSQL的组合方案,根据业务场景和数据访问量来分别采用。
关系式数据库必备
事务(ACID、工作原理、事务的隔离级别、锁、事务的传播机制)
数据库创建,权限分配,表的创建,增删改查,连接,子查询
索引、触发器、存储过程、事务控制等
数据库性能优化
索引原理及适用,大表查询优化,多表连接查询优化,子查询优化
分库、分表、备份、迁移、导入,冷备热备,主从备份、双机热备、纵向扩展、横向扩展等这些都是属于比较常见的数据库方案,我在淘宝具体挑战性的一次架构演变中一文中谈到了数据库纵向和横向的发展策略,有兴趣的同学可以翻看历史查看。
数据结构和算法
算法分析与计算
算法时间复杂度和空间复杂度的分析计算
算法思想
递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限
常用数据结构
数组、链表、堆、栈、队列、Hash表、二叉树等
经典算法
排序
经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序等
查找
经典查找:顺序查找、二分查找、二叉排序树查找
Java中间件工具
1.构建工具
在搭建日志:Log4j
单元测试:JUnit
推荐nexus搭建一套自己的代码仓库中心,采用maven管理,这些都是比较常见而且有效的构建方案。
2.Web服务器
- Tomcat
- JBoss
- Jetty
- Resin
- WebLogic
- WebSphere等
3.中间件
- Redis
- 消息中间件
- RocketMQ
- Kafka等
大型网站架构设计
其实就是要很清楚整个技术架构的演变历程,知道每个阶段的瓶颈在哪里,以及对应的解决方案,大型网站架构设计一般包含如下:
搭建分布系统的基础设施
缓存搭建
分布式缓存搭建 memcached ,redis(推荐),动态、静态数据的缓存,以及配合单点登录的使用等。
负载均衡
Nginx/HaProxy
CDN搭建
为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。
分布式储存搭建
常见的分布式文件系统有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等,比如GFS(Google File System),TFS(Taobao File System),tfs参考tfs而来,所以名字也直接参考了。
消息系统搭建
目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ,优先推荐RocketMQ。
消息系统使用四大场景
- 异步处理
- 应用解耦
- 流量削锋
- 消息通讯
常用的大数据方案
一般先分库,如果分库后查询仍然慢,于是按照分库的思想开始做分表。
比如淘宝中期数据库压力非常大了,于是数据库端按照业务做垂直拆分:交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。
采用sql和nosql混搭搭建再配合搜索引擎
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
除此之外,还要考虑安全以及机房容灾以及系统运维监控等。
架构师前瞻性
所谓前瞻性表面听起来还是比较空洞,什么叫前瞻性?这里我谈谈我看到或者观察到的例子,这样来观察,也许更好感受到什么叫前瞻性。
比如,这是当时支付宝程立在谈到支付宝SOA之路的场景。
“瞻前”、“顾后” ――这是我现在体会到的最大挑战。
先谈谈“瞻前”:当业务个性不明显、业务规模也不大时,架构师还是有很多容易模仿的定式与先例的,但当业务的个性与规模到达一定阶段时,一定会有一些别人从未遇到过的非常困难的问题需要你去解决。
作为站在企业技术金字塔塔尖上的一群人,当过去的经验用不上,搜索引擎也不能向你提供任何有用的答案,只有独立去思考。
去做出重大决定时,如果没有充分的准备,对企业对个人都是巨大的风险,这需要架构师建立未雨绸缪的意识。
不断推演未来可能的变化并思索应对之策,持续而有方向地积累知识、发展能力,建立广泛的技术交流圈子,并且“顾后”。
再谈谈“顾后”:架构师的另一个重要的职责是发掘团队中的好苗子,帮助他们,使他们赶上并超越自己。
无论这一点是否写入你的KPI,这样做都是必须的。站在架构师的立场看,架构必须有一个好的技术梯队一层层传递下去,才能够有效、持续地贯彻执行。
如果只是架构师们冲在前面,背后空了一大片,架构永远只能停留在蓝图上,要站在企业的立场看。
企业真正的技术实力,不在于已经有怎样的系统或者平台,而在于是否有一个强大而有生命力的技术团队,通过快速复制架构师的技术与经验,可以帮助发展并壮大这样的团队,而企业整体技术实力的提升也促进了架构师提升。
业务产品架构
技术架构的目的是为了服务好业务,技术离开了业务,啥都不是。所以,对于好的架构师来讲,对业务的掌握以及理解,需要一个团队从早期就意识起来。
我用一个例子来举例:语言翻译能力。
将业务语言翻译为产品语言、开发语言的能力很重要,业务需求来自客户或业务部门,收集到的信息是基于业务语言描述。
业务架构师需要学会基于自己的经验知识进行分析,把业务语言转换成产品语言、开发语言,这样在跟产品、研发团队的沟通中,才能完成信息的有效、高保真传递。
我早几年前接触过很多大公司的BD,基本就是干着活,能把一个用户的需求,从需求、产品、市场、功能、流程分析出一份详细的需求报告书出来,在与用户确认后,才能需求分析书转到技术部开始架构设计等后续的工作。
一般来讲,公司的很多需求业务模型,都是他们在整理,比如,公司的核心业务介绍等手册。
当然,这里还有好几个方面,比如,对行业的理解、交流沟通能力等等。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》