当前位置:网站首页>大厂面试系列(二):并发编程

大厂面试系列(二):并发编程

2020-11-09 13:37:49 赵镇

并发编程

多线程类的使用

  • java线程同步有哪些方法、各自的优缺点
  • synchronized 和ReentrantLock区别,可重入锁是什么?
  • threadlocal有什么用
  • Java中创建线程有几种方式?分别是? 当主线程执行结束后,子线程还会继续执行下去吗?
  • JUC中有哪些常用的集合?(项目中用到的)
  • CopyOnWriteArrayList的实现原理?主要应用什么场景下?优缺点分别是?
  • HashMap不是线程安全的,在高并发环境中做插入会出现什么情况?为什么?
  • jdk1.8以前ConcurrentHashMap是如何实现线程安全的?jdk1.8以后呢?(1.8synchronized加CAS,并引入了红黑树)
  • 当调用ConcurrentHashMap的size方法时,有元素并发插入,ConcurrentHashMap是怎么处理的?
  • synchronized和java.util.concurrent.locks.Lock的比较。 AtomicInteger原理,为什么要用CAS而不是synchronized? 银行的后端如果出现多人想一个账户大钱的情况,会碰到什么问题?
  • 什么是CAS操作,如何实现一个自定义锁
  • Synchronized的实现,锁的升级过程。
  • AQS锁了解么?
  • wait()、notify必须在什么情况下使用
  • 线程、进程、协程的关系。
  • 对volatile的理解
  • 详细的说一下concurrentHashMap put流程
  • 你是如何理解同步/异步,并发/并行的概念的
  • 那谈谈Lock接口的API以及其实现类相关的了解?
  • 那么ReentrantLock中的lock和unlock之间的同步如何进行线程间的通信?
  • Semaphore类的了解?
  • JUC包下的计数锁?CountDownLatch?
  • CyclicBarrier的理解?
  • ReadWriteLock与ReentrantReadWriteLock的理解和区别?
  • 你还了解ReentrantReadWriteLock哪些特性?
  • ReentrantLock如何实现公平和非公平锁是如何实现? CountDownLatch和CyclicBarrier的区别?各自适用于什么场景?
  • 乐观锁和悲观锁的区别? 如何实现一个乐观锁?
  • AQS是如何唤醒下一个线程的?
  • ConcurrentHashMap是如何让多线程同时参与扩容?get需要加锁么,为什么?
  • Disruptor框架的用法,实现
  • Future的异步调用过程是咋样的?Future超时的情况?无限递归会造成jvm内存的什么问题?
  • Java8之后的ConcurrentHashMap为什么舍弃分段锁?
  • 线程池一整套(实现类及对应的阻塞队列、拒绝策略、具体参数、ScheduledThreadPool有三种构造方法,分别代表什么含义?)
  • synchronized分别修饰在实例方法上和静态方法上,多线程并发时是否会竞争锁?synchronized修饰在方法上和代码块上有什么区别,底层是怎么实现的?
  • 并发编程中的生产者消费者模式代码。[最简单的方式就是使用wait和notify去阻塞唤醒,当然还可以使用可重入锁(ReentrantLock),使用锁计数器(CountdownLatch)等等]
  • 为什么要用读写锁而不用synchronized这种同步锁
  • 如何实现控制线程在某段时间内完成,不完成就撤销。
  • 参照ConcurrentHashMap,如果在多线程场景下使用HashMap,有什么手段提高效率又保证线程安全吗?
  • 对Java内存模型的理解,以及其在并发中的应用;指令重排序,内存栅栏等
  • Java 有什么锁类型?
  • 并发容器有哪些,并发容器和同步容器的区别?
  • CLH同步队列是怎么实现非公平和公平的?
  • HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。
  • Lock接口有哪些实现类,使用场景是什么。
  • 可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁(ConcurrentHashMap中的segment)
  • CountDown有了解过吗?CountDown和CycliBarrier的区别是是什么?在使用上有啥区别?
  • volatile从指令重排序,内存屏障,聊到总线风暴
  • 问了父子线程怎么共享数据
  • List是非线程安全的,你如何把他变成线程安全的?
  • synchronized可否在运行当前线程时运行其它线程
  • 什么叫守护线程,用什么方法实现守护线程?如何停止一个线程?
  • 并发编程问的很细。多个线程达到同一个状态然后再一起执行,达到某一个状态之后再继续并发执行,这种怎么实现?
  • 如何实现控制线程在某段时间内完成,不完成就撤销
  • 读写锁中加读锁后如何避免写线程饿死
  • 线程池的一些原理,锁的机制升降级
  • 问自旋锁实现的方式是什么 问指针指向的地址是虚拟地址还是物理地址。 问页表置换的算法有哪些,以及现如今哪种算法比较高效。 问缺页异常置换的过程。 如果一个线程修改一个数据,但这时候需要把当前页表置换出去,操作系统如何处理。
  • 进程与线程的区别,怎么根据硬件确定你最大创建的线程数(线程池需要考虑)

线程池

  • 线程池 什么时候到达最大线程数 到达最大线程后继续提交的表现 用过哪些锁
  • 线程池有哪些核心参数?简单描述下线程池的原理?
  • 创建线程池的方式?
  • 线程池线程的提交方式和优缺点。
  • 如果我们在线程池中使用无界队列会造成什么影响呢?
  • 多个核心线程去take阻塞队列中线程,谁能拿到了?
  • 线程池怎么实现复用线程的
  • JDK中偏向锁、自旋锁、轻量级锁、重量级锁的区别? JDK锁自旋的自旋阈值了解吗?如何调整自旋次数?
  • 你们系统中下单的时候为什么要用线程池?可以用其他的实现方案吗?

多线程的扩展

  • 分布式锁zookeeper的使用场景------ 实现分布式锁的方式----------redis分布式锁和zookeeper分布式锁
  • 你会如何处理高并发场景,例如商城秒杀?
  • 数据库的并发策略
  • 高并发时如何限流
  • 场景模拟:假设有一个场景,系统需要某个特定时间内响应用户请求,比如说100ms内完成用户请求,但是在最高峰的时候每单位时间几百万的用户请求,也就是高并发,但我必须要实现系统响应及时,而且高可用,假如你是架构师,你该如何架构这个系统,聊聊你的方案。
  • 线程编程题: 写两个线程,一个往数组加数据,一个往数组减数据,要求数据不会越界。其实就是生产消费者
  • 秒杀系统如何设计?
  • 如果处理并发时候出现死锁?
欢迎搜索关注本人与朋友共同开发的微信面经小程序【大厂面试助手】和公众号【微瞰技术】

版权声明
本文为[赵镇]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000037770994