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的执行方式
    对线程安全的理解
    事务有哪些特性?
    怎么理解原子性?

  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/xuwc/p/14025520.html
Copyright © 2011-2022 走看看