欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java技术面试题总结

程序员文章站 2022-04-01 18:50:46
Java基础部分1、StringBuilder 和 StringBuffer的区别?2、如何实现静态代理?有什么缺陷?3、动态代理的作用?在哪些地方用到了?4、JDK 的动态代理和 CGLIB 有什么区别?5、谈谈对 Java 注解的理解,解决了什么问题?6、Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?集合框架部分7、HashMap 的底层实现、JDK 1.8 的时候为什么将链表转换成红黑树?HashMap 的负载因子、HashMap ....

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

相关标签: java面试题