知识图谱
2019-05-05 10:28:36 0 举报
AI智能生成
java后端知识图谱
作者其他创作
大纲/内容
java
线程相关
线程池
线程同步
同步锁
子主题
种类
对象锁
类锁
sychronized
修饰的作用域
代码块
类
方法
域
保证了原子性,可见性,有序性
阻塞同步
Lock
ReentrantLock
当获取不到锁的时候,可以返回,避免线程被阻塞
Condition
好处
控制粒度更细
使用类对象来封装锁信息,可以获取到当前等待锁的线程信息,以及当前锁被哪个线程获取等等
原子类
同步原理
对对象的修改会校验当前的值,如果不是期待的值的话返回false
非阻塞同步
volatile
线程可见性,对变量的所有写操作都会立刻反应到其他线程中去
对于非原子操作的写命令,在并发情况下会存在不安全的情况
保证了可见性
cas
乐观锁,在锁定之后不影响读操作
原子性,可见性,有序性
final关键字保证了可见性(初始化后不允许修改)
Map
HashMap实现
ConcurrentHashMap
线程安全,通过sychronized关键字做控制
TreeMap
通过红黑树实现的有序的Map
非线程安全
Collection
线程安全的
子主题
异常
可检查异常(checked exception)
Exception及任何非RuntimeException的子类
未检查异常(unchecked exception)
RuntimeException及其子类
Error
编译器异常,一般是非正常情况下出现的,应该直接抛出来这个异常
继承关系
Throwable
Error
Exception
RuntimeException
InterruptedException
CloneNotSupportException
ReflectiveOperationExcetion
java动态代理
jdk
为被代理对象生成一个代理类,在代理类中调用被代理对象的方法。只适用于接口
cglib
为被代理对象动态生成一个子类(Enhance)
NIO
组成
Buffer
数据传输的两端
Selector
监听连接,新建Channel
Channel
I/O传输的两端
I/O比较
传统I/O对于每次I/O操作,都会新建线程,并且这些线程会一直阻塞,直到完成操作
执行InputStream和OutputStream的操作一般都意味着不断循环的将字节逐一从输入流读出或写入到输出流。你可以使用缓冲I/O流来降低I/O成本(凡是I/O请求都经常触发磁盘访问、网络动作或其他一些成本昂贵的操作)。缓冲输入流则是从缓冲的内存区域读取数据,只有缓冲读完才会调用native input API(不同操作系统提供的本地输入流API——译者注)。同样的,缓冲输出流也将数据写入缓冲,只有缓冲写满才会调用native output API。这些带缓冲的API很好的封装了未缓冲的流操作: BufferedInputStream 和 BufferedOutputStream.
同步与异步的区别在于,在发起IO请求之后,是否等待结果的返回
NIO通过一个单独的线程专门处理I/O操作
异步阻塞IO
此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作。因为select之后,进程还需要读写数据),从而提高系统的并发性
设计模式
创建类
单例模式
需要会手写代码
建造者模式
工厂模式
抽象工厂模式
原型模式
实现Clonable接口,从内存中复制,Clonable默认使用浅拷贝
实现Clonable接口,从内存中复制,Clonable默认使用浅拷贝
结构类
适配器模式
把一个类适配到另一个类
桥接模式
组合模式
装饰器模式
为类增加接口
外观模式
接口的组合(Facade接口)
享元模式
代理模式
行为类
责任链模式
Netty中对事件Event的处理
分支主题
Dubbo中Filter的处理(通过SPI加载)
Tomcat中Engine,context,container,wrapper的处理
解释器模式
对每个运算做递归的拆分处理
命令模式
把一个行为封装为对象
观察者模式
也叫发布订阅模式,通过对事件的监听,在事件发生前后触发某个动作
jvm
内存结构
程序计数器
各个线程独立
保存当前方法的执行过程
java栈
java堆
方法区
本地方法区
垃圾回收
回收对象
堆内存
堆中存储对象信息,静态类型变量等
栈中存储对象的引用以及方法执行过程中产生的临时变量
GCRoot
栈引用
计数器
静态对象
垃圾收集算法
标记清除算法
复制算法
标记整理算法
分代收集算法
引用计数
对象标记
充当GcRoot的对象
垃圾回收针对的是堆内存的对象
在做垃圾回收时,遍历栈中的引用,对堆中的对象做标记,最终未被标记的对象认为不存在引用。
若一个对象不存在引用,则该对象被视为回收对象
分代回收
每躲过一次minorGc,则生存期加1,新生代老年代就是根据生存期来判断的
MinorGc回收新生代的内存区;而FullGc则会回收包含老年代在内的所有内存区域;
永久代:主要回收废弃常量和不用的类
类加载
类加载器种类
启动类加载器
其他Java语言实现的独立于虚拟机的加载器
扩展类加载器
应用程序类加载器
双亲委派模型
class文件结构
spring
特性
aop
ioc
事务管理
相关
listener
用来监听客户端连接和服务端事件等
servlet上下文的监听,包括
ServletContextListener
request请求
HttpRequest
session
HttpSession
springschedule
调度的实现
springcloud
熔断机制
hystrix
隔离
线程池
计数器
降级
超时或调用失败的请求达到配置的阈值时,不再请求接口,而是返回回调函数
熔断
尝试连接服务,检查服务是否恢复
缓存
路由
配合服务注册eureka或者feign
dubbo
服务注册与发现
SPI
分布式缓存
Redis
基本数据结构
字符串
列表
Memcached
tomcat
Connector
载入servlet
构造函数中根据传入协议的不同,对ProtocolHandler做初始化
调用Adapter
创建HttpResponse
创建HttpRequest
Processor
pipelinez红的Valve处理请求
Mysql
锁
引擎
InnoDB
锁的种类
意向排它锁
意向共享锁
共享锁
排它锁
行锁算法
Record lock
gap lock
NextKey lock
Subtopic 3
myisam
不支持事务
不支持行锁
隔离级别实现
ReadUncommitted
ReadCommitted
ReadRepeatable
Serializable
事务的传播机制
required
如果当前的方法有事务,则加入事务,没有的话创建一个
not supported
不支持事务,如果当前有事务,则挂起事务运行
required new
新起一个事务并在这个事务中运行
如果当前存在事务,则该事务被挂起;新事务的提交与回滚不会影响原事务
mandatory
强制当前方法以事务运行,如果当前没有事务的话报错
never
当前方法不能存在事务,如果存在事务则报错
supports
支持当前事务,如果没有事务则不以事务运行
nested
如果当前存在事务,则在嵌套事务内执行,提交或回滚和父事务无关;若会随着父事务的提交会回滚而提交或回滚
若当前不存在事务则新建事务
other
Nginx
maven
git
Linux
Zookeeper
节点类型
持久节点
临时节点
持久顺序节点
临时顺序节点
选举机制
节点数量过多或过少都不合适
过多的话选举过程会比较慢
过少不利于集群的可靠性
master下的slave分别发起选举,每个slave会保存当前选举的时间戳,当接收到其他slave发送的选举消息后,和自己的时间戳做比对
Nginx
web服务器
通过请求body中的url来做转发
可用来做负载均衡和静态文件的缓存
负载均衡方式
轮询
加权调度
源地址散列
保证同一个用户的请求被分配给同一个服务器
0 条评论
下一页