前言
今天给大家分享的是:腾讯P8专家总结出来的274道设计模式+多线程+并发编程面试题及答案技术文档,希望大家能够喜欢~~~
学习路线
第二版:精选设计模式10道面试题及答案
什么是设计模式
为什么要学习设计模式
设计模式分类.
设计模式的六大原则-
单例模式
1.什么是单例
2.那些地方用到了单例模式-
3.单例优缺点
优点:
缺点:
4.单例模式使用注意事项:
5.单例防止反射漏洞攻击
6.如何选择单例创建方式
7.单例创建方式
厂模式
1.什么是厂模式
2.I厂模式好处-
3.为什么要学习工厂设计模式
4.Spring开发中的工厂设计模式
5.工厂模式分类
代理模式
1.什么是代理模式
2.代理模式应用场景
3.代理的分类
4.三种代理的区别-
5.用代码演示三种代理.
建造者模式
第二版:并发编程48道面试题及答案
1、并发编程三要素?
1.原子性
2.可见性
3、有序性
2.实现可见性的方法有哪些?
3、多线程的价值?
1、发挥多核CPU的优势
2、防止阻塞-
3、便于建模.
4、创建线程的有哪些方式?
1、继承Thread类创建线程类
2、通过Runnable接口创建线程类
3、通过Callable和Future创建线程
4、通过线程池创建.
5.创建线程的三种方式的对比?
6、线程的状态流转图-
7. Java 线程具有五中基本状态.....
8、什么是线程池?有哪几种创建方式?
9.四种线程池的创建:
10、线程池的优点?
11.常用的并发I具类有哪些?
1. CountDownLatch .
2. CyclicBarrier
3、Semaphore
4、Exchanger
12、CycliBarrier 和CountDownLatch的区别
13、synchronized 的作用?
14、volatile 关键字的作用
15.什么是CAS-
16. CAS的问题
1.CAS容易造成ABA问题:
2.不能保证代码块的原子性
3、CAS造成CPU利用率增加-
17.什么是Future?
18、什么是AQS.
19. AQS支持两种同步方式:
1.独占式
2.共享式
20、ReadWriteLock 是什么
21、FutureTask 是什么
22. synchronized 和ReentrantLock的区别-
1. ReentrantLock 可以对获取锁的等待时间进行设置,这样就避免了死锁
2. ReentrantLock 可以获取各种锁的信息
3. ReentrantLock 可以灵活地实现多路通知-
23、什么是乐观锁和悲观锁-
24、线程B怎么知道线程A修改了变量
1、volatile 修饰变量
2、synchronized 修饰修改变量的方法
3、wait/notify-
4、while 轮询
25、synchronized. volatile. CAS比较.
26. sleep 方法和wait方法有什么区别?
27. ThreadLocal 是什么?有什么用?
28、为什么wait0方法和notify0/notifyAIl)方法要在同步块中披调用
29.多线程同步有哪几种方法?
30、线程的调度策略-
1.线程体中调用了yield方法让出了对cpu的占用权利
2.线程体中调用了sleep方法使线程进入睡眠状态
3.线程由于10操作受到阻塞
4、另外一个更高优先级线程出现
31. ConcurrentHashMap 的并发度是什么一
32. Linux 环境下如何查找哪个线程使用CPU最长
1.获取项目的pid,jps或者ps-ef|grepjava,这个前面有讲过
2. top H -p pid.顺序不能改变-
33、Java 死锁以及如何避免?
34、死锁的原因
35.怎么唤醒一个阻塞的线程-
36、不可变对象对多线程有什么帮助-
37.什么是多线程的上下文切换
38、如果你提交任务时,线程池队列已满,这时会发生什么
39. Java 中用到的线程调度算法是什么-
40.什么是线程调度器(Thread Scheduler)和时间分片(ime Slicing)?
41、什么是白----....
42、Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?
1、可以使锁更公平
2.可以使线程在等待锁的时候响应中断-
3.可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间
4、可以在不同的范围,以不同的顺序获取和释放锁-
43、单例模式的线程安全性
1、饿汉式单例模式的写法:线程安全
2、懒汉式单例模式的写法:非线程安全.
3、双检锁单例模式的写法:线程安全
44、Semaphore 有什么作用-
45. Executors 类是什么?
46、线程类的构造方法、静态块是被哪个线程调用的-
47.同步方法和同步块,哪个是更好的选择?-
48、Java 线程数过多会造成什么异常?
1.线程的生命周期开销非常高
2、消耗过多的CPU资源:
3、降低稳定
第二版:多线程75道面试及答案
1.在java中守护线程和本地线程区别?
2.线程与进程的区别?
3.什么是多线程中的上下文切换?
4、死锁与活锁的区别,死锁与饥饿的区别?
5、Java 中用到的线程调度算法是什么?
6.什么是线程组,为什么在Java中不推荐使用?
7.为什么使用Executor框架?
8、在Java中Executor和Executors的区别?
9.如何在Windows和Linux.上查找哪个线程使用的CPU时间最长?
10、什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)
11、Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它
什么优势?
12.什么是Executors框架?
13.什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者
-消费者模型?
14、什么是Callable和Future?
15、什么是FutureTask?使用ExecutorService启动任务。
16.什么是并发容器的实现?
17.多线程同步和互斥有几种实现方法,都是什么?
18、什么是竞争条件?你怎样发现和解决竞争?
19.你将如何使用thread dump?你将如何分析Thread dump?
20、为什么我们调用start0方法时会执行run0方法.为什么我们不能直接调用run()方法?
21. Java 中你怎样唤醒一个阻塞的线程?
22.在Java中CycliBarriar和CountdownLatch有什么区别?
23.什么是不可变对象,它对写并发应用有什么帮助?
24、什么是多线程中的上下文切换?
25、Java 中用到的线程调度算法是什么?
26、什么是线程组,为什么在Java中不推荐使用?
27.为什么使用Executor框架比使用应用创建和管理线程好?
28. java 中有几种方法可以实现-个线程?
29.如何停止-个正在运行的线程?
30、notify0和 notifyAIl0有什么区别?
31.什么是Daemon线程?它有什么意义?
32、java 如何实现多线程之间的通讯和协作?
33.什么是可重入锁(ReentrantLock) ?
34、当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
35、乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
1、ABA问题:
2、循环时间长开销大:
3、只能保证一个共享变量的原子操作:
36、SynchronizedMap 和ConcurrentHashMap有什么区别?
37. CopyOnWriteArrayList 可以用于什么应用场泉?
1、读写分离,读和写分开
2、最终-致性
3.使用另外开辟空间的思路,来解决并发冲突
38、什么叫线程安全? servlet 是线程安全吗?-
39. volatile 有什么用?能否用一句话说明下 volatile的应用场景?
40、为什么代码会重排序?
41.在java中wait和sleep方法的不同?
42.用Java实现阻塞队列
43.一个线程运行时发生异常会怎样?
44、如何在两个线程间共享数据?
45、Java 中notify和notifyAll 有什么区别?
46.为什么wait, notify和notifyAll 这些方法不在thread类里面?
47.什么是ThreadLocal变量?
48、Java 中interrupted和islnterrupted 方法的区别?
49.为什么wait和notify方法要在同步块中调用?
50、为什么你应该在循环中检查等待条件?-
51. Java 中的同步集合与并发集合有什么区别?
52、什么是线程油?为什 么要使用它?
53.怎么检测-个线程是否拥有锁?
54、你如何在Java中获取线程堆栈?
56、Thread 类中的yield方法有什么作用?
57. Java 中ConcurrentHashMap的并发度是什么?
58、Java 中Semaphore是什么?
59、Java 线程池中submit(和execute0方法有什么区别?
60、什么是阻塞式方法?
61. Java中的ReadWriteLock是什么?
62、volatile 变量和atomic变量有什么不同?
63.可以直接调用Thread类的run 0方法么?
64、如何让正在运行的线程暂停-段时间?
65、你对线程优先级的理解是什么?
66、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )
67.你如何确保main0方法所在的线程是Java程序最后结束的线程?
68、线程之间是如何通信的?
69、为什么线程通信的方法wait0, notify0和notifyAll()被定义在Object类里?
70、为什么wait0. notifyO和notifyAll 0必须在同步方法或者同步块中被调用?
71.为什么Thread类的sleep0和yield 0方法是静态的?
72.如何确保线程安全?
73.同步方法和同步块。哪个是更好的选择?
74、如何创建守护线程?
75、什么是Java Timer类?如何创建一个有特定时间间隔的任务?
第二版:并发编程140道面试题及答案
基础知识-
做一个形象的比喻:
相同点:
主要区别:
并发理论
r= a*a;/语句4
1.不管怎么排序,结果不能改变
2.不存在数据依赖的可以被编译器和处理器重排序
3. -个操作依赖两个操作.这两个操作如果不存在依赖可以重排序
4.单线程根据此规则不会有问题。但是重排序后多线程会有问题
synchronized关键字最主要的三种使用方式:
双重校验锁实现对象单例(线程安全)
说明:
1、 为uniqueInstance 分配内存空间
2、初始 化uniquelnstance
3、将 uniquelnstance 指向分配的内存地址
所以从Oracle Java Spec里面可以看到:
区别
线程池-
可以得出一个结论:
并发容器
1、HashMap 添加方法的源码
2、HashTable 添加方法的源码.
并发队列
1、 非堵塞队列:
并发工具类
............
274道设计模式+多线程+并发编程面试题技术文档总览
需要的小伙伴抓紧时间获取啦,只需转发关注小编,+++V X :bjmashibing001 来免费获取啦~~~~~~~~
感谢大家的支持,关注不迷路,干货满满!!!

网友评论