zoukankan      html  css  js  c++  java
  • 并发面试题汇总

    参考:从我个人以往面试经历、博客、微信公众号搜集了并发相关的面试题,由于是从2年前开陆续始整理的,所以没法给出原文的出处,请原作者谅解

    集合框架

    HashMap,HashTable,ConcurrentHashMap、TreeMap的源码,实现原理、区别、底层数据结构、1.7和1.8的实现

    JDK8中对HashMap做了怎样的优化。HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小;HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。

    HashMap怎么解决碰撞问题的?hash冲突解决办法;  HashMap的key可以重复吗?HashMap何时扩容,扩容的算法是什么?hashcode相等两个类一定相等吗?equals呢?相反呢?

    hashmap和treemap【红黑树】什么区别?低层数据结构是什么?

    hashMap什么情况下会出现循环链表?concurrentHashMap写的时候用什么锁?

    极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的;ConcurrentHashMap加锁机制是什么,详细说一下?

    这些数据结构中是线程安全的吗?假如你回答HashMap不是线程安全的,接着问你有没有线程安全的map,接下来问了conurren包。

    什么时候使用Linkedhashmap【链表,迭代访问快】、Concurrenthashmap、Weakhashmap【方便GC】  哪些集合类是线程安全的

    Concurrenthashmap的实现,1.7和1.8的实现;Java中ConcurrentHashMap的并发度是什么?

    Java中的同步集合与并发集合有什么区别?

    jdk1.8对ConcurrentHashMap做了哪些优化?

    讲一下 concurrentHashMap 原理。头插法还是尾插法?扩容怎么做

    讲讲hashmap,提到了红黑树,又问红黑树是什么。
    答:HashMap在JDK8中有些优化,当某个桶链表长度>=8,则把该链表转换成红黑树,提高查询效率;红黑树是平衡二叉排序树,查询效率稳定O(lgn)

    简单介绍下 ArrayList 怎么实现,加操作、取值操作,什么时候扩容?

    ArrayList 和LinkedList的区别:java集合类相关的东西
    (1)arraylist底层是数组,LinkedList是链表。
    (2)由于底层实现的原因,ArrayList随机取数可以用下标获取,速度很快,尾部插入数据也较快。(扩容的时候除外,因为扩容可能会触发数组的重新拷贝分配内存)
    (3)LinkedList因为是一个双向链表,所以是有序的,在任意位置的数据插入较快,随机但是随机取数比较慢。

    集合在迭代的过程中,插入或删除数据会怎样?

    线程池 

    线程池底层如何实现的?

    线程池的参数有哪些,在线程池创建一个线程的过程?一个任务从被提交到被执行,线程池做了哪些工作?

    线程池内的线程如果全部忙,提交一个新的任务,会发生什么?队列全部塞满了之后,还是忙,再提交会发生什么?

    ExecutorService的用法?有什么好处?Executors工具类有哪几种构造线程池的方法? 

    Java中的线程池共有几种?

    shutdown和shutdownnow的区别

    常用的线程池模式以及不同线程池的使用场景

    线程池参数,每个参数的作用,几种不同线程池的比较,阻塞队列的使用,拒绝策略

    如何实现一个定时调度和循环调度的工具类。但提交任务处理不过来的时候,拒绝机制应该如何处理 ; 线程池默认有哪几种拒绝机制 ;

    线程池coreSize,maxSize怎么设置,依据是什么?
    场景1:单台机器4核,服务A请求时间为5S,但是A调用的某个服务B耗时4.98S,A服务超时时间是10S,问100QPS的访问量,动态线程池CoreSize,maxSize,等待队列怎么指定?

    线程池了解吗?两个提交方法一个是submit一个是execute,有什么区别?

    线程池的线程数怎么确定?
    如果是IO操作为主怎么确定?
    如果计算型操作又怎么确定?
    线程池的线程是不是必须手动remove才可以回收value?那你说的内存泄漏是指主线程还是线程池?

    怎么创建一个线程池,传入的参数分别什么含义?线程池是怎么实现维持核心线程数的?怎么实现一个自定义的拒绝策略?
    线程池的构造类的方法的5个参数的具体意义?
    单机上一个线程池正在处理服务如果忽然断电该怎么办?(正在处理和阻塞队列里的请求怎么处理)?
    使用无界阻塞队列会出现什么问题?

    ThreadPoolExcutor原理。

    服务器CPU数量及线程池数量的关系? 

    Volatil关键字;volitile关键字的作用,原理;volatile重排序举例

    synchronized关键字的用法,优缺点;

    Lock接口有哪些实现类,使用场景是什么。ReadWriteLock

    可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁(ConcurrentHashMap中的segment)。

    悲观锁,乐观锁,优缺点,CAS有什么缺陷,该如何解决。

    多个线程同时读写,读线程的数量远远?于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁?ReadWriteLock  CopyOnWrite

    除了synchronized关键字之外,你是怎么来保障线程安全的?

    什么时候需要加volatile关键字?它能保证线程安全吗?:只有单线程更新变量;对变量的写入操作不依赖变量的当前值。

    synchronized关键字锁住的是什么?在字节码中是怎么表示的?在内存中的对象上表现为什么?

    synchronized 和 ReentrantLock 有什么不同?

    简述synchronized?Object的Monitor机制;

    volatile和synchronized区别;synchronized和lock的区别?

    Java中的volatile 变量是什么?

    如何避免死锁?死锁代码实现

    Java中活锁和死锁有什么区别?

    乐观锁和悲观锁的实现

    synchronized实现原理  

    sychnized和Lock什么区别?sychnize 什么情况情况是对象锁? 什么时候是全局锁

    volitile的工作原理?

    volatile的使用 synchronied的使用

    reentrantlock的实现和Synchronied的区别

    synchronized内部实现,偏向锁,轻量锁,重量锁 ;为什么需要自旋?

    轻量级一点的锁了解吗?
    答:就讲了讲乐观锁和项目应用。后来问自旋锁作用,然后又问我Java中的cas。
    Unsafe类中有些Native方法,比如compareAndSwapLong,能保证原子性更新变量的值,

    JMM

    简述happen-before规则 ;

    JMM内存模型
    原子性,可见性,有序性如何保证
    工作内存与主内存

    在多核CPU下,可见性怎么保证?

    堆是怎么存储的,插入是在哪里?

    CAS

    CAS的实现原理以及问题 AQS的实现原理 cas操作的使用;cas知道吗如何实现的?

    Atomic包的实现原理是什么 ;CAS又是怎么保证原子性的 ;

    CAS和锁的区别,以及应用场景。

    concurrent包

    ThreadLocal的了解,实现原理。ThreadLocal 是什么底层如何实现?写一个例子呗?

    Java中CyclicBarrier 和 CountDownLatch有什么不同?

    什么时候使用CopyOnArrayList

    说说你了解的一个线程安全队列;阻塞队列的实现方式  

    简述AQS原理;AQS 有那些实现?

    保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读
    并发包了解吗?假如几个线程之间相互等待,可以用哪个并发类来实现,他的原理是什么?多个线程执行完了,再执行一个线程,实现方式

    Thread、Runnable、ThreadPool、CyclicBarrier、CountDownLatch、Semaphore、 ThreadLocal

    讲一下CountDownLatch和cyclicBarrier的区别? 

    threadLocal关键字有用过吗?如果没有重写initialValue方法就直接get会怎样?

    手写生产者消费者代码。
    使用concurrent包下的来实现生产者消费者。

    其他

    Java实现多线程有哪几种方式。Callable和Future的了解。

    ABC三个线程如何保证顺序执行。线程的状态都有哪些。

    sleep和wait的区别。notify和notifyall的区别。 

    JAVA的AQS是否了解

    wait/notify/notifyAll?需不需要被包含在synchronized块中?这是为什么?

    生产者消费者代码实现

    什么是线程?

    线程和进程有什么区别?

    如何在Java中实现线程?用Runnable还是Thread?

    Thread 类中的start() 和 run() 方法有什么区别?两次start同一个线程会怎么样? 

    如何在Java中创建Immutable对象

    单例模式的双检锁是什么?手写线程安全的单例模式

    写出3条你遵循的多线程最佳实践

    Future和ListenableFuture 异步回调

    传统JDK中的Future通过异步的方式计算返回结果:在多线程运算中可能在没有结束返回结果,Future是运行中的多线程的一个引用句柄,确保在服务执行返回一个Result。

    ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)完成后立即执行。

    JUC和Object ; Monitor机制区别?

    简述DCL失效原因,解决方法 ;

    创建线程的方式:延伸至优劣,底层实现
    (1)Runnable接口。
    (2)继承Thead类。
    (3)实现Callable接口。
    (4)线程池获取:ThreadPoolExecutor.

    怎么控制多个线程按序执行?

    进程和线程的区别?并行和并发的区别?了解协程么?
    进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?
    线程的生命周期有哪些状态?怎么转换?
    wait 和 sleep 有什么区别?什么情况下会用到 sleep?
    怎么停止线程?

    CPU的执行方式
    对线程安全的理解
    事务有哪些特性?
    怎么理解原子性?

  • 相关阅读:
    Web API中的消息处理程序(Message Handler)
    Web API中的模型验证
    autoconf配置的项目,编译debug版本
    gcc编译工具生成动态库和静态库之一----介绍
    VMware中四种网络连接模式的区别
    vmware虚拟机三种网络模式的区别
    code block自动生成makefile
    centos7 安装 codeblock(rpm)
    利用cbmakegen导出Code::blocks的Makefile
    C/C++程序CPU问题分析
  • 原文地址:https://www.cnblogs.com/xuwc/p/14025520.html
Copyright © 2011-2022 走看看