zoukankan      html  css  js  c++  java
  • 大厂面试系列(二):并发编程

    并发编程

    多线程类的使用

    • 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内完成用户请求,但是在最高峰的时候每单位时间几百万的用户请求,也就是高并发,但我必须要实现系统响应及时,而且高可用,假如你是架构师,你该如何架构这个系统,聊聊你的方案。

    • 线程编程题: 写两个线程,一个往数组加数据,一个往数组减数据,要求数据不会越界。其实就是生产消费者

    • 秒杀系统如何设计?

    • 如果处理并发时候出现死锁?

    欢迎搜索关注本人与朋友共同开发的微信面经小程序【大厂面试助手】和公众号【微瞰技术】

    file
    file

  • 相关阅读:
    VB.Net计算含日文的字符串长度
    修改三个属性,就可以让错误提示更详细
    ORACLE分页查询SQL语法
    探知主力仓位的原理
    Linux手机研发五大难关
    当SNS在垂直行业嫁接电子商务
    实时股票数据获取方式
    商业周刊:网民周末更爱移动Web 分类信息超社交
    Linux下的C编程实战
    想起了赵丹阳
  • 原文地址:https://www.cnblogs.com/zhendiao/p/13865790.html
Copyright © 2011-2022 走看看