“
java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计。
希望能真正帮助到从程序员进阶到架构师之路的朋友。
算法分析与计算
算法时间复杂度和空间复杂度的分析计算
算法思想
递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限
常用数据结构
数组、链表、堆、栈、队列、Hash表、二叉树等
经典算法
排序
经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序等
查找
经典查找:顺序查找、二分查找、二叉排序树查找
深入理解面向对象
面向对象的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。面向对象的方式实际上由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分有机组成。
对象的三大特性:封装、继承和多态,优缺点
如何设计类,类的设计原则以及构造函数,内部类,抽象类,接口,对象的多态性,接口和抽象类的区别。
理解异常处理
Java 常见异常种类
Java Exception
Error
Runtime Exception 运行时异常
Exception
throw 用户自定义异常
java标准里也提到过,希望能用异常来处理错误信息以及后续流程,所以异常不仅仅只是异常,而是一个标准错误处理机制,并且也鼓励这样使用错误信息。
多线程
java多线程5大状态:
新建状态(New)
就绪状态(Runnable)
运行状态(Running)
阻塞状态(Blocked)
死亡状态(Dead)
Java多线程掌握
创建与启动
线程和进程的概念
线程安全
线程之间的通讯
线程的同步与锁
死锁问题的剖析
线程生命周期
线程池
输入与输出
标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。
Java I/O主要包括如下几个层次,包含三个部分:
流式部分――IO的主体部分
非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类
其他类–文件读取部分的与安全相关的类
反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
涉及到类加载机制原理、反射构造方法、字段、方法、Properties配置文件等相关学习要领。
网络编程
七层模型与协议的对应关系、Socket原理机制、UDP、TCP传输等知识点。
JVM
涉及到程序进阶,除了工作中平常使用以外,一定要深入去理解使用之外的核心原理,JVM特别是重中之重,JVM内存划分、class加载机制以及GC策略内存划分,Young Generation(年轻代)、Old G/eneration(年老代)以及Perm Generation(永久代)等。
前段技术
如今H5特别火爆,上图我截取了部分H5相关的重点掌握:html5、css3、js、以及对应的框架jquery、node等。
平时多掌握点web开发相关的,非常方便你今后后端调试等,前段知识还是要跟上。
Java Web核心
这里还是需要掌握整个java web从容器启动到request、filter、listener的过程,最好自己设置断点调试,把完整的生命周期都走一次。
模板引擎
上图是常见的模板引擎,比如淘宝一直使用velocity,现在最新又出来了个新模板引擎:beetl,有兴趣的同学也可以自己发掘。
高级特性
SSI技术
安全JCCA/JAAS
通信JNDI/JMS/JavaMain/JAF
集成JCA
事务JTA
首先,数据库设计的基本原则还是需要掌握
数据库设计原则和范式
第一范式,确保每列保持原子性。
第二范式,确保表中的每列都和主键相关。
第二范式,在第一范式的基础之上更进一层。
第三范式,确保每列都和主键列直接相关,而不是间接相关。
Sql与NoSql的优缺点以及使用场景分析
SQL 关系型数据库:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)
NoSQL泛指非关系型数据库 :MongoDB,Redis,Memcached,Hbase,CouchDB。
大型互联网项目常用的数据库选型方案:
采用MySQL + NoSQL的组合方案,根据业务场景和数据访问量来分别采用。
关系式数据库必备
事务(ACID、工作原理、事务的隔离级别、锁、事务的传播机制)
数据库创建,权限分配,表的创建,增删改查,连接,子查询
索引、触发器、存储过程、事务控制等
数据库性能优化
索引原理及适用,大表查询优化,多表连接查询优化,子查询优化
分库、分表、备份、迁移、导入,冷备热备,主从备份、双机热备、纵向扩展、横向扩展等这些都是属于比较常见的数据库方案,我在淘宝具体挑战性的一次架构演变中一文中谈到了数据库纵向和横向的发展策略,有兴趣的同学可以翻看历史查看。
web开发框架
Struts2、SpringMVC、spring、hibernate、myBatis
在搭建日志:Log4j
单元测试:JUnit
构建工具
推荐nexus搭建一套自己的代码仓库中心,采用maven管理,这些都是比较常见而且有效的构建方案。
Web服务器
Tomcat
JBoss
Jetty
Resin
WebLogic
WebSphere等
通信协议
RMI
Hessia
Burlap
Httpinvoker
Soap
WebService等
工作流
Activity、JBPM
搜索引擎
lucene,基于lucene封装的solr
其实就是要很清楚整个技术架构的演变历程,知道每个阶段的瓶颈在哪里,以及对应的解决方案,大型网站架构设计一般包含如下:
搭建分布系统的基础设施
缓存搭建
分布式缓存搭建 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,优先推荐ActiveMQ。
消息系统使用四大场景
异步处理
应用解耦
流量削锋
消息通讯
常用的大数据方案
一般先分库,如果分库后查询仍然慢,于是按照分库的思想开始做分表。
比如淘宝中期数据库压力非常大了,于是数据库端按照业务做垂直拆分:交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。
采用sql和nosql混搭搭建再配合搜索引擎
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
除此之外,还要考虑安全以及机房容灾以及系统运维监控等。