美文网首页开发技巧马士兵Java学习笔记
腾讯P8专家终于总结出:274道设计模式+多线程+并发编程面试题

腾讯P8专家终于总结出:274道设计模式+多线程+并发编程面试题

作者: 程序员1 | 来源:发表于2020-05-19 16:12 被阅读0次

前言

今天给大家分享的是:腾讯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 来免费获取啦~~~~~~~~

感谢大家的支持,关注不迷路,干货满满!!!

相关文章

网友评论

    本文标题:腾讯P8专家终于总结出:274道设计模式+多线程+并发编程面试题

    本文链接:https://www.haomeiwen.com/subject/aimbohtx.html