IT知识体系
2024-08-16 22:25:14 0 举报
AI智能生成
为你推荐
查看更多
十年后端研发,搜集整理自用知识体系,希望对你有所帮助
作者其他创作
大纲/内容
IT
poll
epoll
mmap
sendfile
select
Linux
鸿蒙
netstat -nr
ifconfig -a
route add
mtr
lsof
trancerouter
网络
操作系统
脏读
Read Uncommitted
事务内多次查询同一主键数据不一致
不可重复读
Read Committed
事务 insert 多出额外数据
幻读
Repeatable Read
串行化导致事务排队,性能低
Serializable
事务隔离级别
行锁
表锁
页级锁
间隙锁一般与行锁结合使用,可以有效避免幻读等问题。
间隙锁
为事务准备加锁
意向锁
锁
事务的原子性是通过 undo log 来实现的
A原子性
事务的隔离性是通过 (读写锁+MVCC)来实现的
I隔离性
事务的持久性性是通过 redo log 来实现的
D永久性
而事务的终极大 boss 一致性是通过原子性,持久性,隔离性来实现的!!!
C一致性
ACID
undo log 叫做回滚日志,用于记录数据被修改前的信息
undo log
重做日志缓冲(redo log buffer)
重做日志文件(redo log)
实现事务的持久性,系统重启之后在读取redo log恢复最新数据
redo log
redo log 和undo log
binlog
语法分析
语法优化
引擎端
服务端
执行语句
架构模式
间隙锁解决了RR级别的幻读问题
innoDB
B+树
聚合索引
唯一索引
存储是单独存储么
普通索引
普通索引使用顺序符合最左原则,最左列索引优先查找
二级索引
非聚集索引单独B+ 树存储,叶子结点存储主键值,基于主键值回表查询表数据
回表查询
索引列的函数操作
数据转换
不等于操作
不适当的查询条件
数据分布不均匀
索引选择不当
结构变更
索引失效
Mysql
postgresql
OLAP
OLTP
类型
Replication
Hash
RoundRobin
DISTRIBUTE BY
分布倾斜
分布方式
Range
List
PARTITION BY
分区剪枝
ALTER 设置变更分区
分区
利用稀疏索引简历基表快速扫描
局部聚簇PCK
索引
视图
最好不要多列共用同一个序列
Sequence
Normal
Pretty
Summery
run
显示格式explain_perf_mode
Remote FQS Query 下推
GATHER
REDISTRIBUTE
BROADCAST
Streaming 分布式计划树
Remote XXX Coordinator 不下推
下推
Performace
Annaylyze
Seq Scan 全表扫描
Bitmap Index Scan
Index Scan using index_name
Index Scan 索引扫描
表访问
Nested Loop
Hash Join
Merge Join
Join
Explain执行计划
CBO
统计信息优化
GUC参数调节
底层存储
SQL重写
性能调优
GaussDB
LSM Tree
levelDB
TiDB
Ceph
Jraft
Flink
MongoDB
RocksDB
InfluxDB
LSM Tree架构 写多读少
TSDB
广播表
子主题
sharding-jdbc
死锁指的是多个进程或线程在互相等待对方持有的资源而无法继续执行的情况。在 Redis 中,死锁通常发生在获取锁的客户端在执行业务逻辑时发生异常或超时,导致未能及时释放锁,其他客户端则无法获取到该锁。为避免死锁,应该在获取锁后设置合理的过期时间,确保即使出现异常也能及时释放锁。
死锁
锁失效指的是获取到的锁在合理的时间内没有及时释放,导致其他客户端无法获取该锁,从而影响系统的并发性能。为避免锁失效,应该设置合理的锁过期时间,确保锁在业务处理完毕后能够自动释放。
锁失效
为避免锁竞争,应该尽量减小锁的范围,避免将过多的业务逻辑放在锁内执行,以提高并发性能。
锁竞争
锁粒度过大指的是在获取锁时锁住了过多的资源,导致其他客户端无法并发地访问其他资源。为避免锁粒度过大,应该尽量将锁的粒度缩小到最小,只锁住必要的资源,避免不必要的阻塞。
锁粒度过大
实现原理
分布式锁
缓存雪崩
缓存穿透
手动操作主服务
主从模式
检测主机状态,宕机自动选举为master
哨兵模式
Goss 协议(谣言传播)协同自动化
解决负载均衡的问题。具体解决方案是分片/虚拟槽slot
集群模式
RESP 协议
Redis
Clickhouse
ElesticSearch
Solr
数据库
示例:券商进行货币兑换,按照相同价格,优先出价人获得优先交易处理
全局顺序消息
示例:验证码用户ID 用作sharding key电商订单ID 进行sharding
分区顺序消息
顺序消息
定时消息
延时消息
事务消息
只针对集群消费模式生效
消息重试
集群、广播消息
以字符串、字节数组形式进行传输;可以是结构化对象
消息体
RocketMQ
消费幂等性设计
重复消费问题
kafka发送多个消息的事务处理,要么都发送成功,要么都失败
事务处理机制
生产者可靠性ack机制
Broker消息可靠性
消息备份和同步
autocommit
手动commit
消费consumer可靠性
消息可靠性
1.一个broker一个partition一个consumer
2.多个partition情况,基于订单ID作hash sharding,使用多个queue进行线程消费
实现全局有序
0拷贝技术,mmap映射、sendfile
消息持久化存储磁盘顺序读写,非随机读写
PageCache缓存
高性能设计机制
Topic总数(分区总数)太多会使集群性能和稳定性能急剧下降。消息队列Kafka版的存储和协调机制是以分区为粒度的,分区数太多,会导致存储碎片化严重,集群性能和稳定性都会急剧下降。
限制topic数量
提交offset偏移量
zookeeper
zookeeper心跳检测
replication副本follow同步leader
判断存活
lastest
earlest
none
auto.offset.reset
属性
Kafka
AMQP协议
RabbitMQ
对比
中间件
斐波那契
跳台阶
最大公共子序列
最大收益问题
缓存中间计算结果,提升时间复杂度
转换二维进行问题分析
动态规划
贪心算法
二分查找
堆排序
KMP_search
字符串匹配
计数器
漏桶的漏出速率是固定的参数,不适合处理突发流量
漏捅
支持突发大流量
令牌桶
限流算法
工作量证明(PoW,Proof of Work)
权益证明(PoS,Proof of Stake)
延迟工作量证明(dPoW,Delayed Proof-of-Work)
授权 PoS(DPoS,Delegated Proof-of-Stake)
实用拜占庭容错算法(PBFT:Practical Byzantine Fault Tolerance)
共识性算法
paxos
raft
传统分布式一致性算法(共识算法)
算法
单一职责原则 (SRP: Single Responsibility Principle)
开放封闭原则 (OCP: Open/Closed Principle)
依赖倒置原则 (DIP: Dependency Inversion Principle)
里氏替换原则 (LSP: Liskov Substitution Principle)
接口隔离原则 (ISP: Interface Segregation Principle)
优先使用对象组合(即“合成”)而不是继承来达到复用的目的。组合比继承更灵活,避免了继承带来的复杂性。
合成复用原则 (CRP: Composite Reuse Principle)
迪米特法则 (LoD: Law of Demeter)
7大设计原则
clone技术
原型模式
实例化
单例模式Singleton
构建器模式Builder
工厂方法
抽象工厂模式
创建型
享元模式Flyweight
门面模式Facade
过滤器模式Filter
AOP
代理模式Proxy
InputStreamReader继承了Reader抽象类并实现,且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char要经过编码。很显然,适配器就是InputStreamReader,源角色就是InputStream代表的实例对象,目标接口就是Reader类。OutputStreamWriter 也类似。
InputStream + Reader ===> InputSreamReader
封装有缺陷的接口设计
统一多个类的接口设计
适配不同格式的数据
适配器模式Adapter
桥接模式
组合模式 (Composite Pattern)
组合优于继承的设计原则
装饰者模式Decorator
外观模式 (Facade Pattern)
结构型
责任链模式Chain
命令行模式
中介者模式
备忘录模式
状态模式
策略模式Strategy
迭代器模式Iterator
模版模式Template
观察者模式Observer
行为型
架构师经常使用的设计模式
OOAD设计模式GoF
Mqclient客户端在接收topic消息时,使用到线程池技术接收消息,并使用模版、过滤器设计模式进行解耦
多线程在项目中的实际应用,解决了什么问题
模版模式
过滤器模式
构建模式
门面模式
使用到的设计模式
FS架构思路与实现细节
项目经验
设计一个定时任务类
设计一个分布式文件系统
面试宝典
1. 用户登陆
2. 服务器认证
3. 生成JWT
4. 存储JWT
5. 每次请求
6. 验证
JWT
OAuth2.0
用户名密码
多因素认证(验证码)
生物识别 人脸/指纹
数字证书
认证
ACL 访问授权列表
RBAC角色基于访问控制
AVBAC
OAuth
授权
计费
3A
流行解决方案
Extract Transform Load
ketel
ETL
hive
hadoop
Flume
influx
cannal
CDC
流处理模型
Stream
状态管理
State
Event Time
Ingest Time
Process Time
Time
数仓实时计算
搜索引擎实时索引
实时预警
应用场景
Spark
一个统一的编程模型,支持批处理和流处理。它提供了一致的API和抽象层,使开发人员能够编写可移植的数据处理代码,并在多个批处理和流处理引擎上运行。
beam
clickhouse
数据湖Data Lake
原始层Raw Layer
数仓Data WareHouse
数据集市Date Mart
加工层Refined Layer
BI
数据可视化
机器学习
实时分析
应用层
仓、湖、集市
ODS-操作数据源存储层 贴源层
预聚合
维度建模
业务规则
BDS-业务数据层
数据分层
spring batch
spring cloud data flow
SourceTest
StreamSource
BatchSource
SourceBuilder
Source
FlatMap
Filter
Group
计算
聚合算法
Process
SinkBuiler
Sink
流程模版
IMap
IList
ringbuffer
disruptor
IQueue
RingBuffer
数据结构
DAG
Edge
HazelCast Jet
滑动窗口
滚动窗口
session窗口
窗口函数
大数据
Artificial Intelligence Generated Content
AIGC
tensorflow
AI
当订阅客户端不可用时,消息会丢失
发送没有回复确认机制
0
规定时间内没回复,DUP置1并重发消息,可能会重复消费
至少一次,有回复确认机制
1
两次会话保证消息exactly once ,系统开销大
仅一次,精确保证投递成功
2
Qos
发布订阅模式
精简,不添加可有可无的功能
很小的传输消耗和协议数据交换,最大限度减少网络流量
异常连接断开时能通知相关各方
用户和设备身份认证
服务端资源访问授权
MQTT控制报文和内嵌应用数据的完整性校验
MQTT控制报文和内嵌应用数据的隐私控制
TLS【RFC5246】
安全保证
1 字节固定报头,2 字节心跳报文,报文结构紧凑
固定报头
报文结构
connect时设置,异常断线时发布
遗愿消息Last Will
publish时设置,保留在消息服务器内
对应主题发布一个空消息
超时自动清除
清除机制
保留消息Retained Message
MQTT
在Client和Server之间传递状态信息的单对单协议
CoAP
NB-IOT
Lwm2m
protocal 协议
IoT
插入和删除操作时通过特定操作保持二叉查找树的平衡
红黑树
B树
叶子结点存储索引和data
B+ 树
日志结构合并树
LSM
树
散列表
Queue
ArrayDeque
LinkedDeque
Deque
队列
Stack extends Vator
栈
Poxoc
Leader
Follwer
Canditor
角色
voke 投票
行为
选举超时
注意与Web异步超时的配合使用
rpc超时
每次rpc最大字节
disruptor缓存大小
设置优化
StateMachine 状态机
jraft
Raft
一致性算法
全局事务管理者TM
局部资源管理器RM
应用程序AP
并发低、效率低
需要在第一阶段请求阶段将所有参与资源上锁
第二阶段提交阶段进行confirm/rollback
单点故障
特点
二阶段提交
业务耦合大
Confirm、Cancel 都要实现幂等性
TCC(Try、Confirm、Cancel)
commit可投递消费者
rollback不可投递
Unknow状态启动回查机制
半事务消息
解耦
大事务拆分小事务
补偿机制
最终一致性
优势
事务型消息
分布式事务
hash环
虚拟节点
顺时针next
一致性哈希ConsistentHash
XxlJob
DolphineScheduler
yarn
批量调度
分布式
Hystrix
异常次数比率熔断时长
原理
熔断
sentinal
滑动时间窗
限流
降级
服务降级
基于支持本地ACID事务的关系型数据库
JAVA,jdbc
前提
与二阶段区别
AT
TCC
saga
XA
模式
高并发场景不推荐使用,使用了大量的锁机制来实现;适用于金融场景,强一致性业务
@GlobalTrasactional
seata
@FeignClient
调用远端接口和本地接口写法一样
动态代理方法模式实现,底层依然是依赖ribbon
Feign
LoadBalanceInterceptor
@LoadBalance
restTemplate,访问服务ip port方式可以用service方式访问
Ribbon
负载均衡
与Raft的主要区别
分布式一致性算法:ZAB
持久节点
持久顺序节点
临时节点
顺序临时节点
节点类型
watch机制
Zookeeper
Eureka
consul
CopyOnWrite机制,读写分离机制
高并发机制
Nacos
RAFT
etcd
注册中心
配置中心
grpc
bolt
dubble
sofa
RPC
CAT
skywalking
链路追踪
微服务组件
单Reactor单线程
单Reactor多线程
主从Reactor多线程
reactor线程模型
编解码 Encode Decode
bio
nio
i/o
netty
RuntimeException/Error
异常被吃
数据库不支持
自身调用问题
@Transactional(propagation = Propagation.NOT_SUPPORTED)
不支持事务
未启用@EnableTransactionManagement
事务异常回滚
ApplicationContext 的设计理念基于以下几个核心原则:依赖注入(Dependency Injection):Spring 提供的 IoC 容器使用 ApplicationContext 来管理 Bean 的生命周期和依赖关系。通过依赖注入机制,ApplicationContext 可以自动处理 Bean 之间的依赖,减少类之间的耦合,增强代码的可测试性和可维护性。配置与执行分离:ApplicationContext 支持多种配置方式(XML、注解、Java 配置类),实现了配置与应用逻辑的分离,使应用更灵活地进行配置和部署。面向接口编程:ApplicationContext 依赖于接口编程。开发者可以通过接口定义行为,并使用 ApplicationContext 来管理具体实现类的实例化。这种方式促进了面向接口的编程习惯,使得系统更加模块化和易于扩展。统一资源管理:ApplicationContext 负责加载和管理应用所需的资源,比如 Bean、配置文件、消息资源等。它提供了一种统一的方式来访问这些资源。
设计理念
Bean 容器:ApplicationContext 是一个高级的 IoC 容器,管理着应用中的所有 Bean。它负责加载 Bean 定义、解析 Bean 之间的依赖关系,并在应用启动时实例化、配置这些 Bean。事件发布机制:ApplicationContext 提供了事件发布和监听机制。应用中的各个组件可以通过 ApplicationContext 发布事件,其他组件可以通过监听这些事件来执行相应的逻辑处理。例如,ContextRefreshedEvent 事件表示上下文刷新完成,开发者可以在此事件发生时执行特定的操作。国际化支持:ApplicationContext 还提供了强大的国际化支持,允许应用通过 MessageSource 来获取不同语言环境下的消息和文本资源。这对于需要多语言支持的应用非常重要。与 Spring AOP 集成:ApplicationContext 与 Spring 的 AOP 功能无缝集成,可以在 Bean 定义中直接使用 AOP 切面(Aspect),从而实现事务管理、安全控制、日志记录等横切关注点(cross-cutting concerns)的自动处理。资源加载:ApplicationContext 通过 ResourceLoader 接口提供了统一的资源加载机制。无论是从文件系统、类路径还是 URL 中加载资源,开发者都可以通过统一的接口访问。
作用
ApplicationContext
ConfigurableContext
WebApplicationContext
上下文Context
请求超时
异步
web
servlet
使用事件监听器,实现ApplicationListener接口,监听ConTestRefreshedEvent事件
实现SmartLifecycle接口,并且isAutoStartup方法返回true,则会在finishRefresh方法中触发
IOC执行之后,如何执行逻辑
1) ApplicationContextInitializer
加载完Bean定义之后,创建Bean实例之前被触发,通常使用该扩展点来加载自己的bean定义
2) BeanFactoryPostProcessor
3) BeanPostPocessor
4) @PostConstruct
用于执行初始化相关操作
5) InitailizingBean
6) ApplicationListenser
7) @PreDestroy
默认属性加载配置
8) SpringFactoryImportSelector
Spring中常见的扩展点
扩展点
Spring 容器
路由功能,映射请求路径
@RequestMapping
作用于方法参数,绑定到对象
@RequestBody
用于@Controller类,将控制器方法返回值写入Http响应中
@ResponseBody
HttpStatus.BAD_REQUEST
@ResponseStatus
Http Get
@GetMapping
Http Post
@PostMapping
处理控制器所爆出的异常信息
用于标注处理特定类型异常所抛出异常的方法
@ExcetionHandler
标注初始化WebDataBinder方法
@InitBinder
通过模型索引名称访问控制器中的Model
方法标注,Spring调用具体处理方法前执行
方法参数标注
@ModelAttribute
@Component
@ControllerAdvice
@Component延伸
@Controller
@Controller+@ResponseBody
@RestContrller
为参数绑定URL模板变量
@PathVariable
@RequestParam
请求处理类或处理方法提供跨域调用支持
@CrossOrigin
Spring MVC
用于配制Spring需要扫描到的类所在的包,可以用basePackages/value进行包路径设置
@ComponentScan
Spring容器进行管理
@Component延伸,service层
@Service
@Component延伸,DAO注解
@Repository
Spring Bean
配置Spring IoC容器在初始化Bean之前,先初始化其他的Bean对象
@DependsOn
initMethod
destroyMethod
告知Spring,被此注解所标注的类将需要纳入到Bean管理工厂中
@Bean
单例模式
Singleton
prototype
request
session
globalSession
被Component/Bean标注的类的作用范围
@Scops
Spring DI
构造函数
字段
setter方法
用于标记Spring将要解析和注入的依赖项
@Autowired
@Resource
系统中配置多个相同类型的bean,可以用于定义优先级
@Primary
标注在Bean被Spring初始化之前需要执行的方法
@PostConstruct
标注Bean被销毁前要执行的方法
@PreDestroy
系统中存在同一类型多个Bean,@Autowired在进行依赖注入时无从选择,此时可以用Qualifier来微调
好像类似于策略模式
@Qualifier
Spring容器配置注解
sqlSessionFactoryRef = \"schedulerSqlSessionFactory\"
指定数据连接池
@MapperScan
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项
@EnableAutoConfiguration
@SpringBootApplication
@ConditionalOnBean(name=\"dataSource\")
@ConditionalOnBean
@ConditionalOnMissingBean
@ConditionalOnClass(DataSource.class)
@ConditionalOnClass
@ConditionalOnMissingClass
@ConditionalOnProperty(name=\"alipay\
@ConditionalOnProperty
@ConditionalOnResource(resources = \"classpath:website.properties\")
@ConditionalOnResource
@ConditionalOnWebApplication
非Web应用程序
@ConditionalOnNotWebApplication
@ConditionalException(\"${localstore} && ${local == 'true'}\")
@ConditionalExpression
@Conditional
Spring Boot
配置从bootstrap中启动/还是从application中启动
spring.cloud.bootstrap.enabled=false
spring-cloud-starter-bootstrap
spring-cloud-starter-alibaba-nacos-config
增加依赖自动提升为cloud项目
Spring Cloud
注解
SPI/services/sofa-rpc
扩展点功能
模块化
泛化协议调用GenericService
Invoker
支持自定义扩展Extensible
Registry
Router
ShutdownHook
provider
consumer
Sofa
protobuf/thrift/flatbuffer
静态序列化
hessain/kryo/Fst/Pickle
动态序列化
writeExternal(ObjectOutput out)
readExternal(ObjectInput in)
部分序列化、定制序列化
Externalizable
序列化
MultipartFile
HttpServletResponse
心得
多层负载均衡
高并发
主从
集群
缓存
冗余思路
熔断、限流、降级
幂等机制
重试机制
比如秒杀系统单独部署一套系统
隔离
K8S
自动扩缩容
异地容灾
高可用
线程池
内存池
连接池
池化技术
JVM调优
高性能
3高
架构设计
接口定义默认函数
default
HashMap 链表-->红黑树
collection
返回新的集合,参数集合内容不变
map
对集合内部元素进行修改
foreach
replaceAll
removeIf
orelse
filter
lamda
1.8
ZGC
11
新特性
@override
内置注解
@target
@retention
@document
@Inherited
@Repeatable
元注解
静态内部类可以直接在外部类的静态方法中使用,不需要创建外部类的实例就可以访问。
静态内部类
成员内部类依赖于外部类的实例存在,因此需要先创建外部类的实例,然后通过这个实例来创建成员内部类的对象。
成员内部类
内部类
方法重载,不同参数个数
重定义父类成员方法
覆盖父类成员方法
重载
方法重载,编译时能确定执行目标方法
编译时多态
方法覆盖,实例对象调用方法,运行时才能确定,为运行时多态
运行时多态
多态
类成员、类方法参数使用时注意加范型符号
类型安全
代码清晰
避免类强制转换
public class ClassA<T> { T getMethod();}
类
public class ClassA{ public <T> T getMethod();}
方法
类级范型 与方法级范型
范型
类型转换
内存溢出OutOfMemoryError
ClassNotFoundError
错误
算术异常ArithmeticExcetion
空对象NullPointerException
类型强制转换异常ClassCastException
负数组长度异常NegativeArraySizeException
数组下标越界ArrayIndexOutOfBoundsException
数值格式化异常NumberFormatException
异常
runtime异常
非检查异常
非runtime 异常
检查异常
reflect
JDK
CGlib
动态代理
逆向代码
动态生成类框架
LambdaQueryWrapper 封装参数时的应用
Mybatis-plus
使用场景
反射
Mysql-connect包
Java.sql.dirve
Spring Boot 的自动配置
spring.factories
META-INF/services
google @autoservice
SPI
Extension扩展点
基础
Integer
Long
Referace...
AtomicI
原子类型
CountDownLatch适用于多个线程等待一个事件的发生,而Thread.join()适用于一个线程等待另一个线程执行完毕
CountDownLatch
重入锁,(独占锁) 也称为可重入锁,用于实现线程之间的同步和互斥。
尝试获取锁
lockInterruptibly()
中断等待
interrupt()
ReentrantLock
读写锁,(共享锁) 用于实现多个线程对共享资源的读写操作。
ReadWriteLock
ReentrantReadWriteLock
在没有竞争的情况下,让第一个获得锁的线程一直持有锁,避免频繁加锁、解锁对性能的影响。
偏向锁:
在没有竞争的情况下,使用CAS操作来避免线程阻塞,提高锁的性能。
轻量级锁:
当有竞争时,线程会进入阻塞状态,等待锁的释放。
重量级锁:
在读多写少的情况下,使用读写锁可以提高并发性能。
读写锁:
当多个线程请求锁时,按照请求的顺序依次获取锁。
公平锁:
当多个线程请求锁时,先尝试获取锁的线程有更高的获取概率,可以提高锁的性能。
非公平锁:
允许同一个线程多次获取同一把锁,避免死锁问题。例如,ReentrantLock就是一种可重入锁。
可重入锁:
锁级别
锁升级
Synchronized
@GuardedBy(\"this\")
遵循资源获取的顺序
避免嵌套锁定
tryLock()
使用超时机制
使用死锁检测机制
Semaphore
乐观锁
悲观锁
CyclicBarrier
栅栏Barrier
Locks
ForkJoinPool
RecursiveTask
RecursiveAction
ForkJoinTask
ForkJoin
0.75f
扩容因子
1 << 4 = 16
初始容量
1 << 30
最大容量
8 转换成红黑树存储
TREEIFY_THRESHOLD
数组 + 链表 + 红黑树
不满足线程安全
封装测试类,重写hashcode函数,保持哈希值高碰撞率
构造测试方案
HashMap
Entry多了before、after指针
LinkedHashMap
System.properties
HashTable
16
volatile 立即刷存
key、value
Node定义
针对Node颗粒进行 synchronized
putVal
HashMap不同点
0: 释放锁
1: write写锁
2: waite等待写锁
4: reader读锁
Lockstate
红黑树代理
TreeBin
链表转换红黑树
treeifybin
CurrentHashMap
Current并发包
synchronize blocking
notify
sleep() wait
sleep(10) time_wait
Runnable
terminated
New
start()
run()
Thread
线程生命周期
周期流转
线程池生命周期
newSingleThreadExecutor
newCachedThreadPool
newFixedThreadPool
newScheduledThreadPool
Executors
无界队列
LinkedBlockingQueue
非公平访问策略LIFO
公平策略FIFO
无缓冲
SynchronousQueue
执行等待队列
拒绝策略
AbortPolicy
谁提交任务,谁就负责执行任务
CallerRunsPolicy
静默丢弃,默默丢掉
DiscardPolicy
存活时间最长的任务丢掉
DiscardOldestPolicy
溢出线程池处理策略
CompletableFuture
线程执行结果获取方式
cores+1(防止突发性线程丢失CPU运行权限)
CPU密集型
core*2 +
I/O密集型
cores*(1+io时长/计算时长)
线程数计算公式
线程配置策略
运行流程
任务调度流程
获取任务流程
多线程
Buffer Pool
ArrayList
数据库连接池
Socket连接池
StreamObserver<T>观察流
I/O 流Stream
早期集合迭代接口
Enumeration
C++方法
linux底层函数
Native Method
本地方法栈
基本数据类型(int、short、byte、char、double、float、long、boolean)、对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一跳字节码指令的地址)。
局部变量
操作数栈
动态链接
方法出口
递归调用方法,深度越界异常
StackOverflowError
OutOfMemoryError
VM虚拟机栈Stack
不会有内存溢出风险
程序计数器
span style=\
jdk1.8后方法区(Method Area)被元空间(Metaspace)代替
JVM参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置
方法区Method Area
-Xms设定初始值
-Xmx设定最大值
设置spring.servlet.multipart.max-file-size过大可能导致OOM
OOM最容易出现的区域
堆 Heap
Jvm参数
dump
OOM分析
JvisualVM观测工具
调优工具
在线调试
内存调优原则方案
内存结构
BootStrap ClassLoader
Extession ClassLoader
Application ClassLoader
UserClassLoader
外框
双亲委派
-Dsun.misc.URLClassPath.debug=true
类加载
本地内存A
Thread A
主内存
本地内存B
Thread B
线程通讯模型
修饰变量对象立即刷新到主内存共享内存
volatile
内存模型
算法慢,回收后内存地址不连续
标记-清除
标记-整理算法通常用于老年代(Old Generation)的内存管理。与新生代(Young Generation)的短命对象相比,老年代的对象存活时间较长,因此使用标记-整理算法来管理老年代内存更为合适。
内存连续
标记-整理
内存利用率50%
拷贝
老年代标记-整理算法
新生代复制算法
单线程收集器
Serial
Serial的多线程版本
ParNew
吞吐量优先收集器
Parallel Scavenge
CMS收集器(Concurrent Mark Sweep)
G1收集器(Garbage First)
不适合大吞吐量作业
分代收集
垃圾收集算法
引用计数算法
可达性分析算法
方法区回收
finallize
判断对象是否可回收算法
Serial收集器
Parnew 收集器
Paraller scaveng
垃圾回收器
=new
强引用
下次GC之前
WeakReference<>
弱引用
内存不够时
SoftValueReference<>
软引用
用于回收对象时系统通知
PhantomReference<>
虚引用
引用类型
Minor GC: 清理新生代的垃圾,通常比 Major GC 快,但仍会暂停应用程序的执行。通常,Minor GC 的暂停时间在几十毫秒到几秒钟之间。Major GC (Full GC): 清理老年代的垃圾,相对较慢,可能需要几秒钟到几分钟不等,具体时间取决于堆的大小和垃圾的数量。Concurrent Mark-Sweep (CMS) 和 G1 GC: 这些垃圾回收器试图减少停顿时间,通过并发的方式在应用程序运行时进行垃圾回收。
回收时间
垃圾回收
-XX:+UseSerialGC: 启用串行垃圾回收器,适用于单核或少量核心的机器。-XX:+UseParallelGC: 启用并行垃圾回收器,适用于多核机器。-XX:+UseConcMarkSweepGC: 启用并发标记清除垃圾回收器,适用于低延迟应用。-XX:+UseG1GC: 启用 G1 垃圾回收器,适用于大堆内存和低延迟需求。
JVM
Java
OPT
module
export
gen_server
gen_statem
supervisor
gen_event
atom
Reason
init/1 函数返回的状态
terminate/2
旧版本号
OldVsn
当前进程的状态数据
额外的升级数据
Extrra
code_change/3
behaviors
Erlang
go
python
c
swift
语言
注意点
manageMent
编译、运行、测试等均需要
compile
仅测试时需要
test
仅运行时需要
runtime
provided
仅在dependencyManagement中可以使用
解决pom parent 父依赖多继承
引入的dependency是pom 有dependencyManagement 的
import
scope
控制依赖传递
optional
dependency
plugin
动态规划依赖、环境的配置
profile
maven
compose和docker的版本对应关系
version
networks
port
docker-compose down up -d
起停命令
yml
用于定义如何创建一个容器镜像
dockerfile
systemctl stop firewalld
systemctl restart docker
报错 imap 流量无法转发问题: 关闭防火墙 然后 重启 docker
connect network container
create
network
Makefile
Maven-Jib
harbor
docker容器化部署
kubectl
kubesphere
K8s
构建工具
0 条评论
回复 删除
下一页