进程和内存管理

 

目录

一.进程的基本信息

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进程的组成

  1. 程序:用于描述进程要完成的功能,是控制进程执行的指令集。
  2. 数据集合:是程序在执行时所需要的数据和工作区。
  3. 程序控制块(Program Control Block,简称PCB):包含进程的描述信息和控制信息,是进程                                                                                   存在的唯一标志。

1.4线程产生的背景 

早期操作系统中,进程是资源分配和调度的最小单位。但随着应用复杂度提升,进程切换的开销(如内存隔离、上下文保存)成为性能瓶颈,因此引入了更轻量的线程概念。

1.5线程的定义

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间。

1.6进程与线程的区别 

  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位

  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

  3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间

  4. 进程只接收任务, 不处理任务,线程才是干活的那个

题目

如何确定一个程序  是多线程 还是 单线程?

grep -i threads /proc/[PID]/status  # 查看指定进程的线程数
prtstat [PID]                      # 显示进程详细信息

 1.7进程的类别

  1. 守护进程:完全脱离终端;独立于用户会话运行,系统重启或显式终止才会结束。

  2. 前台进程: 直接与用户终端(如命令行界面)绑定,接收用户输入并实时输出结果;生命周期与终端会话绑定,终端关闭时进程会被终止;与守护进程相比,前台进程可能被系统分配更高优先级以保证响应速度。

1.8进程的优先级 

1.8.1进程优先级的概念

进程优先级是操作系统调度资源的依据,决定了进程获取CPU时间的顺序。优先级越高,进程越容易被调度执行。

1.8.2PRI和NI

在 Linux 系统中,表示进程优先级的有两个参数:Priority Nice

  1. PRI(Priority):直接表示进程优先级,数值越小优先级越高

  2. 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僵尸进程产生的原因

僵尸进程的产生主要有 两个根本原因,都与 父进程未能正确处理子进程的退出状态 有关

  1. 子进程终止后,父进程没有调用 wait() 或 waitpid() 来读取子进程的退出状态

  2.  父进程异常终止,未正确移交子进程给 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 -efBSD 风格(ps aux
选项前缀必须加 -(如 -e-f无 -(直接写 aux
用户显示UID(数字)USER(用户名)
CPU/内存无默认列,需手动指定(如 ps -eo %cpu,%mem默认显示 %CPU 和 %MEM
命令行信息CMD(短格式),-f 显示完整命令默认显示完整 COMMAND
进程树ps -ejHps 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命令显示的界面的组成

界面主要分为两部分

  1. 系统汇总信息(顶部前5行)

    • 系统运行时间、用户数、负载均衡(Load Average)、CPU/内存使用率等。

  2. 进程列表(下方)

    • 实时更新的进程状态(默认按 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百分比(越高说明系统负载越轻)。
waI/O等待(高值说明磁盘或网络瓶颈)。
hi/si硬件/软件中断占用(通常接近0)。
st虚拟机偷取时间(若>10%,说明宿主物理机资源不足)

第四行:物理内存(RAM)

字段含义
total内存总量(单位:MiB)。
free完全未使用的内存(Linux会充分利用空闲内存缓存数据,此值低未必是问题)。
used已使用的内存(含应用程序和缓存)。
buff/cache缓存和缓冲区内存(可被快速释放供应用程序使用)。

第五行:交换分区(Swap)

字段含义
total/free/usedSwap分区总量/剩余/使用量(若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 时间
waI/O 等待时间(高值说明磁盘瓶颈)。
st虚拟机偷取时间(若 >10%,物理机资源不足)。

 三:进程的前后台调度 

 3.1区别

特性前台进程后台进程
终端控制权占用当前终端,用户无法输入其他命令,直到进程结束。不占用终端,启动后立即返回 Shell,用户可继续操作。
适用场景需要交互的命令(如 vimpasswd)。长时间运行的任务(如编译、下载),并行运行

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 

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

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

相关文章

css动态设置div宽高,calc函数

在css中使用calc函数 calc() 是 CSS 中的一种函数&#xff0c;用于动态计算长度值。它允许你在 CSS 属性中进行数学运算&#xff0c;结合不同的单位&#xff08;如 px、%、em 等&#xff09;&#xff0c;从而创建更加灵活和响应式的布局 表达式规则 运算符&#xff1a;支持加…

飞浆PaddlePaddle 猫狗数据大战

猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作&#xff08;python&#xff09; 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…

Spring Boot后端开发全攻略:核心概念与实战指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具

PPT助手&#xff1a;一款集计时、远程控制与多屏切换于一身的PPT辅助工具 &#x1f4dd;&#x1f3a4; 在现代化的演讲和演示中&#xff0c;如何高效地控制PPT进程、保证展示的流畅性与精准性&#xff0c;成为了每个演讲者必须面对的挑战。无论是商务汇报、学术演讲&#xff0…

WEB安全--文件上传漏洞--php伪协议的利用

一、伪协议介绍 1.1、内容 在 PHP 中&#xff0c;伪协议通常指的是一种通过特定的 URL 协议方案实现某些特殊功能或行为的方式。伪协议通常并不是标准的协议&#xff08;如 HTTP、HTTPS&#xff09;&#xff0c;而是由应用程序或开发者自定义的“伪”协议&#xff0c;用于执行…

高级:高并发架构面试题深度解析

一、引言 在现代互联网应用开发中&#xff0c;高并发架构设计是确保系统在高负载下仍能稳定、高效运行的关键。面试官通过相关问题&#xff0c;考察候选人对高并发系统设计的理解、架构模式的掌握以及在实际项目中解决问题的能力。本文将深入剖析高并发系统的设计原则、常见的…

Opencv之dilib库:表情识别

一、简介 在计算机视觉领域&#xff0c;表情识别是一个既有趣又具有挑战性的任务。它在人机交互、情感分析、安防监控等众多领域都有着广泛的应用前景。本文将详细介绍如何使用 Python 中的 OpenCV 库和 Dlib 库来实现一个简单的实时表情识别系统。 二、实现原理 表情识别系统…

【动态规划】线性dp——LIS和LCS

参考文章 子序列 一个序列 A &#xff1d; a 1 , a 2 , … , a n A&#xff1d;a_1,a_2,…,a_n A&#xff1d;a1​,a2​,…,an​ 中任意删除若干项&#xff0c;剩余的序列叫做 A 的一个子序列。也可以认为是从序列 A 按原顺序保留任意若干项得到的序列。&#xff08;例如&…

umi框架开发移动端h5

1、官网&#xff1a;https://umijs.org/ 2、创建出来的项目 yarn create umi yarn start3、推荐目录结构 . ├── config │ └── config.ts ├── public//静态资源 ├── dist ├── mock │ └── app.ts&#xff5c;tsx ├── src │ ├── .umi │ ├── .um…

《Golang高性能网络编程:构建低延迟服务器应用》

在本文中&#xff0c;我们将深入探讨Golang高性能网络编程&#xff0c;帮助您构建低延迟服务器应用。我们将介绍Golang的网络编程特性、优化技巧和实际案例&#xff0c;让您更好地理解和应用Golang在网络编程领域的优势。 高性能网络编程简介 什么是Golang高性能网络编程 高性能…

循环结构- P1217-回文质数-第三十四天

洛谷题单 第三十四天&#xff1a;4.3&#xff08;周四&#xff09; 题目&#xff1a;循环结构–P1217 注意&#xff01;&#xff01;&#xff01;本题的解法在初学阶段足矣&#xff0c;使用埃氏筛即可全部AC&#xff08;高级算法&#xff0c;优化时间复杂度&#xff09;&…

github镜像网站的使用

很多时候我们无法访问github 那么我们可以网上搜索镜像网站 比如 https://blog.csdn.net/eytha/article/details/144797222 这里可以找到一些镜像站 然后直接编辑 c:/user/xxx/.gitconfig 内容如 [user]name xxxxemail xxxxhotmail.com [gui]recentrepo D:/ProjectFolder/t…

论定制开发开源 AI 智能名片 S2B2C 商城小程序源码在零售变革中的角色与价值

摘要&#xff1a;本文深入探讨了新零售中 O2O 模式的特点与局限性&#xff0c;指出其虽有导流作用但难以成为企业转型适应消费大环境的主力做法。强调解决零售根本问题需依靠大零售概念&#xff0c;包括业态融合、情境创造、分解渗透等。同时引入定制开发开源 AI 智能名片 S2B2…

硬件工程师零基础入门教程(三)

27.二极管的基本结构 二极管的结构就是一个PN节&#xff0c;导通后肯定会存在压降&#xff08;硅管≈0.7V&#xff1b;锗管≈0.3V&#xff09;。 其结构就像一个漏斗结构&#xff0c;普通二极管只能单向导通。 注意&#xff1a;二极管两端不能直接接大于二极管导通压降的电压…

ollama导入huggingface下载的大模型并量化

1. 导入GGUF 类型的模型 1.1 先在huggingface 下载需要ollama部署的大模型 1.2 编写modelfile 在ollama 里面输入 ollama show --modelfile <你有的模型名称> eg: ollama show --modelfile qwen2.5:latest修改其中的from 路径为自己的模型下载路径 FROM /Users/lzx/A…

C++基础系列【35】巧用assert

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…

【EI检索】2025年城市设计与规划国际会议 (CoUDP 2025)

重要信息 会议网址&#xff1a;www.coudp.org 会议时间&#xff1a;2025年9月19-21日 召开地点&#xff1a;中国北京 截稿时间&#xff1a;2025年8月19日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;Ei Compendex, SCOPUS 会议简介 2025年城市设计与规划…

《实战AI智能体》MCP对Agent有哪些好处

首先MCP为Agent提供了标准化的方式来接入各种工具和数据源,无论是本地运行的工具,例如通过stdio服务器,还是远程托管的服务HTTP over SSE服务, Agent都可以通过统一的接口与它们进行交互,极大扩展了第三方工具库。 例如,在金融领域,Agent 可以接入股票分析的MCP工具。当…

知识图谱在官网中的本质与部署逻辑

知识图谱在官网中的本质与部署逻辑 ​1. 知识图谱不是独立页面&#xff0c;而是智能化基础设施 知识图谱的最终形态并非一个可见的“图谱页面”&#xff0c;而是渗透在官网各交互模块的AI能力引擎&#xff0c;其核心作用在于&#xff1a; ​后台&#xff1a;构建实体关系网络…

蓝桥杯冲刺

例题1&#xff1a;握手问题 方法1&#xff1a;数学推理(简单粗暴&#xff09; 方法2&#xff1a;用代码实现方法1 #include<iostream> using namespace std; int main() {int result 0;for (int i 1; i < 49; i){for (int j i 1; j < 50; j){//第i个人与第j个…