Java技术面试题总结
Java基础部分
1、StringBuilder 和 StringBuffer的区别?
StringBuilder是线程不安全的,效率高;StringBuffer是线程安全的,效率低。
拓展:String、StringBuilder、StringBuffer的区别:https://blog.csdn.net/a4827909/article/details/88839121
2、如何实现静态代理?有什么缺陷?
两种实现方式:基于继承的代理、基于接口的代理。
基于接口的代理实现,需要代理对象和被代理对象实现同一个接口,代理类在调用被代理对象的方法时,可以动态地增加或修改被代理对象的功能,可增加程序设计的灵活性。
静态代理的优缺点:
优点:可以在不入侵原代码的条件下,进行功能扩展。
缺点:(1)若有多个需要被代理的对象,相应的要创建多个代理类。
(2)基于接口实现的代理,由于代理类和被代理类要实现同一个接口,所以一旦接口方法增加,代理类和被代理类都要随之改变。
3、动态代理的作用?在哪些地方用到了?
动态代理的作用:(1)代码解耦,动态创建目标类,不需要提前实例化,灵活多变。
(2)可以实现AOP编程。
(3)减少代码量,不需要为每个目标类创建代理类,代码量不会因为业务的扩大而急剧增加。
动态代理应用场景:(1)统计 api 的请求耗时。(2)统一的日志输出。(3)登录状态和权限验证。(4)Spring的 AOP 功能模块就是采用动态代理的机制来实现切面编程。
4、JDK 和 CGLIB 的动态代理有什么区别?
(1)原理:
JDK动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理;
CGLIB动态代理是利用asm开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
(2)应用:
1. 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,但可以强制使用CGLIB实现AOP;
2. 如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换。
(3)JDK和CGLIB动态代理字节码生成的区别:
1. JDK动态代理只能对实现了接口的类生成代理,不能针对单纯的类生成。
2. CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以该类或方法最好不要声明成final。
5、谈谈对 Java 注解的理解,解决了什么问题?
。。。。。。
6、Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?
。。。。。。
集合框架部分
7、HashMap 的底层实现、JDK 1.8 的时候为什么将链表转换成红黑树?
HashMap 的负载因子、HashMap 和 Hashtable 的区别?
8、有哪些集合是线程不安全的?怎么解决呢?
9、什么是快速失败(fail-fast)、能举个例子吗?什么是安全失败(fail-safe)呢?
多线程部分
10、在多线程情况下如何保证线程安全?
11、synchronized 作用及底层实现?
12、ReetrantLock 和 synchronized 的区别?
13、关于AQS了解哪些?
14、线程池作用?Java 线程池有哪些参数?阻塞队列有几种?拒绝策略有几种?
15、线程死锁?
16、ThreadLocal 是什么,应用场景是什么,原理是怎样的?
17、介绍一下 Java 有哪些锁?
JVM部分
18、讲一下 JVM 的内存结构,及每个区域的调优配置参数
19、Minor gc 和 Full gc 的区别?详细介绍
20、方法区和永久代的关系?
21、JDK 1.8 HotSpot 的永久代为啥被彻底移除?有哪些常用参数?
22、主要进行 gc 的区域,永久代会发生 gc 吗?元空间呢?
23、各种垃圾回收算法和回收器,说出自己的理解
24、介绍一下zgc,zgc与g1的区别?
数据库部分
25、讲一下乐观锁和悲观锁
26、说一下 MVCC
27、说一聚簇索引和非聚簇索引的有什么不同?
28、关于索引的各种轰炸
网络部分
29、为什么网络要分层?
30、TCP/IP 4 层模型了解么?
31、http 是哪一层的协议?
32、http 和 https 什么区别?
33、http2.0了解吗?
34、tcp 三次握手过程、滑动窗口是干什么的?
35、Mac 地址和 ip 地址的区别?既然有了 Mac 地址,为什么还要 ip 地址呢?
36、当你打开一个电商网站,都需要经历哪些过程?
37、电子邮件的发送过程?
Spring部分
38、Spring AOP 和 IOC 的底层实现
39、Spring Boot 了解不?和 Spring 有什么区别?
40、Spring Boot 的启动类源码有了解过吗?
本文地址:https://blog.csdn.net/a4827909/article/details/107654356
上一篇: mybatis plus 创建时间创建人,修改时间修改人通用插件
下一篇: javaSE 阶段 题目