趁着金三银四的季节,想着去大厂面试试一下,说不准咱遇到一个大冤种面试官成功上岸了呢。谁知道一上来面试官简历都没看,直接给我来了套并发多线程组合拳,直接把我给干懵了,大佬是我不配,打扰了。
回来后我把面试官的问题复盘了一下,现在就分享给大家,希望对大家面试有所帮助。当然,如果觉得博主总结的不错的话,希望能给个三连支持一下,让更多的人看到,谢谢啦。另外我总结了最新的面试题文档,包含spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,大家可以看下方这篇文章。
面试必拿下!Java程序员面试95%被问到的面试题总结
1、什么是进程?什么是线程?(一个简单的暖场题)
进程是操作系统分配资源的最小单元
线程是操作系统调度的最小单元,线程隶属于进程。
一个程序至少有一个进程,一个进程至少有一个线程。
2、JAVA如何开启线程?怎么保证线程安全?
如何开启线程?
1、继承Thread类,重写run方法。
2、实现Runnable接口,实现run方法。
3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获取到线程执行的返回值。
4、通过线程池来开启线程。
怎么保证线程安全?
加锁: 1、 JVM提供的锁, 也就是Synchronized关键字。
2、 JDK提供的各种锁 Lock。
3、 Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCL(DoubleCheck Lock)单例为什么要加Volatile?
1、Synchronized关键字,用来加锁。 Volatile只是保持变量的线程可见性。通常适用于一个线程写,多个线程读的场景。
2、不能。Volatile关键字只能保证线程可见性, 不能保证原子性。
3、Volatile防止指令重排。在DCL中,防止高并发情况下,指令重排造成的线程安全问题。
4、JAVA线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?
1、JAVA的锁就是在对象的Markword中记录一个锁状态。无锁,偏向锁,轻量级锁,重量级锁对应不同的锁状态。
2、JAVA的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程。
3、