备战金九银十:2019最新一线互联网大厂高并发面试题合集(建议收藏)
1.Thread的start方法和run方法的区别?
run方法就是普通的一个方法,代码运行在当前主线程,start会启动一个新的线程,并运行run方法。
2.如何停止线程运行?
可以设置一个标志位,任务定期检查这个标记,如果标志设置为取消则任务停止执行,但已执行部分无法停止,标志变量最好设置为volatile。
3.普通线程与守护线程?
本质都是线程没什么区别,守护线程在主线程结束时将被抛弃,自动退出。比如垃圾回收线程。
4.数据库死锁?
在执行一个事务时可能要获取多个锁,一直持有锁到事务提交,如果A事务需要获取的锁在另一个事务B中,且B事务也在等待A事务所持有的锁,那么两个事务之间就会发生死锁。但数据库死锁比较少见,数据库会加以干涉死锁问题,牺牲一个事务使得其他事务正常执行。
5.什么是锁顺序死锁?
两个线程试图以不同的顺序获得相同的锁,那么可能发发生死锁。比如转账问题,由from账户向to账户转账,假设每次我们先同步from对象,再同步to账户,然后执行转账操作,貌似没什么问题。如果这时候to账户同时向from账户转账,那么两个线程可能要永久等待了。
6.死锁的避免与诊断?
如果一个线程最多只能获取一个锁,那么就不会发生锁顺序死锁了。如果确实需要获取多个锁,锁的顺序可以按照某种规约,比如两个资源的id值,程序按规约保证获取锁的顺序一致。或者可以使用显式的锁Lock,获取锁的时候设置超时时间,超时后可以重新发起,以避免发生死锁。
7.线程饥饿与活锁?
当线程由于无法访问需要的资源而不能继续执行时,就是饥饿状态。活锁是线程虽然没有阻塞,但也不能继续执行,因为程序总是执行相同的操作,且结果都是失败。
8.多线程性能问题?
使用多线程主要就是为了提高程序的运行性能,多线程可以更充分发挥系统可处理能力,从而提高系统资源利用率。但多线程自身同时带来了性能开销,线程的创建与销毁,线程间的协调(比如加锁、内存同步),线程调度,上下文的切换等。好的并发设计就是充分利用现有资源,尽可能使处理器忙碌起来,当然程序设计始终不能脱离业务场景。
9.内存同步?
在synchronized和volatile提供的可见性保证中可能会用到内存屏障,内存屏障可以刷新缓存,使缓存无效。同时内存屏障会抑制一些编译器优化操作,大多数操作不能被重排序。
10.jvm同步优化?
jvm可以通过优化去掉一些不必要的锁,从而减少同步开销。比如一个对象只能被当前线程访问,其他线程不会与当前线程在这个锁上发生同步,jvm可以锁优化去掉同步操作。编译器也可以进行锁粒度粗化操作,将临近的多个同步代码用一个锁合并起来,不仅可以减少多个同步带来的不必要的开销,同时还能使优化器处理更大的代码块,带来进一步的优化。锁自旋,当线程发生阻塞时,可能会自旋等待(不断循环尝试去获取锁),或者通过操作系统挂起线程,当然这要看锁等待时间,来决定是否自旋。
11.降低锁的竞争?
12.java中常见的同步机制?
13.共享变量在多线程下如何保证线程安全?
14.是否共享变量都使用类似AtomicLong原子安全类,多线程访问就是安全的?
15.synchronized锁的使用?
16.可重入锁,synchronized是可重入的吗?
17.volatile关键字的理解?
18.final修饰的不可变对象?
19.常见的并发容器?
20.常见的同步工具类?
21.线程'饥饿'死锁
22.ThreadPoolexecutor参数配置?
23.线程池任务饱和时处理策略?
24.什么是Executor?
25.什么是线程池,如何创建线程池?
26.Executors可以创建哪些类型的线程池?
27.Executor的生命周期?
结束语
- 刷题最重要的是速度和效率。短时间内高质量快速刷完才是最终目的,明确自己的认知,不要和题目死磕。
- 坚持下来。如果一个事情方向是正确的时候,即使一时遇到挫折了,也不要气馁,多总结方法,持续提高。刷题这件事情给我的挫败感是非常高的,中间是一度放弃了很久,但是当我想明白这道坎是一定要过的时候,就下定了决心一定要攻克这道难关,持续总结方法,持续进步。
我个人认为,作为技术人就要保持终生学习的态度,让学习力成为核心竞争力,才能不被时代所淘汰,而高效的时间支配能让你变得更加优秀
篇幅原因,更多的题目就不做详细的展示了,需要这份最新的高并发面试题合集的可以关注我的主页【点击进入】主页右侧有免费领取方式!
- 金九银十,各大互联网公司Java面试题合集
- 2019准备了Java程序员最新招聘标准,阿里、京东等一线互联网企业
- 金九银十,各大互联网公司Java面试题合集
- 备战一线互联网公司的Java面试题清单
- 备战一线互联网公司的Java面试题清单
- 2019最新一线互联网公司(百度、头条、网易) Android 社招面试题目
- 备战一线互联网公司Java工程师面试题 (2)
- 【转】2010年校园招聘最新的互联网企业笔试面试题
- BAT最新Java面试题汇总:并发编程+JVM+Spring+分布式+缓存等!
- 互联网大厂Java面试题:使用×××队列的线程池会导致内存飙升吗?
- 2019最新(互联网架构)教程第二期
- 2019最新Linux云计算学习教程(学习路线+课程大纲+面试题+视频教程+网盘下载)
- 2019最新java面试专属最新Java阿里京东美团滴滴面试题(附答案)
- 2019最新从无到有搭建中小型互联网公司后台服务架构与运维架构教程 包含课件源码
- 2019最新前端JavaScript面试题集锦(一)(满满都是干货)
- 2019最新 PHP 面试题集合
- 2019 Python最新面试题及答案16道题
- 互联网大厂面试题回忆录
- 2019大厂Android高级工程师面试题整理+进阶资料
- 2019最新Java并发编程与高并发解决教程