2024最新java学习路线
2024-08-02 10:24:29 6 举报
AI智能生成
2024年Java学习路线核心内容包括:Java基础、Java Web、Java框架、Java微服务和Java项目实战。首先,学习Java基础,包括语法、数据类型、运算符、流程控制、数组、面向对象、异常处理等。然后,学习Java Web,掌握HTTP协议、JSP、Servlet、AJAX等技术。接下来,学习Java框架,如Spring、Spring MVC、MyBatis等。之后,掌握Java微服务,理解Spring Boot、Spring Cloud等技术。最后,通过项目实战,提高综合运用能力,如搭建博客系统、开发OA系统等。 路线图主要包括以下文件类型:PDF、PPT、视频教程、代码示例。这些文件将帮助你系统地学习Java,提供详细的概念解释、代码示例和实践项目。 修饰语:全面、系统、循序渐进、实战导向、深入浅出。本路线图旨在提供一个全面、系统、循序渐进的学习方案,让学习者能够深入理解Java编程,并通过实战项目提升实际操作能力。
作者其他创作
大纲/内容
idea
Windows
mac
搭建环境
研发工具
印象笔记
xmind
processon
OneNote
笔记工具
一定要,多练习!!!!无他手熟尔
个人学习方法
学习方法
保姆级一条龙服务,每个知识点细节、含视频、文章推荐,内容很细
路线特点
学前准备
进程、线程
进程 / 线程间通讯方式
进程调度算法
进程 / 线程状态
死锁
内存管理
Linux 系统安装
环境变量
文件管理
用户管理
内存管理
磁盘管理
进程管理
网络管理
软件包管理
服务管理
日志管理
Linux 内核
常用命令
常用环境搭建
Shell 脚本编程
VIM 的使用
知识点
2021 韩顺平 一周学会Linux(基于 CentOS 7.6 版本较新)
视频
《鸟哥的 Linux 私房菜 —— 基础篇》(经典)
书籍
Linux 工具快速教程
文档
蓝桥云课 Linux 基础入门
腾讯云动手实验室
阿里云体验实验室
阿里云知行实验室
华为云沙箱实验室
实战
Linux 中国
社区
Linux 命令搜索
Linux 命令大全手册
Linux 命令示例
宝塔 Linux 面板
工具
资源推荐
linux
《清华操作系统原理》
视频
操作系统
语音
直播
UDP
syn seq
syn ack seq
ack seq
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
三次握手
fin ack seq
ack seqfin ack seq
四次挥手
网络会话
文件传输
发送接收邮件
远程登录
场景
如何保证可靠
TCP
HTTP
为啥安全
HTTPS
阻塞等待链接
阻塞等待数据
开线程处理并发
耗资源
BIO
非阻塞IO
epoll
NIO
在报文末尾增加换行符表明一条完整的消息,这样在接收端可以根据这个换行符来判断消息是否完整。将消息分为消息头、消息体。可以在消息头中声明消息的长度,根据这个长度来获取报文(比如 808 协议)。规定好报文长度,不足的空位补齐,取的时候按照长度截取即可。
粘包/拆包
单个进程可监视的fd数量被限制,即能监听端口的大小有限。
对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低:
需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大
select
大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义
poll还有一个特点是“水平触发”,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd。
poll
没有最大并发连接的限制,能打开的FD的上限远大于1024(1G的内存上能监听约10万个端口);
效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。
内存拷贝,利用mmap()文件映射内存加速与内核空间的消息传递;即epoll使用mmap减少复制开销。
多路复用
neetty 非异步 阻塞 response trse id 感觉
序列化
网络安全
域名解析
dns
《图解 HTTP》
《网络是怎样连接的》
《图解 TCP / IP》
《编码》
《30天自制操作系统》
书籍
《计算机网络微课堂》
计算机网络
编程基础语法(通用)
方法
重载
封装
继承
多态
面向对象
抽象类
接口
枚举
泛型
注解
异常处理
多线程
IO 流
反射
语法基础
数组+链表
头插
1.7
数组+链表+红黑树
尾插
1.8
LoadFactory 默认0.75
Hash公式跟长度有关
创建一个空数组重新Hash
扩容机制
线程不安全
方便位运算
均匀分布
2的幂次
重写equals必须重写HashCode
HashMap
安全失败
继承了reentranLock
尝试获取锁存在并发竞争 自旋 阻塞
segment分段锁
get高效 volatile修饰 不需要加锁
volatile修饰节点指针
HashEntry
再失败就sync保证
cas失败自旋保证成功
CAS+synchronized
node
ConcurrentHashMap
数组
查找 访问速度快 增删效率低 线程不安全
ArrayList
双向链表
适合插入删除频繁的情况 内部维护了链表的长度
LinkedList
并发集合
集合
Stream API
Lambda 表达式
新日期时间 API
接口默认方法
Java8
java9
java11
宋红康 - 全网最全Java零基础入门教程(只看 Java 8 部分即可)
文章
资料
版本特性
单例模式
工厂模式
流程引擎
建造者模式
原型模式
责任链模式
观察者模式
策略模式
策略模式2.0
模板方法
迭代器模式
命令模式&中介者模式
对象池模式&解释器模式
代理模式
主要模式
《图解设计模式》
《Head First 设计模式》
《大话设计模式》
《设计模式:可复用面向对象软件的基础》
尚硅谷图解 Java 设计模式
菜鸟教程
图说设计模式
设计模式
字符串
队列
栈
链表
哈希表
二叉树
数据结构
排序
双指针
查找
分治
动态规划
递归
回溯
贪心
位运算
DFS
BFS
图
注意点:字节系的公司很看重算法 这个是核心
算法
leetcode
牛客题库
刷题网站
https://leetcode-cn.com/leetbook/
图解算法数据结构
LeetCode 101(C++)
LeetCode 题解(C++)
LeetCode Cookbook(Go 语言)
五分钟学算法
在线教程
《小灰的漫画算法》
《剑指 Offer》
《程序员代码面试指南》
尚硅谷 Java 数据结构与算法(难度比面试的要求大一些,适合希望更全面学习的朋友)
Leetcode 真题解析
VisuAlgo 数据结构和算法动态可视化
数据结构可视化
工具
数据结构&算法
HTML
CSS
JavaScript
Ajax
Vue
知识
资源
学习建议
前端基础
韩顺平 - 零基础 30 天学会 Java
宋红康 - 全网最全Java零基础入门教程
菜鸟教程(可以在线练习)
廖雪峰 Java 教程
文档
java核心卷一
程序员鱼皮
三太子敖丙
codesheep
推荐博主
推荐资源
基础
堆
方法区
本地方法栈
程序计数器
JVM内存模型
加载->验证->准备->解析->初始化->使用->卸载
父类加载 不重复加载
双亲委派原则
类加载机制
Eden/s1/s2
年轻代
老年代
永久代/元空间
根据存活时间
晋升机制
分代回收
对象存活比较多的时候适用
适用场景
提前GC
碎片空间
标记存活对象
清除没有标记的对象
扫描了两次
缺点
标记清除
存活对象少 比较高效
扫描了整个空间(标记存活对象并复制异动)
适合年轻代
适合场景
需要空闲空间
需要复制移动对象
标记复制
没办法解决循环引用的问题
引用计数
标记整理
垃圾回收机制
edan
s1
s2
通过阈值晋升
minor gc
年轻
major gc 等价于 full gc
老年
永久
分代
对cpu资源敏感
无法处理浮动垃圾
基于标记清除算法 大量空间碎片
CMS
分区概念 弱化分代
标记整理算法 不会产生空间碎片 分配大对象不会提前full gc
可以设置预设停顿时间
充分利用cpu 多核条件下 缩短stw
初始标记 stw 从gc root 开始直接可达的对象
可达性分析算法
并发标记 gc root 对对象进行可达性分析 找出存活对象
最终标记
根据用户期待的gc停顿时间指定回收计划
筛选回收
收集步骤
复制一些存活对象到old区s区
回收所有的eden s区
young gc
mixed gc
回收模式
GC模式
G1
g1分区域 每个区域是有老年代概念的 但是收集器以整个区域为单位收集
g1回收后马上合并空闲内存 cms 在stw的时候做
区别
XX:G1HeapRegionSize
复制成活对象到一个区域 暂停所有线程
内存区域设置
垃圾回收器
老年代写满
system。gc
持久代空间不足
full gc
STW
设置堆的最大最小值 -xms -xmx
防止年轻代堆收缩:老年代同理
-XX:newSize设置绝对大小
调整老年和年轻代的比例
主要看是否存在更多持久对象和临时对象
观察一段时间 看峰值老年代如何 不影响gc就加大年轻代
配置好的机器可以用 并发收集算法
每个线程默认会开启1M的堆栈 存放栈帧 调用参数 局部变量 太大了 500k够了
原则 就是减少gc stw
性能调优
jasvism
dump
监控配置 自动dump
FullGC 内存泄露排查
实战
oom种类
逃逸分析
虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量变量引用的对象本地方法栈中JNI(即一般说的Native方法)引用的对象活跃线程的引用对象
可达性
OOM
内存泄露
线程死锁
锁争用
Java进程消耗CPU过高
JVM调优
Jconsole
Jprofiler
jvisualvm
MAT
JVM性能检测工具
help dump
生产机 dump
mat
jmap
-helpdump
topc -c
top -Hp pid
进制转换
jstack
cat
CPU100%
尚硅谷宋红康 - JVM 全套教程详解
【狂神说Java】JVM快速入门篇
《深入理解 Java 虚拟机(第三版)》
Java 虚拟机底层原理知识总结
项目
阿里云 JVM 实战
JVM
线程和进程
线程状态
并行和并发
同步和异步
死锁
可重入锁
线程安全
AQS
Fork Join
CAS
多线程基础知识
Mark Word(存储对象的HashCode,分代年龄和锁标志位信息。)
Klass Point(对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。)
EntryList
Owner(会指向持有 Monitor 对象的线程)
WaitSet
Monitor
对象头(Header)
实例数据
对其填充
对象
ACC_SYNCHRONIZED
monitorenter
monitorexit
加减
程序计数器 count
代码块
无锁
mark Word 中有线程信息 cas 比较
偏向锁
复制了一份mark work 叫 Lock record 也是cas尝试改变指针
轻量级
死循环
自旋
重量级
锁膨胀
as-if-serial
happens-before
有序性
内存强制刷新
可见性
单一线程持有
原子性
计数器
可重入性
特性保证
用户态内核态切换
重锁
synchronized是关键字,是JVM层面的底层啥都帮我们做了,而Lock是一个接口,是JDK层面的有丰富的API。synchronized会自动释放锁,而Lock必须手动释放锁。synchronized是不可中断的,Lock可以中断也可以不中断。通过Lock可以知道线程有没有拿到锁,而synchronized不能。synchronized能锁住方法和代码块,而Lock只能锁住代码块。Lock可以使用读锁提高多线程读效率。synchronized是非公平锁,ReentrantLock可以控制是否是公平锁。
锁升级不可逆
劣势
sync 和 Lock的区别
synchronized
当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取
锁bus
总线风暴
volitale会一直嗅探 cas 不断循环无效交互 导致带宽达到峰值
MESI
高速缓存
Java内存模型JMM
处理器嗅探总线
嗅探机制 强制失效
源代码->编译器优化重排序->指令级并行重排序->内存系统重排序->最终执行的指令序列
lock 前缀指令 内存屏障
禁止指令重排序
volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。
AtomicInteger
跳出死循环
volatile
常见关键字
多线程锁机制
ReadLock
WriteLock
ReentrantReadWriteLock
tryAcquire
acquireQueued
CAS
NonfairSync
hasQueuedPredecessors
如果是当前持有锁的线程 可重入
FairSync
入队 出队
头结点设计
共享和独享的实现
实际应用
cpu开销
AtomicReference
只能保证一个共享变量原子操作
标志位 时间戳
ABA
存在的问题
AbstractQueuedSynchronizer
ReentrantLock
StampedLock
Lock
session
ThreadLocal
juc
newFixedThreadPool
SynchronousQueue
newCacheThreadPool
newSIngleTheadExecutor
DelayedWorkQueue
newScheduledThewadPool
newWorkStealingPool
ThreadPoolExecutor
默认没线程等任务来了才调用 除非调用了 预创建线程 一个或者全部
核心线程数
最大线程数
没有执行任务多久会终止 当线程池的线程数大于核心线程才会起作用 调用allowCoreThreadTimeOut会起作用
空闲时间&单位
无界 当心内存溢出
LinkedBlockingQueue
有界队列
加锁保证安全 一直死循环阻塞 队列不满就唤醒
在进行某项业务存储操作时,建议采用offer进行添加,可及时获取boolean进行判断,如用put要考虑阻塞情况(队列的出队操作慢于进队操作),资源占用。
入队
ArrayBlockingQueue
Synchronous
缓冲队列
工厂方法
抛异常
丢弃
重试
丢弃最早提交的
拒绝策略
使用Has表维护线程的引用
使用future获取任务的执行结果
submit
参数意义
商品详情界面
批处理
实际使用
核心线程->队列->最大线程->拒绝策略
执行过程
running
shutdown
stop
所有线程销毁
terminated
有个Volatile的状态码
corePoolSize、maximumPoolSize、largestPoolSize 有意思
运行状态
故障
线程池
主要可以介绍一下 wait/notify 机制,共享变量的 synchronized 或者 Lock 同步机制等。
CountDownLatch
CyclicBarrier
线程间是怎么进行通信的?
可以从尽量减少临界区范围,使用 ThreadLocal,减少线程切换、使用读写锁或 copyonwrite 等机制这些方面来回答。
ThreadLocal 用来解决什么问题?
ThreadLocal 是如何实现的?可以重点回答 ThreadLocal 不是用来解决多线程共享变量的问题,而是用来解决线程数据隔离
如何尽可能提高多线程并发性能?
可以回答读写锁适合读并发多,写并发少的场景,另外一个解决这种场景的方法是 copyonwrite。
读写锁适用于什么场景?
可以尝试通过锁、信号量、线程通信、阻塞队列等不同方式实现。
如何实现一个生产者与消费者模型?
常见问题
只有一个构造方法 只会被赋值一次
没有别的方法可以修改 count
countDownLatch
【尚硅谷】大厂必备技术之JUC并发编程2021最新版
黑马程序员全面深入学习Java并发编程
《Java并发编程实战》
《Java 并发编程艺术》
Java 并发知识点总结:
项目
进阶
单例
工厂
根据不同商家适配
适配器
继承 process 链路执行
责任链
源码
invokeBeanFactoryPostProcessors
扫描类
封装beanDefinition对象 各种信息
放到map
遍历map
能不能实例化 需要实例化么 根据信息来
是否单例等等
判断是不是factory bean
单例池 只是一个ConcurrentHashMap而已
正在创建的 容器
验证
得到 class
根据注入模型
默认
推断构造方法
得到构造方法
反射 实例化这个对象
后置处理器合并beanDefinition
判断是否允许 循环依赖
提前暴露bean工厂对象
自动注入
填充属性
执行部分 aware 接口
继续执行部分 aware 接口 生命周期回调方法
完成代理AOP
beanProstprocessor 的前置方法
实例化为bean
放到单例池
销毁
生命周期
单例(singleton)
多例(prototype)
Request
Session
作用域
Bean
属性注入可以破解
三级缓存没自己 因二级之后去加载B了
构造器不行
情况
去单例池拿
判断是不是正在被创建的
判断是否 支持循环依赖
二级缓存 放到 三级缓存
GC
干掉二级缓存
下次再来直接 三级缓存拿 缓存
三级缓存
一级缓存 单例Bean
产生bean 复杂
二级缓存 工厂 产生baen
三级缓存 半成品
缓存 存放
循环依赖
父子容器
采用不同的连接器
共享链接
用AOP 新建立了一个 链接
ThreadLocal 当前事务
前提是 关闭AutoCommit
事务实现原理
实现类
静态代理
调用具体方法的时候调用invokeHandler
java反射机制生成一个代理接口的匿名类
实现接口
JDK动态代理
修改字节码生成子类去处理
asm字节码编辑技术动态创建类 基于classLoad装载
cjlib
动态代理
AOP
IOC
生成一个class对象
加载
文件格式验证
元数据验证
字节码验证
符号引用验证
默认值
static会分配内存
准备
引用等
解析具体类的信息
解析
父类没初始化 先初始化父类
初始化
使用
卸载
过程
main()
class。forName
ClassLoader。loadClass
加载方式
Appclass Loade
Extention ClassLoader
Bootstrap ClassLoader
类加载器
可以避免重复加载
安全
Spring
什么是 MVC?
请求与响应
Restful API
拦截器
配置
执行过程
SpringMVC 2021 最新教程
教程
Spring mvc
增删改查
全局配置
动态 SQL
缓存
和其他框架的整合
逆向工程
MyBatis 实战教程全套完整版
Mybatis
spring、spring MVC、mytatis
常用注解
资源整合
高级特性
本地热部署
Springboot
子父工程
服务注册与发现
注册中心 Eureka、Zookeeper、Consul
Ribbon 负载均衡
Feign 服务调用
Hystrix 服务限流、降级、熔断
Resilience4j 服务容错
Gateway(Zuul)微服务网关
Config 分布式配置中心
分布式服务总线
分布式链路追踪
Spring Cloud Alibaba 官方文档
尚硅谷 SpringCloud(H版&alibaba)框架开发教程(微服务分布式架构)
springCloud
架构演进
RPC
Zookeeper
服务提供者
服务消费者
项目搭建
尚硅谷 Dubbo 教程
Apache Dubbo 官方文档
技术文档
零拷贝
阻塞IO 读写都阻塞
问题 带宽 资源等
每个请求过来 开一个线程阻塞
bio
不阻塞来着不拒
程序注册一组socket文件描述符给操作系统,表示“我要监视这些fd是否有IO事件发生,有了就告诉程序处理”
便捷的通知机制
IO多路复用
遍历 判断事件是否可达 然后继续
做了优化
有转态 会创建 文件描述符指向的表 监听增删改查
但是可能等待时间太久 响应延迟大了 太短了 会重试
监听事件
通道 buffer 多路复用
nio
aio
架构设计思路
初始化channel
任务队列
注册 channel到selector
轮训accept事件 处理这些简历 channel的链接
注册 channel到selector 接收方
轮训写 事件 开线程去处理
执行链路
监听端口所有准备就绪的时间
boss
监听准备工作
work
线程组
Netty
调用链路
IOC 启动加载dubbo配置的标签
解析标签 ServiceBean 会生成一个Bean
get provider
set provider
各种信息 保存在 ServiceBean
afterpropertiesSet
实现了 initializingBean
是否暴露 不是延迟暴露
回调onapplicationEvent
IOC完成 还实现了一个 ApplicationListener监听器
检查
加载注册中心信息
根据spi来
本地暴露
打开 服务器 exchangeServer
启动服务器netty 监听端口
执行器
注册表
注册中心 注册服务
暴露 p 和 s 两个invoker的map保存了地址
暴露invoke
spi
代理工厂获取invoke 封装
循环协议 端口
doexportURL 暴露URL
信息校验 doexport
暴露
服务暴露过程
init
factoryBean ->getObject ->get
创建代理对象 createProxy
信息检查
dubbo 执行远程引用
远程引用 获取到zk 获取到信息 订阅
注册到注册表进去
返回invoke
创建 netty客户端
成功
服务引用
Java 没ioc aop
java spi
具体的spi kv形式
SPI
直接切换
failover
快速失败
failfast
failsafe
failback
forking cluster
broadcast cluster
失败回调
返回默认
整合 hystrix
容错机制
return null
失败返回空
降级
随机 加权
轮训
最少活跃数
hash一致
负载均衡
选举算法
注册中心
默认 nio 单一长连接
二进制系列化 小数据量 100k
数据量中等 不适合文件传输
dubbo
memcached
redis
webService
http
协议
IO 模型(BIO / NIO)
Channel
Buffer
Seletor
Netty 模型
WebSocket 编程(动手做个聊天室)
尚硅谷Netty教程
Netty 技术演讲(中文字幕版)
Netty 4 用户指南
《Netty 实战》
Vertx
相关技术
netty
选举机制
过半机制
预提交 ack 2pc
ZAB协议?
zk节点宕机如何处理?
如何实现分布式一致性
maven
gradle
工作区
分支
代码提交、推送、拉取、回退、重置
分支操作
代码合并、解决冲突
标签
cherry-pick
git
【尚硅谷】5h打通Git全套教程
猴子都能懂的 Git 入门
GitHub 漫游指南
GitHub 官方文档
Swagger 教学文档
Swagger 接口文档
Postman 接口测试
接口管理
项目管理工具
构建
依赖管理
插件
配置
子父工程
maven教程
概要
结合项目学习会更容易理解
尚硅谷最新版 JavaWeb 全套教程
学习视频
框架
String
Hash
set
score
只需要调整前后节点指针
随机层数
还会比较value
不止比较score
成绩
积分
排行榜
zset
分页的坑
List
HyperLogLog
Geo
Pub/Sub
BitMap
键值的底层都是SDS
AOF缓存区
记录本身长度 C需要遍历
空间预支配
惰性空间释放
修改字符减少内存重新分配
C只能保存文本数据 无法保存图片等二进制数据
sds是使用长度去判断
二进制安全
杜绝缓冲区溢出
兼容部分C字符串函数
SDS
保存多个客户端的状态信息
列表订阅发布 慢查询 监视器
数据库 哈希键
Hash表节点
hash冲突用单向链表解决
会逐渐rehash 新的键值对全部放到新的hash表
渐进式 rehash
一个平时用 一个rehash时候用
每个字典带 两个hash表
字典
压缩列表
整数集合
底层
Keys
setnx
exprie
常见命令
5分钟一次
冷备
恢复的时候比较快
快照文件生成时间久,消耗cpu
RDB
appendOnly
数据齐全
回复慢文件大
AOF
从节点发送命令主节点做bgsave同时开启buffer
数据初始化
持久化
offset
指令流
主从同步
缓冲区
快照同步
数据同步机制
集群监控
消息通知
故障转移
配置中心
脑裂
哨兵
横向扩容
多主
分片
集群
高可用
加随机值
集群部署
缓存雪崩
互斥锁
热点数据不失效
缓存击穿
布隆过滤器
缓存穿透
延时双删
双写一致性
分布式锁
并发竞争
bigkey命令 找到干掉
Redis 4.0引入了memory usage命令和lazyfree机制
大Key
缓存时间不失效
多级缓存
读写分离
热点key
创建一个定时器
消耗内存
定时删除
可能存在大量key
惰性删除
检查 删除 但是是随机的
定期删除
过期策略
最少使用
LUR
淘汰机制
主从+哨兵+cluster
ecache+Hystrix+降级+熔断+隔离
备用方案
setnx ex
窗口滑动
zset会越来越大
定时push
然后leftpop
空连接异常
blpop
空轮训
问题
令牌
Redis-Cell
原子性有问题
make_space 灌水之前调用漏水 腾出空间 取决于流水速率
漏桶 funnel
redis cell
限流
二级缓存
备份热key 走不同的机器
选择方案
跳跃表
漏桶
scan
扩展
read得读到很多才返回 为0会卡在那 直到新数据来或者链接关闭
写不会阻塞除非缓冲区满了
非阻塞的IO 提供了一个选项 no_blocking 读写都不会阻塞 读多少写多少 取决于内核的套接字字节分配
非阻塞IO也有问题 线程要读数据 读了一点就返回了 线程什么时候知道继续读?写一样
一般都是select解决 但是性能低 现在都是epoll
多路IO复用
无状态模式
broker向发心跳顺便带上所有的Topic信息
早期是zk后来改了
NameServer
中转消息,消息持久化
底层通信基于Netty
Broker
同步
异步
单向
Producer
pull
push
Consumer
基础组成
多master
多master多slave异步复制
多master多slave双写
支持集群模式
发送成功后返回consume_success
回溯消费
消费保证
NameService 集群
Broker 主从 双主 双从
Consumer 自动切换
producer 链接两个Broker
同步 超时会返回错误
异步 不返回
刷盘
同步复制
异步复制
消息的主从复制
主从同步 异步刷盘
消费者是多线程
顺序发送 顺序消费由 消费者保证
RocketMQ提供了MessageQueueSelector队列选择机制
Hash取模
顺序消息
幂等
消息表主键冲突
去重
消息去重
消息表 不断轮训 人工干预
最大努力
发送半消息 发送成功 本地事务 觉得是否提交还是回滚 服务端没收到回查 检查本地事务 根据本地事务决定 提交
半消息
2/3pc
预发 持久化 返回状态 发送处理结果 判断是否干掉持久化的 发送
最终一致
分布式事务
producer 和NameService 节点建立一个长连接
定期从NameService获取Topic信息
并且向Broker Master 建立链接 发送心跳
发送消息给 Broker Master
consumer 从 Mater 和 Slave 一起订阅消息
完整的一个调用链路
不断重试 16次 4小时46分钟 可以修改尝试次数
对一个消费者设置 组内都会设置
可以获取消息重试次数
顺序消息重试
无序消息重试
消息重试
不再被正常消费
保存3天
面向消费者组
控制台 重发 重写消费者 单独消费
死信队列
事务消息
消息丢失
决定是否丢弃
判断吞吐量
停止消费 加机器 加topic
消息积压
RocketMQ
kafka
消息队列的作用
生产消费模型
交换机模型
延迟队列
消息持久化
Java 操作
集群搭建
RabbitMQ
消息队列
Nginx 作用
正向代理
反向代理(负载均衡)
常用命令
动静分离(网站部署)
Nginx
尚硅谷 - 2021 最新 Redis
尚硅谷 - Nginx 教程由浅入深
Redis 命令参考
RabbitMQ 中文文档
Nginx 中文文档
《Redis 实战》(经典)
《RabbitMQ 实战:高效部署分布式消息队列》(经典)
Redis 在线练习
Nginx 配置在线生成
缓存:Memcached、Ehcache
队列:Kafka、ActiveMQ、TubeMQ、RocketMQ
网关:HAProxy
唯一主键
分库分表
没视图概念 都是返回最新的
读未提交
不同的read view
读已提交
用一个read view
可重复度
5.5之前回滚段删了文件也不会变小
没更早的read view删除
回滚日志
事务隔离级别
B+
等值查询
预发跑sql explain
排除 缓存 sql nocache
看一下行数对不对 不对可以用analyze table t 矫正
添加索引 索引不一定是最优的 force index 强制走索引 不建议用
存在回表的情况
主键索引
覆盖索引避免回表,不要*
联合索引 不能无限建 高频场景
最左前缀原则 按照索引定义的字段顺序写sql
合理安排联合索引的顺序
5.6之后 索引下推 减少回表次数
前缀索引
倒序存储
给字符串加索引
redo log满了 修改checkpoint flush到磁盘
要知道磁盘的io能力 设置innodb_io_capacity 设置为磁盘的IOPS fio测试
innodb_io_capacity设置低了 会让innoDB错误估算系统能力 导致脏页累积
buffer pool
系统内存不足淘汰数据页
系统空闲的时候 找间隙刷脏页
MySQL正常关闭,会把内存脏页flush到磁盘
数据库的flush的时机
脏页比例
redolog 写盘速度
机械磁盘的随机io不太行 减少随机io性能大幅提升 设置为 1最好
现在都是ssd了 设置为0就够了 8.0之后默认是0
innodb_flush_neighbors 0
innodb刷盘速度
如果触发隐式转换 那也会走cast函数 会放弃走索引
索引字段不要做函数操作,会破坏索引值的有序性,优化器会放弃走树结构
convert 也是函数所以走不上
字符集不同可能走不上索引
优化流程
聚集索引
减少回表
多扫描一次
非聚集索引
页满了 页分裂 页利用率下降
数据删除 页合并
自增 只追加可以不考虑 也分页
索引长度
索引维护
找到第一个之后 直到朋友不满足的
普通索引
找到第一个不满足的就停止了
唯一索引
包含主键索引值
覆盖索引
安排字段顺序
最左前缀原则
hash
索引空间问题
不需要多个回表 一边遍历 一边判断
5.6之后索引下推
页的概念
change buffer
更新操作来了 如果数据页不在内存 就缓存下来 下次来了 更新 在就直接更新
唯一索引 需要判断 所以 用不到change buffer
唯一索引 判断没冲突插入
普通索引 插入
记录在页内存
数据页读入内存 判断 插入
记录不再页中
数据读是随机IO 成本高
机械硬盘 change buffer 收益大 写多读少 marge
innodb的处理流程
更新
索引选择
索引
版本链 在聚集索引中 有两个隐藏列 trx_id roll_pointer
直接读取最新版本
加锁
每次读取前生成一个
第一次生成一个
Read View
MVCC
全库逻辑备份
全局锁
lock table read/write
MySQL5.5引入 自动添加 读锁不互斥 写锁互斥
MySQL的information_schema 库的 innodb_trx 表 找到对应长事务 kill掉
alter table里面设定等待时间
多个事务之前操作,如果查询的时候修改字段容易让线程池饱满
MDL(metadata lock)
Myisam是不支持表锁的
表锁
需要的时候才加上 并不是马上释放 等事务结束才释放 两阶段锁协议
默认是50s太久 但是如果设置太短会误判 一般采用死锁监测
innodb_lock_wait_timeout
超时时间
innodb_deadlock_detect = on
死锁机制 事务回滚
关掉死锁会出现大量重试
临时关闭
死锁消耗CPU
更多的机器 开启比较少的线程 消耗就少了
控制并发度
热点行
行锁
间隙锁
lock in share mode
for update
读
写
读写锁
innodb如何加锁
锁
回滚 mvcc
undo log
sync_binlog 可以优化日志写入时机
物理日志 内存操作记录
redo log
组提交机制,可以大幅度降低磁盘的IOPS消耗。
binlog
两段式提交 redo 准备 binglog 提交
log
mvcc影响
count1 *
强制走主
sleep
主备延迟
驱动表
join
bigint
row_id 没设置主键的时候
thread_id
id用完
设置 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count参数,减少binlog的写盘次数。这个方法是基于“额外的故意等待”来实现的,因此可能会增加语句的响应时间,但没有丢失数据的风险。将sync_binlog 设置为大于1的值(比较常见是100~1000)。这样做的风险是,主机掉电时会丢binlog日志。将innodb_flush_log_at_trx_commit设置为2。这样做的风险是,主机掉电的时候会丢数据。
mysql io性能瓶颈
查看空闲忙碌链接
定时断开链接
mysql_reset_connection 恢复链接状态
客户端空闲时间
wait_timeout
show processlist
redolog事务持久化
innodb_flush_log_at_trx_commit
binlog事务持久化
sync_binlog
老杜 - mysql入门基础 + 数据库实战
尚硅谷 - MySQL基础教程
SQL - 菜鸟教程
MySQL - 菜鸟教程
数据库挂了 show processlist 一千个查询在等待 有个超长sql kill 但是不会引起flush table 周末 优化脚本 analyze 会导致 MySQL 监测到对应的table 做了修改 必须flush close reopen 就不会释放表的占用了
真实故障
MySQL
中间件
阿里巴巴 Java 开发手册
手册
华山版《Java开发手册》独家讲解
Google Java Style Guide
研发规范
CI/CD到底是什么
Jenkins 持续集成工具教程
Jenkins 官方文档
CI/CD
尚硅谷 - 谷粒学院
黑马 - 24 小时搞定 Java 毕设电商项目
黑马程序员 Java 大型分布式微服务闪聚支付项目
一个优秀的开源博客发布应用
个人博客
[基于 SpringBoot 的后台管理系统
管理系统
newbee-mall
电商
项目实战
容器概念
镜像
部署服务
Dockerfile
Docker
架构
部署应用
暴露服务
动态扩缩容
K8S(Kubernetes)
【狂神说】Docker 最新超详细版教程通俗易懂
K8S 视频教程
《深入浅出 Docker》
Docker — 从入门到实践
菜鸟教程 Docker
国外 Docker 官方文档
Docker 中文社区(强烈推荐,有很多 Docker 技术文章和学习笔记)
Docker Blog(国外 Docker 技术博客)
网站
Docker Hub
腾讯软件源
阿里云 Docker 仓库
镜像源
容器
Hadoop
HDFS
MapReduce
Spark
Flink
Storm
Hive
HBase
Druid
Kylin
大数据
ElasticSearch
Canal
Kibana
Lucene
Logstash
搜索引擎
微服务
羊群效应
临时节点顺序
性能没redis高
性能比较高
Redis
设置一个失效时间用定时任务去跑
数据库集群 主备同步
搞个死循环排队
可重入设计一个字段累加
用数据库自身的锁就可以了 行锁 索引
select XX for update
记得 提交
宕机数据库也会自动释放锁
排它锁
比其他的更消耗资源
复杂
数据库
互斥
安全性
容错
特点
分布式
互联网技术
最好在早上hr上班后十分钟的时候投递,很容易被看到,不要周末或者大晚上投递
投递技巧
简历模板
多复盘,每次投递失败记得看下原因 修改了再投 不要无脑投觉得自己没错
针对不同类型的企业投递不同的简历
简历
一定要珍惜秋招和实习机会,一定要去实习,然后珍惜自己应届生的身份,这是你离大厂最近的时候,错过了真的要再等三年
然后就swap
会重新加载整个RDB
这个时候做bgsave cow的机制就没了
bgsave之后会做一个emptyDB
CPU彪升
sync遇到了bgsave
重连
大量请求会让值升高 超出阈值断开
master 复制缓存挤压区的时候 有个参数client-output-buffer-limit 默认1M
tps过高的时候
高并发场景下无限同步
预估体量参数动态调整
slave重连对比offset发现空档重新sync
阻塞久了复制缓冲区的数据就被冲掉了,是个队列会踢掉之前的数据
slave做RDB同步的时候会导致TPS过高无法加载
canal 并发修改
es 自动机构建
redis es 深分页
实在没有可以去网上找找 但是得记熟悉
遇到过的坑
我的回答有什么建议么
阿里的解决方案
团队主要做的事情
有什么想问我的
并发 多线程
业务亮点
比如我自己之前做的一些中间件改造优化
大数据底层优化 融合改造
技术亮点
一定要有核心亮点
可以是业务上的也可以技术上的
最好让对方看到你在团队视角的视野和格局,而不是局限于一个coder
突出你在项目中做的事情和收获
一定要对你简历上的每一个细节都了如指掌
面试技巧
BOSS
拉钩
招聘网站
面经
想去XX
成长受限
薪资
个人原因
渴望大平台
为什么换工作
职业规划
之前的公司你怎么评价
有什么想问我的么?
HR面
求职
B站 网址:[www.bilibili.com](https://space.bilibili.com/130763764)
中国大学MOOC 网址:www.icourse163.org
IMOOC 网址:www.imooc.com
极客时间 网址:https://time.geekbang.org
极客学院 网址:www.jikexueyuan.com
网易云课堂 网址:https://study.163.com
百度/谷歌 网址:www.baidu.com www.google.com
知乎 网址:[www.zhihu.com](https://www.zhihu.com/people/aobingJava)
GitHub 网址:[https://github.com](https://github.com/AobingJava/JavaFamily)
我要自学网 网址:www.51zxw.net
w3school、菜鸟教程 网址:www.w3school.com.cn www.runoob.com
豆瓣、微信读书、当当 网址:www.douban.com https://weread.qq.com http://book.dangdang.com
CSDN 网址[www.csdn.net](https://blog.csdn.net/qq_35190492)
掘金 网址 [https://juejin.im](https://juejin.im/user/59b416065188257e671b670a)
博客园 网址:[www.cnblogs.com](https://www.cnblogs.com/aobing/)
思否(segmentfault) 网址:[https://segmentfault.com](https://segmentfault.com/u/aobing)
stackoverflow 网址:https://stackoverflow.com
开源中国 网址:www.oschina.net
V2ex 网址:www.v2ex.com
infoQ 网址:www.infoq.cn
有道词典 网址:www.youdao.com
印象笔记 网址:www.yinxiang.com
有道云、石墨文档 网址:https://note.youdao.com https://shimo.im
ProcessOn 、xmind 网址:[www.processon.com](https://www.processon.com/i/5c349823e4b0db2e592c4847) www.xmind.cn
鸠摩搜索 网址:www.jiumodiary.com
脚本之家 网址:www.jb51.net/books
牛客网 校招 网址:www.nowcoder.com
LeetCode、lintcode 网址:https://leetcode-cn.com www.lintcode.com
数据结构模拟 网址:www.cs.usfca.edu
BOSS、拉钩 网址:www.zhipin.com www.lagou.com
阅读博客习惯
花了一个多月的时间制作这个项目过程实在痛苦,特别是对于一年多没写代码做运营的我,如果大家喜欢我做的技术相关的视频,请给个三连,点赞过1万,继续肝大厂系列技术视频!
最后
java学习路线
0 条评论
回复 删除
下一页