java面试中经常被问到的问题有哪些?应届生必备这份Java常见面试题(五)_java自学_java相关资讯_成都java培训机构

java面试中经常被问到的问题有哪些?应届生必备这份Java常见面试题(五)

  • 作者:创始人
  • 发表时间:2022-01-14 10:10:19

java面试中经常被问到的问题有哪些?应届生必备这份Java常见面试题(五)

15.动静态代理的区别,什么场景使用?

静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。

静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。

动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过 Proxy 里的 newProxyInstance 得到代理对象。

还有一种动态代理 CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。

AOP 编程就是基于动态代理实现的,比如著名的 Spring 框架、Hibernate 框架等等都是动态代理的使用例子

16.写一个 ArrayList 的动态代理类的代码

java面试中经常被问到的问题有哪些 

17.什么情况下导致线程死锁,遇到线程死锁该怎么解决?

死锁的定义:所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

死锁产生的必要条件:

互斥条件:线程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待。

不剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放)

请求和保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

循环等待条件:存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个线程所请求。即存在一个处于等待状态的线程集合{Pl, P2, ..., pn},其中 Pi 等待的资源被 P(i+1)占有(i=0, 1, ..., n-1)Pn 等待的资源被 P0 占有,在有些情况下死锁是可以避免的。两种用于避免死锁的技术:加锁顺序(线程按照一定的顺序加锁)加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

java面试中经常被问到的问题有哪些?应届生必备这份Java常见面试题(五)。关注成都Java培训机构,带你了解更多相关问题。