算法
排序
选择排序
插入排序
冒泡排序
希尔排序
堆排序
快速排序
归并排序
计数排序
基数排序
桶排序
数据结构
数组
链表
Hash
树:二叉树、完全平衡树、2-3、2-3-4、红黑树、左倾红黑树
图:邻接矩阵、邻接链表、拓扑排序、广度搜索、深度搜索
Java
atomic
AtomicBoolean
AtomicInteger
AtomicLong
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater
AtomicMarkableReference
AtomicStampedReference
DoubleAdder
LongAdder
2、lock
- ReentrantLock
- ReentrantReadWriteLock
- StampedLock
3、queue
4、ThreadLocal
5、cas
6、线程、线程池
7、nio
JVM
运行时数据区域(java内存区域)
1、方法区:vm加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 1、HotSpot:永久代(利用堆特性) 2、Metaspace 运行时常量池:1.7 移除到堆里面 JDK1.8 : Metaspace 2、heap:存放对象实例。几乎所有的对象实例以及数组都在这里分配内存。 1、新生代:Eden空间、From Survivor、To Survivor 2、老年代 3、vm stack:虚拟机栈为虚拟机执行Java方法服务。局部变量(基本数据类型,对象引用类型:起始引用指针、句柄) 4、本地方法栈:本地方法栈为虚拟机使用到的Native方法服务 5、程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完
- 直接内存: DirectByteBuffer OutOfMemoryError
Class加载:加载-验证-准备-解析-初始化-使用-卸载
java对象创建:类加载检查、分配内存、初始化零值、设置对象头、执行init方法
1、类加载检查:参数
2、分配内存:
分配方式:
指针碰撞、空闲列表
java堆内存是否规整(由GC是否有压缩整理)
并发:
CAS重试
tlab: Thread Local alloctaion buffer
3、初始化零值:方便没有赋值直接使用
4、设置对象头:对象元信息、哈希码、GC分代年龄信息、运行状态(启动偏向锁)
5、执行init方法:
对象头、实例数据、填充数据
对象访问:句柄、指针 对象实例数据 对象类型数据
内存模型(JMM):多线程变量可见性和同步
GC ROOTS 1、虚拟机栈引用对象 2、本地方法栈引用对象 3、方法区静态变量引用对象 4、方法区常量引用对象
GC算法:
1、标记-清除算法:
2、复制算法:
3、标记-整理算法:
收集器: 1、Serial:新生代、老年代使用串行回收。新生代复制算法、老年代标记-压缩 1、STW 2、-XX:+UseSerialGC
2、ParNew:新生代并行,老年代串行。新生代复制算法、老年代标记-压缩
1、-XX:+UseParNewGC
2、-XX:ParallelGCThreads
2、Parallel Scavenge:新生代复制算法、老年代标记-压缩。
1、-XX:+UseParallelGC
2、
3、Parallel Old :老年代标记-整理
1、-XX:+UseParallelOldGC
4、CMS(Concurrent Mark Sweep):老年代标记-清除
1、初始标记(CMS initial mark): 从GC ROOTS直接关联的对象, 放到 sets
2、并发标记(CMS concurrent mark): GC ROOTS
3、重新标记(CMS remark):
4、并发清除(CMS concurrent sweep):
优点: 并发收集、低停顿
缺点: 产生大量空间碎片、并发阶段会降低吞吐量
-XX:+UseConcMarkSweepGC 使用CMS收集器
-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长
-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量(一般情况约等于可用CPU数量)
5、G1:标记-整理算法,可预测停顿
1、
2、
Humongous:
Region size: 最小 1M,最大 32M
<=jdk1.8u40 full gc 清理
6、ZGC
1、着色指针:指针64位的几位表示: Finalizable、Remapped、Marked1、Marked0
2、读屏障:在被着色,触发读屏障,等待更新指针再返回结果
3、内存多重映射
Region 的大小是会动态变化:1M、32M、n*2M(>=4M)
当前线程执行字节码行号指示器。字节码解释器通过改变计数器来执行字节码
2、内存屏障
3、
4、工具
1、jps
-l -q -v -m
2、jinfo
3、jstat
3、jstack:
1、
2、
4、jmap:jmap -histo:live 28920| more
jmap -dump:live,format=b,file=heap.bin
MySQL
1、执行计划
1、
2、
key_len:
1、char n
2、varchar utf8 3n+2 utf8mb4 4n+2
3、TINYINT: 1字节
4、SMALLINT: 2字节
5、MEDIUMINT: 3字节
6、INT: 4字节
7、BIGINT: 8字节
8、DATE: 3字节
9、TIMESTAMP: 4字节
10、DATETIME: 8字节
force index
use index
ignore index
2、
二叉树(BTS)
AVL
1、
2、
红黑树(Red-Black Tree)
1、
2、
B+树
1、添加(扩容):
1、
2、
2、删除(收缩):
3、索引
1、hash索引
2、
3、B+树索引
1、聚簇索引
2、非聚簇索引
4、锁
行锁:
1、共享锁:事物读取一行数据
2、排它锁:事物删除、更新一行数据
表锁:
1、意向共享锁:事物获得表中某几行共享锁
2、意向排它锁:事物获得表中某几行排它锁
记录锁(record lock)
间隙锁(gap lock)
意向插入锁()
Next-Keys lock()
MVCC:
1、read view
2、
5、事物
等级:read uncommitted、 read commit、rr、
Spring
1、生命周期
2、AOP/IOC
3、循环依赖
事物
事物传播
PROPAGATION_REQUIRED: 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS: 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY: 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW: 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED: 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
5、 6、
SpringBoot
1、原理
SpringApplication run方法: 1、实例化初始化: - webApplicationContextType - ApplicationContextInitializer - ApplicationLi 2、SpringApplicationRunListener start 周知 要开始了 3、environment 创建和配置 4、SpringApplicationRunListener environment 配置 5、printBanner 6、创建 ApplicationContext 7、ApplicationContext 配置 environment 8、ApplicationContextInitializer initialize 9、SpringApplicationRunListener contextPrepared 执行 10、加载 11、SpringApplicationRunListener contextLoaded 执行 12、ApplicationContext 执行 refresh 13、ApplicationRunner、CommandLineRunner 执行 14、SpringApplicationRunListener running执行 15、
Linux:
select,poll,epoll都是IO多路复用的机制
进程:孤儿进程与僵尸进程
- 孤儿进程
- 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
- 僵尸进程
- 一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
命令操作
1、grep
2、sed
3、awk
4、top
设计模式
六大原则
- 单一职责:
- 接口隔离:
- 里氏替换原则:
- 依赖倒置:
- 迪米特法则:
- 开闭原则:
- 合成复用:
三大模式
- 创建模式:
- 结构模式:
- 行为模式:
创建模式
- 简单工厂
- 工厂方法
- 抽象工厂
- 单列
- 原型
- 建造者
结构模式
- 代理
- 适配器
- 装饰
- 享元
- 外观
- 组合
行为模式
- 责任链
- 模板
- 策略
- 访问
- 备忘录
- 观察者
- 迭代器
- 状态
- 命令
Readis
1、数据结构
1、sds:简单动态字符串
结构:buf字符数组、len 长度、free长度
vs C:
1、常数级别获取字符串长度
2、杜绝缓冲区溢出
3、减少修改字符串带来内存重分配(增加:预分配(大于30m,1m) 减少:惰性)
4、二进制安全
5、兼容部分C
2、链表(linkedlist)
结构:head、tail、len
3、字典(map):符号表(symbol table)
结构:数组、size、sizemask、used、next
扩容:加载因子 > 1 (空闲的时候) or 加载因子 > 5(繁忙的时候)
收缩:加载因子 < 0.1
4、skiplist:有序(用在有序集合)
结构:
5、intset:整数集合
结构:
6、ziplist:压缩列表
结构:
对象
- string(字符串键)
- hash(哈希)
- list(列表键)
- set(集合)
- sortedset()
持久化:RDB、AOF
- RDB
- AOF
MQ
kafak
1、mmp
2、zero copy
3、
4、
5、
RocketMQ:
1、Producer
2、Consumer
3、NameServer
4、Broker
高性能
- Producer
- Broker
- Consumer
高可用
- Producer
- Broke
- Consumer
1、Topic 2、Message 3、Tag
生产
存储 1、CommitLog 2、
消费 1、ConsumeQueue
Rabbitmq:
1、
2、
Zookeeper
1、paxor
1、
2、
2、raft
1、leader选举
2、日志复制
3、安全性
docker:
1、
2、
3、
4、
5、
k8s:
1、
2、
3、
1小时科普:量子力学 1、量子定义来源: 旧量子力学:过渡量子利力学 普朗克:黑体辐射:能量释放、吸收是一份份不连续的不可分割的能量,这一份能量称为量子 黑体辐射:维恩公式-短波,瑞利公式-长波 ==> 普朗克 量子 爱因斯旦-光量子:光电效应:频率、波长、能量 波尔:原子量子理论 德布罗意波:物质波–微观粒子均有一个波 现代量子力学: 海森堡:数学描述量子力学—矩阵力学 薛定谔:描述物质连续时空演化的偏微方程—薛定谔方程—波动力学(另一种数学描述量子利力学) 狄拉克: 费恩曼:路径积分
发展路线: 一、普朗克量子论–波尔原子量子论–爱因斯坦辐射量子论–海森堡矩阵力学 二、普朗克量子论–爱因斯坦光量子–德布罗意波—薛定谔波动力学
应用: 微观:原子、亚原子、分子、材料的微观领域 宏观:超导、超流、量子霍尔效应
2、