电面
- arrayList相对于普通的数组,做了哪些额外的事情?在什么情况下会扩容?
- ConcurrentHashmap的size方法是怎么设计的?
- 知道哪些可视化的内存分析工具
- jdk1.8默认的垃圾回收器是什么
- 如何用数据库(如 mysql)设计分布式锁
视频一面
- 你的导出程序中使用的kafka有没有溢出的情况?比如交警的接口两三天都不可用。Kafka有没有丢数据的情况?比如Kafka不工作了。
- GC很频繁怎么解决?首先怎么确定是young gc频繁还是full gc频繁?参考答案:jstat。问:Xms和Xmx设置为一样或不一样有什么讲究吗?参考1:避免在生产环境由于heap内存扩大或缩小导致应用停顿,以降低延迟
- 可以在synchronized里用volatile吗,有必要吗?
- 怎么避免死锁?他给出一种办法:锁过期时间。
- Springboot的自动装配。Springboot怎么知道去扫那些第三方依赖的starter里的bean呢?
参考文章:springboot注解-@Configuration:@Configuration是springboot中常用的注解,它的意思是声明一个类为配置类(相当于之前我们经常使用xml的形式进行一些组件的配置)并将其添加到IOC容器中。
springboot 自动配置的原理是什么?答1, 答2 ,Springboot自动配置:
扫描所有jar包类路径下"META-INF/spring.factories"
我先从启动类开始,会有个@SpringBootApplication,后面会定位到一个自动配置的注解@EnableAutoConfiguration,那最后就能看到注解内部会去META-INF/spring.factories加载配置类
不是所有的配置类都会加载的,假设我们没有引入redis-starter的包,那Redis的配置类就不会被加载。具体Spring在实现的时候就是使用@ConditionalXXX进行判断的。比如Redis的配置类就会有@ConditionalOnClass({RedisOperations.class})的配置,说明当前环境下如果有RedisOperations.class这个字节码,才会去加载Redis的配置类
我总结的关键词:SPI,配置类,条件注解。相关知识参考 本博----SPI与Springboot自动装配。
- springboot里如果有一些bean想被优先加载,应该怎么做?
- Springboot为什么要提供自己的classloader? Classloader 1加载了类A,Classloader 2加载了类B,类A能调用类B吗,或者说在什么情况下可以?Classloader的隔离性和可见性。(相关知识:本博----tomcat与自定义类加载器)
- tomcat和Servlet是什么关系,在底层是怎么使用Servlet的?
- 微服务的调用链路非常长,怎么快速定位到出错的service?Skywalking是如何获取调用链路的?java agent