【perf】perf工具的使用生成火焰图
文章目录
- 1. What is perf?
- 2. perf使用
- 2.1 perf的子工具集
- 2.2 常用指令
- perf list
- 指令格式
- 参数
- perf中事件分类
- 使用示例
- perf stat
- 指令格式
- 参数
- perf top
- 指令格式
- 参数
- 交互式界面操作
- 使用示例
- perf record
- 指令格式
- 参数
- 使用示例
- perf report
- 指令格式
- 参数
- 交互式界面操作
- 使用示例
- perf diff
- 命令格式
- 参数
- 使用示例
- 输出字段说明
- perf script
- 指令格式
- 参数
- 使用示例
- 输出字段说明
- 3. 火焰图
- 3.1 火焰图生成原理
- 3.2 生成火焰图步骤
- 1. 安装依赖工具
- 2. 使用perf record记录性能数据
- 3. 导出数据为文本格式
- 4. 生成火焰图
- 参考内容
1. What is perf?
perf是Linux系统中的一个性能分析工具,它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,常用于性能瓶颈的查找和热点代码的定位。
基本原理:对被检测对象进行采样,最简单的是根据tick中断进行采样,即在tick中断内触发采样点,在采样点中判断程序当时的上下文。
事件主要有以下三种:
- Hardware Event : 是由PMU硬件产生的事件,比如cache命中。当需要了解程序对硬件特性的使用情况时,需要对这些事件进行采样;
- Software Event : 是内核软件产生的事件,比如进程切换、tick数等;
- Tracepoint Event : 是内核中的静态tracepoint所触发的事件,这些tracepoint用于判断程序运行期间内核的行为细节,比如slab分配器的分配次数等。
P.S. CPU周期是默认的性能事件。
2. perf使用
2.1 perf的子工具集
1 annotate 解析perf record生成的perf.data文件,显示被注释的代码2 archive 根据数据文件记录的build-id,将所有被采样到的elf文件打包,利用此压缩包,可以在任何机器上分析数据文件中记录的采样数据3 bench perf中内置的benchmark,目前包含两套针对调度器和内存管理子系统的benchmark4 buildid-cache 管理perf的buildid缓存,每个elf文件都有一个独一无二的buildid,perf用buildid来关联性能数据与elf文件5 buildid-list 列出数据文件中记录的所有buildid6 diff 对比两个数据文件的差异,能够给出每个符号(即函数)在热点分析上的具体差异7 evlist 列出数据文件perf.data中所有性能事件8 inject 该工具读取perf record工具记录的事件流,并将其定向到标准输出,在被分析代码中的任何一点,都可以向事件流中注入其他事件9 kmem 针对内核内存(slab)子系统进行追踪测量的工具10 kvm 用来追踪测试运行在kvm虚拟机上的guest OS11 list 列出当前系统支持的所有性能事件,包括硬件性能事件、软件性能事件,以及检查点12 lock 分析内核中的锁信息,包括锁的竞争情况、等待延迟等13 mem 内存存取情况14 record 收集采样信息,并将其记录在数据文件中,随后可通过其他工具对数据文件进行分析15 report 读取perf record创建的数据文件,并给出热点分析结果16 sched 针对调度器子系统的分析工具17 script 执行perf或python编写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等18 stat 执行某个命令,收集特定进程的性能概况,包括CPI、cache不命中率等19 test perf对当前软硬件平台进行健全性测试,可用此工具测试当前的软硬件平台是否能支持perf的所有功能20 timechart 针对测试期间系统行为进行可视化的工具21 top 类似linux中的top命令,对系统性能进行实时分析22 trace 关于syscall的工具23 probe 用于定义动态检查点
2.2 常用指令
perf list
指令格式
perf list [options] [event_category]
参数
--no-desc : 仅列出事件名称,不显示描述信息
--debug : 显示调试信息,如事件解析过程
--details : 显示事件的详细元数据(如PMU配置)
-j : json格式输出列表
-v : 显示冗余信息,如事件来源
perf中事件分类
- 硬件事件 Hardware Events:由cpu性能监控单元(PMU)直接提供的底层硬件事件
- cycles :cpu时钟周期数
- instructions :执行的指令数
- cache-misses:缓存失效次数
- branch-misses:分支预测失败次数
- 软件事件Software Events:由内核通过软件模拟的事件
- cpu-clock:cpu时钟时间
- task-clock:任务占用cpu时间
- context-switches:上下文切换次数
- page-faults:缺页异常次数
- 内核PMU事件 Kernel PMU Events:特定于内核性能监控单元的事件,通常和cpu微架构有关
- ref-cycles:不受频率调整影响的参考周期数(用于稳定性测试)
- stalled-cycles-frontend:前端流水线停滞周期数
- 跟踪点事件Tracepoint Events:静态内核跟踪点(static tracepoints),用于监控内核行为
- 格式为
tracepoint:<子系统>/<事件名>
,例如:- sched:sched_switch:进程切换事件
- block:block_rq_issue:块设备I/O请求事件
- sched:sched_switch:进程切换事件
- 格式为
- 动态探针事件 Dynamic Tracing:通过perf probe动态插入的探针事件
- 格式为
probe:<函数名>
或probe:<模块>:<函数名>
,例如:- probe:vfs_read:监控虚拟文件系统的vfs_read函数
- probe:libc:malloc:监控libc库的malloc函数
- 格式为
- 用户空间事件 User Events:用户程序通过pref_event_open接口注册的自定义事件(需代码集成)
- 其他事件
- Breakpoint Events:硬件断点事件,如内存访问断点
- Power Events:电源管理相关事件,如power、energy-cores
使用示例
perf list # 列出所有事件# 按类别过滤事件
perf list hw # 仅列出硬件事件
perf list sw # 仅列出软件的事件
perf list tracepoint # 仅列出跟踪点事件
perf list pmu # 列出pmu事件
perf list probe # 列出动态探针事件# 搜索特定事件
perf list 'sched:*' # 列出调度子系统所有跟踪点事件
perf list 'blokc:*' # 列出块设备相关事件
perf list 'mem:*' # 列出内存相关事件
perf list 'cache-misses' # 搜索包含'cache-misses'的事件
perf stat
指令格式
perf stat 可以查看程序的运行情况,执行该命令时收集性能统计信息.
命令结构:
perf stat [options] <command> # 监控指定指令的执行过程
perf stat [options] -p <pid> # 监控指定进程
perf stat [options] -a # 全局监控所有CPU
perf stat [options] -- <command> # 避免参数冲突时使用“--”分隔
参数
# ---------- 基础控制参数 ---------
-e <event> : 指定监控的事件,多个事件采用逗号分隔
-a : 监控所有CPU核心
-p <pid> : 监控指定进程的实时事件
-C <cpu-list> : 监控指定cpu,示例:-C 0,2 监控cpu0和2
-r <n> : 重复运行命令n次并计算平均值
-o <file> : 将结果保存到文件
--interval-print <ms> : 每隔ms毫秒就输出一次统计# ----------- 事件分组 -------------
-G <group> : 将事件分组统计。例如-G cache,统计所有缓存事件
--per-core : 按cpu核心分组显示结果
--per-socket : 按cpu插槽(物理cpu)分组显示结果# ---------- 输出控制 -------------
-d : 显示详细事件,包括L1/L2/L3缓存、TLB等
-B : 以更紧凑的格式输出(适合脚本解析)
--verbose : 显示调试信息,比如事件解析细节
--no-aggr : 不聚合所有cpu的统计,按核心单独显示
--pre <cmd> : 在监控前执行指定命令,如初始化环境
--post <cmd> : 在监控后执行执行命令,如清理环境# ---------- 高级统计 ----------------
--metric-only : 仅显示指标, 如IPC、缓存命中率等
--pre-thread : 按线程统计事件,需要指定-p <pid>
--scale : 自动缩放数值单位,K/M/G
--timeout <ms> : 监控超时时间,单位ms
关于事件定义:
# 事件语法
-e <event>[:modifiers] # 事件名 + 可选修饰符# 事件类型
硬件事件:cycles,cache-misses等
软件事件:cpu-clock,page-faults等
内核PMU事件:ref-cycles
自定义事件:perf list查看所有支持的事件# 修饰符
u : 仅监控用户空间事件
k : 仅监控内核空间事件
h : 仅监控Hypervisor事件
G : 全局事件(跨进程共享)
H : 主机端事件(虚拟化环境)# 示例:
perf stat -e cycles,instructions,cache-misses:u ./result.out # 监控用户空间的缓存失效
perf top
指令格式
perf top [options]
参数
# ------ 基础控制参数 -------
-e <event> # 指定监控的事件,默认为cycles
-p <pid> # 监控指定进程
-C <cpu-list> # 监控指定cpu
-K # 隐藏内核空间符号(仅显示用户空间函数)
-U # 隐藏用户空间符合,仅显示内核空间函数
--no-children # 不显示子函数调用占比
--call-graph <type> # 设置调用图类型(fp:帧指针;dwarf:调试信息;lbr:硬件记录)
-F <频率> # 设置采样频率;例如 -F 100表示每秒采样100次
-g # 记录调用链(生成火焰图时常用)# -------- 输出控制 -----------
-d <s> # 界面刷新间隔,默认2s
-n # 显示样本数量,不是百分比
--stdio # 非交互模式,直接输出到终端
--sort <字段> # 按照字段排序,例如symbol、overhead
--fields <字段> # 自定义显示字段,例如symbol、overhead
--percent-limit <数值> # 仅显示占比超过指定百分比的事件,例如 --percent-limit 0.5# -------- 高级分析 -----------
--branch-history # 显示历史分支(需要CPU支持LBR)
--demangle-kernel # 解析内核符号名称,显示可读函数名
--objdump <path> # 指定反汇编工具路径(用于汇编代码分析)
交互式界面操作
在perf top的实时界面中,支持以下快捷键:
h : 显示帮助菜单
q : 退出
Enter : 选中符号,查看其调用链详情
E : 展开所有调用链
C : 折叠所有调用链
+/- : 调整符号显示的百分比阈值
k : 显示内核符号
u : 显示用户空间符号
z : 高亮当前选中的符号
使用示例
perf top -p <pid> # 按照pid监控指定进程的热点函数
perf top -e cache-missed # 实时显示缓存失效最多的函数
perf top -g --call-graph dwarf # 记录调用链,生成火焰图时使用# 生成火焰图
perf top
回显字段含义说明:
overhead : 事件占比(百分比)
Shared Object : 所属模块,如[kernel],[libc.so.6]
Symbol : 函数或符号名称
Dso : 动态共享对象(模块或程序名)
![[Pasted image 20250420191525.png]]
perf record
指令格式
perf record [options] <command> # 记录命令执行期间的性能数据
perf record [options] -p <pid> # 记录指定进程的性能数据
perf record [options] -a # 全局记录所有cpu的性能数据
参数
# --------- 基础控制参数 ------------
-e <event> # 指定监控的事件
-F <频率> # 设置采样频率
-g # 记录调用链,生成火焰图必备
-p <pid> # 监控指定进程
-a # 全局监控所有cpu
-C <cpu-list> # 监控指定cpu
-o <file> # 输出文件名,默认perf.data
--call-graph <type> # 调用链记录方式:fp/dwarf/lbr# --------- 事件与过滤 -------------
-c <次数> # 每发生n次事件采样一次。替代-F,比如-c 100
--filter <filter> # 事件过滤器,如监控特定地址范围
-b # 启用分支栈采样(需cpu支持)# ----------- 输出与调试 -------------
-v # 显示详细信息
-s # 按线程单独记录样本
-k <时钟> # 指定时钟源,如mono/monotonic_raw
--timestamp # 记录时间戳
--switch-events # 记录上下文切换事件# ----------- 其他 ----------
--pid-map <file> # 指定pid映射文件(容器环境)
--namespaces # 记录命名空间信息
--aux # 启用aux区域跟踪(用于Intel PT)
--tail-synthesize # 在记录结束时合成事件
使用示例
perf record -F 100 ./my_proj # 记录命令my_proj的cycles事件,采样频率为100
perf record -g --call-graph dwarf ./my_proj # 记录调用链,使用dwarf调试信息
perf record -e cache-misses -p 311 # 监控pid为311的进程,采样缓存失效事件
perf record -e instrutions -a # 全局监控所有cpu的指令数事件
perf record -o mydata.data ./my_proj # 将记录保存到mydata.data文件中
perf report
指令格式
perf report [options] # 分析perf.data(默认文件名)
perf report -i <file> # 分析指定文件
参数
# ----------- 输入控制参数 --------------
-i <file> # 指定输入文件,默认是perf.data
--force # 强制读取文件,忽略版本不兼容警告
--kallsyms <path> # 指定内核符号表路径,默认为/proc/kallsyms
--vmlinux <path> # 指定内核调试符号文件,解析内核符号# ------- 输出控制参数 -------------
--stdio # 命令行模式输出(非交互式)
--tui # 启用交互式文本界面(默认)
--gtk # 使用GTK图形界面(需要编译支持)
--header # 显示文件头信息(事件、命令行等)
--sort <字段> # 按字段排序(如pid,comm,dso等)
--fields <字段> # 自定义显示字段(如overhead,symbol)
--percent-limit <数值> # 仅显示占比超过指定百分比的事件# ------=----- 分析模式 ----------------
-g <type> # 生成调用链(graph、callee或none)
--branch-history # 显示分支历史(需记录分支数据)
--objdump <path> # 指定反汇编工具路径(查看汇编代码)
--demangle # 解析C++符号名称
--source # 显示源码与汇编代码(需调试信息)# ------------- 过滤与统计 ----------
-C <cpu> # 仅显示指定cpu的样本
-p <pid> # 仅显示指定进程的样本
-s <字段> # 按字段聚合统计(如symbol或dso)
--filter <规则> # 过滤样本(比如comm="my_program")
交互式界面操作
perf report 的 TUI界面中,支持以下快捷键:
Enter : 展开选中符号的调用链
ESC : 返回上一级调用链
h : 显示帮助菜单
q : 退出
E : 展开所有调用链
C : 折叠所有调用链
+/- : 调整显示的百分比阈值
a : 显示注解(注释热点代码)
d : 过滤当前符号
t : 切换显示模式(百分比/样本数)
/ : 搜索符号或模块名
使用示例
perf report # 默认分析perf.data
perf report --stdio # 非交互式输出(适合脚本处理)
perf report -C 0,1 # 仅显示cpu 0和1的样本
perf report --sort symbol # 按符号名聚合统计
perf report -g graph # 显示函数调用链
perf report --source # 显示源码与汇编代码(需编译时保留调试信息)
perf diff
perf diff用于比较两个或多个perf.data文件的性能分析结果,帮助开发者快速识别优化前后的性能差异。
核心功能:
- 对比性能数据:比较不同运行场景下的事件统计,如cpu周期、缓存命中率等
- 识别热点变化:找出函数或代码路径的性能改进或退化
- 多文件支持:支持同时对比多个数据文件(如基线版本和优化版本)
使用步骤:
- 生成基准数据
perf record -o perf.data.base -- ./my_program_base # 生成基准数据perf.data.base
- 生成对比数据
perf record -o perf.data.optimized -- ./my_program_optimized # 生成优化后的数据perf.data.optimized
- 执行对比
perf diff perf.data.base perf.data.optimized
命令格式
perf diff [options] <file1> <file2> ... # 对比多个文件
perf diff [options] # 对比当前目录的perf.data文件
参数
-b 或 --baseline <file> # 指定基准文件,默认第一个文件为基准
-c 或 --compute <方式> # 差异计算方式:delta/ratio/wdiff,默认为delta
-q 或 --quiet # 仅显示显著差异,隐藏无变化的条目
-m 或 --modules # 按模块(动态库/内核模块)聚合差异
-s 或 --sort <字段> # 按字段排序,如delta/ratio/overhead
--percent-limit <数值> # 仅显示差异超过指定百分比的事件
-C 或 --cpu <cpu> # 仅对比指定cpu的样本
-p 或 --pid <pid> # 仅对比指定进程的样本
使用示例
perf diff -b perf.data.base perf.data.optimized # 指定基准文件
perf diff -s delta perf.data.base perf.data.optimized # 按差异百分比排序
perf diff --percent-limit 5.0 # 仅显示差异超过5%的条目
perf diff perf.data.v1 perf.data.v2 perf.data.v3 # 对比多组数据
输出字段说明
Overhead : 差异的百分比,正值为性能退化,负值为优化
Baseline : 基准文件的样本数或事件计数
Comparison : 对比文件的样本数或事件计数
Delta : 绝对值差异(对比文件 - 基准文件)
Symbol : 函数或符号名称
perf script
perf script的核心功能:
- 数据导出:将perf.data中的性能数据(如采样事件、调用链、时间戳等)转换为可读文本;
- 灵活过滤:按进程、CPU、时间范围等条件筛选数据;
- 自定义输出:指定输出的字段格式(如csv、json),方便后续处理
- 脚本扩展:结合perl或python脚本实现自动化分析
指令格式
perf script [options] # 默认读取perf.data
perf script -i <file> # 指定输入文件
参数
-i <file> # 指定输入文件
-F <字段> # 自定义输出字段(如time、event等)
-S <脚本> # 使用perl或python脚本解析数据
-f <格式> # 指定输出格式
--ns # 显示纳秒级时间戳
-C <cpu> # 仅显示指定cpu的样本
-p <pid> # 仅显示指定进程的样本
--time <start, end> # 按时间范围过滤样本(单位为秒)
-k <vmlinux> # 指定内核符号文件
-g # 显示调用链
--demangle # 解析C++符号名
--header # 显示文件头信息(事件类型、命令行等)
使用示例
perf script > output.txt # 导出所有数据为文本
perf script flamegraph.pl > flame.svg # 生成火焰图数据
perf script -g # 显示每个样本的完整调用链
输出字段说明
COMM : 进程名
PID : 进程id
TID : 线程id
TIME : 时间戳s
EVENT : 事件类型,如cycles
IP : 指令指针地址
SYM : 符号(函数名)
DSO : 动态共享对象(模块或程序名)
3. 火焰图
火焰图是一种用户可视化程序性能分析数据的工具。它的核心原理是通过采样捕获程序运行时的函数调用栈,并将这些调用栈按层级聚合,最终以直观的图形展示cpu时间的分布。
3.1 火焰图生成原理
- 采样
- perf以固定频率中断程序运行,记录当前的函数调用栈;
- 每个样本包含从底层函数到当前执行点(如某个具体函数)的完整调用链
- 聚合与折叠
- 将大量样本按调用栈的层级结构合并统计,相同的调用路径会合并为一个条目;
- e.g. 函数A调用函数B,函数B调用函数C,则这个三个函数的调用链会被合并统计
- 可视化
- 将聚合后的数据转换为svg图像,每个矩形代表一个函数:
- 宽度:表示该函数在采样中的出现频率,即cpu时间占比;
- 层级:火焰图的层级结构
- 将聚合后的数据转换为svg图像,每个矩形代表一个函数:
3.2 生成火焰图步骤
1. 安装依赖工具
克隆FlameGraph工具库:
git clone https://github.com/brendangregg/FlameGraph.git
2. 使用perf record记录性能数据
注意要加-g参数:
perf record -F 99 -g -- <command> #
# 示例
perf record -F 99 -a -g -- sleep 30 # 监控所有cpu的cycles事件30s
3. 导出数据为文本格式
将perf.data转换为可处理的文本;
perf script > output.perf
4. 生成火焰图
使用flamegraph工具链处理数据:
# 折叠调用栈(统计相同路径)
stackcollapse-perf.pl < output.perf > output.folded
# 生成svg火焰图
flamegraph.pl output.folded > flamegraph.svg# 命令简化,一步完成
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg
参考内容
- Linux 性能分析工具perf使用 - -零 - 博客园
- 从小白到精通:揭秘perf工具的全部功能与操作技巧-CSDN博客
相关文章:
【perf】perf工具的使用生成火焰图
文章目录 1. What is perf?2. perf使用2.1 perf的子工具集2.2 常用指令perf list指令格式参数perf中事件分类使用示例 perf stat指令格式参数 perf top指令格式参数交互式界面操作使用示例 perf record指令格式参数使用示例 perf report指令格式参数交互式界面操作使用示例 pe…...
Sentinel源码—6.熔断降级和数据统计的实现一
大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 1.DegradeSlot实现熔断降级的原理与源码 (1)熔断降级规则DegradeRule的配置Demo (2)注册熔断降级监听器和加载熔断降级规则 (3)DegradeSlot根据熔断降级规则对请求进行验证 (1)熔断降级…...
C语言自增自减题目
一、题目引入 二、运行结果 三、题目分析 这一题中 i的初始值是2 所以执行case2中的命令i-- 表达式的值此时是2 i--完了之后i最后的值是1 由于是switch没有break 就会往下贯穿 直到遇到break为止 case3里面 i 表达式的值是2 i完了之后i的值也是2 综上所述 i的值最终的值是…...
paddleocr出现: [WinError 127] 找不到指定的程序解决办法
paddleocr是一个由百度开发开源的OCR(光学字符识别)工具库。它支持多种语言的文本识别,包括中文、英文、日文等,并具备高效的文本检测和识别能力。paddleocr基于PaddlePaddle深度学习框架开发,提供了丰富的预处理、模型…...
c++STL——list的使用和模拟实现
文章目录 list的使用和模拟实现使用部分list的结构声名默认成员函数initializer_list容量和访问操作修改操作其他接口list的迭代器迭代器的种类 list的模拟实现明确基本结构预处理函数迭代器部分(重点)思路进一步考虑最终代码operator->的重载总结 begin和end访问接口修改操…...
交换机端口安全
端口安全 端口安全(PortSecurity)通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC、安全静态MAC和Sticky MAC),阻止非法用户通过本接口和交换机通信,从而增强设备的安全性。 1、安全mac地址分类 安全动态MAC地址…...
【Oracle专栏】Oracle中的虚拟列
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 在EXP方式导出时,发现 出现如下提示 EXP-00107: virtual column 不支持,因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…...
shell 正则表达式与文本处理器
目录 前言 一、正则表达式 (一)定义与用途 (二)基础正则表达式 (三)基础正则表达式元字符 (四)扩展正则表达式 二、文本处理器:Shell 编程的得力助手 ࿰…...
ZYNQ笔记(九):定时器中断
版本:Vivado2020.2(Vitis) 任务:使用定时器 (私有定时器) 中断 实现 LED(PS端) 定时1s亮灭翻转 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 Zynq系列是Xilinx(现为AMD)推出的集成了AR…...
idea中运行groovy程序报错
我的项目是使用的 gradle 构建的。 在 idea 中运行Groovy的面向对象程序报错如下: Execution failed for task :Person.main(). > Process command G:/Program Files/jdk-17/jdk-17.0.12/bin/java.exe finished with non-zero exit value 1* Try: Run with --s…...
具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解
联合嵌入预测架构(JEPAs)详解 联合嵌入预测架构(JEPAs)详解一、核心思想二、技术原理1. 核心组件2. 训练目标 三、与传统方法的对比四、具体实例例1:视频预测(如Meta的I-JEPA)例2:多…...
linux 搭建 dvwa 渗透测试环境
linux 安装 dvwa 1、分为4个部分,搭建dvwa渗透测试环境2、安装centos 7.63、安装apache http server4、安装mysql5、安装php6、运行dvwa 1、分为4个部分,搭建dvwa渗透测试环境 本文基于centos 7.6 搭建 dvwa 渗透测试环境 安装一个linux系统安装apache…...
C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)
C项目 —— 基于多设计模式下的同步&异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计) 异步线程什么是异步线程?C 异步线程简单例子代码解释程序输出关键点总结扩展:使…...
【Linux学习笔记】Linux的环境变量和命令行参数
【Linux学习笔记】Linux的环境变量和命令行参数 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】Linux的环境变量和命令行参数前言一.环境变量1.1基本概念1.2常见环境变量1.3和环境变量相关的命令1…...
排序算法-快速排序
描述: 基准值选择:选取数组的最后一个元素 arr[high] 作为基准值 p。初始化索引:i 初始化为 low - 1,其作用是指向比基准值小的最后一个元素的索引。遍历数组:借助 for 循环从 low 到 high - 1 遍历数组。若当前元素 …...
软考高级系统架构设计师-第16章 数学与经济管理
【本章学习建议】 根据考试大纲,本章主要考查系统架构设计师单选题,预计考2分左右。主要是运筹学的计算问题,范围广、难度大,超纲题较多,不用深究。 16.1 线性规划 线性规划是研究在有限的资源条件下,如果…...
爱在冰川-慢就是快
【游资大佬の搞钱心法🔥|小白逆袭必看冰川语录真实案例‼️】 💡刚扒完爱在冰川的万字访谈 发现游资搞钱真的靠"反人性思维" 总结6条狠人法则真实案例 建议收藏反复背诵👇 1️⃣【周期为王】💫 "行情…...
Mac-VScode-C++环境配置
mac上自带了clang所以不是必须下载Homebrew 下面是配置文件(注释记得删一下) package.json {"name": "git-base","displayName": "%displayName%","description": "%description%",&quo…...
【JAVA EE初阶】多线程(1)
这样的代码,虽然也能打印hello thread,但是没有创建新的线程,而是直接在main方法所在的主线程中执行了run的逻辑 start方法,是调用系统api,真正在操作系统内部创建一个线程。这个新的线程会以run作为入口方法ÿ…...
PHP伪协议读取文件
借鉴php伪协议实现命令执行,任意文件读取_ctf php文件读取-CSDN博客 总结 在ctf中常用的有data:// , php://input , php://filter ,file:// php://input ,data://用来执行命令 1.php://input 的用法 http://127.0.0.1/include.php?filephp://input [P…...
动态调整映射关系的一致性哈希负载均衡算法详解
一、核心原理与设计要点 双重映射结构 一致性哈希负载均衡通过 哈希环 和 槽动态分配 实现双重映射关系: • 哈希环构建:将节点(物理或虚拟)和数据键(Key)通过哈希函数(如MD5、CRC32)…...
控制反转(IOC)和依赖注入(DI)
Target Retention Documented 元注解 Component 将类交给IOC容器管理,成为IOC容器中的bean Autowired 注入运行时所需要依赖的对象 因为Mabatis DAO层注解Reponsitory 基本不用了,现在Mapper层Mapper注解,这里的Mapper层相当于原来的DAO层…...
【每日八股】复习 MySQL Day1:事务
文章目录 复习 MySQL Day1:事务MySQL 事务的四大特性?并发事务会出现什么问题?MySQL 事务的隔离级别?不同事务隔离级别下会发生什么问题?MVCC 的实现原理?核心数据结构版本链构建示例可见性判断算法MVCC 可…...
【数据结构和算法】1. 数据结构和算法简介、二分搜索
本文根据 数据结构和算法入门 视频记录 文章目录 1. 数据结构和算法简介1.1 什么是数据结构?什么是算法?1.2 数据结构和算法之间的关系1.3 “数据结构和算法”有那么重要吗? 2. 二分搜索(Binary Search)2.1 算法概念2…...
4月19日记(补)算了和周日一块写了 4月20日日记
周六啊 昨天晚上又玩的太嗨了。睡觉的时候有点晚了,眼睛疼就没写日记。现在补上 实际上现在是20号晚上八点半了。理论上来说应该写今天的日记。 周六上午打比赛啦,和研究生,输了,我是替补没上场。没关系再练一练明天就可以变强…...
面试常用基础算法
目录 快速排序归并排序堆排序 n n n皇后问题最大和子数组爬楼梯中心扩展法求最长回文子序列分割回文串动态规划求最长回文子序列最长回文子串单调栈双指针算法修改 分割回文串滑动窗口栈 快速排序 #include <iostream> #include <algorithm>using namespace std;…...
微服务与 SOA:架构异同全解析与应用指南
微服务和 SOA(面向服务的架构)是两种不同的软件架构风格,它们在很多方面存在相似之处,但也有一些区别。以下是对它们的详细介绍: 一、概念 1.微服务 微服务架构将一个大型应用程序拆分成多个小型、独立的服务&#…...
Dijkstra 算法入门笔记 (适用于算法竞赛初学者) - C++ 代码版
目录 算法是做什么的?核心思想:贪就完事了!算法前提:不能有负权边!需要哪些工具?(数据结构)算法具体步骤关键操作:松弛 (Relaxation)两种实现方式 (C 代码) 朴素版 Dijkstra (O(V^2))堆优化版 …...
脑影像分析软件推荐| GraphVar介绍
目录 1.软件界面 2.工具包功能简介 3.软件安装注意事项 1.软件界面 2.工具包功能简介 GraphVar是一个用户友好的 MATLAB 工具箱,用于对功能性大脑连接进行全面的图形分析。这里我们介绍了该工具箱的全面扩展,使用户能够无缝探索跨功能连接测量的可轻…...
如何优雅地实现全局唯一?深入理解单例模式
如何优雅地实现全局唯一?深入理解单例模式 一、什么是单例模式? 单例模式是一种创建型设计模式,旨在确保一个类只有一个实例,并为该实例提供全局访问点,从而避免全局变量的命名污染,并支持延迟初始化Wiki…...
【Flutter】使用LiveKit和Flutter构建实时视频聊天应用
引言 在当今快速发展的数字世界中,实时视频通信已成为许多应用程序的核心功能。无论是远程工作、在线教育还是社交网络,高质量的实时视频功能都至关重要。LiveKit作为一个开源的WebRTC解决方案,提供了构建可扩展实时音视频应用所需的一切工具…...
Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?
🌱《Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?》 在 Jetpack Compose 的世界里,UI 是响应式的。这意味着当状态发生变化时,UI 会自动重组࿰…...
QT6 源(37):界面组件的总基类 QWidget 的源码阅读(下,c++ 代码部分)
(1) QT 在 c 的基础上增加了自己的编译器,以支持元对象系统和 UI 界面设计,有 MOC 、 UIC 等 QT 自己的编译器。本节的源代码里,为了减少篇幅,易于阅读,去除了上篇中的属性部分, 上篇…...
进程与线程:01 CPU管理的直观想法
多进程图像与操作系统核心 好从今天开始,我们就要开始学习操作系统,最核心的图像是多进程图像。前面我们讲过,多进程图像对操作系统来说非常重要,它是操作系统的核心图像。明白了它以后,对于理解操作系统的一大部分内…...
19. git reflog
基本概述 git reflog 的作用是:查看本地仓库的引用日志(reference log),例如分支、HEAD等。它可以帮助你找回误删的提交、恢复被覆盖的分支,或回溯操作历史。 基本用法 1.查看完整的reflog git reflog这会显示所有…...
C语言 —— 铭纹织构未诞之镜 - 预处理详解
目录 1. 什么是预处理(预编译) 编辑 2. 预定义符号 3. #define 定义常量 4. #define定义宏 5. 带副作用的宏参数 6. 宏替换的规则 7. 宏和函数的对比 8. #和## 8.1 #运算符 8.2 ## 运算符 9. #undef 10. 条件编译 1. 什么是预处理…...
Linux 文件系统目录结构详解
Linux 文件系统目录结构详解 Linux 文件系统遵循 Filesystem Hierarchy Standard (FHS) 标准,定义了各个目录的用途和文件存放规则。无论是开发者、运维工程师还是普通用户,理解这些目录的作用都至关重要。本文将全面解析 Linux 的目录结构,…...
2025-4-19 情绪周期视角复盘(mini)
我本以为市场进化规律下产生龙头战法的末法时代导致情绪周期逐步混乱或者说混沌期漫长。所谓的市场进化无非也是量化的发展和各类资金逐步量化化的充分博弈下的结果。通过逐步向上思考发现,不仅仅我们的市场是处于一个存量的时代背景,重要的是我们的思维…...
-实用类-
1. API是什么 2.什么是枚举 !有点类似封装! 2.包装类 注意: 1.Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false 2.当包装类构造方法参…...
Unity3D仿星露谷物语开发36之锄地动画2
1、目标 当角色锄地之后,地面会显示开垦后的样貌。 2、思路 上一篇中,虽然角色dig了hoe,同时grid属性也改变了,但是没有任何可视化的反馈。我们现在将添加新的功能,动态地将"dug ground"瓷砖添加到"…...
【备考高项】模拟预测题(一)案例分析及答案详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题 1】(10分)【问题 2】(5分)【问题 3】(4分)【问题 4】(6分)试题二【问题 1】(12分)【问题 2】(3分)【问题 3】(6分)【问题 4】(4分)试题三【问题 1】(4分)【问题 2】(10分)【问题 3】…...
7、sentinel
控制台访问地址:http://localhost:8080/ 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>配置文件 spring:cloud:sentinel:transpo…...
状态管理最佳实践:Provider使用技巧与源码分析
状态管理最佳实践:Provider使用技巧与源码分析 前言 Provider是Flutter官方推荐的状态管理解决方案,它简单易用且功能强大。本文将从实战角度深入讲解Provider的使用技巧和源码实现原理,帮助你更好地在项目中应用Provider进行状态管理。 基…...
INFINI Console 系统集群状态异常修复方案
背景介绍 运行 INFINI Console 1.29.0 和 1.29.1 版本 的用户在 新初始化 平台后可能会遇到一个特定问题。如果后台的系统 Easysearch/Elasticsearch 集群(存储 Console 元数据的集群,通常名为 .infini_cluster 或类似名称)包含超过一个节点…...
Spring Boot自动装配原理(源码详细剖析!)
什么是Spring Boot的自动装配? 自动装配是Spring Boot的核心功能,它能够根据应用程序的依赖和配置自动配置Spring。这意味着我们只需要添加大量的依赖,Spring Boot就能自动完成配置,减少了人工配置的工作量。 自动装配的核心注…...
大数据驱动的高效能量管理:智能优化与实践探索
大数据驱动的高效能量管理:智能优化与实践探索 在全球能源需求不断增长的背景下,如何提高能源利用效率成为各行业关注的焦点。传统的能源管理方式往往依赖固定规则和人工监测,难以适应复杂多变的应用场景。而大数据技术的兴起,为能量管理提供了新的解决方案——通过数据驱…...
《银行数字化风控-业务于实战》读后知识总结
引言 在金融科技高速发展的今天,银行的风控体系正经历从“人工经验驱动”向“数据智能驱动”的深刻变革。《银行数字化风控-业务于实战》一书以实战为导向,系统性地剖析了数字化风控的核心逻辑、技术实现路径及业务落地方法论。作为深耕风控领域多年的从…...
初级达梦dba的技能水准
在x86环境(windows、linux)安装单机软件,安装客户端创建过至少20套数据库,优化参数并更新过正式许可会用逻辑导出导入以及dmrman备份了解manager工具的使用配置sqllog日志,并能解释输出内容能够分析因磁盘空间不足、内…...
C++初阶-类和对象(中)
目录 1.类的默认成员函数 2.构造函数(难度较高) 编辑 编辑 编辑 3.析构函数 4.拷贝构造函数 5.赋值运算符重载 5.1运算符重载 5.2赋值运算符重载 6.取地址运算符重载 6.1const成员函数 6.2取地址运算符重载 7.总结 1.类的默认成员函数…...
Linux网络UDP与TCP
基础知识 传输层 负责数据能够从发送端传输接收端。 端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在 TCP/IP 协议中, 用 “源 IP”, “源端口号”, “目的 IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过 netstat -n 查看); 端口号范…...