浅谈JUC的理解(含JUC知识体系图)

浅谈JUC的理解

    • 一、前言感悟
    • 二、并发知识
    • 三、一年前回答
    • 四、补充体系回答
    • 五、补充层次回答
    • 六、碎碎念


本文除了说技术,更多的是在一个两年多开发经验的程序员视角下,记录下自己探索到的世界。
如有不妥之处,还请指正。共勉。

一、前言感悟

当我们在谈一个技术的时候,不要过多的陷入技术本身,我们需要明白技术是服务业务的。今天的我们需要以一个更为广阔的视角去看待技术,多去看看、思考那些技术细节以外的东西。

JUC同理。这部分涉及知识点相对较多,属于是八股文的重灾区。仔细想来,这已经是自己第三次学习JUC知识了,第一次学习如何使用,第二次学习相关八股知识点,那这一次自己要学什么?换句话说就是,这次学习自己能收获什么?常年行走在B端产品里,老实说,使用并发工具的频率并不高。在八股同质化严重的今天,一部分人选择了卷深度,无奈自己记忆力确实不太行,且对当下的自己来说ROI太低,那自己的差异点能在哪里?昨天和小伙伴们简单讨论了下并发相关的知识点,突然有感而发,实习的时候就是这些东西,今天还是这些,八股文到头了?


然后瞬间灵感了一个idea,我这次学习可以梳理一下并发知识体系,让这些并发的知识点长在一棵树上。这样下次别人再问我谈谈JUC的理解,我就不会一张口就提被说烂了的synchronized、AQS这些干涩的知识点,而是更有体系,更有血有肉的东西(目的)。




二、并发知识

回到JUC本身,引入多线程是为了解决单线程下资源和性能的平衡问题,但是在使用多线程的时候又遇到了新的问题——线程安全问题。遇到了问题,我们就要解决问题。我将JUC的回答归纳为了两个问题:

  1. 如何又好又快的解决线程安全问题?
  2. 多线程如何为我们的生产力提效?

顺着这个思路,我将JUC部分涉及到的大部分东西都融入到了这一张xmind中

请添加图片描述

知识有体系、有深度了,那如何回答呢?




三、一年前回答

侧重回答原理层面的,融合了很多热门的八股文考点

要是面试官再问我volatile,我就这么答

要是面试官再问我synchronized,我就这么答




四、补充体系回答

主要是补充这个知识点在JUC并发体系中的位置

举个例子,今天之前你让我说对ThreadLocal的理解,我可能就只会说ThreadLocalMap、强软弱虚引用、内存泄漏、甚至引申JVM定位内存泄漏问题。在梳理了并发体系后,我就可以补充:

  1. 它的作用是什么?解决线程间数据隔离的一个工具;

  2. 它在JUC中定位是什么?多线程的基础工具,辅助作用;

  3. 它和其他什么多线程知识点有什么联动?Thread。

可我今天想说,我觉得还能再优化。




五、补充层次回答

有感于职场这一年多技术方案评审时的耳濡目染,我甚至觉得可以再拔高一下这个问题的回答角度。从我们介绍一个东西的思路出发,将它说的更有层次,最终来体现我们看问题更全面、更专业。

八股文大家都会背,面试比记忆力?比谁会卷操作系统源码?起码我不希望往这个方向走,我当下能想到的解法就是——从更全面的分析问题的角度去分析我们的技术点,而在这个过程中,除了能够反映我的技术知识,还能反映出我们思考问题的方式方法(我始终觉得思考问题的方式方法对人成长的影响很大),顺便降低了原理部分对于整体技术点理解的比重(避重就轻)。

也有难度(换了个方向卷),甚至还有些冗余和深沉,但这已经是我当下能想到的在千篇一律的八股文面试中具有独特之处的最优解了(如果几年后回头看,打脸了自己,那么我很开心,因为自己成长了)。

那么我的谈谈就可以贯穿这些问题去讲:

  1. 它是什么?解决线程间数据隔离的一个工具;
  2. 它解决了什么问题?设置的参数可以在同一个线程的任意位置获取到;
  3. 它怎么解决的这个问题(同一个线程任意位置获取到)?是Thread的成员变量,不同线程自己维护自己的,只要在当前线程内就能通过方法调用获取到参数;
  4. 如何为我们的业务提供帮助?核心思路,在什么场景下,遇到了什么问题,怎么解决。业务中,形式参数传递用户太麻烦,使用它传递用户上下文,分布式tradeId等;框架中,使用@Autwired引入的HttpServletRequest等;
  5. 使用的注意事项有哪些,是否用出过什么问题?不需要了需要remove掉。自己在什么业务背景的时候做了一个什么功能用到了它,解决了什么问题,后来出现了一个什么现象,定位到是ThreadLocal的问题;
  6. 原理是什么?内部维护了一个ThreadLocalMap,key-value如何设计;key是虚引用,强软弱虚引用;value需要remove,否则会内存泄漏;JVM定位内存泄漏问题;
  7. 其他…:扩展下InheritableThreadLocal、Transmittable-Thread-Local(如果要展开还是同样的流程)

相较于之前的回答,在技术人看来就很专业,一上来就抓住了最难的那部分(说原理),心里想着最难的我都没问题,其他的还能有什么问题?今天想想,也许这就是技术人的狂欢吧。我今天面对的问题是谈谈ThreadLocal的理解,而我要做的是把这个东西说明白,只说原理就说明白了?我认为答案是否定的,起码这不够。

突然想到一些好笑的事情。我没有真实线上调优过JVM,但是那些调优参数、调优分析思路我是张口就来;没有当过架构师,分布式、微服务、DDD设计也能侃侃而谈;没经历过真实的高并发场景,解决高并发、高性能、大数据场景的方法论我倒是知道一堆。所以我认为,我是在抛开背景谈技术,无疑耍流氓。尽管这样的回答会过于正式,但我应该明白能否全面的理解和看待事物,和我是否需要全面的理解和看待事物是两回事。



回顾一年多以前写的文章要是面试官再问我volatile,我就这么答、要是面试官再问我synchronized,我就这么答,当时觉得如果能这么回答,提问的人应该能感受到我的强大的知识储备。今天看来,我的目的应该是达到了(正常,背课文嘛,无非是谁背的多,理解了并记住了),今天要做的就是来个加强版。

同理,请你谈谈ExecutorService、ScheduledExecutorService、CompletableFuture这几个并发工具的理解,完全可以复用前面使用的这个回答流程:

  1. 它是什么?
  2. 它解决了什么问题?
  3. 它怎么解决的这个问题?
  4. 如何为我们的业务提供帮助?
  5. 使用的注意事项有哪些,是否用出过什么问题?
  6. 原理是什么?
  7. 其他(差异化处理、个性化改造)…

不知道你是否有这样的感觉,按照这个模板的回答方式去回答,但凡你在业务项目中用过,甚至是看到别人用过,并且你对原理的东西有一定了解,我相信你也不会张口就是线程池的7个参数含义。起码我是的。




六、碎碎念

做为一个练习一坤年的B端业务开发,工作中遇到的bug,真心没有因为操作系统这命令和那命令叫什么、谁前谁后导致的,并且遇到了这种太底层的问题,我向来都是反馈领导,毕竟我还有需求排着呢。

不如专注于和别人更好的沟通协作,更高效的工作安排,少写点业务bug,我觉得能做好这些已经很不容易了。而更有条理、更全面的描述问题、分析问题,我觉得是能够帮助我们达成这一目的的,而这就比卷深度更有价值。

当然,我们也还是要具备一定的解决问题的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100:239.滑动窗口最大值(优先队列/单调队列)

本题是一个经典的单调队列题。不过用优先队列也能解决。 一、优先队列 在使用优先队列时,我们会遇到这样的问题:如何将一个目标数从优先队列中弹出?如果使用stl这是办不到的,虽然可以自行实现这样的功能。但是我们可以这样思考&am…

什么是GoogLeNet,亮点是什么,为什么是这个结构?

GooLeNet 亮点 最明显的亮点就是引入了Inception,初衷是多卷积核增加特征的多样性,提高泛化能力 ,比如,最下边是一个输入层,然后这个输入分别传递给1*1,3 * 3 ,5 * 5和一个最大池化层&#xff…

IP数据报格式

每一行都由32位比特,即4个字节组成,每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。 总长度 总长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度数据载荷长度)最大…

Long-term Correlation Tracking LCT 目标跟踪算法源码运行

资源 LCT-tracker项目地址VLFeat官网OpenCV下载地址OTB50数据集百度网盘资源 参考博客 一步一步教你跑lct-tracker(Win10Matlab 2016bVisual Studio 2015)LCT代码跑起来先文章思路总结 正文 1. 环境配置 我的环境:Win11、Visual Studio…

python+realsense

单目相机(RGB影像):分辨率:320180,320240,424240,640360,640480,848480,960540,1280720,19201080;帧率:6,15,30,60 按照博文Python实战之Realsense_realsense python-CSDN博客的代码显示如下(我更改了分辨率和帧率,大…

设计模式:观察者模式 ⑧

一、思想 观察者模式是一种常见的设计模式,也称作发布-订阅模式。它主要解决了对象之间的通知依赖关系问题。在这种模式中,一个对象(称作Subject)维护着一个对象列表,这些对象(称作Observers)都…

css3中nth-child属性作用及用法剖析

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 标题:CSS3中nth-child属性作用及用法剖析 摘要:CSS3中的nth-child选择器允许我们根据元素位置来定位特定的元素…

Vue3中Vue Router的使用区别

在 Vue 3 中,useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数,它们的用途和返回的对象不同,接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例,这个实例提供…

python(5)之处理数组

上次代码结果如下: 1、处理数组的缺失值 1、isnan()函数 isnan()函数是Numpy模块里的一个可以标记数组中缺失值的位置 代码示例如下: import numpy as np ac np.array([1,2,3,2,3,4,5,9,np.nan,1]) p…

OSPF收发报文实验简述

1、OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。 通过wireshark软件对r2 e0/0/0 端口进行数据抓包,发现224.0.0.5为组播地址,如下图

深入了解二叉搜索树:原理、实现与应用

目录 一、介绍二叉搜索树 二、二叉搜索树的基本性质 三、二叉搜索树的实现 四、总结 在计算机科学中,数据结构是构建算法和程序的基础。其中,二叉搜索树(Binary Search Tree,简称 BST)作为一种常见的数据结构&#…

力扣图论篇

以下思路来自代码随想录以及官方题解。 文章目录 797.所有可能的路径200.岛屿数量130.被围绕的区域1020.飞地的数量 797.所有可能的路径 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不…

基于PySide2实现调用本地摄像头抓拍并保存照片(Python版本)

因为横向课题需要,这是其中的一个小小的功能,单独拎出来作为一个小demo,方便后续学习使用 项目实现功能: 点击open按钮,摄像头开启,实时捕获周围图像并显示 点击capture按钮,保存摄像头照片&am…

Day6 java 常用API

文章目录 1、Calendar1.1 Calendar日历对象 2、JDK8 之后新增的时间类2.1 LocalDate、LocalTime 、LocalDateTime2.2 ZoneId 、ZoneIdTime2.3 Instant2.4 DateTimeFormatter2.5 Period2.6 Duration 1、Calendar 在了解calendar之前,先用SimpleDateFormat 写一个小例…

保持长期高效的七个法则(一)7 Rules for Staying Productive Long-Term(1)

Easily the best habit I’ve ever started was to use a productivity system.The idea is simple:organizing all the stuff you need to do (and how you’re going to do it) prevents a lot of internal struggle to get things done. 无疑,我曾经建立过的最好…

C++面试宝典一部分

今天整理书籍资料时,发现多年前打印的面试资料,拍照分享给大家。

ai+模型选择+过拟合和欠拟合

ai模型选择过拟合和欠拟合 1模型选择1训练误差和泛化误差2验证数据集和测试数据集3k-折交叉验证4总结 2过拟合和欠拟合1模型容量2估计模型容量3VC维4数据复杂度5总结 3代码 1模型选择 1训练误差和泛化误差 训练误差(Training Error)和泛化误差&#xff…

代码随想录刷题笔记-Day29

1. N皇后 51. N 皇后https://leetcode.cn/problems/n-queens/ 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数…

LVS+Keepalived 高可用负载均衡集群

一. 高可用集群的相关知识 1.1 高可用(HA)集群和普通集群的比较 ① 普通集群 普通的群集的部署是通过一台度器控制调配多台节点服务器进行业务请求的处理,但是仅仅是一台调度器,就会存在极大的单点故障风险,当该调度…

20-Java备忘录模式 ( Memento Pattern )

Java备忘录模式 摘要实现范例 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象 备忘录模式属于行为型模式 摘要 1. 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对…