2019年8月份面试总结:
一、简单介绍自己
二、说说最近做过的一个项目(项目中有哪些特色, 用到哪些技术)
三、Redis 部分
① redis 支持的数据类型
Sting list hash set zset
② redis 持久化方式
rdb (特点和执行流程)
aof (特点和执行流程)
③ redis 如何保证高可用
哨兵(sentinel)
④ redis 集群
节点握手,分配槽,根据key进行取余算法确定保存在那台机器上
⑤ 分布式锁实现
zset命令,过期时间设置
⑥ redis 为什么快
数据放在内存
IO多路复用
四、多线程部分
① 多线程实现方式
实现Runnable
继承Thread
② 多线程的安全问题
不同线程操作共享变量
③ 线程池初始化参数介绍
corePoolSize
MaxnumSize
WorkQueue
handler(有几种饱和策略,各自涵义)
④ 任务进入线程池的执行流程
⑤ Threadlocal 介绍
⑥ WAIT 和 sleep 区别
WAIT是Object的方法,sleep是Thread的方法
wait释放锁,需要notify进行唤醒等等....
⑦ 线程状态
五、static 关键字
修饰变量和方法,不需要依赖对象实例可以通过对象名称直接访问
静态代码块,类加载时调用
六、final 关键字
修饰类, 不能被继承
修饰方法,不能被重写
修饰变量,不能被修改
七、泛型
编译后泛型擦除机制带来的影响
八、消息队列部分
① 消息对列在项目中有哪些作用
解耦,异步消息, 流量销峰
② 如何保证消息不丢失
confirm机制, 持久化机制
③ 如何确认消息消费成功
自动确认和手动ACK
④ 消息幂等问题
全局ID,消费成功后记录日志,再消费时判断
九、集合部分
① HashMap 和 HashTable区别
HashMap线程不安全,HashTable线程安全(因为使用了synchronize关键字,所以效率低下)
HashTable key-value 都不能为null
② ConcurrentHashMap 底层实现
底层维护了segement 分段锁,每一个锁锁住部分数据,所以效率很高
③ jdk7 和 jdk8 HashMap区别
④ HashMap底层数据结构和源码分析
十、设计模式
工厂模式, 单例模式(多种),模板方法模式, 策略模式, 外观模式...
十一、Spring部分
① AOP
② IOC
依赖注入时,如果接口有多个实现怎么确定注入哪个
③ 事务
④ bean的生命周期和作用域
十二、Mysql部分
① 数据库锁
全局锁,表锁,行锁
② 数据库事务
原子性,一致,隔离(脏读,不可重复读,幻读), 持久
③ SQL优化
用explain进行SQL分析
加索引,多利用覆盖索引,查询字段用函数或者进行计算,左边用like等导致索引失效问题
不要用select *
④ 索引
底层B+树,聚族索引,组合索引,覆盖索引,最左前缀原则
⑤ InnoDB和MyIsam的区别
InnoDB支持行锁,支持事务,有redolog
⑥ 分库分表
十三、HTTP协议
① 协议理解
② HTTPS
证书,公钥私钥,对称加密和非对称加密
十四、SpringBoot
十五、SpringMVC
① 一个请求过来的执行流程
② 过滤器和拦截器的实现
十六、JVM部分
① jvm内存划分
程序计数器,本地方法栈,虚拟机栈,堆,方法区
各个内存区域的作用....
② 类加载机制
加载,验证,准备,解析,初始化,使用,卸载
启动类加载器-扩展类加载器-应用程序类加载器-自定义类加载器
双亲委派机制
③ GC
可达性分析算法(分析对象地址是否被其他对象引用)
标记清除算法-复制算法-标记整理算法-分代收集算法
年轻代:刚创建的对象实例,回收重灾区(用复制算法),大对象直接放入老年代
老年代:对象相对稳定,回收较少(用标记清除算法)
垃圾收集器:CMS G1
④ 优化
十七、DUBBO
① zookeeper(服务治理)
接口提供者启动后,以接口全路径为key节点保存在zookeeper上,同时在key节点下生成子节点provider
保存接口提供机器具体信息,IP+端口,消费者启动后,在key节点下生成Consumer节点,这样消费者就
可以拿到提供者信息,进行本地RPC调用
② 负载均衡
默认消费端根据策略做负载均衡,提供方也可以做
③ 支持的协议
Dubbo支持多种协议,默认dubbo协议还有redis协议,http协议,hessian协议等等...
十八、SpringCloud
① 对微服务的理解
② config组件,zull组件,Eruka组件,feign组件....
十九、锁
① 底层实现
底层通过AQS(队列同步器)实现
② 可重入锁实现机制
③ 排它锁(独占锁)和读写锁
排它锁:同一时刻只能有一个线程获取到锁
在读比较多的场景,用读写锁可以显著提高性能
④ 乐观锁和悲观锁
乐观锁 开始不上锁,修改时通过CAS算法
⑤ lock 和 synchronize区别
二十、分布式事务
用MQ 消息最终一致性解决方案
二十一、IO\NIO
输入输出流,字符字节流
二十二、防止重复性提交
前端页面控制(置灰或者给出提示)
后端:页面刚进入时,生成随机ID, 放在redis,请求成功后,
删除ID,再次请求判断前端传入的ID是否和redis中相等,如果已经删除,则不再处理
二十三、jdk8新特性
① 行为参数化
② lambda 表达式
③ 流(Stream)和 并行流(parallelStream)
二十四、内部类
普通内部类,局部内部类,匿名内部类,静态内部类
内部类可作为单继承的一种扩展
二十五、二叉树
平衡二叉树
二十六、tomcat优化
开放性问题
最近读过哪些技术相关的书,
职业规划,长期有什么打算