Apache Flink的架构设计与运行流程说明
在大数据领域,实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控,从物联网设备的实时告警到社交平台的热点追踪,企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中,Apache Flink凭借其“高吞吐、低延迟、精准一次(Exactly-Once)”的处理保证,以及对事件时间(Event Time)的原生支持,成为了工业界实时计算的首选引擎。
本文将深入解析Flink的底层架构设计与核心运行流程,帮助读者理解这一“实时计算王者”的技术内核。
一、Flink的架构设计:分层解耦的分布式系统
Flink的架构设计遵循“分层解耦”的原则,将核心功能模块拆分为作业管理、资源管理、任务执行、外部交互四大层次,既保证了系统的高可靠性,又通过模块化设计提升了扩展能力。其核心组件包括:JobManager(作业管理器)、TaskManager(任务管理器)、Dispatcher(调度器)、ResourceManager(资源管理器),以及贯穿全局的分布式协调服务(通常依赖ZooKeeper)。
1.1 核心组件:分工明确的“协作天团”
(1)JobManager:作业的“大脑”
JobManager是Flink集群的核心控制节点,负责整个作业的生命周期管理。其核心职责包括:
- 作业解析与转换:接收用户提交的作业(如通过Flink客户端提交的JAR包或SQL任务),将用户编写的逻辑数据流图(JobGraph)转换为可执行的物理执行图(ExecutionGraph),并进一步分解为具体的任务(Task)。
- 任务调度与监控:根据集群资源情况,为每个Task分配执行资源(由ResourceManager协调),并实时监控任务的运行状态(如失败、重启、完成)。
- 容错管理:通过检查点(Checkpoint)机制记录作业状态,当任务失败时,基于最近的检查点状态进行恢复,确保数据处理的准确性。
(2)TaskManager:任务的“执行者”
TaskManager是Flink集群的工作节点,负责实际执行计算任务。每个TaskManager可以启动多个任务槽(Task Slot),每个Slot是独立的资源隔离单元(如CPU、内存),用于运行一个或多个Task(具体数量由并行度决定)。其核心功能包括:
- 任务执行:从JobManager接收分配的Task,启动线程执行具体的计算逻辑(如数据转换、窗口聚合、状态操作)。
- 数据传输:通过内部的网络栈(如Netty)与其他TaskManager的Task进行数据交换,支持基于流的Shuffle和广播操作。
- 状态存储:管理任务的本地状态(如通过RocksDB或内存存储),并在Checkpoint时将状态持久化到外部存储(如HDFS、S3)。
(3)ResourceManager:资源的“大管家”
ResourceManager负责集群资源的动态管理,其核心目标是根据作业需求分配和释放资源,提升集群利用率。在传统的 standalone 部署模式中,ResourceManager直接管理TaskManager的生命周期(如启动、停止);在集成YARN/K8s等资源管理框架时,ResourceManager则通过调用外部接口(如YARN的ApplicationMaster)申请或释放容器资源。
(4)Dispatcher:作业的“入口网关”
Dispatcher是用户与Flink集群的交互入口,主要负责:
- 作业提交接收:接收用户提交的作业请求(如通过命令行、REST API或Flink Web UI),并为每个作业启动独立的JobManager实例(支持多作业隔离)。
- Web UI提供:暴露集群和作业的实时监控界面(如任务运行状态、资源使用情况、指标图表),方便用户调试和运维。
1.2 架构优势:为何Flink能支撑超大规模场景?
Flink的分层架构设计使其在大规模分布式场景下表现优异:
- 高容错性:通过JobManager的主备冗余(依赖ZooKeeper选举)和TaskManager的Checkpoint机制,确保单点故障不影响整体作业。
- 弹性扩展:ResourceManager支持动态扩缩容,当作业负载增加时,可快速申请新的TaskManager资源;负载降低时释放资源,降低成本。
- 多作业隔离:Dispatcher为每个作业启动独立的JobManager,避免不同作业间的资源竞争(如内存、CPU),适合多租户场景。
二、Flink的运行流程:从代码到数据流的“执行之旅”
理解Flink的运行流程,关键是理清“用户提交的代码”如何转化为“分布式集群中的实际执行任务”。整个流程可分为作业提交→作业解析→资源分配→任务执行→结果输出五大阶段。
2.1 阶段一:作业提交(用户侧)
用户通过Flink客户端(如flink run
命令、Flink SQL客户端或IDE提交)将作业代码(如Java/Scala的DataStream程序、SQL语句)提交到集群的Dispatcher。提交的内容通常包括:
- 作业的JAR包或SQL脚本;
- 配置参数(如并行度、Checkpoint间隔、状态后端类型);
- 依赖的第三方库(如Kafka客户端、JDBC驱动)。
2.2 阶段二:作业解析与转换(JobManager侧)
Dispatcher接收作业后,启动一个独立的JobManager实例(若为高可用模式,需通过ZooKeeper选举主JobManager)。JobManager的核心任务是将用户的逻辑代码转换为可执行的物理任务:
- 生成JobGraph:将用户代码中的数据流逻辑(如
DataStream.map()
、keyBy().window()
)转换为有向无环图(DAG),图中的节点是算子(Operator),边是数据流的传输关系。 - 优化与转换为ExecutionGraph:根据并行度配置(如
setParallelism(4)
),将每个算子复制为多个并行子任务(SubTask),并建立子任务间的数据流连接。此时,ExecutionGraph已明确“每个子任务由哪个TaskManager执行”。 - 生成物理执行图:将ExecutionGraph进一步分解为任务(Task),并为每个Task分配具体的资源槽位(Slot)。
2.3 阶段三:资源分配(ResourceManager协调)
JobManager将需要的资源需求(如需要多少个TaskManager、每个TaskManager需要多少Slot)提交给ResourceManager。ResourceManager根据当前集群资源状态(如可用的TaskManager数量、空闲Slot数),决定是否需要从外部资源管理器(如YARN)申请新的容器,或直接从现有TaskManager中分配Slot。
2.4 阶段四:任务执行(TaskManager侧)
TaskManager获取到分配的Slot后,启动线程执行具体的Task。每个Task对应一个算子的并行实例(如一个KeyedProcessFunction
的子任务),其执行逻辑包括:
- 数据源读取:从Kafka、文件系统或自定义源读取数据;
- 数据处理:应用用户定义的转换逻辑(如过滤、聚合、窗口计算);
- 状态管理:访问或更新本地状态(如通过
RuntimeContext.getState()
获取状态句柄); - 数据输出:将处理后的数据发送到下游Task或外部系统(如写入Redis、数据库或消息队列)。
2.5 阶段五:结果输出与作业终止
当作业完成(如批处理任务所有数据处理完毕)或用户主动取消时,JobManager会协调TaskManager停止任务执行,并释放占用的Slot资源。对于实时流作业,任务会持续运行,直到人为终止或发生不可恢复的故障(如所有Checkpoint均失败)。
三、案例分析:电商实时销量统计的Flink实践
为了更直观地理解Flink的架构与流程,我们以“电商实时销量统计”场景为例,模拟一个典型的实时流处理任务。
3.1 业务需求
某电商平台需要实时统计“每5分钟内,各商品类目的订单总金额”,要求延迟低于1秒,且数据准确(即使任务失败重启,统计结果不丢失或重复)。
3.2 技术方案设计
- 数据源:订单事件通过Kafka消息队列实时写入(主题:
order_topic
); - 数据处理:使用Flink读取Kafka数据,按商品类目(
category
)分组,每5分钟滚动窗口(Tumbling Window)聚合总金额; - 结果输出:将统计结果写入Redis(键:
category_sales_${window_end}
,值:总金额)。
3.3 Flink架构的协作过程
- 作业提交:用户通过
flink run
命令提交包含上述逻辑的JAR包,Dispatcher接收后启动JobManager。 - 作业解析:JobManager将用户代码转换为JobGraph(包含Kafka源算子→分组算子→窗口聚合算子→RedisSink算子),并根据并行度(假设设置为4)生成ExecutionGraph(每个算子有4个并行子任务)。
- 资源分配:ResourceManager检查集群中是否有4个空闲Slot(假设当前有2个TaskManager,每个提供2个Slot),直接分配资源。
- 任务执行:
- Kafka源Task(每个TaskManager的Slot)从Kafka拉取订单数据,反序列化为
Order
对象(包含category
、amount
、event_time
字段); - 分组Task根据
category
的哈希值将数据路由到对应的下游窗口聚合Task; - 窗口聚合Task基于事件时间(
event_time
)划分5分钟窗口,使用Flink的WindowFunction
计算每个窗口的总金额,并将结果暂存本地状态; - RedisSink Task从窗口聚合Task接收结果,批量写入Redis。
- Kafka源Task(每个TaskManager的Slot)从Kafka拉取订单数据,反序列化为
- 容错保障:JobManager每30秒触发一次Checkpoint,将所有Task的状态(如窗口的中间结果、Kafka的消费偏移量)持久化到HDFS。若某个TaskManager故障,JobManager会根据Checkpoint状态重启故障Task,并从其他TaskManager重新同步数据。
3.4 运行效果
该任务上线后,统计延迟稳定在500ms以内,即使遇到网络波动或节点故障,Checkpoint机制保证了数据的“精准一次”处理,业务方可以实时看到各品类的销量变化,及时调整运营策略。
四、总结:Flink架构的核心价值与未来趋势
Apache Flink的架构设计通过“分层解耦+模块化”的思想,实现了高可靠、高吞吐、低延迟的实时计算能力。其运行流程的关键在于“将用户逻辑转换为分布式任务,并通过资源管理与任务调度高效执行”。
从技术趋势看,Flink正在向更智能化的方向演进:
- 云原生支持:深度集成K8s,实现更细粒度的资源弹性(如基于指标自动扩缩容);
- AI与流计算融合:通过内置的机器学习推理能力(如Flink ML),在流处理过程中实时执行模型预测;
- 统一批流处理:Flink 1.12+版本通过“流批一体”架构,让用户以流处理的方式编写批处理任务,进一步降低开发门槛。
对于大数据开发者而言,掌握Flink的架构与运行流程,不仅能更高效地调试和优化作业,还能更好地利用其特性解决复杂业务问题。无论是构建实时数仓、智能风控系统,还是物联网实时监控平台,Flink都是值得信赖的“实时计算引擎”。
相关文章:
Apache Flink的架构设计与运行流程说明
在大数据领域,实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控,从物联网设备的实时告警到社交平台的热点追踪,企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中&a…...
AI+零售:智能推荐、无人店与供应链管理的未来
AI零售:智能推荐、无人店与供应链管理的未来 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AI零售:智能推荐、无人店与供应链管理的未来摘要引言一、智能推荐系统:从流量收割到用…...
华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发
目录 前言 1. 华为云 1.1. 创建实例 1.2. 创建产品 1.3. 编辑服务模型 1.4. 注册设备 1.4.1. 复制设备连接参数 1.5. 连接参考代码 2. micropython版-物联网 2.1. 环境搭建 2.2. 实现步骤 2.3. 示例代码 结语 前言 物联网(IoT)技术的快速发…...
【Linux】Linux内核模块开发
Linux内核模块开发 零、关于 1、概述 最近在学习Linux相关的东西,学习了U-Boot的编译,Linux的编译,能够在开发板上运行自己编译的U-Boot和Linux了,那么接下来就是在自己编译的Linux上做应用级或者系统级的开发了。本文以字符设…...
linux 下查看指定进程的内存CPU占用情况(用于程序崩溃类的排查)
在程序开发过程中,如果程序较为庞大,逻辑较为复杂时,容易出现运行时崩溃的问题。导致的原因有很多,我这里只对较为通用的内容占用情况作记录,如程序中对文件描述符打开未关闭(导致fd积攒过多超过了系统的标…...
ASP.NET MVC 入门指南五
26. 响应式设计与移动开发 26.1 响应式视图设计 为了使 MVC 应用程序在不同设备上都能提供良好的用户体验,需要采用响应式设计。可以使用 CSS 框架如 Bootstrap 来实现响应式布局。 引入 Bootstrap:在项目中引入 Bootstrap 的 CSS 和 JavaScript 文件。…...
字节跳动社招面经 —— BSP驱动工程师(4)
接前一篇文章:字节跳动社招面经 —— BSP驱动工程师(3) 本文内容参考: 嵌入式硬件平台修改启动地址-CSDN博客 特此致谢! 上一回开始针对于“嵌入式充电站”发的一篇文章字节跳动社招面经——BSP驱动工程师中的面试题…...
Spring MVC中自定义日期类型格式转换器
在Spring MVC中,自定义日期类型格式转换器可以通过实现Converter接口或使用DateTimeFormat注解。以下是两种方法的详细说明: 方法一:全局自定义转换器(推荐) 1. 创建日期转换器类 实现 org.springframework.core.con…...
【3D 地图】无人机测绘制作 3D 地图流程 ( 无人机采集数据 | 地图原始数据处理原理 | 数据处理软件 | 无人机测绘完整解决方案 )
文章目录 一、无人机采集数据1、多角度影像数据2、定位与姿态数据 二、无人机采集数据处理原理1、空三解算2、密集点云生成与三维重建3、地形与正射影像生成4、三维模型优化与瓦片化 三、无人机影像处理软件介绍 一、无人机采集数据 无人机原始数据采集 : 多角度影像数据 : 多…...
arduino Nano介绍
【仅供学习,具体参数参考官网或销售商】 Arduino Nano 是一款基于 ATmega328P 微控制器(或 ATmega168 旧版)的紧凑型开发板,专为嵌入式项目和原型设计而设计。 以下是Arduino Nano V3.0 328P详细介绍: 主要特性 微…...
解决 Flutter 在 iOS 真机上构建失败的问题
在开发 Flutter 应用时,有时会在尝试将应用部署到 iOS 真机时遇到构建失败的问题。错误信息通常类似于以下内容: Could not build the precompiled application for the device. Uncategorized (Xcode): Timed out waiting for all destinations matchi…...
【办公类-89-03】20250429AI写的研讨记录,清除格式,统一格式,名字替换。部分加粗,添加页眉
背景需求: 检查自即,需要AI一下院内的五次科研培训记录。 本次用了豆包 豆包写的不错,也是“水字数”的高手 把每次培训内容贴到WORD里 把AI资料贴到WORD里,发现问题: 1、字体、段落什么都是不统一的,需要统一改成宋体小四,1.5倍行距 2、十个研讨人也要改成真人。就找…...
react-native 安卓APK打包流程
一、使用keytool命令生成一个签名密钥 $ keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 在 Windows 上keytool命令放在 JDK 的 bin 目录中(比如C:\Program Files\…...
Android Studio中OpenCV应用详解:图像处理、颜色对比与OCR识别
文章目录 一、OpenCV在Android中的集成与配置1.1 OpenCV简介1.2 在Android Studio中集成OpenCV1.2.1 通过Gradle依赖集成1.2.2 通过模块方式集成1.2.3 初始化OpenCV 1.3 OpenCV基础类介绍 二、指定区域图像抓取与对比2.1 图像抓取基础2.2 指定区域图像抓取实现2.2.1 从Bitmap中…...
企业办公协同平台安全一体化生态入住技术架构与接口标准分析报告
全球组织数字化与智能化背景下 企业办公协同平台安全一体化生态入住技术架构与接口标准分析报告 一、背景与市场需求 市场规模与增量 根据Statista数据,全球协同办公平台市场规模预计从2023年的$480亿增长至2027年的$900亿,年复合增长率(CAG…...
从零搭建体育比分网站:技术选型与API调用实战(附完整源码)
一、前言:为什么选择体育比分项目? 体育数据网站是练手全栈开发的绝佳项目,涉及: ✅ 前端(实时数据渲染、可视化图表) ✅ 后端(API对接、数据缓存、高并发优化) ✅ 数据库ÿ…...
非凸科技受邀出席AI SPARK活动,共探生成式AI驱动金融新生态
4月19日,由AI SPARK社区主办的“生成式AI创新与应用构建”主题沙龙在北京举行。活动聚焦生成式AI的技术突破与产业融合,围绕大模型优化、多模态应用、存内计算等前沿议题展开深度探讨。非凸科技受邀出席并发表主题演讲,深入解析金融垂直大模型…...
深入蜂窝物联网 第五章 EC-GSM-IoT 及其他技术:混合组网与前瞻
1. 前言与应用场景 在一些地区,GSM 网络仍然大面积覆盖且运营成本低廉,运营商可通过 EC-GSM-IoT(Extended Coverage GSM for IoT)在现有GSM基站上升级,实现物联网互联。同时,为了满足不同场景的需求,常常需要与 NB-IoT、LTE-M、5G RedCap 等技术混合组网,形成多层次、…...
2025年深圳软件开发公司推荐
随着移动互联网的深度发展,软件开发已成为企业实现数字化转型的重要途径。作为中国科技创新中心的深圳,汇聚了众多技术实力雄厚的软件开发企业。本文将为您精选推荐6家在深圳表现突出的软件开发服务商,帮助企业找到合适的数字化转型合作伙伴。…...
仿腾讯会议——注册登录UI
1、加载素材 2、新添加资源类 3、加载图片 4、添加左侧图片 在左侧添加一个标签 选择图片 选择图片 勾选保证图片不变形 5、修改组件名称 6、设置密码输入框 5、切换 6、编辑提示框 7、定义提交和清空的槽函数 8、设置页面标题和最先显示页面 9、清空登录信息函数实现 10、清空…...
香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场 时间:2025年5月8日(星期四)16:30开始 地点:四川大学基础教学楼A座504 宣讲嘉宾:肖殿勋 助理教授 一经录取,享全额奖学金…...
设计模式(工厂模式)
工厂设计模式:打造你的代码生产线 引言 想象一下,你正站在一家现代化的玩具工厂门前。工厂内部,各种机器有条不紊地运转,原材料在传送带上流动,最终变成精美的玩具。你不需要了解每个玩具的具体制作工艺,…...
本地大模型编程实战(29)查询图数据库NEO4J(2)
上一篇文章 用大语言模型LLM查询图数据库NEO4J(1) 介绍了使用GraphQACypherChain查询NEO4J。用它实现简单快捷,但是不容易定制,在生产环境中可能会面临挑战。 本文将基于langgraph 框架,用LLM(大语言模型)查询图数据库NEO4J。它可以定义清晰复…...
Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
目录 一、为什么需要文档型数据库?1.1 数据存储的范式变革1.2 pymongo的核心优势 二、pymongo核心操作全解析2.1 环境准备2.2 数据库连接与CRUD操作2.3 聚合管道实战2.4 分批次插入百万级数据(进阶)2.5 分批次插入百万级数据(进阶…...
从遍历序列构造二叉树:前序+中序与中序+后序的递归解法详解
文章目录 1. 问题背景2. 核心思路3. 从前序与中序遍历序列构造二叉树3.1 递归分治思路3.2 代码实现与注释 4. 从中序与后序遍历序列构造二叉树4.1 递归分治思路4.2 代码实现与注释 5. 复杂度分析6. 总结 1. 问题背景 二叉树的遍历方式包括前序(根-左-右)…...
数据挖掘专栏介绍:用 Python + 大语言模型 (LLM) 重塑电商数据价值
写在前面 —— 不止于挖掘,更要智能涌现:用 Python + 大语言模型 (LLM) 重塑电商数据价值 或许你已经跟随我们之前的 “零基础上手Python数据分析” 专栏,掌握了 Pandas 的数据操纵、Matplotlib/Seaborn 的可视化呈现,甚至对传统的数据挖掘技术如聚类、分类、回归有了初步…...
CSS Transition入门指南
CSS Transition 完全指南 目录 Transition 的作用核心属性代码示例使用场景性能优化常见问题思维导图 1. Transition 的作用 CSS Transition 用于在 属性值变化时 创建平滑的过渡效果。例如: 鼠标悬停时按钮放大元素颜色渐变切换位置移动的缓动效果 2. 核心属性…...
Nginx 核心功能
目录 一、基于授权的访问控制 (1)使用htpasswd 生成用户认证文件 (2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取 (3)修改主配置文件 nginx.conf&…...
排序版研究方向
姓 名研究方向电子邮箱办公电话办公地点曹培根代数cao2024ustc.edu.cn 新楼412陈洪佳代数hjchenustc.edu.cn0551-636076931529陈小伍代数xwchenmail.ustc.edu.cn0551-636062351321梁永祺代数yqliangustc.edu.cn0551-636006171613欧阳毅代数yiouyangustc.edu.cn0551-63600337…...
AI国学智慧语录视频,条条视频10W+播放量
家人们!图书类带货玩法真的非常多,之前也分享过蛮多,例如情感语录、育儿教育、爆款图书金句类、AI历史人物解说类等等。 本期继续来分享一个对于普通人来说,上手相当简单,容易起号,可作为长线深耕的AI带货…...
RN 获取视频封面,获取视频第一帧
严格的说,没有解决这个问题,实际上是绕过了这个问题,严格的说获取的也不是第一帧。 RN的video 视频应用,大多是这样的 1、安装 yarn add react-native-video 2、导入 import Video from react-native-video; 3、使用 …...
缓存分片哈希 vs 一致性哈希:优缺点、区别对比及适用场景(图示版)
📜 引言 在分布式缓存系统中,数据分布策略是设计的关键之一。缓存分片哈希和一致性哈希是两种常见的数据分布算法,它们各有优缺点和适用场景。本文将通过图示对比表格,深入解析这两种算法的核心原理、优缺点及适用场景。 &#x…...
iOS - 音频: Core Audio - 播放
环境 iOS 18 Xcode 16.3 swift-driver version: 1.120.5 Apple Swift version 6.1 (swiftlang-6.1.0.110.21 clang-1700.0.13.3) Target: x86_64-apple-macosx15.0 Core Audio 的架构 声音数据的描述 sample: 一个声道采样的值,采样率定义了每秒从连续信号中提取并组成离散信号…...
Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】
一、引言 神经辐射场(Neural Radiance Fields,简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术,它能够从2D图像中学习复杂的3D场景表示。然而,NeRF技术的实现和应用门槛较高,需要较为专业的计算机视觉和深度学习知识。…...
【Java学习】动态代理有哪些形式?
Java动态代理的两种主要形式 动态代理在Java中有两种主要的实现方式,它们各有特点和使用场景: 1. JDK动态代理 (基于接口) 特点: Java标准库自带的功能(java.lang.reflect.Proxy)只能代理接口,不能代理…...
Android Studio 中实现方法和参数显示一行
Android Studio 中实现方法和参数显示一行,可通过以下步骤配置: 一、基础格式化设置 快捷键格式化 选中代码后使用 Ctrl Alt L(Windows/Linux)或 Cmd Option L(Mac)进行快速格式化27。 菜单操作…...
SQLyog中DELIMITER执行存储过程时出现的前置缩进问题
在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为。以下是详细解释和解决方案: 问题根源 SQLyog的语句分隔逻辑: SQLyog默认会根据分号(;)和换行自动分隔SQL语句 当代码有缩进时,SQLy…...
基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表
要实现基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表,首先需要对ShardingSphere进行一些基本配置。你提到的溯源码、批次号等数据需要考虑到跨年数据的存储,因此要设计一个能够动态扩展的分表策略 添加ShardingSphere依赖 在…...
vscode chrome调试怎么在所有浏览器都好使
chrome调试时只能在打开的浏览器里进行调试,其它打开的chrome浏览器就不能调试了,怎么解决。 右键点击 Chrome 的快捷方式图标,选择属性 在目标一栏,最后加上--remote-debugging-port9222 注意要用空格隔开 lanch.json 文件配置 …...
20250429在Ubuntu 20.04.6下安装VMware Workstation16
20250429在Ubuntu 20.04.6下安装VMware Workstation16 2025/4/29 20:16 缘起:1、在ubuntu14.04下git clone异常该如何处理呢? 2、请问 现在 编译NanoPi NEO的FriendlyCore系统使用ubuntu哪一个版本比较好? ubuntu14.04 编译异常/下载不了&am…...
Java高频面试之并发编程-10
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:ThreadLocalMap 怎么解决 Hash 冲突的? ThreadLocalMap 是 ThreadLocal 的核心实现,它采用 开放…...
【Tauri2】035——sql和sqlx
前言 这篇就来看看插件sql SQL | Taurihttps://tauri.app/plugin/sql/ 正文 准备 添加依赖 tauri-plugin-sql {version "2.2.0",features ["sqlite"]} features可以是mysql、sqlite、postsql 进去features看看 sqlite ["sqlx/sqlite&quo…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 […...
VScode与远端服务器SSH链接
这里写自定义目录标题 简介步骤 简介 这里是使用密钥文件链接 步骤 首先在windows CMD中运行 ssh-keygen -t rsa,生成本机的公钥和私钥 这里id rsa.pub就是公钥,在服务器端使用,id rsa是私钥在用户端使用;通常目录在C:/Users/Your name/…...
数据结构入门:详解顺序表的实现与操作
目录 1.线性表 2.顺序表 2.1概念与结构 2.2分类 2.2.1静态顺序表 2.2.2动态顺序表 3.动态顺序表的实现 3.1.SeqList.h 3.2.SeqList.c 3.2.1初始化 3.2.2销毁 3.2.3打印 3.2.4顺序表扩容 3.2.5尾部插入及尾部删除 3.2.6头部插入及头部删除 3.2.7特定位置插入…...
Reactor框架介绍
Reactor(反应器模式)是一种事件驱动的设计模式,广泛用于高性能网络编程和异步I/O处理。它的核心思想是将事件分发与业务逻辑解耦,通过统一的机制处理多路I/O事件。 这个在android蓝牙中大量使用,如果这里不懂,那么很难看懂底层的逻辑,所以我们在这片文章中做一个介绍 …...
Nacos 3.0 正式发布:MCP Registry、安全零信任、链接更多生态
Nacos 3.0 正式版本发布啦!升级 MCP Registry,围绕着 MCP 服务管理,MCP 多种类型注册,包含 MCP Server 注册、编排、动态调试和管理,并且提供 Nacos-MCP-Router 可以进行 MCP 动态发现,可以自动安装、代理 …...
前端安全中的XSS(跨站脚本攻击)
XSS 类型 存储型 XSS 特征:恶意脚本存储在服务器(如数据库),用户访问受感染页面时触发。场景:用户评论、论坛帖子等持久化内容。影响范围:所有访问该页面的用户。 反射型 XSS 特征:恶意脚本通过…...
go单向链表
需求 实现单向链表的节点顺序添加、顺序遍历。 实现 package mainimport ("fmt" )type zodiac_sign struct {number intdizhi stringanimal stringyear intnext *zodiac_sign }// 添加 // func add_node_by_order(previous_node zodiac_sign, current_node z…...
Python小程序:上班该做点摸鱼的事情
系统提醒 上班会忘记一些自己的事,所以你需要在上班的的时候突然给你弹窗,你就知道要做啥了 源码 # -*- coding:utf-8 -*- """ 作者:杨桃清 日期: 2025年04日29 21:51:24 """ import datetime import time import thre…...