type
status
date
slug
summary
tags
category
icon
password
面试题总结
1、JDK1.8的新特性
允许在接口中添加默认方法和静态方法
lambda表达式
stream API
java.time包 新日期和时间API
optional 主要用于防止NullPointerException
2、stream API用过哪些
stream流并行操作有没有用过
3、optional这个有用过吗
4、如果让你自己去实现一个多线程你打算如何实现,线程池的几个核心参数及核心参数如何让思考的,阻塞队列使用的哪一个,为什么要使用这个阻塞队列
创建线程池:重复利用线程执行多个任务,避免线程创建和销毁带来的开销
核心线程数:
- 首先判断所处理的任务是一个CPU密集型(涉及到大量计算,对CPU利用率较高)还是I/O密集型的任务(涉及到文件读写、网络请求)
- 如果是CPU密集型则设定为N(CPU核心数)+1,当一个线程因为某些原因(如缓存未命中或分支预测失败)暂时停顿时,额外的线程可以利用这段时间执行其他任务,从而避免CPU资源的浪费
- 如果是I/O密集型则设定为2N(CPU核心数),可以确保在一个线程因I/O交互被阻塞,其他线程可以利用CPU的资源进行其他操作
阻塞队列:
LinkedBlockingQueue:基于链表的阻塞队列,默认是无界的(可以设置为有界),适用于任务生产速度快于消费速度的场景,由于是无界的,可能会导致内存耗尽
ArrayBlockingQueue:基于数组的有界阻塞队列,适用于任务生产和消费速度相对均衡的场景。由于是有界的,可以防止任务过多导致内存耗尽
SynchronousQueue:不存储元素的队列,每个插入操作必须等待一个相应的移除操作,适用于任务提交速度与处理速度相同的场景。常用于直接将任务交给线程执行,而不进行排队
PriorityBlockingQueue:支持优先级排序的无界阻塞队列,适用于需要根据优先级处理任务的场景,任务会根据其优先级顺序被消费
DelayQueue:支持延迟获取元素的无界阻塞队列,适用于需要在特定时间后处理任务的场景,常用于定时任务调度
5、反问:最大线程数为什么设定为核心线程数+1
- I/O 等待时间:任务在等待 I/O 操作完成的时间。
- CPU 时间:任务实际占用 CPU 的时间
6、反问:LinkedBlockQueue是无界阻塞队列,他是有安全风险的,你知道是什么吗,既然有安全风险你为什么要使用
7、说一下JVM的类加载机制
双亲委派:每个类加载器在加载类时,首先将请求委派给父类加载器,只有在父类加载器无法加载时,才尝试自己加载
8、其中验证和准备的区别
校验:为了确保类文件的字节码符合 JVM 规范,保证安全性
准备:为静态变量分配内存并初始化默认值,如数值类型为0,引用类型为null
9、你能描述一下class文件的结构吗
10、比如我给你一个SQL,你知道这个SQL要怎么优化么,从哪些方面考虑,具体如何做的
通过explain查看SQL执行计划
使用join替换子查询或嵌套查询
尽量使用union all代替union
避免使用select *
小表驱动大表
避免使用太多join
11、explain具体看哪几个核心字段,其中的核心字段都有哪些参数
重点查看type、extra、rows字段,如果type值为ALL则是执行的一个全表扫描,需要针对性的索引优化,如果extra值为Using filesort,通常是因为order by子句,需要将排序字段创建索引,如果extra值为Using temporary,通常因为查询使用了临时表,通常是group by操作中,可以通过为
12、如果出现OOM你是如何分析和解决的
13、数据库连接池方面你是如何优化的,你采取的优化逻辑是什么
14、如果你们本地就出现了一次事故,就是比如说出现事故,然后领导给你安排的一个任务让你解决这个事故。你的那个解决思路什么或者解决逻辑思想,你可以阐述一下这个解决的过程吗
15、如果给你一个慢SQL日志,你会如何分析
16、SpringBoot的启动过程
17、单点登录
18、矩阵数据同步
19、流程设计
20、xxl-job的组件
21、redis项目中的应用场景
22、colletions包下的集合有哪些
23、ArrayList和LinkedList的区别
24、HashMap的底层原理
25、索引是不是越多越好(索引过多的负面影响)
写性能下降:每次对表数据进行增删改时,索引也需要同步更新
存储空间占大:每个索引都需要额外的存储空间
查询优化器负担大:查询优化器需要评估所有可能的索引来生成最佳执行计划,索引过多会导致查询优化器决策时间延长
锁竞争加剧:更新索引时会对索引页加锁,索引过多会导致锁冲突概率变大,进而可能导致死锁或性能下降
26、Redis中list和Set的区别
27、类加载器有哪些
28、双亲委派机制
29、双亲委派机制的好处
30垃圾回收机制
31、Springboot常用注解
32、SpringBootApplication由哪几个注解组成
33、@CompomentScan的原理
34、nginx中location的配置
35、docker的常用命令
36、String intern方法
37、内存泄漏的场景和解决办法
- 作者:JackJame
- 链接:https://notion.qjit1314.eu.org/article/example-13
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


