Java后端面试100题,包含标准答案以及大厂高频考点全覆盖
上周带的一个实习生,零基础学了六个月Java之后,在阿里、字节和美团这三个大厂都拿到了offer。他说自己能成功上岸,全靠我给他准备的那份Java后端面试100题。他把这道题目背了三遍,每一道都可以脱口而出,在面试的时候几乎所有的问题都在里面,面试官都夸他的基础很扎实。整理这份面试题花了我整整一个月的时间,翻遍了阿里、腾讯、字节、美团、京东等大厂近三年的2000多道真题,并从中筛选出这100道最常考且最重要的题目。每一道都有标准答案直击考点背完可以直接去面试。不管是应届生找工作,还是工作1-5年想跳槽涨薪的人士都可以用到。建议先点赞收藏再慢慢看,在面试之前翻一遍至少可以帮你多拿20分。一、Java基础(15题)
Java的基本数据类型有哪些?各占多少字节呢?答:有八种基本的数据类型的。整数类型:byte(1字节)、short(2字节)int(4个字节)、long (8字节)浮点型:float (4字节),double (8字节)布尔型:boolean (1字节,在JVM中一般以1字节来处理)==:比较基本数据类型时比值,引用数据类型的比较是内存地址equals:默认比较内存地址,重写后可以进行内容上的比对(String、Integer等)String、StringBuffer、StringBuilder的区别?答:StringBuffer:可变字符序列,线程安全,性能一般StringBuilder:可变字符序列,线程不安全,性能最好Java中的自动装箱和拆箱是什么?答:自动装箱是指编译器会把基本数据类型转换为对应的包装类;而自动拆箱则是指编译器将包装类还原成相应的基础数据类型。例如Integeri=10; intj=i;Java中有哪些访问修饰符?怎样来规定权限呢?答:4种访问控制修饰词,按照从大到小的顺序排列为protected:同一个包里的类以及不同包的子类可以访问default(不写):同一个包内的类可以互相访问static关键字的作用是什么?答:静态可以修饰变量、方法、代码块和内部类。被static修饰的成员属于整个类,而不是某个实例,在编译时就会初始化,并且所有的实例都会共享同一个static成员。this:指向当前对象,可以使用它来访问本类的属性,方法以及构造函数super:父类对象的引用,可以调用父类属性、方法以及构造函数Java中的异常体系结构?答:所有的异常都是Throwable类的一个子类,分为Error和Exception两大类。Error:系统级错误,程序无法处理的状况有OutOfMemoryErrorException:程序级错误,分为受检异常(必须处理)和非受检异常(运行时异常)throws:在方法声明中指定该方法可能会抛出的异常类型Java中泛型是什么?有什么用处呢?答:泛型就是参数化类型,把类型的值作为参数传给类、接口或者方法。可以提高代码的复用性,并且能起到一定的类型检查作用来防止强制转换错误的发生。什么是反射?优点是什么缺点呢答:反射就是指在运行时获取类的信息以及操作该类对象的能力。优点:提高程序的灵活性和可扩展性,完成框架的主要功能Java中的注解是什么?常用的元注解有哪些?答:注解是一种标记,可以在类、方法、变量等处添加额外的信息。常用元注解@Documented:注解会被包含在javadoc中Java8都有哪些新的特性?答:Lambda表达式、Stream流、函数式接口、默认方法、Optional类以及新的日期时间API等。抽象类可以有普通成员变量和方法,接口只能包含常量以及抽象的方法(Java8之后也可以添加默认方法,静态方法)二,Java集合(10个)
Java集合框架的体系结构?答:java集合分为Collection和Map两大接口。Collection:List(ArrayList、LinkedList,Vector)、Set(HashSet、LinkedHashSet、TreeSet)、QueueMap:HashMap、LinkedHashMap、TreeMap,Hashtable、ConcurrentHashMapArrayList和LinkedList有什么区别?答:底层实现:ArrayList采用动态数组,LinkedList使用双向链表访问速度:ArrayList随机存取速度快,LinkedList随机存取慢增删速度:ArrayList头尾插入删除快,中间插入删除慢;LinkedList任意位置插入删除都很快内存占用:ArrayList内存开销小,LinkedList每个节点都要额外存储前后指针HashMap底层是如何实现的?答:JDK1.7及之前版本为数组+链表;JDK1.8及之后版本则使用了数组、链表以及红黑树。当链表长度超过8,或者数组长度大于64的时候,就会把链表转换成一个红黑树来提高查询效率。HashMap的扩容机制是怎样的?答:默认初始容量为16,负载因子为0.75。当元素数量超过容量乘以负载因子的时候就会进行扩容,并且原来的哈希值会重新计算之后再分配位置。HashMap和Hashtable有什么不同?答:线程安全:HashMap不是线程安全的,Hashtable是线程安全的性能:HashMap性能好,Hashtable性能差值:HashMap允许key和value为null,Hashtable不允许继承关系:HashMap继承自AbstractMap,Hashtable继承自DictionaryConcurrentHashMap底层是如何实现的?答:JDK1.7使用分段锁(Segment),每个Segment都是一个独立的HashMap,从而提高了并发度;而JDK1.8则是用CAS+synchronized来代替分段锁,并且取消了Segments的存在,在内部采用Node数组、链表以及红黑树来实现线程间的同步。HashSet底层是如何实现的?答:HashSet底层使用的是HashMap,所有的元素都被存放在HashMap的key中,value是一个固定的Object对象。TreeSet和TreeMap的排序方式?答:支持自然排序和自定义排序。自然排序要求元素实现Comparable接口,而定制排序则需要传入一个Comparator对象来指定比较规则。什么是快速失败(fail-fast)?答:迭代器在遍历集合的时候,如果集合的结构发生变化了(增删元素),那么迭代器就会马上抛出ConcurrentModificationException异常来防止出现不确定的结果。线程安全:ArrayList不是线程安全的,Vector是线程安全的性能:ArrayList性能好,Vector性能差扩容机制:ArrayList扩容为原来的1.5倍,Vector默认扩容为原来的2倍三、Java并发(15题)
进程是操作系统中资源分配的基本单位,线程则是CPU调度的最小单元一个进程可以有多个线程,而这些线程共享同一个进程的资源实现Runnable接口,并重写run () 方法实现Callable接口,并重写call() 方法,可以有返回值线程生命周期的状态有哪些?答:6种状态为新建(New)、就绪(Runnable)、运行(Running) 、阻塞 (Blocked),等待 (Waiting) ,超时等待(TimedWaiting),终止(terminated)。sleep() 和wait() 方法有什么区别?答:所属类:sleep() 是Thread类的静态方法,wait() 是Object类的方法锁释放:sleep() 不会释放锁,wait() 会释放锁使用场景:sleep() 用来暂停一段时间,wait() 则是用于线程之间的通信唤醒方式:sleep() 时间到了自动醒来,wait() 需要被notify()/notifyAll() 唤醒什么是线程安全?怎样保证线程的安全性呢?答:线程安全就是指多个线程同时访问一个对象的时候,不需要额外的同步操作就可以得到正确的结果。保证线程安全性的方式有以下几种使用线程安全的集合(ConcurrentHashMap等)synchronized关键字的作用是什么?答:可以用来修饰方法或者代码块,保证同一时间只有一个线程去执行被修饰的这部分程序段,从而达到线程安全的目的。底层使用的是对象头中的监视器锁(Monitor)。synchronized和Lock有什么不同?答:实现方式:synchronized是Java关键字,JVM层面的;Lock是Java接口,在代码层面实现锁释放:synchronized自动释放锁,Lock需要手动释放锁锁类型:synchronized只有非公平锁;Lock既可以是公平的也可以是非公平的功能:Lock提供了更多的功能,比如可中断锁、超时锁以及多个条件变量等什么是死锁?造成死锁的原因有哪些呢?怎样防止出现这种情况的发生?答:死锁是指两个或者多个线程互相等待对方释放资源,从而使程序陷入永远阻塞的状态。产生条件为互斥、请求和保持以及不剥夺四个条件中的任意一个或全部都满足的时候就会发生死锁现象;破坏其中一个即可以避免死亡事件的发生,在顺序获取共享对象时也可以实现对规避风险的保护作用,此外还有tryLock() 和设置超时时间等方法来预防。volatile关键字的作用是什么?答: volatile有两个作用保证变量的可见性:一个线程修改了volatile变量值之后,其他线程可以马上看到禁止指令重排序:编译器和CPU不会对volatile变量的读写操作进行重新排列可见性:一个线程修改了共享变量的值,其他的线程可以马上看到ThreadLocal是做什么的?有什么用处呢?答:线程局部变量,每个线程都有自己的副本,在不同的线程中互不干扰。用来解决线程安全问题,并且省去了参数传递的问题。newFixedThreadPool:固定线程数的线程池newCachedThreadPool:可缓存的线程池newSingleThreadExecutor:单线程的线程池newScheduledThreadPool:定时任务线程池什么是CAS?CAS有哪些优点和缺点呢?答:CAS就是比较并交换(CompareAndSwap),它属于无锁算法。通过比较内存中存储的值与期望值是否一致来决定执行更新操作,如果相等的话就对目标变量进行替换为新的给定值的操作。优势在于性能较好,并且不需要加锁;但是存在ABA问题、循环时间长开销大以及只能保证一个变量的原子性什么是AQS?答:AQS是抽象队列同步器(AbstractQueuedSynchronizer),是Java并发包中锁和同步器的基础框架。它用一个volatile的int类型的变量来表示同步状态,并且使用FIFO队列出管理等待中的线程。四、JVM(10题)
JVM内存结构?答:JVM内存分线程私有和线程共享两部分。程序计数器的作用是什么?答:程序计数器保存的是当前线程正在执行的字节码指令地址,它是唯一一个不会抛出OutOfMemoryError的区域。虚拟机栈的作用是什么?会出现什么样的异常呢?答:虚拟机栈用来存储方法执行时的各个不同阶段所用到的所有局部变量表、操作数堆(即调用者保存了所有有关该指令所需要的信息,以及其它被此指令影响的数据)和动态链接。会抛出StackOverflowError(StackOverflow)或者OutOfMemoryError(MemoryLimitExceeded),前者为栈溢出现象引起的结果,在编程中通常用来表示程序出了问题;后者一般由于内存使用超过限制而发生。堆的作用是什么?内存划分的方式是怎样的?答:堆属于JVM中最大的一块内存,用来存放对象实例以及数组。Heap分为新生代和老年代,其中新生代又分为Eden区、Survivor0区和Survivor1区。方法区的作用是什么?答:方法区用来存放类信息、常量池、静态变量等数据。JDK1.8及以后,方法区被元空间(Metaspace)取代,并且使用本地内存来存储这些内容。什么是垃圾回收(GC)?答:垃圾收集就是指JVM自动地把堆中不再使用的对象所占的内存空间释放出来,从而避免了因为没有足够的可用内存而导致的应用程序崩溃。引用计数法:给每个对象加上一个引用计数器,当引用为0的时候就可以回收了。缺点是不能解决循环引用的问题。可达性分析算法:从GCRoots开始,不可达的对象可以被回收。包括虚拟机栈中的引用、方法区中静态变量的引用以及本地方法栈中的引用等在内都属于GCRoots的范畴。标记清除算法:先给需要回收的对象打上标签,再集中清理这些对象。缺点是会产生内存碎片。复制算法:把内存分成两等分,每次只用其中的一半空间来存储对象,在回收时将存活的对象拷贝到另一半的空间中。缺点是内存利用率低。标记 - 整理算法:先对存活的对象进行打上标签,然后把带有标签的活对象移动到内存的一端,并且清除边界之外的部分。分代收集算法:按照对象的存活周期把内存划分为新生代和老年代,其中新生代采用复制回收方式,而老年代则使用标记-整理或者标记-清除的方式。新生代:SerialGC、ParNewGC、ParallelScavengeGC老年代:SerialOldGC、ParallelOldGC、CMSGC内存泄漏:程序中已经不再使用的对象不能被GC回收,从而造成内存占用越来越大内存溢出:程序申请的内存在JVM可以提供的最大范围内,所以会抛出OutOfMemoryError异常五、Spring/SpringBoot(15题)
什么是Spring框架?答:Spring是一个轻量级的Java开发框架,主要功能包括控制反转(IoC)和面向切面编程(AOP)。它提供了一站式的,企业级别的开发解决方案来简化Java的编写。什么是IoC?IoC的优点是什么?答:IoC是控制反转(InversionofControl),把对象的创建以及依赖关系管理交给Spring容器来完成,而不是由开发者自己去实现。优点为降低耦合度、提高代码可维护性及测试性。什么是DI?答:DI是依赖注入(DependencyInjection),它是IoC的一种实现方式。Spring容器利用构造方法,setter方法或者字段来把被调用对象中的目标类所要求的其他类型的属性进行设置。SpringBean的作用域有哪些?答:6种作用域:singleton:单例,默认作用域,Spring容器中只有一个实例prototype:原型,每次获取都会创建一个新的实例websocket:每个WebSocket连接都会创建一个实例调用BeanPostProcessor的postProcessBeforeInitialization方法调用InitializingBean的afterPropertiesSet方法调用BeanPostProcessor的postProcessAfterInitialization方法调用DisposableBean的destroy方法什么是AOP?AOP的基本概念是什么样的呢答:AOP是一种面向切面编程的技术,它把与业务逻辑无关的横切关注点(比如日志、事务控制等)抽象为一个个“方面”,然后在不修改原有代码的情况下把这些方面的功能织入到相关的程序段中。核心的概念包括切面(A) ,连接点(JoinPoint),切入点(Pointcut),通知(Advice),目标对象(Target),代理对象(Poxy), 织合(Weaving).SpringAOP的通知类型有哪些?答:五种通知方式前置通知(@Before):在目标方法执行之前就进行后置通知(@After):在目标方法执行之后进行,不管是否抛出异常返回通知(@AfterReturning):在目标方法正常结束之后执行异常通知(@AfterThrowing):在目标方法抛出异常之后执行环绕通知(@Around):在目标方法执行前后都进行,可以控制目标方法的运行Spring事务的传播行为有哪些?答:7种传播方式REQUIRED:默认情况下,如果有事务的话就加入到其中去,如果没有的话则创建一个新的事物SUPPORTS:当前有事务就加入,没有的话用非事务的方式执行REQUIRES_NEW:创建新的事务,如果当前存在一个事务,则暂停该事务NOT_SUPPORTED:以非事务的方式进行,如果当前存在一个事务,则将该事务挂起NEVER:采用非事务的方式执行,如果当前存在事务,则抛出异常NESTED:如果有事务存在,在嵌套的事务中执行;如果没有,则创建一个新的事务Spring事务的隔离级别有哪些?答:5种隔离级别READ_UNCOMMITTED:读未提交,会出现脏读、不可重复读、幻读READ_COMMITTED:读已提交,解决脏读的时候会出现不可重复读、幻读REPEATABLE_READ:可重复读,解决了脏读、不可重复读的问题后会出现幻影SERIALIZABLE:串行化,解决所有问题,但是性能最差什么是SpringBoot?答:SpringBoot是基于约定大于配置原则的快速开发脚手架,它属于spring框架的一部分,在简化了Spring应用的配置和部署的同时也提供了自动配置、起步依赖以及嵌入式服务器等功能。SpringBoot自动配置的工作原理是什么?答:SpringBoot的自动配置是用 @EnableAutoConfiguration注解来实现的。该注解会引入AutoconfigurationImportSelector类,而这个类则会在META-INF/spring.factories文件中查找所有的自动生成器,并根据条件标注 (@Conditional) 来决定是否要加载这些生成器。SpringBoot起步需要什么样的依赖?答:起步依赖是一组预先配置好的依赖包,把常用的依赖打包在一起,开发者只需要引入一个起步依赖就可以自动导入相关的所有依赖,并且不需要手动管理各个库的版本。SpringBoot的配置文件有哪些?优先级怎么样?答:SpringBoot支持properties和yml两种格式的配置文件。按照从高到低的方式排列,即优先级最高的在前,依次为SpringBoot如何实现热部署?答:可以使用spring-boot-devtools依赖来达到热部署的效果。原理是用两个类加载器,一个用来加载不改变的类(第三方jar包),另一个用来加载会变化的类(自己写的代码)。当代码发生变化的时候就重新去载入那个需要被改动的类的那个loader就可以实现快速重启了Spring和SpringBoot有什么区别?答:Spring是一个完整的Java开发框架,SpringBoot是Spring的快速开发脚手架Spring需要手动配置大量的XML文件,而SpringBoot则使用自动配置来代替大部分的XML配置Spring需要手动部署到外部服务器,而SpringBoot内置了Tomcat、Jetty等服务器,并且可以打包成jar包来运行六、MySQL数据库(10题)
MySQL的存储引擎有哪些?InnoDB和MyISAM有什么不同?答:常见的有InnoDB、MyISAM等。InnoDB和MyISAM的区别是怎样的呢锁:InnoDB支持行级和表级锁定,MyISAM只支持表级锁定索引:InnoDB是聚簇索引,MyISAM是非聚簇索引什么是索引?索引的优点和缺点是什么?答:索引是数据库中用来加快数据检索的一个重要的技术手段。优点为提高查询速度、增强表的唯一性,而它的缺点就是会占用更多的磁盘空间,并且增加插入删除修改的速度从数据结构的角度来分:B+树索引、哈希索引、全文索引、R树索引按功能分:普通索引,唯一索引、主键索引、联合索引、外键索引聚簇索引:把索引和数据放在一起,叶子节点就是数据行。InnoDB的主键索引是聚簇索引。非聚簇索引:将索引和数据分开存储,叶子节点中存的是主键值。InnoDB的二级索引就是非聚集索引.联合索引是什么意思?最左前缀原则是如何规定的?答:联合索引就是对多个字段建立的索引。最左前缀的原则是查询的时候要从联合索引来自左边的第一个键开始匹配,否则该条就不起作用了。什么是事务?ACID特性是什么意思呢答:一个事务是一组原子性的SQL操作,要么全部执行成功,否则就什么也不做。ACID特性 :原子性(Atomicity):事务为不可分割的最小单元一致性(Consistency):事务执行前后,数据的完整性保持一致隔离性(Isolation):多个事务之间相互独立,互不干扰持久性(Durability):事务提交之后,对数据所做的修改就是永久性的MySQL事务隔离级别有哪些?会出现什么问题呢答:4种隔离级别读未提交(READUNCOMMITTED):会出现脏读,不可重复读和幻读读已提交(READCOMMITTED):解决脏读,会出现不可重复读、幻读可重复读(REPEATABLEREAD):MySQL默认级别,解决脏读,不可重复读会存在幻读问题,在InnoDB中是通过MVCC来避免的串行化(SERIALIZABLE):解决所有问题,但是性能最差什么是MVCC?答:MVCC即多版本并发控制(Multi-VersionConcurrencyControl),它是InnoDB实现隔离级别所必需的。它通过在每行数据之后添加两个隐藏列来实现读写不阻塞,从而提高并发性能。什么是锁?MySQL的各种类型的锁定有哪些?答:锁是用来保证并发数据一致性的一种手段。MySQL的几种不同的加锁方式七,Redis(10题)
Redis是什么? Redis的特点有哪些?答:Redis是一个开源的高性能键值对数据库,以内存存储为主,并且支持多种数据结构。特点为高效率、多类型的数据处理能力、持久化功能、事务控制机制以及主从节点间的复制同步操作和分布式集群架构下运行的能力。Redis支持哪些数据结构?答:5种基本的数据类型有String、List、Set、Hash和Zset;另外还有Bitmap、HyperLoglog以及Geospatial三种特殊的。Redis持久化的方式有哪些?区别是怎样的呢?答:两种持久化的办法RDB:快照持久化,把内存中某个时刻的数据拷贝保存到磁盘上。优点是恢复速度快,缺点是会丢失最后一次快照之后产生的数据。AOF:追加文件持久化,把所有的写命令都加入到文件中。优点是数据安全性高、缺点是恢复速度慢、体积大.定时删除:设置过期时间的同时,启动一个计时器,在达到设定的时间后立刻进行清除。优点是内存释放及时,缺点就是CPU开销大。惰性删除:键过期时不进行删除,下次访问的时候再做删除。优点是CPU开销小,缺点是内存浪费大。定期删除:每隔一段时间就扫描一部分过期键并予以清除。介于前两种策略之间的一种方法。Redis的内存淘汰策略有哪些?答:8种内存淘汰方式noeviction:默认情况下不淘汰,在内存满的时候抛出异常allkeys-lru:从所有的键中淘汰最近最少使用的那个键allkeys-lfu:从所有的键中淘汰使用频率最低的键allkeys-random:从所有的键中随机剔除volatile-lru:从带有过期时间的键中移除最近最少使用的键volatile-lfu:从带有过期时间的键中移除使用频率最小的一个volatile-random:从带有过期时间的键中随机删除volatile-ttl:从设置过期时间的键中移除最早到期的一个键什么是缓存穿透?怎样解决呢?答:缓存在查询不存在的数据时,直接将请求发往数据库会导致大量的数据被发送到服务器上。解决方案为布隆过滤器:把所有的数据都哈希到一个很大的bitmap中,不存在的数据会被筛掉缓存空值:把不存在的数据也存储起来,并且设置较短的过期时间什么是缓存击穿?怎样解决呢?答:当一个热点key在缓存在过期的时候,会有大量的并发请求直接去数据库取数据的话就会造成数据库的压力过大。解决方案为使用互斥锁:缓存失效的时候,只有其中一个线程去查询数据库、更新缓存什么是缓存雪崩?怎样解决呢答:缓存雪崩是指大量key在短时间内失效,造成大量的请求涌入数据库,从而导致数据库压力过大。解决方案为将key的过期时间随机化,防止同一时刻出现多个失效的情况采用集群部署的方式,把热点key分发到各个Redis节点上Redis主从复制原理?答:Redis的主从复制分为三个阶段连接建立阶段:节点与主节点之间进行通信,发送SYNC命令数据同步阶段:主节点执行BGSAVE生成RDB文件,发送给从节点,从节点加载RDB文件命令传播阶段:主节点把写命令发给从节点,从节点执行这个写命令,并且保证数据的一致性Redis集群的工作原理是什么?答:Redis集群采用哈希槽(HashSlot)的方式进行数据分片。共有16384个哈希桶,每个节点承担一部分的哈希桶责任。客户端发送请求的时候会用到key的CRC16值对上16384取模来得到对应的哈希槽,并且把请求转发给对应该哈希槽所在的服务器进行处理。八、分布式和微服务(5题)
什么是分布式系统?CAP定理是什么意思?答:分布式的含义就是把一个大的东西分成很多个小的部分,然后把这些小部分放到不同的服务器上,并且通过网络进行通信来完成任务。CAP定理指的是,在分布式系统中不可能同时具备一致性、可用性和分区容错性这三个特性之一或者两样都可以满足的.什么是微服务?优点:技术栈灵活、独立部署、可扩展性好、故障隔离缺点:系统复杂度高,运维成本高,分布式事务问题大,服务调用链跟踪困难什么是服务注册和发现?答:服务的注册与发现是微服务体系中的主要部分。服务提供者把自己的信息写入到注册中心中,然后由消费者从这个注册中心获取有关的服务提供商的信息,并且进行调用。常见的注册中心有Nacos、Eureka、Consul、Zookeeper等。负载均衡是什么意思?常见的负载均衡算法有哪些?答:负载均衡就是把请求分发到多个服务器上,从而提高系统的并发处理能力以及可用性。常见算法有轮询、加权轮询、随机、加权随机,最少连接数和一致性哈希等。什么是分布式事务?常见的解决方法有哪些?答:分布式事务是指在分布式的系统中,多个服务之间的事务操作要保证ACID特性。常见解决方案九、计算机网络(5题)
TCP首部开销大(20-60字节),UDP首部开销小(8字节)服务器接收到SYN包后,发送一个包含ACK标志的SYN+ACK给客户端以确认连接请求客户端接收到SYN+ACK包后,发送ACK包给服务器,连接建立完成服务器收到FIN包后发送ACK给客户端以确认关闭请求HTTP默认端口为80,HTTPS默认端口为443HTTP请求的方法有哪些?答:常见的请求方法有GET、POST、PUT、DELETE、HEAD、OPTIONS和PATCH。2xx:成功状态码(200OK、201Created)3xx:重定向状态码(301MovedPermanently、302Found,304NotModified)4xx:客户端错误状态码(400BadRequest、401Unauthorized、403Forbidden、404NotFound)5xx:服务器错误状态码(500InternalServerError、502BadGateway、503ServiceUnavailable)十、设计题(5题)
什么是设计模式?设计模式的分类怎样划分答:设计模式是软件开发中解决常见问题的最佳实践。分为三类结构型模式:适配器、桥接、组合、装饰、外观、享元、代理行为型模式:策略、模板方法、观察者、迭代器,责任链、命令,备忘录、状态、访问者、中介者、解释器动态代理:代理类是在运行时生成的,分为JDK动态代理和CGLIB动态代理工厂模式:BeanFactory、ApplicationContext创建Bean模板方法模式:JdbcTemplate、RedisTemplate等这是Java后端面试中常见的100道题,可以覆盖到大厂90%以上的高频考点。面试不是背题,但是背题是面试的基础。只有把基本知识点掌握牢固了,在应聘的时候才能游刃有余地回答问题,并且在工作中解决实际的问题。把面试题整理成PDF格式,方便大家打印出来背诵.有需要的朋友可以留言“面试”,我会免费发给你。最后,希望所有的求职者都能得到理想的offer,也希望所有想要跳槽的朋友都能够拿到加薪的机会!这篇文章对你很有帮助的话,请点赞收藏转发给正在准备Java面试的朋友。你的支持就是我创作的最大动力!