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

news2024/9/28 17:27:07

浅谈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,我觉得能做好这些已经很不容易了。而更有条理、更全面的描述问题、分析问题,我觉得是能够帮助我们达成这一目的的,而这就比卷深度更有价值。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海雷卯湿敏元器件存储及使用规范

湿敏等级是指材料或产品对湿度变化的敏感程度。它用于评估材料或产品在湿度变化条件下的稳定性和可靠性。 湿敏等级通常通过数字表示(如MSL- Moisture Sensitivity Level),从1到6级不等,每个级别代表不同的湿敏程度。较低的级别表…

基于网络爬虫的购物平台价格监测系统的设计与实现

通过对网络爬虫的购物平台价格监测系统的业务流程进行梳理可知,网络爬虫的购物平台价格监测系统主要由前台买家模块、后台卖家模块以及管理员模块构成。前台功能包含登录功能、注册功能、系统首页功能、唯品会商品详情浏览、唯品会商品收藏、唯品会商品点赞、唯品会…

9. 内核、文件系统加载工具

内核、文件系统加载工具 内核、文件系统加载工具是嵌入式开发必备的工具 1. 烧写BootLoader 1.1 通过超级终端方式 烧写 Bootloader 可以使用超级终端的“传送” |“发送文件”命令进入发送文件对话框,使用 Xmodem 协议和 Kermit 协议发送 Bootloader 的各个文件…

DenseNet笔记

📒from ©实现pytorch实现DenseNet(CNN经典网络模型详解) - 知乎 (zhihu.com) 是什么之 DenseBlock 读图: x0是inputH1的输入是x0 (input)H2的输入是x0和x1 (x1是H1的输出) Summary: 传统卷积网,网…

角蜥优化算法 (Horned Lizard Optimization Algorithm ,HLOA)求解无人机路径优化

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…

python学习笔记------集合(set)

集合定义格式 基本语法: #定义集合字面量 {元素,元素,元素......,元素} #定义集合变量 变量名称{元素,元素,元素......,元素} #定义空集合 变量名称set() #定义集合字面量 {元素&#…

海纳斯Hinas安装Tailscale

海纳斯Hinas安装Tailscale 海纳斯安装Tailscale第一步,注册Tailscale账号,并在手机/电脑安装Tailscale第二步,进入海纳斯后台卸载重装Tailscale 海纳斯安装Tailscale 海纳斯自己安装了Tailscale,但是无法使用,需要卸载…

GPU,一统天下

三十年前,CPU 和其他专用处理器几乎处理所有计算任务。那个时代的显卡有助于加快 Windows 和应用程序中 2D 形状的绘制速度,但没有其他用途。 快进到今天,GPU 已经成为业界最具主导地位的芯片之一。 但具有讽刺意味的是,图形芯片…

系统分析与设计(一)

我们有这么多各式各样的工具,互联网给我们带来了这么多用户和数据,这是好事也有副作用。 世界上能访问用户数据,并根据数据做分析和改进的公司,大概Google是其中翘楚,这种 data-centric 的做法做过了头,也有悲剧发生: Douglas Bowman 曾经是Google 的视觉设计主管,2009年的一天…

2013-2021年全国31省电子商务销售额数据(无缺失)

2013-2021年全国31省电子商务销售额数据(无缺失) 1、时间:2013-2021年 2、指标:电子商务销售额数据 3、来源:国家TJ局、各省NJ 4、范围:31省 5、缺失情况:无缺失 6、指标解释:…

JavaScript高级Ⅱ(全面版)

接上文 JavaScript高级Ⅰ JavaScript高级Ⅰ(自认为很全面版)-CSDN博客 目录 第2章 DOM编程 2.1 DOM编程概述 2.1.4 案例演示(商品全选) 2.1.5 dom操作内容 代码演示: 运行效果: 2.1.6 dom操作属性 代码演示: 运行效果: 2…

程序设计基础--C语言【一】

课堂笔记 1.整数数制 整数数制包括二进制数、八进制数、十进制数、十六进制数 1.1.十进制数 基数为10,由0到9这十个数构成。例如,4261可以看作是: (4*1000)(2*100)(6*10&#x…

最简单的电子书制作方法

制作电子书的方法有很多种,但最简单的一种可能就是使用在线工具了。现在有很多免费的在线工具可以让您轻松地创建电子书,而无需任何编程或设计技能。以下是最简单的电子书制作方法: 1. 准备好制作工具:FLBOOK在线制作电子杂志平台…

内存管理 --- 页面置换算法

最优置换:(参照未来OPT) 可以将将来很长一段时间不会访问的逻辑页面,进行置换 举例说明: 首先物理空间只有4个,然后遍历了ABCD 页,其中,要访问5 e 了但是没有,即发生缺页…

登录凭证------

为什么需要登录凭证? web开发中,我们使用的协议http是无状态协议,http每次请求都是一个单独的请求,和之前的请求没有关系,服务器就不知道上一步你做了什么操作,我们需要一个办法证明我没登录过 制作登录凭…

【LLM】Advanced rag techniques: an illustrated overview

note 文章目录 noteAdvanced rag techniques: an illustrated overview基础RAG高级RAG分块和向量化(Chunking & Vectorisation)搜索索引(Search Index)1. 向量存储索引(Vector Store Index)2. 多层索引(Hierarchical Indices)3. 假设问题和HyDE(Hypo…

【笔记】全国大学生GIS应用技能大赛练习总结

该总结笔记为小组成员在练习完毕了历届题目后自我总结的结果,如有不足之处可以在评论区提出,排版较乱往谅解 绘制带空洞的面要素: 法一: 1、矢量化整个区域。2、矢量化空洞区域。3、将矢量化空洞区域进行合并(编辑器…

Linux之selinux详解

华子目录 概念作用selinux与传统的权限区别selinux工作原理名词解释主体(subject)目标(object)策略(policy)(多个规则的集合)安全上下文(security context) 文…

【数理统计实验(四)】方差分析

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

美洲狮优化算法(Puma Optimizar Algorithm ,POA)求解机器人栅格地图最短路径规划(提供MATLAB代码)

一、美洲狮优化算法 美洲狮优化算法(Puma Optimizar Algorithm ,POA)由Benyamin Abdollahzadeh等人于2024年提出,其灵感来自美洲狮的智慧和生活。在该算法中,在探索和开发的每个阶段都提出了独特而强大的机制&#xf…