# 常见问题
## 1. 软件开发
- 常用设计模式,在jdk和spring中的体现
工厂模式、适配器模式、代理模式、单例模式、责任链模式、策略模式、、、
- 软件开发原则
单一 职责、接口隔离原则、迪米特法则 、里氏替换则、开闭原则、依赖倒置原则
- uml关系图
常见的关系:抽象和继承、组合和聚合、依赖和关联
## 2.java集合
* 集合继承关系
list、set、map
* 集合之间的差异
* ArrayList底层原理
* Map底层原理
## 3.多线程
- 创建线程的方式及差异
- 线程状态流转
- wait和sleep的区别
- 怎么保证线程安全
- volatile关键字的特性及原理
- sychronized和Lock的区别和实现
- synchronized的升级机制
- AQS的实现
- 常用的并发工具包,像countDownLatch和cyclicbarrier等,原理及差别
- 线程池的常用参数及其含义
- 线程池创建任务的规则
- 线程池的常用实现
- 线程池的配置规则
## 4.jvm
- jvm内存模型
- 可能出现内存泄露的地方
- 类的使用过程 ,从加载到使用到卸载
- 双亲委派和破坏双亲委派
- gc 算法
复制算法,标记 -整理算法,标记-清除算法
- gc 垃圾标记
引用计数法,gc-root
- 垃圾收集器
新生带和年老代的不同收集器
- cms收集器的回收过程
- 常用jvm的参数,jstat、jmap、jstack,jps
- jmm相关知识,cpu缓存,cpu缓存一致性协议
- 死锁出现的场景和避免死锁的优化
## 5.myabties
- mybaties缓存
- 插件
- \#和&的区别
## 6.Spring
* Bean的生命周期
* 如何避免循环依赖问题
* IOC、AOP的实现
* SpringMVC的实现流程
* BeanFatory和FatoryBean的区别
## 7.Springboot
* SpringBoot的设计目的
* SpringBoot的初始化过程
* SpringBoot如何实现自动装配
* 如何开发一个SpringBoot插件
## 8.Dubbo
* RPC调用过程
* zk宕机之后是否还能继续调用
* 使用中碰到的问题
* SPI机制
* 负载均衡策略和重试机制
* 和SpringCoud的
## 9.MQ
* mq的作用
* 消息幂等和防止重复
* 消息防止丢失
* 消息累计
* 消息有序性
* 消息中间件的对比优缺点
* 消息中间件的 高可用
## 10.Redis
* Redis为什么快
* Redis单线程模型,为什么新版本5要使用多线程
* Redis持久化策略
* Redis失效策略
* Redis缓存淘汰策略
* Redis数据结构和对应的内存模型
* Redis的主从,集群,高可用方案
* Redis哨兵模式
* 缓存血崩和穿透解决方案
* 缓存一致性问题
* Redis常用参数
## 11.MySql
* mysql的所有锁,表锁和行锁
表锁:MDl锁,意向排他锁,意向共享锁
* mysql间隙锁 、临键锁
* mysql存储引擎
* mysql的隔离级别
* 事务特性及 实现原理
* mvcc
* Redolog,undolog,changebuffer,binlog
* b树,b+树特性,
* 索引失效场景
* 索引设计原则
* sql优化和查询计划结果意义
* mysql优化
## 12.分布式
* cap理论和Base理论
* 分布式事务的解决方案
* 分布式锁的实现方案,及其原理
## 13.场景
* 如何设计一个秒杀系统
* 10m内存处理100m文件
*
## 14.算法相关
## 15.http
* 常用状态码及其含义
* 浏览器访问url的过程