高级 JAVA 面试题 - 面试过多家知名互联网公司选出的比较有意思的题目

1、线上环境频繁发生 Full GC 如何排查?

频繁GC 一般是因为 Minor GC 后内存任然不够用导致的 Full GC ,所以我们可以在线上环境 开启 -XX:heapDumpBeforeFullGC 和 -XX:heapDumpAfterFullGC 参数,在线上环境执行 Full GC 前后打印一下内存使用情况,在结合一些分析工具 (jvisualvm)查看执行 Full GC 的原因,在针对原因解决问题,

另外调用 System.gc() 也会引起 Full GC 但是应该没人这么干把?

在一个就是看看是否是年轻代内存是否设置太小了

2、类的加载机制,什么是双亲委派机制?有什么好处?

类加载分为5个阶段,分别是 1、加载,2、验证,3、准备,4、解析,5、初始化

双亲委派机制是,当接到任务时,先去询问 父类是否可以执行,如果父类可以执行则直接交给父类完成,如果父类无法完成才自己完成。

避免类被重复加载,防止核心API库被随意篡改

3、Spring 是怎么解决循环依赖的?

构造器注入 循环依赖,和 scope=prootype 类型的bean 无法解决,会抛出异常

单利类的 循环依赖是类在创建的时候会先使用无惨构造函数创建bean 并且放入 创建池中,接着去创建依赖的bean 并且在创建之前会检查创建池中是否已经真正创建了,如果正在创建会拿出来进行装配。

4、如何实现接口的幂等性?

增加 token 每次请求都携带 token 如果处理过则增加已处理标识。

5、什么是死锁,发生死锁的四个条件是什么?

死锁是指两个或两个以上的线程在执行过程中由于竞争而照成的一中阻塞现象

四个条件分别是:1、互斥条件,2、不可剥夺条件,3、请求和保持条件,4、循环等待条件。

一般破坏四个条件中的一个条件,解决死锁问题,分布式锁一般都是增加超时时间,破坏请求保持条件,避免死锁。

更多面试题可以查看小程序 如果你觉得对你有帮助,可以点下广告,将不胜感激。

image
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,445评论 1 14
  • 不足的地方请大家多多指正,如有其它没有想到的常问面试题请大家多多评论,一起成长,感谢!~ String可以被继承吗...
    启示录是真的阅读 2,978评论 3 3
  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 2,174评论 0 9
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,370评论 11 349
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,731评论 0 11