一、java基础知识。
1.jvm内存划分,GC算法,排查OOM常用的命令。
答:堆、栈、方法区、程序计数器、常量池、直接内存、本地方法栈
GC算法:标记-清除;复制算法;标记-整理,排查命令:JPS查看java进程,jinfo查看jvm配置信息;jmap -heap查看堆详细信息,jstat -gc查看GC信息,jmap -dump打印dump日志
2.类加载器种类和加载过程。
答:启动类、扩展类、APP类加载器。加载过程:一个类加载器收到加载类的请求,不会自己去加载,而是委派给父类加载器去加载,父类加载器无法完成加载,才给子类去加载。
3、设计模式
设计原则:单一职责、接口隔离、开闭原则、依赖倒置原则、里氏替换原则、迪米特法则。
- 里氏代换原则 :任何基类可以出现的地方,子类一定可以出现
- 依赖倒转原则 :针对接口编程,依赖于抽象而不依赖于具体
- 迪米特法则:最少知道原则 ,一个实体应当尽量少的与其它实体发生相互作用,使得功能模块相互独立
4、线程池参数有哪些参数?同步工具类有哪些?CountDownLatch、Semaphore、CyclicBarrier
实现线程的方式:三种。拒绝策略:拒绝且抛错、拒绝不抛错、删除队列最老的线程、调用者线程自己执行
线程状态流转:
二、spring boot,spring cloud面试题。
spring事务注解失效的场景:
1.访问权限问题
2.方法用final修饰
3.方法内部调用
4.未被spring管理
5.多线程调用
6.表不支持事务
7.未开启事务
8.错误的传播特性
9.自己吞了异常
10.手动抛了别的异常,因为spring事务,默认情况下只会回滚RuntimeException(运行时异常)和Error(错误),对于普通的Exception(非运行时异常),它不会回滚。
11.自定义了回滚异常,因为如果使用默认值,一旦程序抛出了Exception,事务不会回滚,这会出现很大的bug。所以,建议一般情况下,将该参数设置成:Exception或Throwable。
12.嵌套事务回滚多了。
spring boot启动后执行方法的5种方式:
1.实现 CommandLineRunner 接口。
2.实现 ApplicationRunner 接口。
3.实现ApplicationListener 接口监听 ApplicationStartedEvent 或者 ApplicationReadyEvent事件。
4.@PostConstruct 注解
5.实现 InitializingBean 接口,重写afterPropertiesSet()方法。
spring boot启动流程分析:Spring Boot启动过程分析 - 简书
三、分布式事务解决方法
<