进程和内存管理
目录
一.进程的基本信息
1.1进程的定义
1.2进程的特征
1.3进程的组成
1.4线程产生的背景
1.5线程的定义
1.6进程与线程的区别
1.7进程的类别
1.8进程的优先级
1.8.1进程优先级的概念
1.8.2PRI和NI
1.9僵尸进程
1.9.1僵尸进程的定义
1.9.2僵尸进程产生的原因
1.9.3如何解决僵尸进程
二.查看进程
2.1静态查看进程信息 ps命令
2.1.1ps aux
2.1.2ps -le
2.1.3ps -l
2.1.4ps -ef
2.1.4 -o的使用
2.1.5 [选项]--sort的使用
2.2动态查看进程信息 top命令
2.2.1top命令显示的界面的组成
2.2.2top命令的选项
2.2.3top命令的交互界面
2.3 以树状结构显示当前系统中运行的进程 pstree
2.4 查看指定的进程信息
2.4.1根据PID查程序名 prtstat
2.4.2根据程序名查PID pgrep和pidof
2.5 监控系统资源 vmstat
1. Procs(进程)
2. Memory
3. Swap(交换分区)
4. I/O(磁盘)
5. System(系统)
6. CPU
三:进程的前后台调度
3.1区别
3.2前台和后台程序的切换
四:结束进程
4.1kill
4.2killall
五.计划管理工具
5.1计划管理工具的定义
5.2at命令
5.2.1定义
5.2.2格式
5.2.3例子
5.3crontab工具
5.3.1定义
5.3.2格式
六.怎么查看操作系统的五大性能
一.进程的基本信息
1.1进程的定义
运行中的程序的一个副本,是被载入内存的指令集合,是资源分配的单位。
1.2进程的特征
动态性:进程是程序的一次动态执行过程,具有生命周期(创建、运行、终止)。
并发性:任何进程都可以同其他进程一起并发执行。
独立性:进程是系统进行资源分配和调度的一个独立单位。
结构性:由程序、数据集合和进程控制块(PCB)三部分组成。
1.3进程的组成
- 程序:用于描述进程要完成的功能,是控制进程执行的指令集。
- 数据集合:是程序在执行时所需要的数据和工作区。
- 程序控制块(Program Control Block,简称PCB):包含进程的描述信息和控制信息,是进程 存在的唯一标志。
1.4线程产生的背景
早期操作系统中,进程是资源分配和调度的最小单位。但随着应用复杂度提升,进程切换的开销(如内存隔离、上下文保存)成为性能瓶颈,因此引入了更轻量的线程概念。
1.5线程的定义
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间。
1.6进程与线程的区别
-
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位
-
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
-
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间
-
进程只接收任务, 不处理任务,线程才是干活的那个

题目
如何确定一个程序 是多线程 还是 单线程?
grep -i threads /proc/[PID]/status # 查看指定进程的线程数
prtstat [PID] # 显示进程详细信息
1.7进程的类别
-
守护进程:完全脱离终端;独立于用户会话运行,系统重启或显式终止才会结束。
-
前台进程: 直接与用户终端(如命令行界面)绑定,接收用户输入并实时输出结果;生命周期与终端会话绑定,终端关闭时进程会被终止;与守护进程相比,前台进程可能被系统分配更高优先级以保证响应速度。
1.8进程的优先级
1.8.1进程优先级的概念
进程优先级是操作系统调度资源的依据,决定了进程获取CPU时间的顺序。优先级越高,进程越容易被调度执行。
1.8.2PRI和NI
在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice
-
PRI(Priority):直接表示进程优先级,数值越小优先级越高。
-
NI(Nice):调整PRI的修正值,范围通常为−20到19。通过
nice值可间接影响优先级,例如:PRI新值=PRI原值+NI值
NI值为负时提高优先级,为正时降低优先级。
ps axo pid,comm,ni //查看[root@centos8 ~]#nice -n -10 ping 127.0.0.1//将进程的 nice值 设为 −10[root@centos7 ~]#renice -n -20 2118//将进程的nice值调整为 -20//注意:普通用户只能调高 NI 值,而不能降低,只有 root 用户才能设定进程 NI 值为负值
1.9僵尸进程
1.9.1僵尸进程的定义
僵尸进程是指 已经终止运行(Exit),但其退出状态(Exit Status)尚未被父进程(Parent Process)回收 的进程。在 Linux/Unix 系统中,僵尸进程仍然占用一个 进程表项(Process Table Entry)。
1.9.2僵尸进程产生的原因
僵尸进程的产生主要有 两个根本原因,都与 父进程未能正确处理子进程的退出状态 有关
-
子进程终止后,父进程没有调用
wait()或waitpid()来读取子进程的退出状态 -
父进程异常终止,未正确移交子进程给
init
1.9.3如何解决僵尸进程
[root@centos7 ~]#bash //进入子 Shell[root@centos7 ~]#echo $BASHPID //打印当前Bash shell的进程ID(这里是1809)
1809
[root@centos7 ~]#echo $PPID //打印其父进程ID(这里是1436)
1436
#将父进程设为停止态
[root@centos7 ~]#kill -19 1436 //杀死子进程,使其进入僵尸态[root@centos7 ~]#kill -9 1809 //向当前shell(1809)发送SIGKILL信号(9),强制终止当前shell[root@centos7 ~]#ps aux //查看进程状态,检查是否有僵尸进程,STAT为Z,表示为僵尸态[root@centos7 ~]#kill -18 1436 //若是父进程未调用 wait()而产生的僵尸进程,则向父进程(1436)发 送SIGCONT信号(18),恢复被暂停的父进程[root@centos7 ~]#kill -9 1436 //若父进程异常终止未传递子进程,则向父进程(1436)发送SIGKILL 信号(9),强制终止父进程[root@centos7 ~]#ps aux //再次观察,可以发现僵尸态的进程不存在了
二.查看进程
2.1静态查看进程信息 ps命令
ps 即 process state,是用于查看当前运行的进程信息的命令。
格式:ps [选项]
| 选项 | 功能 |
| -a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。 |
| -u | 使用以用户为主的格式输出进程信息。 |
| -x | 显示当前用户在所有终端下的进程信息。 |
| -e | 显示系统内的所有进程信息。 |
| -l | 使用长(Long)格式显示进程信息。 |
| -f | 使用完整的(Full)格式显示进程信 |
| [选项]--sort | 对属性排序,属性前加 - 表示倒序 |
| -o | 用于 自定义输出,允许你只显示特定的进程信息字段 |

2.1.1ps aux
显示系统中所有用户的进程
了解
TTYtty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端)
tty1~tty6 是本地的字符界面终端
tty7 是图形终端
pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个
远程连接占用 pts/1,?代表和终端无关
STAT 组合状态示例
状态码 解释
Ss 会话领导者(如 bash),处于可中断睡眠状态。
Rl 多线程进程(如 java),正在运行或可运行。
D< 高优先级的不可中断睡眠进程(如内核磁盘 I/O 操作)。
S+ 前台进程(如 vim),处于可中断睡眠状态。
Z 僵尸进程(需父进程调用 wait() 回收资源)。
2.1.2ps -le
可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级
了解:
F 值 | 含义 |
|---|---|
0 | 普通进程,无特殊标志。 |
1 | 进程刚被 fork() 但尚未执行新程序(如 bash 启动的子进程)。 |
4 | 进程以 root 权限运行(如 sudo 启动的进程)。 |
40 | 进程是会话领导者(如 sshd 或终端 shell)。 |
41 | 会话领导者 + 刚 fork()(如 sshd 新创建的会话)。 |
100 | 进程被调试器(如 gdb)附加。 |
2.1.3ps -l
只能看到当前 Shell 产生的进程

2.1.4ps -ef
要注意区分与ps aux的区别

ps -ef 是 UNIX System V 风格 的命令格式,与 BSD 风格(如 ps aux)形成鲜明对比
3. 与 BSD 风格(ps aux)的关键区别
| 对比项 | UNIX 风格(ps -ef) | BSD 风格(ps aux) |
|---|---|---|
| 选项前缀 | 必须加 -(如 -e、-f) | 无 -(直接写 aux) |
| 用户显示 | UID(数字) | USER(用户名) |
| CPU/内存 | 无默认列,需手动指定(如 ps -eo %cpu,%mem) | 默认显示 %CPU 和 %MEM |
| 命令行信息 | CMD(短格式),-f 显示完整命令 | 默认显示完整 COMMAND |
| 进程树 | ps -ejH | ps axjf |
2.1.4 -o的使用
格式;ps -o <字段1>,<字段2>,<字段3>...
例子:

2.1.5 [选项]--sort的使用
作用:用于 按指定字段对进程列表进行排序,帮助快速识别高资源占用的进程或特定状态的进程
ps [选项] --sort=[+|-]字段名+字段名:升序排序(默认,可省略 +)。-字段名:降序排序(如 -%cpu 表示 CPU 占用从高到低)。多字段排序:用逗号分隔(如 --sort=-%cpu,%mem)
例子:


2.2动态查看进程信息 top命令
top是 Linux 系统中一个 实时动态监控系统进程和资源占用 的交互式工具,比 ps 更直观,适合实时观察 CPU、内存、负载等关键指标
2.2.1top命令显示的界面的组成
界面主要分为两部分:
-
系统汇总信息(顶部前5行)
-
系统运行时间、用户数、负载均衡(Load Average)、CPU/内存使用率等。
-
-
进程列表(下方)
-
实时更新的进程状态(默认按 CPU 占用排序)。
-
如下图所示:
系统汇总信息 (顶部前5行)
第一行:系统运行时间与负载
| 内 容 | 说 明 |
|---|---|
| 13:43:55 | 系统当前时间 |
| up 1:57 | 系统的运行时间1小时57分钟 |
| 4 users | 当前登录了四个用户 |
| load average: 0.00,0.00,0.00 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载 |
第二行:任务(进程)状态
| 内 容 | 说 明 |
|---|---|
| Tasks: 216 total | 系统中的进程总数 |
| 1 running | 正在运行的进程数 |
| 215 sleeping | 睡眠的进程数 |
| 0 stopped | 正在停止的进程数 |
| 0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行:CPU使用率
| 字段 | 含义 |
|---|---|
us | 用户空间 CPU 占用(如应用程序运算)。 |
sy | 内核空间 CPU 占用(如系统调用、中断处理)。 |
ni | 低优先级进程(nice值>0)占用的CPU。 |
id | 空闲CPU百分比(越高说明系统负载越轻)。 |
wa | I/O等待(高值说明磁盘或网络瓶颈)。 |
hi/si | 硬件/软件中断占用(通常接近0)。 |
st | 虚拟机偷取时间(若>10%,说明宿主物理机资源不足) |
第四行:物理内存(RAM)
| 字段 | 含义 |
|---|---|
total | 内存总量(单位:MiB)。 |
free | 完全未使用的内存(Linux会充分利用空闲内存缓存数据,此值低未必是问题)。 |
used | 已使用的内存(含应用程序和缓存)。 |
buff/cache | 缓存和缓冲区内存(可被快速释放供应用程序使用)。 |
第五行:交换分区(Swap)
| 字段 | 含义 |
|---|---|
total/free/used | Swap分区总量/剩余/使用量(若used持续>0,说明物理内存不足)。 |
avail Mem | 可用内存估算(含未被占用的缓存,更真实反映剩余可用内存)。 |
进程列表(动态刷新)
字段含义同ps 命令
2.2.2top命令的选项
| 选项 | 作用 | 示例 |
|---|---|---|
-d <秒> | 设置刷新间隔时间(默认3秒)。 | top -d 1(每秒刷新) |
-n <次数> | 刷新指定次数后自动退出(适合脚本捕获数据)。 | top -n 2(刷新2次后退出) |
-b | 批处理模式(禁止交互,直接打印结果)。 | top -b -n 1 > log.txt |
-p <PID> | 仅监控指定PID(多个PID用逗号分隔)。 | top -p 1234,5678 |
-u <用户> | 仅显示指定用户的进程。 | top -u mysql |
-c | 切换显示完整命令行(启动时直接展开)。 | top -c |
2.2.3top命令的交互界面
在 top 运行后,可通过按键动态调整:
| 按键 | 功能 |
|---|---|
m | 按内存使用率排序(升序)。 |
T | 按运行时间排序(降序)。 |
N | 按PID排序(升序)。 |
c | 按照 CPU 的使用率排序,默认就是此选项 |
k | 终止进程(需输入PID,默认发送SIGTERM)。 |
r | 调整进程优先级(需输入PID和新的nice值)。 |
h或者? | 显示帮助菜单。 |
q | 退出 top。 |
2.3 以树状结构显示当前系统中运行的进程 pstree
pstree是 Linux 中用于 以树状结构可视化进程父子关系 的命令,比 ps 更直观地展示进程的层次结构。
pstree //不指定参数:显示整个系统的进程树,以 systemd(或 init)为根节点。pstree [选项] <PID> //指定 PID:显示该进程及其子进程的子树。pstree [选项] <用户名> //指定用户名:仅显示该用户的进程树。常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程
2.4 查看指定的进程信息
2.4.1根据PID查程序名 prtstat
例子:查找PID=10268的进程信息

2.4.2根据程序名查PID pgrep和pidof
| 选项 | 作用 |
|---|---|
-l | 同时输出进程名(否则仅输出 PID)。 |
-u | 按用户名过滤(如 -u root)。 |
-a | 显示完整格式的进程名。 |
-p pid | 显示指定进程的子进程。 |
例子:
[root@test ~]# pgrep -l "log" //显示进程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd[root@localhost ~]#pidof nginx //查看 nginx进程的 pid 号
22142 22002
2.5 监控系统资源 vmstat
vmstat(Virtual Memory Statistics)是 Linux 系统中用于 监控系统资源使用情况 的命令行工具,主要报告 内存、进程、CPU 活动、磁盘 I/O 等关键指标。

1. Procs(进程)
| 字段 | 含义 |
|---|---|
r | 运行队列中的进程数(正在运行或等待 CPU 的进程,若持续 > CPU 核心数,说明 CPU 饱和)。 |
b | 不可中断睡眠的进程数(通常因 I/O 阻塞,如磁盘读写)。 |
2. Memory
| 字段 | 含义 |
|---|---|
swpd | 已使用的 交换分区(Swap) 大小。 |
free | 空闲的物理内存。 |
buff | 用作 缓冲区 的内存(缓存文件元数据)。 |
cache | 用作 页面缓存 的内存(缓存文件内容)。 |
3. Swap(交换分区)
| 字段 | 含义 |
|---|---|
si | 从磁盘换入内存 的数据量(KB/s,高值说明内存不足)。 |
so | 从内存换出到磁盘 的数据量(KB/s,高值说明内存不足)。 |
4. I/O(磁盘)
| 字段 | 含义 |
|---|---|
bi | 从块设备读取 的块数(Blocks/s,如磁盘读操作)。 |
bo | 写入块设备 的块数(Blocks/s,如磁盘写操作)。 |
5. System(系统)
| 字段 | 含义 |
|---|---|
in | 每秒中断次数(包括时钟中断)。 |
cs | 每秒上下文切换次数(进程/线程切换,高值可能因过多线程或锁竞争)。 |
6. CPU
| 字段 | 含义 |
|---|---|
us | 用户空间 CPU 时间(应用程序运算)。 |
sy | 内核空间 CPU 时间(系统调用、中断处理)。 |
id | 空闲 CPU 时间。 |
wa | I/O 等待时间(高值说明磁盘瓶颈)。 |
st | 虚拟机偷取时间(若 >10%,物理机资源不足)。 |
三:进程的前后台调度
3.1区别
| 特性 | 前台进程 | 后台进程 |
|---|---|---|
| 终端控制权 | 占用当前终端,用户无法输入其他命令,直到进程结束。 | 不占用终端,启动后立即返回 Shell,用户可继续操作。 |
| 适用场景 | 需要交互的命令(如 vim、passwd)。 | 长时间运行的任务(如编译、下载),并行运行 |
3.2前台和后台程序的切换
Linux 前后台任务管理
├── **后台启动**
│ └── `命令 + &`(例:`python script.py &`)
├── **查看任务**
│ └── `jobs -l`(显示任务编号与进程ID)
├── **前后台切换**
│ ├── 前台转后台:`Ctrl+Z` → `bg %任务编号`
│ └── 后台转前台:`fg %任务编号`
├── **任务控制**
│ ├── 暂停任务:`Ctrl+Z`
│ └── 恢复后台运行:`bg %任务编号`
└── **终止任务**└── `kill %任务编号` 或 `kill 进程ID`
四:结束进程
4.1kill
kill 命令是 Linux 中用于 向进程发送信号(Signal) 的核心工具,用于终止进程
kill [选项] <PID> // 通过进程ID发送信号常用信号
-1 重新加载进程-9 强制结束进程-19 暂时停止进程
-18 让进程从停止状态恢复
4.2killall
killall 是 Linux 中用于 按进程名批量终止进程 的命令,相比 kill(需指定 PID),它直接通过进程名称操作,更适合批量管理。
命令格式
killall [选项] [信号] 进程名[选项]
-u 仅终止指定用户的进程
-l 列出可用的信号列表
-i 交互式,询问是否要杀死某个进程
-I 忽略进程名的大小写
五.计划管理工具
5.1计划管理工具的定义
计划管理工具是指通过系统化的方法,帮助个人或组织对任务、资源、时间等要素进行规划、协调、监控和优化的软件或平台。其核心目标是通过结构化流程提升效率,确保项目或任务在既定时间、预算和资源约束下达成目标
5.2at命令
5.2.1定义
at命令是 Linux 中用于 在指定时间执行一次性任务 的计划任务工具,适合临时安排未来某个时间点运行的命令或脚本。
5.2.2格式
at [选项] 时间
其中关于时间有绝对时间和相对时间两种计时方式
绝对时间
-
格式 用法 HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 Midnight(midnight) 代表 12:00 AM(也就是 00:00)。 Noon(noon) 代表 12:00 PM(相当于 12:00)。 Teatime(teatime)下午茶 代表 4:00 PM(相当于 16:00)。 英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。 MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
相对时间
now +n minutes-----------从现在起 n 分钟后
now +n hours--------------从现在起 n 小时后
now +n days---------------从现在起 n 天后
now +n weeks-------------从现在起 n 周后
5.2.3例子
at 14:30
at> echo "会议时间到了!" > ~/reminder.txt
at> <按Ctrl+D结束>//这个命令会在下午2:30创建一个提醒文件at now + 5 minutes
at> wall "系统将在5分钟后重启,请保存工作!"
at> <Ctrl+D>//5分钟后执行命令at midnight 12252023
at> /home/user/christmas_script.sh
at> <Ctrl+D>//2023年12月25日午夜执行命令
5.3crontab工具
5.3.1定义
crontab是 Linux/Unix 系统中用于设置 周期性任务 的工具,允许用户在固定时间、日期或间隔自动执行命令或脚本。与 at(单次任务调度)不同,crontab适用于 重复性任务。
5.3.2格式
crontab [选项] 文件名
| 选项 | 说明 |
|---|---|
-e | 编辑当前用户的 crontab 文件 |
-l | 列出当前用户的 crontab 任务 |
-r | 删除当前用户的 crontab 任务(全部删除) |
-i | 删除前提示确认(配合 -r 使用) |
-u user | 管理指定用户的 crontab(需 root 权限) |
crontab -l //查看当前用户的crontabcrontab -e //创建或编辑当前用户的crontab执行此命令后,会打开一个文本编辑器,编辑crontab文件
crontab时间格式
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └───── 星期 (0 - 6, 0=周日)
│ │ │ └────────── 月份 (1 - 12)
│ │ └─────────────── 日 (1 - 31)
│ └──────────────────── 小时 (0 - 23)
└───────────────────────── 分钟 (0 - 59)
特殊符号说明
| 符号 | 含义 | 示例 |
|---|---|---|
* | 任意值(每分钟/每小时等) | * * * * * → 每分钟执行 |
, | 指定多个时间点 | 0,15,30,45 * * * * → 每 15 分钟执行 |
- | 时间范围 | 0 9-18 * * * → 9AM-6PM 每小时执行 |
/ | 间隔时间 | */5 * * * * → 每 5 分钟执行 |
5..3.3例子
# 每天 9AM-6PM,每小时执行一次
0 9-18 * * * /path/to/check_status.sh# 每周一至周五,上午 8:30 执行
30 8 * * 1-5 /path/to/daily_task.sh# 每月 1 号和 15 号,晚上 11:30 执行
30 23 1,15 * * /path/to/monthly_job.sh# 每 10 分钟执行,但仅在工作日(周一到周五)
*/10 * * * 1-5 /path/to/frequent_task.sh
六.怎么查看操作系统的五大性能
1.内存
2.磁盘 磁盘剩余量 磁盘I/O读写性能
3.CPU CPU占用率
4.网络
内存用free;top
磁盘剩余量用df;lsblk;fdisk -l
磁盘读写用iostat;vmstat
CPU用top(实时) ps(静态)
网络 iftop
系统版本cat /etc/redhat-release
ip地址 ifconfig
内核版本 uname-r
相关文章:
进程和内存管理
目录 一.进程的基本信息 1.1进程的定义 1.2进程的特征 1.3进程的组成 1.4线程产生的背景 1.5线程的定义 1.6进程与线程的区别 1.7进程的类别 1.8进程的优先级 1.8.1进程优先级的概念 1.8.2PRI和NI 1.9僵尸进程 1.9.1僵尸进程的定义 1.9.2僵尸进程产生的原因 1.9…...
001 vue
https://cn.vuejs.org/ 文章目录 v-bindv-modelv-on修饰符条件渲染/控制:v-if v-show列表渲染 M:即Model,模型,包括数据和一些基本操作 V:即View,视图,页面渲染结果 VM:即View-Mode…...
css动态设置div宽高,calc函数
在css中使用calc函数 calc() 是 CSS 中的一种函数,用于动态计算长度值。它允许你在 CSS 属性中进行数学运算,结合不同的单位(如 px、%、em 等),从而创建更加灵活和响应式的布局 表达式规则 运算符:支持加…...
MySQL篇(四)事务相关知识详解
MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...
React 项目使用 pdf.js 及 Elasticpdf 教程
摘要:本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署,包括数据的云端同步,示例代码完善且简单,文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…...
性能测试之jmeter的基本使用
简介 Jmeter是Apache的开源项目,基于Java开发,主要用于进行压力测试。 优点:开源免费、支持多协议、轻量级、功能强大 官网:https://jmeter.apache.org/index.html 安装 安装步骤: 下载:进入jmeter的…...
CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发
当图中有大量文字,需要全部显示到一个列表时并缩放到需要的文字时,可采用插件实现,效果如下: 附部分代码如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…...
【Git】“warning: LF will be replaced by CRLF”的解决办法
一、原因分析 不同操作系统的换行符标准不同: • Windows:使用 CRLF(\r\n)表示换行; • Linux/Mac:使用 LF(\n)表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...
vue2(13) 组件注册的学习笔记
文章目录 Vue2 组件注册学习笔记一、组件注册的基本概念二、全局注册三、局部注册四、组件名的命名规范五、在模块系统中注册组件六、基础组件的自动化全局注册七、总结Vue2 组件注册学习笔记 一、组件注册的基本概念 在Vue中,组件是可复用的Vue实例,具有封装的模板和逻辑。…...
【spring Cloud Netflix】OpenFeign组件
1.概述 Feign旨在使编写Java Http客户端变得更容易。前面在使用RibbonRestTemplate进行服务的远程调用 时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由 于对服务的依赖调用可不止一处࿰…...
go游戏后端开发20:房间消息推送处理
创建房间逻辑前的概念梳理及代码实现 在编写创建房间的逻辑之前,我们需要先创建几个关键概念。 第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。 第二个概念是“管理”…...
Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>
首先,用户界面方面。Notepad是开源的,界面看起来比较简洁,可能更适合喜欢轻量级工具的用户。而UltraEdit作为商业软件,界面可能更现代化,功能布局更复杂一些。不过,UltraEdit支持更多的主题和自定义选项&am…...
Linux驱动开发练习案例
1 开发目标 1.1 架构图 操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪; 驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核…...
Windows程序中计时器WM_TIMER消息的使用
本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…...
Apache httpclient okhttp(1)
学习链接 Apache httpclient & okhttp(1) Apache httpclient & okhttp(2) httpcomponents-client github apache httpclient文档 apache httpclient文档详细使用 log4j日志官方文档 【Java基础】- HttpURLConnection…...
微信小程序—路由
关于 app.json 中的配置 app.json 主要是对整个小程序进行一个全局的配置。 pages:在这个配置项目中,就可以配置小程序里面的页面,小程序默认显示 pages 数组中的第一个页面windows:主要配置和导航栏相关的 当然,在…...
人工智能驱动的数据仓库优化:现状、挑战与未来趋势
1. 引言:数据仓库的演进与人工智能驱动优化的兴起 现代数据仓库的复杂性和规模正以前所未有的速度增长,这主要是由于数据量、种类和产生速度的急剧增加所致。传统的数据仓库技术在应对这些现代数据需求方面显得力不从心,这催生了对更先进解决…...
LVS高可用负载均衡
一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...
脑影像分析软件推荐 | JuSpace
目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献: Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…...
集合框架——常用类
集合框架的理解 就是一个常用类 集合主要有三种类型【集合与集合之间可以互转】 List(列表,是接口)Set(集合,是接口)Map(键值对,是接口)Collection是以上及所有集合的根接口,其里面的子类,一部分支持集合有序元素可重复,一部分支持集合无序元素不重复 可重复和不…...
【NLP 面经 7、常见transformer面试题】
目录 1. 为何使用多头注意力机制? 2. Q和K使用不同权重矩阵的原因 3. 选择点乘而非加法的原因 4. Attention进行scaled的原因 5. 对padding做mask操作 6. 多头注意力降维原因 7. Transformer Encoder模块简介 8. 乘以embedding size的开方的意义 9. 位置编码 10. 其…...
分布式事务解决方案全解析:从经典模式到现代实践
前言 在分布式系统中,数据一致性是一个核心问题。随着微服务架构的普及,跨服务、跨数据库的操作变得越来越普遍,如何保证这些操作的原子性、一致性、隔离性和持久性(ACID)成为了一个极具挑战性的任务。本文将全面介绍…...
软件工程面试题(二十七)
1、j a v a 对象初始化顺序 1.类的初始化(initialization class & interface) 2.对象的创建(creation of new class instances) 顺序:应为类的加载肯定是第一步的,所以类的初始化在前。大体的初始化顺序是: 类初始化 -> 子类构造函数 -> 父类构造函数 -&g…...
fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
创建部门或者子部门 import type { NextApiRequest, NextApiResponse } from next; import { NextAPI } from /service/middleware/entry; import { MongoOrgModel } from fastgpt/service/support/permission/org/orgSchema;async function handler(req: NextApiRequest, res…...
C++ 数据竞态检查
-fsanitizethread 编译时,添加参数-fsanitizethread -g,可以运行态检查数据竞态问题,包括: 数据竞态死锁锁、条件变量错误使用 check_tsan 开源库 yalantinglibs有段检查编译器是否支持 fsanitize 编译参数的宏,挺…...
逛好公园的好处
逛公园和软件开发看似是两个不同的活动,但它们之间存在一些有趣的关联和相互促进的关系: 激发创造力:公园中的自然景观、多样的人群以及各种活动能为开发者带来新的灵感和创意。软件开发过程中,从公园中获得的创意可以帮助开发者设…...
C++开发工具全景指南
专业编译与调试工具深度解析 2025年4月 编译器套件 GNU Compiler Collection (GCC) GNU编译器套件是自由软件基金会开发的跨平台编译器系统,支持C、C、Objective-C、Fortran、Ada等多种编程语言。作为Linux系统的标准编译器,GCC以其强大的优化能力和…...
【网络安全】 防火墙技术
防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 一、什么…...
文档的预解析
1. 预解析的核心目标 浏览器在正式解析(Parsing)HTML 前,会启动一个轻量级的 预解析器(Pre-Parser),快速扫描文档内容,实现: 提前发现并加载关键资源(如 CSS、JavaScrip…...
理解“功能内聚”
链接: 理解“偶然内聚” 理解“逻辑内聚” 理解“时间内聚” 理解“过程内聚” 理解“通信内聚” 理解“顺序内聚” 理解“功能内聚” 功能内聚(Functional Cohesion)是最高级别的内聚形式,指的是模块内的所有元素都紧密地围绕着一…...
