拼多多电商部java高级社招面试题目分享(二)

25synchronizedvolatileCAS 比较

(1)synchronized是悲观锁,属于抢占式,会引起其他线程阻塞。

(2)volatile提供多线程共享变量可见性和禁止指令重排序优化。(3)CAS是基于冲突检测的乐观锁(非阻塞)

26sleep 方法和wait 方法有什么区别?

这个问题常问,sleep方法和wait方法都可以用来放弃CPU一定的时间,不同点在于如

果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方***放弃这

个对象的监视器

27ThreadLocal 是什么?有什么用?

ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对

象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,

特别适用于各个线程依赖不通的变量值完成操作的场景。简单说ThreadLocal就是一种以空

间换时间的做法,在每个Thread里面维护了一个以开地址法实现的

ThreadLocal.ThreadLocalMap,把数据进行隔离,数据不共享,自然就没有线程安全方面的问

题了。

28、为什么wait()方法和notify()/notifyAll()方法要在同步块中被调

这是JDK强制的,wait()方法和notify()/notifyAll()方法在调用前都必须先获得对象的锁

29、多线程同步有哪几种方法?

Synchronized关键字,Lock锁实现,分布式锁等。

30、线程的调度策略

线程调度器选择优先级最高的线程运行,但是,如果发生以下情况,就会终止线程的运行:

(1)线程体中调用了yield方法让出了对cpu的占用权利

(2)线程体中调用了sleep方法使线程进入睡眠状态

(3)线程由于IO操作受到阻塞

(4)另外一个更高优先级线程出现(5)在支持时间片的系统中,该线程的时间片用完

31ConcurrentHashMap 的并发度是什么

ConcurrentHashMap的并发度就是segment的大小,默认为16,这意味着最多同时可以有

16条线程操作ConcurrentHashMap,这也是ConcurrentHashMap对Hashtable的最大优

势,任何情况下,Hashtable能同时有两条线程获取Hashtable中的数据吗?

32Linux 环境下如何查找哪个线程使用CPU 最长

(1)获取项目的pid,jps或者ps -ef | grep java

(2)top -H -p pid,顺序不能改变

33Java 死锁以及如何避免?

Java中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java死锁情况出现至少

两个线程和两个或更多资源。

Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。

34、死锁的原因

35、怎么唤醒一个阻塞的线程

如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且

通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是

操作系统实现的,Java代码并没有办法直接接触到操作系统。36、不可变对象对多线程有什么帮助

前面有提到过的一个问题,不可变对象保证了对象的内存可见性,对不可变对象的读取不需

要进行额外的同步手段,提升了代码执行效率。

37、什么是多线程的上下文切换

多线程的上下文切换是指CPU控制权由一个已经正在运行的线程切换到另外一个就绪并

等待获取CPU执行权的线程的过程。

38、如果你提交任务时,线程池队列已满,这时会发生什么

39Java 中用到的线程调度算法是什么

抢占式。一个线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出

一个总的优先级并分配下一个时间片给某个线程执行。

40、什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing)

41、什么是自旋

42Java Concurrency API 中的Lock 接口(Lock interface)是什么?对

比同步它有什么优势?

Lock接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构,可以

具有完全不同的性质,并且可以支持多个相关类的条件对象。

它的优势有:

(1)可以使锁更公平

(2)可以使线程在等待锁的时候响应中断

(3)可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间

(4)可以在不同的范围,以不同的顺序获取和释放锁

43、单例模式的线程安全性

老生常谈的问题了,首先要说的是单例模式的线程安全意味着:某个类的实例在多线程环境

下只会被创建一次出来。单例模式有很多种的写法,我总结一下:

(1)饿汉式单例模式的写法:线程安全

(2)懒汉式单例模式的写法:非线程安全

(3)双检锁单例模式的写法:线程安全


#拼多多##面经##社招##java工程师#
全部评论
问这么多八股文 怎会如此.jpg
点赞 回复 分享
发布于 2021-08-07 18:27

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
1 35 评论
分享
牛客网
牛客企业服务