java知识点思维导图
2019-05-22 10:00:00 3 举报
AI智能生成
java技术栈思维导图
作者其他创作
大纲/内容
JDK
基本类型
理解自动装箱拆箱。
理解整型、字符串常量池,会正确比较两个整型对象。
数量掌握字符串的操作。
理解hashCode和equals方法以及使用场景。
只要重写 equals,就必须重写 hashCode。
集合
iterator
list
arrayList
理解扩容机制以及CRUD性能。
linkedList
理解链表相对于数组的高效使用场景。
map
HashMap
理解底层是数组+红黑树的结构,put与get执行原理。
TreeMap
了解和HashMap的区别,有序性。
ConcurrentHashMap
了解线程安全,以及相对于hashTable实现的高性能原因。
LinkedHashMap
了解用双向链表维护的顺序。
自定义对象作为key必须重写equas和hashcode方法
set
HashSet
理解底层是hashMap
TreeSet
同上
LinkedHashSet
同上
自定义对象必须重写equas和hashcode方法
工具类
Arrays
会使用
Collections
会使用,理解排序,差集交集等底层实现方式。
io
BIO
Input/OutputStream
理解装饰器模式,BufferedInputStream,FileInputStream, ByteArrayInputStream
Reader
会使用他或者Stream读写文件。
File
会创建删除文件。
NIO
了解和BIO的区别在于一个是基于流的一个是基于缓冲区的。
了解基于缓冲区的NIO可以随意移动文件指针而流只能一个个字节读取。
因为性能问题,和hashcode在不同机器上值不同的原因,
ArrayList和HashSet、HashMap用trasient过滤默认序列化的字段,重写read、writeObj方法
ArrayList和HashSet、HashMap用trasient过滤默认序列化的字段,重写read、writeObj方法
多线程
锁
会使用方法上的,块上的Synchronized锁。
了解Lock接口。
了解各种力度的锁:自旋锁、偏向锁、轻量级锁,粗化锁,读写锁等。
多个线程加锁顺序必须一致。
单例
会编写正确的单例对象。
并发框架
会正确使用JDK提供的线程池: ThreadPoolExecutor 。
切记不要使用ExcecutorService类提供的线程池。
了解CountDownLatch、CyclyBarrier等并发工具类以及使用场景。
自己实现一个连接池
线程接口
Runnable
会使用
Callable
会使用
Thread
会使用
CAS
AQS
异常
运行时异常
理解
非运行时异常
理解
新特性
lambda
了解
map/reduce
了解
函数式编程
了解
G1等新收集器
类加载器
JDK的三个类加载器
Bootstrap class loader
Extension class loader
APP class loader
线程上下文加载器,caller加载器
自定义加载器
tomcat的类加载器
JVM
内存模型
栈和堆
栈
线程私有,运行时创建
堆
线程共有
堆和常量池
-128 ~ 127 的int常量池和String常量池。
理解
堆划分
新生代
Eden
Survivor1
Survivor2
老年代
元数据区
volatile
了解可见性、顺序性。
GC
了解CMS,Parallel,ParNew等收集器,以及使用场景。
分布式
数据一致性
paxos
事务
ACID
选举
CAP
C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。
A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
可用性的两个关键一个是合理的时间,一个是合理的响应。
可用性的两个关键一个是合理的时间,一个是合理的响应。
P (分区容错性):当出现网络分区后,系统能够继续工作。
打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。
打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。
CP系统,放弃可用性,也就是一段时间内无响应,比如zookeeper。
AP系统,放弃强一致性,选择最终一致性。
网络
tcp
三次握手、四次挥手
ack
udp
netty
拆包粘包
channel
ChannelHandler
ChannelHandlerContext
pipeline
InBoundHandler
OutBoundHandler
bossThreads
负则接收请求,管理selector
workerThreads
负则处理请求
EventLoopGroup(多个线程)
一个线程管理多个EventLoop
多路复用,管理多个channel
数据结构与算法
树
图
表
堆
动态规划
构造最优子结构
自底向上
贪心
Maven
熟练掌握编写Pom文件,会根据不同环境配置不同的Profile文件。
了解如何解决依赖冲突。
前端
JS
类型、对象、数组等基础。了解原型链。
CSS
熟练使用Css2基础:盒子模型,table布局。
H5
了解。
Vue,Iview
熟练掌握。
nodejs
会用nodejs开发模式,会使用反向代理。
webpack
会前端打包和调试。
Java Web 框架
Servlet
理解Web容器基于Servlet规范。
理解重定向和转发。
理解生命周期。
会用Servlet编写接口。
Filter
过滤器。
Listenner
监听器。
Spring
Ioc
会使用Xml或注解配置Spring对象。
了解Spring是如何创建对象的,如何解决循环依赖,会配置对象。
Aop
实现原理:JDK动态代理、修改字节码。
使用场景:日志记录,跟踪,优化和监控。
事务的处理,dao查询数据库。
系统统一的认证、权限管理等。
应用系统的异常捕捉及处理。
针对具体行业应用的横切行为。
事务的处理,dao查询数据库。
系统统一的认证、权限管理等。
应用系统的异常捕捉及处理。
针对具体行业应用的横切行为。
会用切面统一处理日志、权限。
注解
AutoWired
Controller、Service、RequestMapping、RequestParam等等。
Resource、Value、RequestBody、ResponseBody等等。
事务传播属性
REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
SpringMvc
会用Spring 拦截器。
了解请求参数组装,返回参数组装原理。
了解请求从Web容器到Controller之间,SpringMvc是如何处理一个请求的。
Mybatis
会用Xml编写Sql,了解#{}和${}的区别。
了解Dao接口如何实现Xml的sql语句。
了解Mybatis拦截器。
理解事务和隔离级别。
理解连接池以及配置参数。
自己实现一个连接池
Hystrix
拥有监控、限流、熔断的思维。
MySql
了解InnoDB和Mysiam。
了解Mysql架构:sql语句如何被编译到执行取数。
掌握一般的Sql优化技巧。
索引
唯一索引
墨菲定律
组合索引
B+tree
index(a,b,c)代表建立了三个索引:a,a_b,a_b_c
最左匹配原则,where必须是等值匹配,且和索引建立顺序一样
有序性,order by多个,前面的where必须是等值匹配,且和索引建立顺序一样
和索引建立顺序不同时,优化器可能也会使sql成功使用组合索引
聚集索引
innodb
默认使用主键作为聚簇索引
B+tree结构存储索引,叶子节点包含整行数据
除主键外的索引都是二级索引,二级索引叶子节点包含主键Id,为了查聚簇索引
覆盖索引
为select的字段建索引,使用全索引扫描代替全表扫描。
关联表
禁止3张表以上的联查,on字段要加索引。
延迟关联
先用where过滤多余数据。
拆分关联查询,使缓存充分发挥作用,分表,IN代替关联。
explain指令
type
All
全表扫描
index
全索引扫描
range
范围索引扫描
ref
返回索引到的多个行
ref-eq
返回索引到的1个行
const
where里面只有主键
null
最高效的,未扫描索引和表就返回结果。
extra
using index表示全索引扫描
using where表示全表扫描
理解事务:未提交读、提交读、重复读、幻读、串行化,MVCC并发版本控制。
理解锁。
行、表锁、死锁。
建表规范
流水表的时间唯独要加冗余字段-年/月/日/周/时
建索引前,要先考虑是否合适
尽量不要使用null字段
建表/加字段时要不能仅仅考虑到添加和修改,还要考虑到查询的sql是否简单
月流水少于1000万的或月表小于1G的不要分表,更不要分区
项目实战
熟练使用webconfig搭建javaweb项目。
熟练掌握配置文件,会修改配置。
设计模式
熟练掌握单例
理解装饰器模式
理解迭代器模式
了解命令模式
了解工厂模式
linux
shell
docker
docker编排-k8s
编译原理
字节码
递归向下parser
javaagent
pinpoint
大数据
hadoop
hive
hbase
hdfs
nameNode
editlog
fsimg
2thNameNode
dataNode
block
Replication
elk
ElasticSearch
Replication
Logstash
Kibana
收藏
收藏
0 条评论
下一页