阿里巴巴_java后端面经

自我介绍不多说!

1 多线程有什么用?

发挥多核CPU的优势

防止阻塞

便于建模

2 怎么检测一个线程是否持有对象监视器

Thread类提供了一个holdsLock(Object obj)方法,

当且仅当对象obj的监视器被某条线程持有的时候才会返回true,

注意这是一个static方法,这意味着“某条线程”指的是当前线程。

 3 synchronized和ReentrantLock的区别

ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁

ReentrantLock可以获取各种锁的信息

ReentrantLock可以灵活地实现多路通知

volatile关键字的作用 (保证线程对内存的可见性,但是不能保证原子性

5 什么是乐观锁和悲观锁 (乐观锁: 就像他的名字一样,对事情总保持一颗乐观的心,

他认为竞争不总是发生的,因此不需要总持有锁,

用比较替换尝试去修改内存中的值。悲观锁:对安全问题持悲观的状态认为竞争总是会发生的,

对资源进行操作时,总是部分青红皂白直接上锁 )

6 用java编写一个会导致死锁的程序

7 什么是自旋锁

自旋锁,是指尝试获取锁的线程不会阻塞,

而是循环的方式不断尝试,这样的好处是减少线程的上下文切换带来的开锁,

提高性能,缺点是循环会消耗CPU。

8 什么是java内存模型

Java 内存模型(JMM)规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存。

线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,

而不能直接读写主内存。 不同的线程之间也无法直接访问对方工作内存中的变量,

线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

而 JMM 就作用于工作内存和主存之间数据同步过程。它规定了如何做数据同步以及什么时候做数据同步。

9 单例模式的几种实现方式

懒汉模式

饿汉模式

静态内部类

双重锁机制

枚举

祝早日get心仪offer

大量面试经验以及学习资料书籍请关注微信公众号:AVAJ   

回复"offer"进行获取

365篇大厂java面经 你想要的我这里都有

(1)   发挥多核CPU的优势

(2)   防止阻塞

(3)   便于建模

猜你喜欢

转载自www.cnblogs.com/DoubleP/p/11324994.html