StringBuilder是线程不安全的,效率高;StringBuffer是线程安全的,效率低。
拓展:String、StringBuilder、StringBuffer的区别:https://blog.csdn.net/a4827909/article/details/88839121
两种实现方式:基于继承的代理、基于接口的代理。
基于接口的代理实现,需要代理对象和被代理对象实现同一个接口,代理类在调用被代理对象的方法时,可以动态地增加或修改被代理对象的功能,可增加程序设计的灵活性。
静态代理的优缺点:
优点:可以在不入侵原代码的条件下,进行功能扩展。
缺点:(1)若有多个需要被代理的对象,相应的要创建多个代理类。
(2)基于接口实现的代理,由于代理类和被代理类要实现同一个接口,所以一旦接口方法增加,代理类和被代理类都要随之改变。
动态代理的作用:(1)代码解耦,动态创建目标类,不需要提前实例化,灵活多变。
(2)可以实现AOP编程。
(3)减少代码量,不需要为每个目标类创建代理类,代码量不会因为业务的扩大而急剧增加。
动态代理应用场景:(1)统计 api 的请求耗时。(2)统一的日志输出。(3)登录状态和权限验证。(4)Spring的 AOP 功能模块就是采用动态代理的机制来实现切面编程。
(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。
。。。。。。
(1)反射机制:在程序运行状态中,对于任意一个类或对象,都能够获取到这个类的所有属性和方法(包括私有属性和方法),这种动态获取信息、动态调用对象方法的功能叫做反射机制。即通过反射机制,我们可以获得一个类的任何东西。
(2)反射机制的特点: 优点:反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。 举例:代码中需要实例化一个对象,比如person(),用new Person(),不用反射机制。若此处要实例化其他类,则必须修改源代码并重新编译。若使用反射机制,class.forName("person").newInstance(); 这个类的描述可以写到配置文件中,此时如果想实例化其他类,只需要修改配置文件中的相应类描述即可,无需修改源码重新编译。 缺点:1、性能问题:使用反射是一种解释操作,用于字段和方法接入时要远慢于直接代码,因此反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用; 反射包含了一些动态类型,所以JVM无法对这些代码进行优化,因此反射操作的效率要比非反射操作低得多。应避免在经常被执行的代码或对性能要求很高的程序中只用反射。 2、使用反射会模糊程序内部逻辑:一般希望在源代码中体现程序的逻辑,反射绕过了源代码的技术,反射代码比相应的直接代码更复杂,会给维护带来问题。 3、安全限制:使用反射技术要求程序必须在一个没有安全限制的环境中运行,若一个程序必须在有安全限制的环境中运行,如Applet,那么就会出现问题。 4、内部暴露:由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为可能也随着变化。
集合框架部分
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 的启动类源码有了解过吗?