多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了

前言

多线程并发问题,基本是面试必问的。

今年刚刚毕业准备找实习的同学或者经历过最近一段时间面试的朋友们,相应你们应该都有一个相同的问题被问到,那就是多线程与高并发

因为最近和腾讯、阿里包括字节和京东等一线大厂的面试负责人朋友在聊天的时候,他们给我共同的建议就是在面试的时候都要问一下对于多线程和高并发的理解,因为这些技术的理解决定了他们的项目在做的时候,他们所负责的部分深入到了什么程度。

相信说到这里,有很多朋友会回想自己的对于这些知识的理解,结果怎么样呢?

大部分同学应该都知道SynchronizedLock,部分同学能说到volatile并发包,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理。

这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助。

问题

1、开始之前,首先你要知道多线程和高并发都有哪些重点的知识要掌握吧

多线程

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第1张图片

 

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第2张图片

 

并发

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第3张图片

 

知道了这些问题或者说知识点之后,接下来我们就要研究下一个问题

2、多线程为什么会有并发问题

为什么多线程同时访问(读写)同个变量,会有并发问题?

  1. Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存。
  2. 线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。
  3. 线程访问一个变量,首先将变量从主内存拷贝到工作内存,对变量的写操作,不会马上同步到主内存。
  4. 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

哪知道了多线程并发问题的产生原因之后,接下来是不是就是要解决呀,今天的重点不是说解决方案,所以今天就不详细了,想知道详细解答方案的,可以下方,评论,我下一篇文章整理

面试

我们知道,平时敲代码牛逼的朋友,但是在面试的时候就卡壳,最后获得的职级和薪水可能还不如比他技术稍微差点的朋友,那原因在哪里呢?可能就是差在应试技巧上,毕竟在面试的时候不可能让你现场敲代码不是,那对于这些问题又该如何回答呢

当只有一个线程写,其它线程都是读的时候,可以用volatile修饰变量

 

当多个线程写,那么一般情况下并发不严重的话可以用Synchronized,Synchronized并不是一开始就是重量级锁,在并发不严重的时候,比如只有一个线程访问的时候,是偏向锁;当多个线程访问,但不是同时访问,这时候锁升级为轻量级锁;当多个线程同时访问,这时候升级为重量级锁。所以在并发不是很严重的情况下,使用Synchronized是可以的。不过Synchronized有局限性,比如不能设置锁超时,不能通过代码释放锁。

 

ReentranLock 可以通过代码释放锁,可以设置锁超时。

 

高并发下,Synchronized、ReentranLock 效率低,因为同一时刻只有一个线程能进入同步代码块,如果同时有很多线程访问,那么其它线程就都在等待锁。这个时候可以使用并发包下的数据结构,例如ConcurrentHashMap,LinkBlockingQueue,以及原子性的数据结构如:AtomicInteger。

面试的时候按照上面总结的这个思路回答基本就ok了。既然说到并发包,那么除了ConcurrentHashMap,其它一些常用的数据结构的原理也需要去了解下,例如HashMap、HashTable、TreeMap原理,ArrayList、LinkedList对比


而除了多线程与高并发,技术之间的连贯性,也会引出其他的相关问题,我们来看一下

操作系统

由多线程和高并发引出的第一个问题就是操作系统的相关内容

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第4张图片

 

接下来

Java基础

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第5张图片

 

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第6张图片

 

有了基础怎么能少了jvm调优

jvm调优

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第7张图片

 

调优方面,怎么能少了mysql呢

mysql

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第8张图片

 

mysql优化

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第9张图片

 

spring

spring当然也要来凑凑热闹

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第10张图片

 

网络

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第11张图片

 

消息队列

多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了_第12张图片

 

更多

更多的我就不一一展示了,需要这些思维导图辅助整理自己知识体系的老铁,关注+转发后,私信“资料”查看获取方式吧

Java并发知识体系,对于高并发进行相应的整理,希望能帮助大家在复习的时候提升效率,节省时间去准备更多的方面

需要领取全部PDF以及思维导图的老铁,麻烦帮忙转发一下这篇文章+关注我,然后私信【资料】获取免费获取方式!

关注公众号:Java架构师联盟,每日更新技术好文

git地址:https://github.com/biws-byte/bws

你可能感兴趣的:(java,架构,数据结构,编程语言,面试,java,多线程)