宝子们,你们要的面试题续集终于来啦~
很多小伙伴反馈过,以前这篇 Java核心知识点精心整理 太长了,打开时页面都要卡一下
所以为了提升阅读体验,这次的面试题会分成若干小章节,每章只装十道题~
开始吧!!
1、java有哪些类加载器?
-
启动类(Bootstrap)加载器 BootClassPathHolder: 加载<JAVA_HOME>/lib下的jar包
-
扩展类(Extension)加载器ExtClassLoader:加载<JAVA_HOME>/lib/ext下的jar包
-
系统类(System)加载器AppClassLoader:加载我们自己项目中写的java文件编译而成的class文件,位于target/classes下
2、int和Integer有什么区别?
Integer是int的包装类,int则是java的一种基本数据类型,Integer的默认值是null,int的默认值是0;
JavaBean中我们应尽量使用Integer,打个比方,学生成绩如果用int,缺考怎么表示,0?那考0分的呢;-1?也可以,但没有null直观;
3、你在项目中如何保证缓存和数据库的一致性?
记住一句话,只要有引入缓存的地方,都不可能保证强一致性,所以这里的一致性是指最终一致性
方法很多,最常用的就是延时双删,先删除缓存,再操作数据库,完事儿再删除一次缓存
第二次删除缓存是为了避免 在第一次删除缓存之后,到操作数据库完成之前,这期间有新的查询过来,导致再次把旧数据生成缓存
4、如果你发现某个接口响应很慢,该怎么排查?
导致接口响应慢的原因太多了:网络、应用层、数据库事务、服务器自身、慢sql等
逐个来说
-
网络:对于单个请求来讲,网络因素影响其实很小,除非网络挂了导致请求超时才能意识到;而对于大批量请求,每个请求慢10ms,请求多了,时间也就长了,这种情况可以检查下你的应用部署机和数据库机地理位置是不是隔得很远,比如一个在华东一个在西南,地理距离也会对请求响应时间产生影响,请求量越大越明显;
-
应用层:就是我们敲的controller、service那些代码,这一层出问题很好解决,因为代码毕竟都是我们敲的嘛,一看日志就大概知道什么原因,最多的就是出现死循环(当然一旦出现死循环也不只是响应慢那么简单了);代码逻辑写的差点其实不会太影响性能,现在的cpu执行效率你尽管放心,再怎么优化也顶不了少一次io;
-
数据库事务:检查下你的数据库是不是卡事务了,导致锁了很多表;
-
服务器自身:服务器是不是卡了,cpu是不是炸了,内存是不是满了;
-
慢sql:这一层出问题的几率很大,同一组查询结果,由于sql不同,耗时能相差几百上千倍,可以通过查看sql执行计划来排查问题,详见 mysql执行计划解析
5、调用ReentrantLock的lock方法后,如果当前线程没有获取到锁,它会怎么办?
不管是公平锁与否,都会进入clh队列,但是注意,线程不会在获取锁失败后立马入队,在真正入队之前会多次尝试再次获取锁,尝试次数跟是否公平锁有关:
公平锁:
先tryAcquire尝试获取锁,如果失败,执行acquireQueued,acquireQueued内部会再次执行tryAcquire尝试获取锁,如果再失败,就入队;
非公平锁:
先cas尝试获取锁,如果失败,执行tryAcquire再次尝试获取锁,如果还失败,执行acquireQueued,acquireQueued内部会再次执行tryAcquire尝试获取锁,如果再失败,入队;
6、判断一块内存空间是否会被垃圾回收器回收的标准有哪些?
-
对象的引用被赋值为null,并且后面不再调用
-
对象的引用被重新分配了内存空间
-
对象的引用被赋予了新值
7、redis的持久化机制
所谓持久化机制就是保证 redis 挂掉再重启后,可以恢复数据
快照(默认)
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
[外链图片转存中…(img-fOBGPwBg-1716224557982)]
大厂面试场景
[外链图片转存中…(img-tXlwEfh7-1716224557983)]
知识点总结
[外链图片转存中…(img-dOB4URBo-1716224557983)]