导图社区 java技术总结
这是一篇关于java技术总结的思维导图,主要内容有spring cloud、spring boot、spring mvc、spring、中间件等。
编辑于2022-08-20 12:21:10 北京市技术总结
spring cloud
注册中心
zookeeper
zab
paxos
leader选举
1.每个server(myid,zxid)投票
2,接受投票
3,处理投票,zxid大的优先,myid大的优先
4,统计投票.确定leader
5.改变服务器状态
同步
使用场景
数据发布/订阅
master选举
负载均衡
命名服务
分布式协调/通知
集群管理
分布式锁
分布式队列
数据类型
节点类型
持久化节点
临时节点
顺序节点
注册中心
启动注册
关闭取消注册
nacos
注册中心
ap
数据临时
cp
数据持久
同步
1,消费者定时拉取/定时上报
2,变更立即同步udp
3,启动注册
4,关闭注销
consul
agent
机器上报agent
agent主动检查
eureka
配置中心
git server
apollo
inialize加载
定时更新
长轮询通知
etcd
nacos
cp
通知
周期查询
长轮询通知
1,保存更改
2,通知所有nacos
3,通知上报的机器
熔断/限流/降级
hystrix
信号量
线程
熔断器
开
关
半开
滑动窗口
sentinel
流量
qps
直接
warmup
wait
关联资源
线程
关联资源
熔断
熔断策略
个数
异常数
熔断时长
最小请求数
统计时长
错误率
比例
熔断时长
最小请求数
统计时长
rt
rt
比例
熔断时长
最小请求数
统计时长
热点规则
限流模式
qps模式
参数索引
单机阀值
统计窗口时长
集群
集群阀值模式
单机均摊
总体阀值
系统保护
load
rt
线程数
入口qps
cpu使用率
授权规则
名称
流控应用
授权类型
白名单
黑名单
网关
gateway
zuul
负载均衡
loadbalance
ribbon
rpc
http
协议
请求
method url version
k v
body
返回
状态 状态码 版本
k v
body
状态
1
协议转换
100
继续
101
切换协议
2
成功
200
成功
201/202
已创建
203
未授权
204
无内容
205
重置内容
206
部分内容
3
转发
300
多种选择
301
永久移动
302
临时移动
303
查看其他位置
304
未修改
305
使用代理
306
未使用
307
临时重定向
308
永久重定向
4
请求失败
400
错误请求
401
未授权
402
需要付款
403
禁止访问
404
未找到
405
不允许使用该方法
406
无法接受
407
验证代理身份
408
请求超时
409
冲突
410
已失效
其他
5
服务失败
500
内部错误
501
未实现
502
网关错误
503
服务不可用
504
网关超时
505
http版本不支持
消息头
通用
Date
Cache-Control
Connection
请求
Accept
Accept-*
User-Agent
Via
返回
Access-Control-Allow-Origin
Allow
age
location
server
请求体
content-*
expires
web安全
xss
定义
页面插入脚本代码,浏览执行
影响
窃取用户个人信息
窃取用户cookie,不知情下,发送恶意请求
伪造文章或图片
非持久化xss(反射性xss)
别人发哦那个恶意脚本代码参数的url
持久性xss(存储型xss)
from提交后保存,然后在页面渲染
防御
csp
配置白名单,告知那些可执行
配置方式
content-security-policy
设置meta标签
转义字符
保存转移后的字符
富文本使用白名单
httponly cookie
csrf
原理
条件
用户登录A
用户没有登出A(cookie生效),访问B,B要求访问A
站点A没有做CSRF防御
防御
规则
get不对数据进行修改
不让第三方网站访问用户cookie
阻止第三方网站请求接口
请求福袋验证信息,验证码或者token
samesite
同站才可发送cookie
referer check
referer检查
anti csrf token
发送请求时在http请求中已参数形式添加一个随机产生的token
验证码
降低体验,不能所有操作都加上验证码
点击劫持
特点
隐蔽性高,骗取用户操作
UI-覆盖攻击
利用iframe获取其他标签
原理
登录A
打开第三方网站
点击按钮,其实点击了A网站的按钮
防御
X-frame-options
javascript防御
url跳转
原理
诱导用户跳转到其他网站
防御
referer限制
加入有效验证token
实现
header跳转
javascript跳转
meta标签跳转
sql注入
原理
危害
防御
严格限制web数据库权限
后端检查入参
数据库转移
使用参数化查询接口
os命令注入
原理
利用提交执行命令
防御
提交内容验证
提交转移过滤
不直接拼接命令,借助工具拼接转义
跨域
原因
同源策略
协议/域名/端口相同
解决
jsonp
websocket
cors
feign
dubbo
用法
启动时检查
ReferenceConfig#checkInvokerAvailable
重试次数
集群容错
failover
按照重试次数进行重试
当前+重试次数
failfast
只执行一次
failsafe
执行一次
错误返回空值
failback
使用HashedWheelTimer保存错误请求,每5s执行一次
默认执行3次,最大个数默认100,超过拒绝
forking
默认并发2,超时1s
并发执行,获取首个
newCachedThreadPool执行并发
负载均衡
random
原理
根据权重相加为一个数字,根据随机数选择一个
配置权重相同,随机算账一个
缺点
数量足够大才可越均匀
roundrobin
原理
路径+service获取轮询管理对象
按照公约后的权重设置轮询比率
缺点
慢请求会堆积
leastactive
原理
选择最小链接数invoke,相同的随机选取
缺点
慢链接会越聚越多
consistenthash
原理
hashkey=服务名+方法
默认160个hashnode,按照单个请求160/4循环,按照4倍放入节点中
一台挂掉后,基于虚拟节点,不至于剧烈变动
按照hash环取值
缺点
逻辑复杂
线程模型
直连提供
只订阅
ConfigValidationUtils#loadRegistries
过滤仅订阅
多协议
多注册中心
服务分组
静态服务
多版本
分组聚会
参数验证
provider超时打断
结果缓存
回声测试
上下文信息
隐式参数
异步调用
异步执行
本地调用
参数回调
时间通知
本地伪装
延迟暴露
并发控制
ExecuteLimitFilter#invoke
ActiveLimitFilter#invoke
链接控制
AbstractServer#connected
粘滞连接
AbstractClusterInvoker#select
TLS
令牌验证
路由规则
配置规则
服务降级
优雅停机
客户端
服务端
层级
消费
dubboInvoke
filter
服务监听
注册监听
服务重试
负载均衡
数据转换
序列化
发送
生产
dubboExporter
filter
数据转换处理
反序列化
接收
grpc
分布式
cap
a可用性
c一致性
p分区容错性
base
ba基本可用
s软状态
e最终一致性
分布式事务
2pc
3pc
rocketmq 事务
tcc补偿事务
try检查和预留资源
confirm确认业务提交
cancel业务执行失败,回滚
最大努力通知
seata事务
全局唯一id
uuid
雪花
redis
zookeeper序号
leaf
id-generator
分布式锁
redis
zookeeper
数据库操作
spring boot
自动加载
SpringFactoriesLoader
配置文件
ConfigFileApplicationListener
@bean
ConfigurationClassPostProcessor
spring mvc
interceptor
继承HandlerInterceptor然后添加到addInterceptors
dispatcher
ExceptionResolver
1,configureHandlerExceptionResolvers
2,@ControllerAdvice(1存在则2不能存在)
3,extendHandlerExceptionResolvers
server
listener
ServletListenerRegistrationBean
@WebListener
filter
FilterRegistrationBean
@WebFilter
spring
ioc
BeanPostProcessor
DestructionAwareBeanPostProcessor
MergedBeanDefinitionPostProcessor
InstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor
BeanFactoryPostProcessor
BeanDefinePostProcessor
aop
事务
事务传播性(事务开始)
required
首次
无事务->创建事务
再次
有->使用当前事务
无->创建事务
requiered_new
首次
无事务->创建事务
再次
中断当前事务->创建事务
support
首次
无->不创建
再次
有->使用当前事务
无->不创建
not_support
首次
无->不创建
再次
有->中断当前事务
无->不创建
mandatory
首次
无事务->抛错
再次
有事务->使用当前事务
无事务->抛错
never
首次
有事务->抛错
再次
有事务->抛错
nested
首次
无事务->创建事务
再次
无事务->创建事务
有事务->创建保存点
事务回滚
有保存点
回滚到保存点
新事务
回滚事务
有事务
local回滚||globally回滚
doSetRollbackOnly
事务提交
local回滚
回滚
不shouldCommitOnGlobalRollbackOnly&&isGlobalRollbackOnly
回滚
提交事务
保存点
提交保存点
新事务
提交新事务
事务实现
BeanFactoryTransactionAttributeSourceAdvisor
InfrastructureAdvisorAutoProxyCreator
事务失效
方法不使用public
final/static不能使用代理
事务抛出不是事务支持的异常
默认runntime
数据库不支持事务
事务没有被spring管理
事务内部catch
方法自身调用
数据源没有配置事务管理器
传播类型不支持事务
多线程调用事务失效
aop
aop实现
AnnotationAwareAspectJAutoProxyCreator
BeanFactoryAspectJAdvisorsBuilder#buildAspectJAdvisors
InstantiationModelAwarePointcutAdvisorImpl#determineAdviceType
AbstractAspectJAdvisorFactory.AspectJAnnotation
ReflectiveAspectJAdvisorFactory#getAdvice
定义
增强处理
切入点
连接点
切面
目标对象
aop代理
织入
启动
sarting
创建环境变量
创建上下文
prepareContext
applyInitializers
listeners.contextPrepared
load上下文
listeners.contextLoaded
refreshContext
beanFactory执行
postProcessBeanDefinitionRegistry
postProcessBeanFactory
注册beanpostprocess
Priororder
order
nonorder
refresh
创建server
初始化单例
创建单例对象
finishrefresh
lifecycle
stated
running
生命周期
实例化pre
实例化
实例化after
field赋值
初始化pre
初始化
初始化after
对象销毁
中间件
db
mysql
mybatis
dbpool
durid
dbcp
shardjdbc
分库
分表
执行过程
解析
优化
改写
路由
执行
归并
扩容
查询
分页
全局视野
业务折中
二次查询
5条 第200页
from t offset 1000 limit 5
2个库(3个库)
改写为 from t offset 500 limit 5(333 5)
条件最小->此次查询最大
得到全局视野
汇总合并
tdll
存储引擎
innodb
文件组成
文件
日志
索引
锁
事务
限制
innodb limit
表
行
单行不能超过页(16k)大小的一半
单行最大65535字节
列
1017列
index
second index
64个
index_key
767 bytes
dedundant/compact
multicolumn
16
namespace
16k->64TB
redis
类型
string
sds
len
unsigned int
free
unsigned int
char[]
int
list
ziplist
zlbytes
uint32
zltail
zllen
entry
entryn
zlend
uint16
list
head/tail
listNode
prev/next
listNode
value
len
unsigned long
map
ziplist
dict
set
intset
encoding
unit32_t
length
uint32_t
contents[]
int8_t
dict
sortedset
ziplist
zset
dict
type
dictType
privdata
void
ht[2]
dictht
table
dictEntry
size
unsigned long
sizemask
子主题
unsigned long
used
子主题
unsigned long
rehashidx
long
iterators
int
zskiplist
header,tail
zskiplistNode
obj
robj
score
double
backwrod
zskiplistNode
level
zskiplistLevel
forward
zskiplistNode
span
unsigned int
length
unsigned long
level
int
集群
单机
主从
哨兵
分布式
codis
组成
dashboard
集群管理工具
proxy
客户端连接的redis的代理服务实现redis协议
server
基于redis开发,增加额外数据结构,以支持slot有关操作
fe
集群管理页面
添加group
初始化slot
admin
集群管理命令行工具
storage
集群提供外部存储
使用
穿透
大量不存在
1存放空数据
2,配置白名单
3,布隆过滤器
4,配置黑名单
击穿
redis不存在/db存在 大量并发一个点访问
1,预热数据
2,监控热门数据,实时调整key过期时间
3,热点key设置不过期
血崩
大量cache过期
1,多级缓存(nginx->redis->其他)
2,过期,后台触发自动更新
3,配置随机过期,防止大量同一时间过期
4,使用锁防止批量查询数据库
5,服务降级
访问非核心数据,直接返回预定义信息,空值或报错
访问核心数据,允许访问缓存,缓存缺失,可以读取数据库
redis宕机
服务熔断或者限流
事前预防
构建redis高可靠集群
分配
引用计数
回收
内存周期
周期性进行清理
超过1/4的继续进行清理
内存不足
lru-全部
lru-过期时间
lfu-全部
lfu-过期时间
随机-全部
随机-过期时间
不处理
即将过期
客户端
jedis
redission
分布式锁
时间轮
监控
性能监控
cpu
使用率
使用量
内存
使用率
使用量
请求
请求数
连接
连接数
链接使用率
流量
出入速率
出入使用率
时间
平均延时
统计
示例key
命中率
命中与未命中的key
keys
string
hashes
lists
set
zset
hyperlog
pubsub
transaction
script
统计
大key
nosql
mongo
hbase
mq
kafka
生产者
发送方式
同步
异步
配置参数
生产者
key.serializer
value.serializer
buffer.memory
33554432
32m
compression.type
retries
targetNode无
和节点失去联系
2147483647
int最大值
max.in.flight.requests.per.connection
5
max.block.ms
1min
max.request.size
batch.size
16KB
client.dns.lookup
delivery.timeout.ms
默认值为2分钟
connections.max.idle.ms
max.block.ms
默认值为60s
max.request.size
默认值为1M
request.timeout.ms
默认值为30秒
send.buffer.bytes
acks
all/-1
isr接收才返回
1
leader返回
0
不等待,接收就返回
linger.ms
默认值为0,即不等待
retries.backoff.ms
100ms
消费者
key.deserializer
value.deserializer
bootstrap.servers
fetch.min.bytes
1
heartbeat.interval.ms
3s
max.partition.fetch.bytes
1m
session.timeout.ms
45s
connections.max.idle.ms
9m
default.api.timeout.ms
enable.auto.commit
fetch.max.bytes
50m
max.poll.interval.ms
5m
max.poll.records
500
receive.buffer.bytes
64k
request.timeout.ms
60s
auto.commit.interval.ms
retry.backoff.ms
100
fetch.max.wait.ms
500
broker
auto.create.topics.enable
auto.leader.rebalance.enable
compression.type
log.flush.interval.messages
log.flush.interval.ms
log.flush.offset.checkpoint.interval.ms
log.flush.scheduler.interval.ms
log.flush.start.offset.checkpoint.interval.ms
message.max.bytes
replica.socket.receive.buffer.bytes
replica.socket.timeout.ms
request.timeout.ms
socket.request.max.bytes
socket.send.buffer.bytes
zookeeper.connect
zookeeper.connection.timeout.ms
zookeeper.max.in.flight.requests
zookeeper.session.timeout.ms
broker.heartbeat.interval.ms
connections.max.idle.ms
log.cleaner.threads
max.connections
max.connections.per.ip
num.partitions
丢数据
原因
网络没有发送到broker
数据太大没有发送到broker
ISR没有保存
处理
不使用oneway
使用ack(all/isr)
重试次数/重试时间
重试
同步/异步
发送失败
参数
retries
max.in.flight.requests.per.connection
retry.backoff.ms
broker
组成
topic
partition
segment
log
index
timeindex
速度原因
顺序写
mmfile
直接从内存读
同步
ISR
丢数据
原因
异步刷盘
写入->pageCache->fsync->可能丢失
处理
配置副本数量>=3
最小副本数量>=2
最小同步数量>=2
zookeeper
选主
注册中心
消费者
丢数据
原因
拉取没有处理自动提交
处理
处理完毕后提交
负载均衡
触发条件
1消费者
1加入
2退出
3被动下线
长时间gc,网络延迟导致消费长时间未向协调者发送心跳
2,生产者数量变更
3,topic分区变化
策略
range(默认)
c1:q1,q2,q3
c2:q4,q5,q6
round-robin
sticky
弊端
tps
慢,对业务影响
效率不高
避免
1中的1,2人为避免
2,3人为避免
1中3
心跳
session.timeout.ms = 6s
heartbeat.interval.ms = 2s
3个心跳才认为下线
消费时间
max.poll.interval.ms
大一点,不会导致处理消息太长导致rebalance
rocketmq
nameserver
生产者
发送
发送消息
并发
同步
条件
发送失败
异步/oneway
条件
发送后回调失败
顺序
同步/oneway
单次,未找到重试的代码
异步
回调后重试
规避机制
重试规避
发送规避可能导致无可用broker
参数
sendMsgTimeout
3
compressMsgBodyOverHowmuch
4k
retryTimesWhenSendFailed
2
retryTimesWhenSendAsyncFailed
2
defaultTopicQueueNums
4
retryAnotherBrokerWhenNotStoreOK
false
maxMessageSize
4m
broker
部署方式
单master
多master
多master多slave异步复制
多master多slave主从同步+异步刷盘
刷盘
同步刷盘
异步刷盘
同步
主从同步
主从异步
异常处理
从库消费数量无法同步到主
消费者不重启,重新发送到主即可
主长时间故障,需将从库消费offset复制到主
源码
存放消息
DefaultMessageStore#putMessage
消费者
消费
拉取位置
从主拉取
主宕机/内存不足等从拉取
消费类型
顺序
集群/广播
自动重试(间隔每次1s),消息阻塞
使用suspend_current_queue_a_moment不使用reconsume_later
并发
集群
(普通,定时,延时,事务)通过返回状态进行重试
重试配置
RECONSUME_LATER/null/异常
最大重试次数16
广播
不重试
死信
消息
不会再消费
和正常消息3天后正常自动删除
队列
不会再被消费
一个队列对应一个groupid
无死信,不创建
一个队列包含对应groupid产生的所有死信,不论该消息属于哪个topic
负载均衡
触发条件
生产者/消费者数量变更或者异常
消费者20s自动触发
分布
AllocateMessageQueueAveragely(默认)
c1:q1,q2,q3
c2:q4,q5,q6
AllocateMessageQueueAveragelyByCircle
c1:q1,q4,q7
c2:q2,q5,q8
参数
messageModel
CLUSTERING
consumeFromWhere
CONSUME_FROM_LAST_OFFSET
consumeThreadMin
20
consumeThreadMax
20
adjustThreadPoolNumsThreshold
100000
consumeConcurrentlyMaxSpan
2000
pullThresholdForQueue
1000
pullThresholdSizeForQueue
100mb
pullThresholdForTopic
-1(不限制)
pullThresholdSizeForTopic
-1(不限制)
pullInterval
0
consumeMessageBatchMaxSize
1
pullBatchSize
32
postSubscriptionWhenPull
false
maxReconsumeTimes
-1
suspendCurrentQueueTimeMillis
1000
consumeTimeout
15m
awaitTerminationMillisWhenShutdown
0
java
jvm
构建结构
内存模型
主内存工作内存
特征
原子
可见
有序
先行规则
程序次序
管程锁定
volatile
线程启动
线程终止
线程中断
对象终结(finalizer)
传递性
结构
方法区
方法区
线程共享
类型信息,常量,静态变量,即时编译期编译的代码缓存
class有类的版本,字段,方法,接口
运行时常量池
方法区一部分
编译器生成的字面量和符号引用,这部分在在加载后放入运行时常量池中
虚拟机栈
线程私有,每个线程一个栈帧
栈帧(局部变量表,操作数栈,动态链接,方法出口等)
异常
大于栈深度->StackOverflowError
动态扩展,无法满足->OutOfMemoryError
本地方法栈
同虚拟机栈
堆
线程共享
分配
几乎所有的对象都在堆上
个别逃逸技术(栈上分配,标量替换)
结构
年轻带
eden
2survivor
老年带
内存分配
tlab
内存碰撞
示例
serial
parNew
特点
规整+压缩
简单高效
空闲列表
cms
命令
xms
xmx
xmn
程序计数器
当前线程锁执行的字节码的行号指示器
唯一一个没有规定异常的区域
本地native,为空(undefined)
直接内存
不是虚拟机一部分
outofmemoryerror
分配受总内存限制
对象
可达性分析
虚拟机栈中的对象,方法参数,局部变量,临时变量
静态变量
方法区常量
本地方法栈中jni引用的对象
引用
强引用
软引用
弱引用
虚引用
生存
首次标记
没有finalize假如f-queue,连上root则不删除
执时间太久不等待
方法区回收
回收条件
类实例回收
class对象无引用
累加载器回收
回收场景
大量使用反射,动态代理,cglib等动态生成jsp
osgi频繁自定义类加载器的场景
对象头
布局
访问
句柄
未锁定
hashcode,分代年龄
可偏向
锁指针,epoch,分带年龄
轻量级锁
锁指针
重量级锁
锁指针
gc
指针
节省一次指针定位的时间开销
对象访问非常频繁,节省时间很客观
使用
加载
加载过程
加载
验证
准备
解析
初始化
使用
卸载
加载器
双亲委派
启动类加载器
扩展类加载器
应用加载器
破坏双亲委派
1.2之前
spi父类加载子类实现
用户对程序动态要求
异常
cpu
jps
top -Hp pid
jstack->16进制
内存
堆溢出
xms xmx
问题排查
jmap -dump:file
mat/jprofile
非堆
栈
xss
方法区
persize
直接内存
maxDirectMemorySize
hang
死锁
jstack
io
句柄泄露
lsof查看句柄使用量
ulimit查看打开的句柄
netstat查看进程打开的链接
垃圾回收
查看日志中gc时长
使用printGC开启gc日志
使用jstat查看内存使用情况
使用mat查看内存占用情况
堆外内存
回收
内存分配回收策略
对象优先eden
大对象直接老年带
长期存货进入老年带
动态年龄判断
空间担保
full gc触发条件
system.gc
堆伸缩
老年带不足
元数据不足
空间担保失败
老年带连续空间不足
cms提升/担保失败
垃圾回收
垃圾回收算法
分代
标记清除
标记复制
标记整理
回收算法
根节点
安全点
执行方案
主动式
设置安全标志,到就近的安全点中断
只作用运行中的代码
安全区域
休眠片段
一段代码片段,引用关系不发生变化,可进行垃圾回收
记忆集和卡表
写屏障
并发的可达性分析
三色标记
黑色
子节点扫描完毕
灰色
子节点扫描中
白色
子节点没有开始扫描
垃圾回收器
年轻带
标记复制
serial
parnew
parallel scavenge
老年带
标记清除
serial old
parallel old
标记整理
cms
步骤
初始标记
并发标记
重新标记
并发清除
弊端
并发模式失效
cms并发时,对象放入老年带而不足,导致单线程fullgc
降低触发额
晋升失败
运行minor gc 老年带空间够,但内存碎片而不满足
gc后进行压缩
配置
fullgc n次后配置压缩堆
混合
g1
结构
堆分成多个region,每个都是年轻带,老年带
大对象特殊region
region个数2倍数
maxgcpausemills
步骤
初试标记
并发标记
最终标记
筛选回收
按照region回收价值和成本执行回收计划
优点
指定最大停顿时间
分region的内存布局
按收益动态确定回收集
局部复制,整体标记整理,无内存碎片
缺点
内存占用高
执行负载高
弊端
并发失败
标记周期,mixgc前,老年带填满
增加堆大小,调整周期(增加线程数)
晋升失败
gc时无足够内存存货或晋升
处理方式
增加预留堆大小
提前启动gc
增加并行标记线程数量
巨型对象分配失败
巨型无法分配,full gc释放空间
处理方式
避免分配大量巨型对象
增加内存
增大大对象分配空间,大对象就不是大对象了
网络
iso7层模型
应用
表示
数据格式处理
数据编码
压缩和解压缩
数据的加密和解密
会话
会话管理
会话流量控制
出错控制
传输
tcp
udp
网络
ip
arp
icmp
dns
dhcp
数据链路
物理
TCP拥塞控制
慢开始
拥塞避免
快重传
快恢复
序列化
java
thrift
protobuf
连接池
线程池
http
HttpClients
setConnectionManager
属性对象
socketFactoryRegistry
http
https
dns
socketconfig
setTcpNoDelay
setMaxPerRoute
setDefaultMaxPerRoute
属性
setMaxTotal
setProxy
setDefaultRequestConfig
setCookieSpec
setExpectContinueEnabled
setTargetPreferredAuthSchemes
setProxyPreferredAuthSchemes
io
类型
bio
aio
nio
netty
netty入门
tcp粘包/拆包
lineBaseFrameDecoder
分隔符
DelimiterBasedFrameDecoder
定长解码器
FixedLengthFrameDecoder
netty编解码
java序列化
缺点无法跨语言
码流太大
序列化性能低
主流解编码
google->protobuf
facebook->thrift
jboss->marshalling
netty源码介绍
ByteBuf
工作原理
继承关系
bytebuf
asbtractbytebuf
abstractRefenceCountByteBuf
子类
unpooledheadbytebuf
每次生成然后清理
unpooledunsafedirectbytebuf
ubpooldirectbytebuf
子类作为父对象
poolbytebuf
pooleddirectbytebuf
pooledheapbytebuf
pooledunsafedirectbytebuf
辅助类
Channel和Unsafe
channel
read
write
writeandflush
close
disconnet
connet
bind
isopen
isregistered
isactive
localaddress
remoteaddress
unsafe
invoke
localaddress
remoteaddress
register
bind
connect
disconnet
close
closeForcibly
write
flush
voidPromise
outboundBuffer
ChannelPipeline和ChannelHandler
ChannelPipeline
inbound
outbound
ChannelHandler
decode
byteToMessageDecoder
MessageToMessageDecoder
LengthFieldBaseFrameDecoder
encode
byteToMessageEncoder
MessageToMessageEncoder
LengthFieldBaseFrameEncoder
EventLoog和EventLoogGroup
线程模型
reactor单线程
reactor多线程
主从readtor多线程
netty的线程模型(根据配置上边三个都支持)
线程数量
公式1
线程数量=(线程总时间/瓶颈资源时间)*瓶颈资源的线程并行数量
公式2
qps=1000/线程总时间*线程数
Future和Promise
高性能
多路复用通讯方式
异步通讯NIO
零拷贝
接收发送使用bytebuffer使用直接内存,不需要二次拷贝
组合对象可以组合,像拷贝一个buffer处理
传输文件使用transferTo方法,直接通过文件缓冲区的数据发送
内存池
高效的reactor线程模型
无锁设计,线程绑定
高性能序列化框架
thrift
protobuf
模型
select
主动轮询所有fd
数组
poll
链表fd
主动轮询所有fd
epoll
链表fd
事件驱动
socket
tcp
服务端
选项
so_timeout
so_reuseaddr
so_rcvbuf
消费端
属性
远程地址
远程端口
本地地址
本地端口
选项
tcp_nodelay
so_bindaddr
so_timeout
so_linger
so_sendbuf
so_recvbuf
so_keeplive
oobinline
ip_tos
udp
集合
collection
list
并发
copyonwritearraylist
vector
stack
非并发
arraylist
linkedlist
queue
阻塞
linkecblockingqueue
synchronousqueue
linkedtransferqueue
priorityblockingqueue
delayqueue
arrayblockqingqueue
非阻塞
priorityqueue
concurrentlinkedqueue
set
有序
并发
concurrentskiplistset
copyonwritearrayset
非并发
treeset
linkedhashset
无序
非安全
hashset
map
有序
安全
concurrentskiplistmap
非安全
linkedhashmap
treemap
无序
非安全
hashmap
安全
concurenthashmap
初始化
数组
node节点
添加
table==null
初始化table
null
cas
转移中
resize进行中则帮助进行转移
非null
synchronized
小于64
扩容2倍
转换
大于等于8
小于等于6
超过0.75
扩容2倍
删除
table空
cas
转移中
resize进行中则帮助进行转移
非null
synchronized
获取
单个
树
红黑树
forward
列表
计数
countcell
并发
线程
状态
new
runnable
waiting
wait
join
locksupport.park
block
synchronize
terminated
优先级
线程通信
共享内存
synchronize/volicate
等待通知
经典等待通知
threadlocal
消息传递
thread.join
管道通知
优缺点
优点
提高cpu使用效率
缺点
增加上下文切换
阻塞
内存同步
调度
协同
抢占
实现
1:1对应机器线程
线程池
运行
1,小于核心数新建
2,添加到阻塞队列
3,小于最大数新建
4,超过最大拒绝策略
监控
pool监控
getCorePoolSize
getLargestPoolSize
getMaximumPoolSize
getActiveCount
getPoolSize
getQueue.size
getCompletedTaskCount
getTaskCount
其他监控
rejectCount
taskAvgTime
taskAvgExecTime
taskTotalTime
taskTotalExecTime
minTaskTime
maxTaskTime
状态
RUNNING
SHUTDOWN
STOP
TIDYING
TERMINATED
优缺点
减少锁竞争
减小锁范围
减小锁粒度
锁分段
避免热点区域
缺点
上下文切换
在cpu上对进程或者线程进行切换
任务在运行和阻塞转换就相当于一次上下文切换
内存同步
阻塞
创建
fixed
cached
single
scheduled
配置
参数
min
max
sleep
unit
blockedqueue
arrayblockedqueue
linkedblockedqueue
threadfactory
rejecthandler
aboard
discardnew
discardold
callerrunner
大小
cpu
n+1
内存
2n+1
公式
n*利用率(计算时间+等待时间)/计算时间
锁
synchronized
实现
锁升级
markword
特点
entry list
wait set
优缺点
优点
操作简单
无序加锁解锁
缺点
无序响应中断
无法配置时间,序一直等待
无序
悲观锁
切换回引起上下文切换,低效
作用点
方法
静态方法
代码块
lock
重入锁
锁类型
公平性
非公平性
优缺点
优点
响应中断
配置时间
有序
缺点
需加锁释放锁
操作复杂
乐观锁
读写锁
锁降级
公平锁
获取读
1,当前是自己线程的写
2,无锁或首个是读锁
3,其他添加入队列
获取写
1,有读/写直接失败
2,数量饱和失败
3,有等待线程/更新状态失败
非公平锁
获取读
1,当前是自己线程的写
2,无锁或首个是读锁
3,其他添加入队列
获取写
1,有读/写直接失败
2,数量饱和失败
3,更新状态失败
锁优化
自旋锁和自适应自旋
锁消除
锁粗化
轻量级锁
偏向锁
同步工具
countDown
aqs
初始化读锁
释放锁
释放到0则完毕
cyclicBarrier
数量
lock加锁
semaphore
aqs
初始化读锁
释放减少
放回增加
exchange
并发问题
cas
aba
循环时间长
只能保证一个共享变量
协程
和机器线程11对应,无法支持大并发量
切换调度成本高
同一个线程使用方使用
安全证书
协议
握手协议
第一次握手
clienthello
ssl最高版本
32字节随机数
发送支持的套件
支持的压缩方法列表
第二次握手
serverhello
生成32字节随机数
选择支持套件
选择一种压缩方法
server certificate
发送证书给客户端
server hello done
服务端发送,告知客户端,本次服务端侧打招呼完毕
第三次握手
clientkeyexchange
客户端验证证书后
生成一个新的随机数pre-master,并使用服务端的rsa公钥加密该随机数
服务端得到后,可用rsa解密
changecipherspec
通知服务端开始使用加密使用
finished
密钥=client+server+pre-master
密钥交换
身份验证
加密
重新协商
网站设计
1,设计原则
高并发
无状态
拆分
服务化
消息队列
数据异构
缓存银弹
并发化
高可用
降级
限流
切流量
可回滚
业务设计
防重设计
幂等设计
流程可定义
状态与状态机
后台操作可视化
后台系统审批化
文档和注释
备份
2,高可用
负载均衡和反向代理
upstream配置
负载均衡算法
失败重试
健康检查
tcp
http
其他配置
域名上游服务器
备份上游服务器
不可用上游服务器
长连接
http反向代理
http动态负载均衡
consul+consul-templete
consul+openresty
nginx四层负载均衡
静态负载均衡
动态负载均衡
隔离术
线程
进程
集群
机房
读写
动静
爬虫
热点
资源(硬盘cpu内存等)
hystrix
servlet3 请求隔离
限流详解
限流算法
令牌桶
漏桶
应用级限流
总并发/连接/请求
总资源
单接口总并发/请求
但借口时间窗口请求数
平滑限流某个接口的请求数
分布式限流
redix+lua
nginx+lua
接入层限流
降级技巧
降级预案
自动开关降级
超时降级
统计失败次数降级
故障降级
限流降级
人工开关降级
读服务降级
写服务降级
多级降级
配置中心
应用层api封装
配置文件实现开关配置
hystrix降级
hystrix熔断
熔断机制实现
配置示例
采样统计
超时和重试
简介
代理层超时和重试
nginx
twemproxy
web容器
中间件客户端
数据库
nosql客户端
业务
ajax
回滚机制
事务
代码
部署
数据库版本
静态资源版本
压测和预案
系统压测
系统优化和容灾
线下压测
线上压测
应急预案
3,高并发
应用级缓存
缓存简介
缓存命中率
缓存回收策略
空间
容量
时间
java引用
回收算法
java缓存类型
堆
堆外
磁盘
分布式
多级
应用缓存
多级缓存api封装
null cache
强制获取新数据
失败统计
延迟报警
缓存使用模式
cache-aside
cache-as-sor
read-through
write-throuth
write-behind
copy pattern
性能测试
http缓存
http缓存
last-modified
etag
http客户端缓存
清理无效缓存
查找缓存
缓存(未)命中
缓存无效/陈旧验证
缓存响应
nginxhttp缓存配置
expires
if-modified-since
nginx proxy pass
nginx代理层缓存
多级缓存
如何缓存
是否过期
纬度化缓存和增量缓存
大value缓存
热点value缓存
分布式缓存和应用负载均衡
热点数据和更新数据
单机全量+主从
分布式缓存+应用本地热点
更新缓存和原子性
缓存崩溃和快速恢复
取模
一致性哈希
快速恢复
连接池
数据库
dbcp
http连接
httpclient
线程池
java
tomcat
异步并发
同步阻塞
异步future
异步callback
异步编排completablefuture
异步web服务实现
请求缓存
请求合并
队列术
应用场景
缓冲队列
任务队列
消息队列
请求队列
数据总线队列
混合队列
其他队列
disruptor+redis
下单系统水平可扩展架构
基于canal数据异构
mysql主从复制
canal同步
扩容
单体垂直
单体水平
应用拆分
数据库拆分
应用还是中间件
分库分表策略
sharding-jdbc
数据库异构
查询纬度异构
聚合数据异构
任务系统扩容
简单任务
分布式任务
elastic-job
弹性调度
个性化分片
资源最大限度利用
新增资源自动承载一部分
高可用
作业异常,自动转移其他节点(开启失效转移)
弹性分布式实现
job节点上线,无主自动选主
主节点选举,服务器上下线,分辨熟练变更,重新分片标记
分配过程阻塞,分片结束后才可执行任务
分配按照ip排序,保证分配结果不会产生打波动
失效转移,作业执行完毕,自动执行剩余分片,服务线下后,主动找寻其他可用服务执行
失效转移
概念
当前执行作业的临时补偿机制,在下次作业运行时,会通过冲分配对当前作业分配进行调整
执行机制
通知执行
其他服务器感知有失效转移作业需要处理,且该服务器已经完成,则开始补偿执行
问询执行
本次作业完成,向注册中心询问是否有任务需执行
适用场景
耗时较长且间隔较长的作业场景
幂等性
不适用
作业间隔短,大量和注册中心的忘了通信,对集群性能影响
间隔短,不关注单词作业的实时性,可通过后续重新触发执行
错过任务重执行
特点
不允许同一时间内叠加执行,执行时间超长错误执行时间,在完成下次任务是,继续执行逾期任务
适用场景
耗时长,错过重执行是有效手段
不适用
对于未见得关注单词作业的实时性查的短间隔作业来说,开启做过任务重执行并无必要
接口设计
设计原则
1单一原则
2里氏替换原则
3依赖倒置原则
4,接口隔离
5迪米特法则
6开闭原则
设计模式
创建型
工厂
抽象工厂
单例
原型
建造者
结构型
适配
装饰
代理
外观
桥接
组合
享元
行为型
策略
模板
观察者
迭代器
责任链
命令
备忘录
状态
解释器
终结者
访问
算法
排序
术语
稳定
a原在b前,当a=b时依然在前
不稳定
a原在b前,当a=b时,可能在之后
内排序
外排序
空间复杂度
空间复杂度
算法分类
内部排序(使用内存)
插入
插入
希尔
选择
选择
堆
交换
冒泡
快速
归并
基数
其他
计数
桶
外部排序
算法分类
二分查找
递归
非递归
81. 搜索旋转排序数组 II
分治
动态规划
53. 最大子数组和
62. 不同路径
63. 不同路径 II
64. 最小路径和
91. 解码方法
120. 三角形最小路径和
122. 买卖股票的最佳时机 II
152. 乘积最大子数组
198. 打家劫舍
kmp
贪心
45. 跳跃游戏 II
普里姆
克鲁斯卡尔
深度优先搜索
111. 二叉树的最小深度
129. 求根节点到叶节点数字之和
回溯
17. 电话号码的字母组合
22. 括号生成
46. 全排列
79. 单词搜索
递归
101. 对称二叉树
112. 路径总和
广度优先搜索
112. 路径总和
位运算
136. 只出现一次的数字
滑动窗口
209. 长度最小的子数组
双指针
80. 删除有序数组中的重复项 II
开发规约
编程规约
命名风格
不能有特殊符号
中英文混合
驼峰
常量大写
抽象特殊开头或结尾
望文知意
层命名规则
常量定义
魔法值
引起歧义
代码格式
oop规约
集合处理
并发处理
工厂
控制语句
注释规约
异常日志
异常处理
日志规约
单元测试
安全规约
数据库
建标规约
索引规约
sql语句
orm映射
工程结构
应用分层
二方库依赖
服务器
设计规约