游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服电话

    020-85534346

    电子邮件

    81058337@qq.com
  • 码云社APP

    随时掌握码云社动态

  • 扫描二维码

    关注砺锋微信公众号

BAT面试必问之架构筑基知识并发编程

发布时期:2019-5-24 17:41
阅读:732 回复:15

前言编写正确的程序并不容易,而编写正常的并发程序就更难了。相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。并发编程相比 ...

前言

编写正确的程序并不容易,而编写正常的并发程序就更难了。相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。

并发编程相比 Java 中其他知识点学习起来门槛相对较高,学习起来比较费劲,从而导致很多人望而却步;而无论是职场面试和高并发高流量的系统的实现却都还离不开并发编程,从而导致能够真正掌握并发编程的人才成为市场比较迫切需求的。因此Java 并发问题也总是各个大厂面试的重点之一。在面试中,也发现很多面试者对一些基本的并发概念表示没听过,或者是原理不理解,还有的只知其一不知其二,最后导致面试失败的结果。

在这结合一些实际中遇到的面试题和学习并发编程上的重点问题,来聊聊java并发中所需要学习的知识点。

并发编程基础相关问题

什么是多线程并发和并行?

什么是线程安全问题?

什么是共享变量的内存可见性问题?

什么是Java中原子性操作?

什么是Java中的CAS操作,AtomicLong实现原理?

什么是Java指令重排序?

Java中Synchronized关键字的内存语义是什么?

Java中Volatile关键字的内存语义是什么?

什么是伪共享,为何会出现,以及如何避免?

什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?

ThreadLocal 相关问题

讲讲ThreadLocal 的实现原理?

ThreadLocal 作为变量的线程隔离方式,其内部是如何做的?

说说InheritableThreadLocal 的实现原理?

InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?

CyclicBarrier内部的实现与 CountDownLatch 有何不同?

随机数生成器 Random 类如何使用 CAS 算法保证多线程下新种子的唯一性?

ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性?

Spring 框架中如何使用 ThreadLocal 实现 request scope 作用域 Bean?

锁相关问题

并发包中锁的实现底层(对AQS的理解)?

讲讲独占锁 ReentrantLock 原理?

谈谈读写锁 ReentrantReadWriteLock 原理?

StampedLock 锁原理的理解?

并发队列相关问题

谈下对基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理的理解?

ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全?

基于链表的阻塞队列 LinkedBlockingQueue 原理。

阻塞队列LinkedBlockingQueue 内部是如何使用两个独占锁 ReentrantLock 以及对应的条件变量保证多线程先入队出队操作的线程安全?

为什么不使用一把锁,使用两把为何能提高并发度?

基于数组的阻塞队列 ArrayBlockingQueue 原理。

ArrayBlockingQueue 内部如何基于一把独占锁以及对应的两个条件变量实现出入队操作的线程安全?

谈谈对无界优先级队列 PriorityBlockingQueue 原理?

PriorityBlockingQueue 内部使用堆算法保证每次出队都是优先级最高的元素,元素入队时候是如何建堆的,元素出队后如何调整堆的平衡的?

JUC 包中线程同步器相关问题

分析下JUC 中倒数计数器 CountDownLatch 的使用与原理?

CountDownLatch 与线程的 Join 方法区别是什么?

讲讲对JUC 中回环屏障 CyclicBarrier 的使用?

CyclicBarrier内部的实现与 CountDownLatch 有何不同?

Semaphore 的内部实现是怎样的?

简单对比同步器实现,谈谈你的看法?

并发组件CopyOnWriteArrayList 是如何通过写时拷贝实现并发安全的 List?

谈谈如何系统的学习并发编程

并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全可靠的多线程并发程序。学习java并发就像进入了另外一个学习领域,就像学习一门新的编程语言,或者是学习一套新的语言概念,要理解并发编程,其难度跟理解面向对象编程难度差不多。你花一点功夫,就可以理解它的基本机制,但是要想真正掌握它的本质,就需要深入的学习与理解。在这在分享一个并发编程知识的学习导图给大家!

BAT面试必问之架构筑基知识并发编程

最后

针对关于BAT等大厂面试必问的并发编程知识点小编整理了一套完整的视频,关注小编,后台私信“并发编程”获取,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

BAT面试必问之架构筑基知识并发编程

BAT面试必问之架构筑基知识并发编程

河源123456789(未知职业)-本文作者
这个人很懒,什么也没有留下。
732 15 2019-5-24 17:41
该文章已有15人参与评论

请发表评论

全部评论

查看全部评论>>

扫一扫关注官方微信号

最前沿的技术信息一手掌握

滚动新闻
CODESEEDING(码云社)一家致力于程序员成长、以内容为核心、以提问为引导的多元化成长社区。我们在线上为技术爱好者提供了一个优质的交流氛围环境,在线下同样和众多高校联合开办了技术沙龙品牌。
020-85534346
关注我们
  • 访问移动H5版
  • 官方微信公众号

码云社 - CODESEEDING 2.0© 2018-2019 码云社. TOOBUG ( 粤ICP备16114193号-3 )