Java学习复习大纲
2020-05-31 23:17:13 0 举报
AI智能生成
java复习学习大纲
作者其他创作
大纲/内容
集合
HashMap
1.7
数组+链表
头插
1.8
数组+链表+红黑树
尾插
扩容机制
LoadFacrory默认0.75
创建一个空数组重新Hash —— Hash公式跟长度与关
线程不安全
2的幂次
方便位运算
均匀分布
重写equals必须重写HashCode
ConcurrentHashMap
安全失败
1.7
数组+链表
segment分段锁
继承了reentranLock
尝试获取锁存在并发竞争 自旋 阻塞
get高效 volatile修饰 不需要加锁
volatile修饰节点指针
HashEntry
1.8
ArrayList
数组
查找 访问速度快 增删效率低 线程不安全
LinkedList
链表
基础
UDP
语音
视频
直播
TCP
三次握手
syn seq
syn ack seq
ack seq
为了防止已失效的连接请求报文段突然又传送到了服务端。因而产生错误
四次挥手
fin ack seq
ack seq
fin ack seq
ack seq
场景
网络会话
文件传输
接发邮件
远程登陆
如何保证安全
HTTP
HTTPS
为什么安全
BIO
阻塞等待链接
阻塞等待数据
开线程处理并发
耗资源
NIO
非阻塞
eqoll
粘包/拆包
在报文末尾增加换行符表明一条完整的消息,这样在接收端可以根据这个换行符来判断消息是否完整。
将消息分为消息头、消息体、可以在消息头中声明消息的长度,根据这个长度来获取报文
规定好报文长度,不足的空位补齐,取的时候按照长度截取即可。
将消息分为消息头、消息体、可以在消息头中声明消息的长度,根据这个长度来获取报文
规定好报文长度,不足的空位补齐,取的时候按照长度截取即可。
多路复用
select
单个进程可监视fd的数量被限制,既能监听端口的大小有限
对socket进行扫描时是线性扫描,即采用轮询的方式,效率低
需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大
poll
大量的fd数组被整体复制于用户态和内核地址空间之间,而不管这样的复制有没有意义
poll还有一个特点就是“水平触发”,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd
epoll
没有最大并发连接的限制,能打开的FD的上限远大于1024
效率提升,不是轮询的方式,不会随着FD的增加效率下降
内存拷贝,利用mmap()文件映射内存加速与核内存的消息传递,即epoll使用减少复制开销
neety 非异步 阻塞 response trse id 感觉
序列化
MySQL
分库分表
唯一主键
事务隔离级别
读未提交
没有视图概念 都是返回最新的
读已提交
不同的read view
可复用度
用一个read view
序列化
回滚日志
没有更早的read view删除
5.5之前回滚删除了文件也不会变小
索引
B+
Hash
等值查询
优化流程
预发跑sql explain
排除 缓存 sql nocache
看一下行数是否正确,不对可以用analyze table t矫正
添加索引 索引不一定是最优的 force index 强制走索引 不建议使用
存在回表的情况
覆盖索引避免回表,不要*
联合索引 不能无限建 高频场景
最左前缀原则 按照索引定义的字段顺序写sql
合理安排联合索引的顺序
5.6之后 索引下推 减少回表的次数
聚焦索引
非聚焦索引
多扫描一次
减少回表
索引维护
页满了 页分裂 页利用率下降
数据删除 业合并
自增 只追加可以不考虑 也分页
索引长度
索引选择
普通索引
找到第一个之后 直到朋友不满足的
唯一索引
找到第一个不满足的就停止了
页的概念
更新
change buffer
更新操作来了 如果数据页不在内存 缓存下来 下次来了 更新 在就直接更新
唯一索引 需要判断 所以 用不到chenge buffer
innodb的处理流程
记录在页内存
唯一索引 判断没冲突插入
普通索引 插入
记录不在页中
数据页读入内存 判断 插入
change buffer
数据是随机IO 成本高
机械硬盘 chenge buffer 收益大 写多读少 marge
MVCC
版本链 在聚集索引中 有两个隐藏列 trx_id roll_pointer
读未提交
注解读取最新版本
序列化
加锁
Read View
读已提交
每次读取前生成一个
可重复读
第一次生成一个
锁
表锁
lock table read/write
读锁不互斥 写锁互斥
行锁
需要的时候才加上 并不是马上释放 等事务结束才释放 两阶段锁协议
死锁
超过时间
innodb_lock_wait_timeout
死锁机制 事务回滚
innodb_deadlock_detect = on
热点行
死锁消耗CPU
临时关闭
控制并发度
分治
全局锁
全库逻辑备份
间隙锁
读写锁
读
lock in share node
for update
行锁
写
innodb如何加锁
Record lock:对索引项加索
Gap lock:对索引项之间的'间隙',第一条记录前的间隙,或最后一条记录后的间隙 加锁
Next-Key:前两种的组合,对记录及前面的间隙加锁
Gap lock:对索引项之间的'间隙',第一条记录前的间隙,或最后一条记录后的间隙 加锁
Next-Key:前两种的组合,对记录及前面的间隙加锁
log
undo log
回滚 mvcc
redo log
binlog
两段式提交 redo 准备 binglog 提交
count1 *
mvcc 的影响
主备延迟
强制走主
sleep
join
驱动表
id用完
bigint
row_id 没设置主键的时候
thread_id
算法
贪心
分治
动态规划
快排
堆排
二叉树
链表反转
成环
环节点
跳楼梯
数据结构
字符串
数组
链表
二叉树
堆、栈、队列
哈希
设计模式
单例
工厂
代理
策略
模板
观察者
适配器
责任链
建造者
0 条评论
下一页