java开发中间件学习记录(持续更新中~)
1 Redis
2JVM
3 java基础底层
4Mysql
5 spring
6 微服务
7.......(持续更新)
One:Redis篇
1:Redis
1.穿透
1.1缓存穿透
1.1.1布隆过滤器
1.2缓存击穿
2:击穿
1.3:缓存雪崩
1.4:双写一致
1.5.持久化(RDB,AOF)
1.6删除策略
1.7淘汰策略
1.8分布式锁 (setnx,redisson)
1.9Redis集群
1.9.1主从复制
1.9.2哨兵(Sentinel )
1.9.2.1脑裂
1.9.3分片集群
1.10 (为什么Redis这么快)I/O多路复用模型
2:MYSQL
2.1如何定位慢查询
2.2什么是索引 (了解索引吗)
2.3什么是聚集索引(聚簇索引)二级索引(非聚簇索引)
2.3.1回表查询
2.4覆盖索引
2.5MYSQL超大分页处理
2.6索引创建的原则
2.7索引失效
2.7.1最左前缀法则
2.7.2范围查询右边列失效
2.7.3在索引列上进行运输操作
2.7.4以%开头的模糊匹配
2.8sql优化
2.9事务的特性 (ACID)
2.10并发事物带来的问题(脏读,不可重复读,幻读)
2.11undo log,redo log 区别
2.12MVCC(多版本并发控制)
2.13MYSQL主从同步原理
2.14分库分表
3: JVM:
3.1JVM组成部分 ,运行流程
3.2程序计数器
3.3介绍一下Java堆
3.4虚拟机栈
3.4.1栈溢出
3.5解释一下方法区
3.5.1常量池
3.5.2运行时常量池
3.6听说过直接内存吗:
3.7什么是类加载器,类加载器有哪些
3.8什么是双亲委派模型
3.9类加载的执行过程
3.10对象什么时候被垃圾器回收
3.10.1可达性分析算法
3.11垃圾回收算法有哪些
3.12JVM的分代回收:
3.13有哪些垃圾回收器:
3.14 G1垃圾回收器
3.15强引用,软引用,弱引用,虚引用区别
3.16JVM调优的参数在哪里设置参数值
3.17JVM调优参数有哪些
3.18JVM调优工具
3.19java内存泄漏排查思路
3.20CPU飙高排查
4:常见集合篇:
4.1List
4.1.1数字索引从0开始为什么
4.2ArrayList底层实现原理
4.3Arraylist扩容
4.4数字和list转换
4.5ArrayList和LinkedList的区别
4.6HashMap
4.6.1红黑树
4.6.2散列表
4.7哈希冲突
4.8HashMap的实现原理
4.9HashMap的put方法具体流程
4.10HashMap的扩容机制
4.11hashMap的寻址公式
4.12hashmap多线程死循环
5:多线程:
5.1线程和进程的区别
5.2并行和并发的区别
5.3创建线程的方式
5.4runnable和callable(创建线程时) 的区别
5.5线程 run()和start()的区别
5.6线程包括那些状态(之间是如何转换的)
5.7多个线程之间的执行顺序
5.8 notify()和notifyAll()的区别
9:wait()和sleep()的区别
5.10如何停止一个运行的线程
2:
3:
5.11synchronized关键字的底层原理
5.12 锁升级
2:
5.13java内存模型
5.14CAS你知道吗
5.15volatile的理解
简单说就是JVM为了对代码进行优化提高性能会在不影响结果的情况下把代码执行顺序改变,但多线程就可能会出现结果不对的问题
然后volatile原理就是加了一些屏障,使屏障后的代码一定不会比屏障前的代码先执行,从而实现有序性
5.16什么是AQS
5.17ReentrantLock的实现原理
5.18死锁产生的条件