2018年Java面试题集合(持续更新中)

本文记载了所有我看过的,或者面试中遇到的个人觉得之前很少遇到过得题目。

1、快速失败(fast-fail)和安全失败(fail-safe)的区别是什么,各自代表什么?
快速失败:当你在迭代一个集合时,如果同时有多个线程在操作这个集合,并修改了这个集合时,就会抛出Concurrent Modification的异常。在java.util下面都是快速失败。
安全失败:当你在迭代访问一个集合时,做一个拷贝,所以当上层集合被修改时,也不会造成Concurrent Modification的异常。因此在Java.util.concurrent的包下面都是安全失败。
2、happens-before是什么?(没理解)
happens-before:如果两个操作之间具有happens-before的关系,则前一个操作必然对后一个操作可见
1、程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任何一个后续操作。
2、监视器锁规则:对一个监视器锁的解锁,happens-before于随后的对这个监视器锁的加锁操作。
3、volatile变量规则:对一个volatile的写操作,happens-before于任何一个后续对这个volatile的读操作。
4、传递性:如果A happens-before B,且B happens-before C,则A happens-before C。
5、线程启动规则:Thread的start(方法happens-before于此线程的每一个操作。
3、Java代理
1、Java静态代理:其静态代理是实现了和目标一样的接口,然后目标对象作为代理对象的一个属性,具体接口实现中,则可以调用目标对象的方法,用以处理其业务处理逻辑。
2、Java动态代理:Java动态代理是写一个类来实现InvocationHandle的接口,重写Invoke方法,在Invoke中进行增强处理的逻辑编写。在这个公共代理类中运行时才会知道具体要代理的是哪个目标类和对象。
JDK代理和CGLIB代理:JDK动态代理是实现接口的类生成代理。实例化其一个类。此时代理对象和目标对象都实现了一个相同的接口,目标对象作为代理对象的一个属性,在具体代理接口中,实现调用目标对象相应方法来进行业务逻辑的处理。
CGLIB代理则是针对具体类来实现的代理。对一个指定的类来生成一个子类,覆盖其目标类的方法,来实现代理。

Java动态代理一定要求要目标类实现了一个接口,当前默认的是如果其类实现了某个接口,则自动实现JDK代理方法,如果就实现CGLIB动态代理。

4、适配器模式和装饰器模式的区别
适配器模式:将一个接口适配为另外一个接口,例如Java I/O流中的InputStremReader就将Reader适配到InputStream,将字符流转换为字节流。
装饰器模式:修饰一个接口,并且增强了这个接口的功能和能力。例如Java I/O中的FileInputStream装饰了InputStream,BufferedInputSteam装饰了InputStream。

5、线程池部分源码
线程池配置参数
线程池自身状态
线程池任务队列和工作集合
线程池状态所
线程池的方法位于Excutor中。其中的主要参数都是volatile修饰,方便多线程时所有线程取得的都是最新的值。
线程池执行策略:
1、 如果当前池大小 poolSize 小于 corePoolSize ,则创建新线程执行任务。
2、如果当前池大小 poolSize 大于 corePoolSize ,且等待队列未满,则进入等待队列
3、如果当前池大小 poolSize 大于 corePoolSize 且小于 maximumPoolSize ,且等待队列已满,则创建新线程执行任务。
4、如果当前池大小 poolSize 大于 corePoolSize 且大于 maximumPoolSize ,且等待队列已满,则调用拒绝策略来处理该任务。
5、线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行,如果在 6、keepAliveTime 里等不到新的任务了,那么线程就会退出。

6、CopyOnWriteArrayList
CopyOnWriteArrayList:写时加锁,当添加一个元素时,会对原来的List进行Copy,复制出一个新的List,然后再新的List中进行参数更新,再将原来的List的指引指向新的List,而在这过程中其读取的时候还是会读写原来的List,保证了数据的可重复读性和前后一致性,所以是一个弱一致性的策略和方案。
适用于:读操作远远大于写的操作,例如缓存。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值