avatar
文章
218
标签
10
分类
10
首页
归档
标签
分类
关于
Logo技术博客
搜索
首页
归档
标签
分类
关于

技术博客

GNOME 桌面环境必备软件与插件推荐
发表于2026-01-15|环境搭建|环境搭建
前言在升级到 Ubuntu 24.04 LTS 并使用 GNOME 桌面环境后,为了打造一个既美观又高效的开发环境,我整理了一份必备软件和 GNOME 插件清单。 这份清单涵盖了从日常通讯、开发工具到系统美化的各个方面。如果你也是一名追求效率的开发者,这份列表或许能给你一些参考。 🛠️ 第一部分:常用软件清单这部分涵盖了日常开发和办公的基础设施。对于大多数商业软件,推荐直接去官网下载 .deb 包进行安装,以获得最佳的兼容性。对于开发环境管理工具(如 NVM, SDKMan),则推荐使用官方脚本安装。 软件分类 软件名称 推荐理由 / 主要用途 安装方式 通讯社交 Linux QQ 官方重构版,Electron 架构,功能基本完善,满足日常沟通。 官网下载 (.deb) WeChat (微信) 官方原生 Linux 版(基于 QT 或 Electron),解决办公刚需。 官网下载 (.deb) Telegram 强大的即时通讯工具,Linux 客户端体验极佳。 官网下载 (官网包) 网络工具 Clash...
Flink进阶-深入理解 Flink 运行时架构
发表于2025-12-16|大数据|大数据
在使用 Apache Flink 进行大数据流处理时,理解其底层的运行时架构(Runtime Architecture)是进行性能调优和源码阅读的基础。Flink的架构遵循经典的 Master-Slave 模式,但其内部组件的分工非常精细。 本文将深入剖析 Flink 核心架构中的关键名词:Dispatcher、WebMonitorEndpoint、ResourceManager、JobMaster、*TaskManager*、Slot 以及 SubTask,并梳理它们之间的协作流程。 一、 核心组件概览图在进入细节之前,我们需要建立一个宏观的认知。Flink 的运行时架构主要分为两大阵营: JobManager (Master):负责作业管理和资源调度(包含 Dispatcher, ResourceManager, JobMaster, WebMonitorEndpoint)。 TaskManager (Slave):负责具体的任务执行(包含 Slot, SubTask)。 二、 集群入口与资源管理 (Cluster Entry & Resource...
Flink进阶-彻底搞懂 OperatorChaining 与 SlotSharing 的区别与联系
发表于2025-12-16|大数据|大数据
前言在使用 Apache Flink 进行流计算开发时,任务的资源分配与运行效率是两个绕不开的话题。很多开发者在调优时,经常混淆两个概念:OperatorChaining(算子链) 和 SlotSharing(Slot 共享)。 虽然它们看起来都是为了“把东西凑在一起运行”,但其底层的设计目的、线程模型以及对性能的影响截然不同。作为一名 Java 开发者,理解这两者的区别,对于写出高性能的 Flink 代码至关重要。 本文将深入剖析这两个核心概念的原理、区别及最佳实践。 一、OperatorChaining (算子链)1. 什么是 OperatorChaining?OperatorChaining 是 Flink 引擎层面的优化技术,它将多个逻辑上连续的 Operator(算子)合并为一个物理上的 Task。 举例:代码逻辑为 source[1] -> map[1] -> sink[1]。 不开启 Chain:需要启动 3 个线程,运行 3 个 StreamTask。 开启 Chain:这三个算子合并为一个 OperatorChain,只需 1 个线程 启动 1...
Flink进阶-10道实战题彻底搞懂 Operator Chaining 与 Slot Sharing
发表于2025-12-16|大数据|大数据
前言在 Apache Flink 的生产实践中,资源配置与性能调优是两个避不开的话题。很多开发者在提交作业时,往往对以下问题感到困惑: “我的作业到底申请了多少个 Slot?” “为什么这个算子和那个算子没有合并在一起?” “显式设置 SlotSharingGroup 到底有什么用?” 理解 Flink 的 Operator Chaining(算子链) 和 Slot Sharing(槽位共享) 机制,不仅能帮我们通过“面试造火箭”,更能帮我们在生产环境中节省真金白银的服务器资源。 本文通过 5 个阶段、10 道循序渐进的实战题目,带你从 JobGraph 的视角彻底拆解 Flink 的资源调度逻辑。 核心概念速查在做题前,我们统一一下核心术语: Slot (Task Slot):TaskManager 上的资源切片(内存隔离)。 计算公式:总 Slot = Σ (每个 SlotSharingGroup 的最大并行度)。 Operator Chain (算子链):Flink 将多个符合条件的算子合并在同一个...
并发内功-代码线程安全分析四个步骤整合版
发表于2025-11-25|Java|Java
[并发内功] 代码线程安全分析四个步骤整合版前言很多初学者在审查代码(Code Review)时,判断线程安全全靠“感觉”,或者认为只要没有报错就是安全的。 其实,线程安全问题的根源往往隐藏在变量的定义、初始化的顺序以及对方法的调用方式中。要看穿这些隐患,你需要一套系统的审查方法论。 本文将隆重介绍 S.E.O.P 模型 —— 从 State (状态)、Escape (逃逸)、Operation (操作)、Protection (防护) 四个维度,带你建立一眼看穿并发 Bug 的能力。 ⚡️ 第一部分:S.E.O.P 极速速查表 (Cheat Sheet)在深入细节前,请死死记住这张表。当你 Review 代码时,按此顺序逐一排查。 1. State (找状态) —— 哪里有鬼? 🚦 等级 典型特征 判定口诀 🟢 安全 局部变量 (方法内定义) 只要不传出去,天生线程隔离(栈封闭)。 🟢 安全 不可变基础类型 (final int) 不能改只能读,随便并发。 🟡 隐患 Final 引用类型 (final List) 骗局! 引用没变,但 List...
并发内功-代码线程安全分析步骤二之“Escape 逃逸分析”
发表于2025-11-25|Java|Java
[并发内功] 代码线程安全分析步骤二之“Escape 逃逸分析”前言这是 S.E.O.P 系列的第二篇。 在 Step 1 中,我们学会了识别“炸弹”(可变状态)。但是,如果不小心把炸弹扔到了人堆里,那才是灾难。 如果你把炸弹锁在只有你一个人有钥匙的保险柜里,那它就是绝对安全的。 Step 2 的核心任务就是:判断变量的作用域(Scope),看它是否逃离了当前线程的控制(Escape)。 在找出了代码中所有的“可变变量”(Step 1)之后,不要急着加锁。如果这个变量只有当前线程能看到,那么恭喜你,你省下了一次加锁的开销。 Step 2: Escape & Share (看范围) 专注于分析对象的“生存空间”。只要把状态限制在局部,多线程问题就会自动消失。 ⚡️ 精华速查版:逃逸判定红黑榜看代码时,盯着那些在 Step 1 中被标记为“可变”的对象,问自己:它跑到哪里去了? 🕵️‍♂️ 场景 判定结果 理由 应对策略 🟢 方法内自生自灭 ✅ 安全 (栈封闭) 对象在方法内 New 出来,用完就扔,没...
并发内功-代码线程安全分析步骤四之“Protection 验防护”
发表于2025-11-25|Java|Java
[并发内功] 代码线程安全分析步骤四之“Protection 验防护”前言加锁很容易,但加对锁很难。 在审查代码时,当你看到 synchronized 或 Lock 时,千万不要掉以轻心。反而要更加警惕:开发者既然加了锁,说明他潜意识里觉得这里有危险。你需要做的,就是验证这把锁是否真的锁住了危险。 Step 4: Protection 专注于审视同步机制的有效性(Effectiveness)和完整性(Completeness)。 ⚡️ 精华速查版:防护有效性红黑榜拿着代码里的锁,去对这张表。只要中了一条红色的,锁就是废的。 🛡️ 防护场景 代码特征 判定结果 理由 🟢 标准同步 synchronized(this) 保护实例变量 ✅ 有效 锁对象和被保护的数据属于同一个实例生命周期。 🟢 全局同步 synchronized(Class.class) 保护 static 变量 ✅ 有效 静态变量属于类,锁也属于类,门当户对。 🔴 对象不匹配 synchronized(this) 保护 static 变量 ❌ 无效锁 经典的“锁自家门,管广场人”。...
并发内功-代码线程安全分析步骤三之“Operation 查操作”
发表于2025-11-25|Java|Java
[并发内功] 代码线程安全分析步骤三之“Operation 查操作”前言绝大多数并发 Bug 的根源,不在于变量本身,而在于我们**“想当然”**地认为某些操作是瞬间完成的。 你写了一行代码 count++,觉得它是一气呵成的。但在 CPU 眼里,那是三条指令。当线程在这些指令的缝隙中切换时,灾难就发生了。 Step 3: Operation 专注于审视代码的逻辑动作,寻找**“竞态条件”(Race Condition)**。 ⚡️ 精华速查版:操作原子性红黑榜审查代码时,盯着那些针对共享变量的读写操作。不要被代码的行数迷惑,要看语义。 🕵️‍♂️ 操作类型 代码示例 判定结果 理由 🟢 单一读/写 flag = true; return x; ✅ 通常安全 基础类型的赋值和读取(非 long/double 64位机)通常是原子的。配合 volatile 可保安全。 🟢 原子类方法 atomic.incrementAndGet(); ✅ 安全 JDK 底层 CAS 保证原子性。 🔴 读-改-写 (RMW) i++; i =...
并发内功-代码线程安全分析步骤一之“State 找状态”
发表于2025-11-25|Java|Java
[并发内功] 代码线程安全分析步骤一之“State 找状态”前言很多开发者在排查线程安全问题时,习惯直接去找“有没有加锁”。其实,高手看代码的第一眼,看的不是锁,而是“变量”。 只要没有“共享的可变状态”,根本就不需要锁。如果连哪里有“鬼”(状态)都不知道,盲目加锁只会导致性能下降或死锁。 本文基于 S.E.O.P(State, Escape, Operation, Protection) 排查模型,带你攻克第一关:Step 1: State (找状态)。我们将通过 5 个典型案例,训练你“一眼识别危险代码”的本能。 ⚡️ 精华速查版:三色安全分级表在阅读详细分析前,请先死死记住这张**“变量红绿灯表”**。当你审查代码(Code Review)时,按此表对变量进行快速定级。 🚦 危险等级 典型特征 审查判定 应对策略 🟢 绝对安全 局部变量(定义在方法内) ✅ 栈封闭天生线程隔离,只要不传出去,绝对安全。 无需处理 🟢 绝对安全 Final 基础类型(final int, final double) ✅...
Flink Async I/O:原理与性能解密
发表于2025-11-25|大数据|大数据
前言在 Flink 流处理中,与外部系统(如 MySQL, HBase, Redis)交互往往是整个链路的性能瓶颈。很多开发者会有疑惑:网络 IO 耗时是物理固定的,异步到底是怎么“变快”的? 本文首先给出核心结论,随后深入底层原理。 🚀 精华速查:一分钟看懂 Async I/O如果你没时间看全文,记住以下核心逻辑: 1. 核心原理:时间重叠 (Time Overlap)Flink Async I/O 提高吞吐量的根本原因,不在于它缩短了“单条数据”的处理耗时,而在于它将“多条数据”的 IO 等待时间重叠在了一起。 2. 场景对比:假设处理 100 条数据,每条查询耗时 10ms。 同步 I/O (串行): 必须等第 1 条结果回来,才能发第 2 条请求。 总耗时 = 100 × 10ms = 1000ms (1秒) 异步 I/O (并行): 第 1 条发出请求后,不等待结果,直接发第 2 条、第 3 条……直到填满缓冲区(Capacity)。这 100 个请求几乎是同时在网络上传输的。 总耗时 ≈ 10ms...
12…22
avatar
李博帅
文章
218
标签
10
分类
10
Follow Me
公告
记录自己的学习成长
最新文章
GNOME 桌面环境必备软件与插件推荐2026-01-15
Flink进阶-深入理解 Flink 运行时架构2025-12-16
Flink进阶-彻底搞懂 OperatorChaining 与 SlotSharing 的区别与联系2025-12-16
Flink进阶-10道实战题彻底搞懂 Operator Chaining 与 Slot Sharing2025-12-16
并发内功-代码线程安全分析四个步骤整合版2025-11-25
分类
  • Java46
  • 前端1
  • 大数据24
  • 容器化43
  • 杂货小铺18
  • 环境搭建14
  • 监控预警7
  • 算法8
标签
Java 算法 环境搭建 运维手册 前端 计科基础 容器化 监控预警 大数据 杂货小铺
归档
  • 一月 2026 1
  • 十二月 2025 3
  • 十一月 2025 10
  • 十月 2025 1
  • 八月 2025 18
  • 七月 2025 19
  • 六月 2025 23
  • 五月 2025 11
网站信息
文章数目 :
218
运行时间 :
本站总字数 :
383.9k
最后更新时间 :
©2022 - 2026 By 李博帅
框架 Hexo 7.3.0|主题 Butterfly 5.3.5

豫ICP备2025118913号

搜索
数据加载中