引言:
好久不见!过去的一段时间,自己由于一些特殊原因,一直没有及时更新博客,今后一时间自己会增加博客的更新频率。时光飞速,转眼间自己已经毕业3年,由于XX原因,自己离开了自己在南京呆的第一家公司,在面试之前在也进行了一些准备,前前后后也经历不少面试,很多面试题出现的概率很高。所以在这里总结归纳一下,目的更多的是与同一阶段的同学们共勉,同时提醒自己在以后的工作中注意这些原理的应用与理解,鞭策自己在以后的空余时间多去学习自己的掌握不牢固的技术知识。
自己遇到的整个面试涉及技术包含1.项目框架: spring springcloud dobbo 2.消息中间件: kafka rocket 3.数据库:mysql redis 4.java基础(多线程相关知识点,设计模式,集合等等) 5. jvm与gc
技术栈与知识点
一 、框架知识(spring、springcloud、dobbo
(1) springBean的生命周期
a.创建bean实例 (无参数构造)
b.设置bean的属性值和对其他bean引用 (调用set方法)
c. 把bean实例传递bean后置处理器的方法 (postProcessBeforeInitialization)
d. 调用bean的初始化方法 (需要进行配置初始化的方法)
e.把bean实例传递bean后置处理器的方法 postProcessAfterInitialization
f.使用bean
g.容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)
(2)IOC
(3)AOP (原理动态代理)
(4)springcloud
网关服务:Zuul
注册中心服务: eureka
服务调用:feign
负载均衡:ribbon
服务的熔断:hystrix
二 、消息中间件 (kafka、rocket)
(1)如何解决消息的重复消费问题
(2)如何保证消息的有序性
(3)消息的几种存储方式
三 、数据库 (mysql)
(1)事务的几种隔离级别
(2)平时sql是怎样优化的
四 、noSql (redis)
(1) 几种数据结构,以及他们的应用场景
String
List
Hash
Set (随机抽奖)
ZSet(底层结构:hash+跳跃表)
(2)几种存储方式
RDB:存数据
AOF: 存数据指令
(3)
缓存穿透
缓存击穿
缓存雪崩
(4) redis实现分布式锁
(5)如何缓存和数据的一致性
更新数据库数据后,删除缓存数据,查询时候再从数据库里查询放在缓存里
五:jvm和gc
视频学习与复习(B站宋文康老师的视频)https://www.bilibili.com/video/BV1PJ411n7xZ/?share_medium=web&share_source=baidu&bbid=70C99A41-7C05-4274-9794-C8ABFEBC8EAC155811infoc&ts=1601261015404:
(1)jvm 包含类加载子系统、运行时数据区、解释器和即时编译器
(2) gc 分代算法(年轻代与老年代) 、分区算法 、一些垃圾回收算法和垃圾回收器
书(周志明老师的深入学习java虚拟机第2版、第3版)
六、多线程、高并发相关知识点
(1)线程池的几种参数以及原理
(2)ReentrantLock 锁的原理 (AQS)
(3)Sychronized和Lock的区别:https://www.cnblogs.com/shuaifing/p/14615421.html
(4)ThreadLocal的底层原理
七、java的基础知识
(1)集合:Map与List区别,Map的底层原理(如何扩容的,哈希冲突等等)
hashTable、crncurrentHashMap与hashMap的区别(线程安全,分片锁)
(2) == 和 equals区别
前者比较地址,后者Object里面的方法,默认比较地址
八、常用的设计模式
单例 (IOC创建单例)
工厂方法 (IOC)
代理 (AOP动态代理)
模板模式 (AQS)
感悟与规划:
过去的一年多,更多的是代码实践,之后的一段时间,期望自己注重身体健康,加强自律,一直保持积极学习的心态,利用空余时间,弥补自己认识不足的技术栈,学习新的技术栈,巩固基础知识的原理,发费一定的精力在算法上面,生产实践中更注重技术原理的理解与应用,期待着自己与大家一起共同成长,进步,为了自己今后能生活的更好而努力!