第五篇:Linux进程的相关知识总结(1)
目录
第四章:进程
4.1进程管理
4.1.1进程管理需要的学习目标
4.1.1.1了解进程的相关信息
4.1.1.2僵尸进程的概念和处理方法:
4.1.1.3PID、PPID的概念以及特性:
4.1.1.4进程状态
4.1.2进程管理PS
4.1.2.1静态查看进程
4.1.2.1.1自定义查看进程的列信息
4.1.2.1.2进程排序(默认为升序排序)
4.1.2.1.3进程的父子关系
4.1.2.2动态查看进程
4.1.2.2.1top的选项
第四章:进程
4.1进程管理
4.1.1进程管理需要的学习目标
4.1.1.1了解进程的相关信息
进程的概念:进程:进程是已启动的可执行程序的运行,实例echo、read带有这种单词的就是一个程序,进程存储在内存中,内存速度很快。
进程的组成:进程标识符(PID):每个进程都有一个唯一的数字标识符,用于区分系统中的不同进程。
- 程序计数器(Program Counter, PC):指示了进程将要执行的下一条指令的地址。
- 寄存器集合:包括但不限于:
- 内存映像:进程的内存空间,包括:
- 文件描述符表:包含进程打开的所有文件和设备的引用。
- 环境变量:定义了进程执行时所需的环境信息。
- 当前工作目录:进程的当前目录,用于解析相对路径。
- 信号处理:定义了进程如何响应各种信号。
- 进程状态:如运行中(Running)、等待(Waiting)、停止(Stopped)或僵尸(Zombie)状态。
- 进程优先级:影响进程获得CPU时间片的频率。
程序与进程的区别:
程序:通常是通过某种语言编写的文本文件,一旦我们把程序执行起来了就是进程,Linux中./+文件名就是运行的意思,程序存储在外存中,但是外存很慢
程序编程进程之后的变化:简单来说程序就是还没被运行的计算机指令的集合,进程是计算机中当前正在前端或者后端运行的程序。程序变成进程之后会拥有一些东西
程序变成进程之后会拥有:
1.内存资源,程序在硬盘中,进程在内存中
2.CPU资源,CPU的1s 被分成了1000份(分片),有一个或者多个片来处理进程,占有CPU的0.2%的时间来处理。
3.网络资源,程序运行的时候可能会占用网络资源
4.名字PID(process Identify)
5.权限、自我复制等等。。。。。。
图解如下(最左侧alice为未被执行的初始程序):

进程的生命周期:
系统引导:计算机启动时,BIOS或UEFI固件首先执行,它会找到启动设备(如硬盘),并加载引导加载程序(Bootloader)。
- 加载操作系统:引导加载程序加载操作系统内核到内存中,并将其执行。操作系统内核是操作系统的核心部分,负责管理系统资源和控制硬件。
- 初始化进程创建:操作系统内核初始化后,会创建第一个用户空间的进程,通常这个进程的进程ID(PID)是1。在Linux系统中,这个进程是init,在Windows系统中,是smss.exe(Session Manager Subsystem)。由init生成的进程我们也叫它孩子进程,当CPU执行孩子进程的时候父进程是休眠的,因为CPU没有更多的算力投入到Process父进程的计算中了。
- 读取启动配置:第一个进程会根据操作系统的配置文件(如/etc/inittab在某些Linux发行版中,或注册表中的启动项在Windows中)来确定需要启动哪些服务和应用程序。
- 创建子进程
- 进程间通信:新创建的进程可能会需要与其他进程通信,操作系统提供了多种进程间通信(IPC)机制,如管道、消息队列、共享内存、套接字等。
- 用户登录:在多用户系统中,第一个进程或其子进程之一会负责启动登录管理器,允许用户登录系统。
- 桌面环境和会话管理:在用户登录后,会话管理器或类似的进程会启动桌面环境和用户的个人应用程序。
- 持续管理:第一个进程或其子进程可能还负责持续监控和管理系统的运行状态,包括处理系统日志、资源监控等。
- 正常结束的进程会重新返回到父级进程Process中,非正常结束的进程会变成Zombie僵尸进程。

4.1.1.2僵尸进程的概念和处理方法:
僵尸进程(Zombie Process)是一个已经完成执行但尚未被其父进程回收其进程描述符(即调用wait()或waitpid()系统调用)的进程。在Linux和其他类Unix操作系统中,僵尸进程占用系统资源,特别是进程表项,但不会消耗CPU时间。僵尸进程的进程描述符在进程终止后仍然保留在系统中,直到父进程调用了wait()或waitpid()来显式地回收它。
僵尸进程通常出现在以下情况:
- 子进程已经完成其执行并退出。
- 父进程没有调用wait()或waitpid()来读取子进程的退出状态。
僵尸进程的特征
- 它在进程列表中显示为“Z”状态。
- 它占用进程ID(PID)但不占用其他资源。
- 如果父进程没有正确处理,僵尸进程会一直存在。
解决方法
- 显式回收:
父进程应该调用wait()或waitpid()来显式地回收子进程的资源。这会读取子进程的退出状态,并释放其进程描述符。 - 使用wait()的循环:
在某些情况下,父进程可能不知道何时子进程会退出。在这种情况下,可以在父进程中使用一个循环来调用wait(),这样可以回收所有已经终止的子进程。 - 设置忽略子进程退出信号:
在某些编程实践中,可以通过设置子进程的信号处理函数来忽略SIGCHLD信号,然后周期性地调用waitpid(),传递-1作为第一个参数,这样会回收任何状态改变的子进程。 - 使用waitpid():
使用waitpid()可以指定等待特定PID的子进程,或者使用-1来等待任何子进程。 - 避免创建僵尸进程:
在程序设计时,确保每个子进程都有一个父进程来管理它。
使用守护进程(Daemon)来管理子进程,确保它们被适当地回收
- 使用ps命令检查:
使用ps命令加上适当的选项(如-e或-a)来检查系统中的僵尸进程。 - 重启系统:
如果僵尸进程过多,影响系统性能,重启系统可以清除所有进程,包括僵尸进程。 - 使用脚本或工具:
可以编写脚本或使用系统管理工具来监控和清理僵尸进程。
僵尸进程本身不会对系统造成直接的损害,但过多的僵尸进程可能会耗尽系统资源,导致新进程无法启动。因此,正确管理子进程的生命周期是避免僵尸进程问题的关键。
4.1.1.3PID、PPID的概念以及特性:
PID:当一个操作系统运行进程时,系统会自动为其分配一个唯一的标识符,这个标识符就是PID。PID是一个非零整数,具有唯一性,用于标识一个进程。PID一旦被分配给一个进程,就会伴随该进程的整个生命周期,直到进程结束。PID的目的是为了便于操作系统管理和标记进程。当进程的生命周期终止时,其PID会被释放,之后的进程可以再次使用这个PID。
PID(进程标识符)的特性
- 唯一性:PID是一个整数,用于唯一地标识系统中的每个进程。
- 范围:PID的范围通常从1到32767,但这个范围可以根据系统配置进行调整。
- 生命周期:PID在进程的整个生命周期内保持不变,直到进程终止。
- 特殊值:PID 1通常被分配给系统中的第一个用户级进程,即init进程,它是所有其他用户级进程的祖先。
PPID:在Linux系统中,PPID代表的是父进程的PID,即父进程的进程号。当一个进程被创建时,创建它的那个进程被称为父进程,而子进程通过PPID指出其父进程。PPID也是一个非零整数,与PID一样,用于标识进程之间的关系。通过编程调用getpid函数可以获取自身的进程标识符,而getppid函数则用于获取父进程的进程标识符。
PPID(父进程标识符)
- 关系:PPID是一个整数,表示创建当前进程的父进程的PID。
- 继承:当一个新进程被创建时,它会从其父进程那里继承PPID的值。
- 用途:PPID用于追踪进程的家族树,即进程之间的父子关系。
- 特殊值:如果一个进程的PPID为0,这通常意味着它是一个守护进程(Daemon),或者是由于某些原因父进程已经终止,而子进程变成了孤儿进程,随后被init进程收养。
处理孤儿进程
- 当一个父进程终止时,它的子进程如果没有被其他进程收养,就会变成孤儿进程。操作系统通常会将孤儿进程的PPID设置为1,即init进程,这样init进程就会在孤儿进程终止时回收其资源。
4.1.1.4进程状态
进程的状态共分为四类:R(运行中的进程)、S(睡眠的进程)、T(停止的进程)、Z(僵尸进程)
如果出现R+、S+等命令说明优先级比较高,如果有需要CPU会优先处理它。
4.1.2进程管理PS
4.1.2.1静态查看进程
在Linux中我们一般使用PS命令来完成对命令的静态查看。
ps aux
ps aux表示打开进程管理器,也可以使用ps a、ps u、ps x分别进行进程信息的查看,只不过它们略有不同,a选项表示显示所有终端的进程,包括其他用户的进程。u选项表示以用户友好的方式显示进程信息,包括用户、PID、CPU使用率、内存使用率、命令等。x选项表示显示没有控制终端的进程,即那些与终端无关的进程(下图则展示了a、u、x的三种不同的查看方式)。

配合管道(后期会讲)我们可以完成对进程更多的操作
例如:
ps aux | head -1
表示查看进程的表头,输出字段的含义
静态查看进程所显示的信息(如下图所示):

USER:运行进程的用户名。
PID:进程的ID。我们通过PID来杀死进程
%CPU:进程占用的CPU百分比。占了cpu百分之多少的资源,也称CPU占用率
1以下消耗不大,1以上消耗过大
%MEM:进程占用的内存百分比。
VSZ:虚拟内存大小(Virtual Size),进程使用的虚拟内存总量。
硬盘中我们拿出一部分当假内存使用,就叫做虚拟内存
RSS:实际内存大小(Resident Set Size),进程实际占用的物理内存量。
TTY:进程所在的终端类型,比如 pts/0 表示一个伪终端,只有自己一个窗口,本机打开。
pts/1表示文件在1号窗口远程打开,我们也可以通过控制终端名称杀死进程
STAT:进程的状态,例如 R 表示运行,S 表示睡眠。Z表示卡了,僵尸程序需要重启一下
START:进程的启动时间。
TIME:进程占用CPU的总时间。单位为秒,CPU处理文件的时间
COMMAND:启动进程的命令
4.1.2.1.1自定义查看进程的列信息
如果我们不想一次性查看进程的那么多的信息,假设我们只想查看进程的创建者、进程号、父级进程号、内存占用我们也可以使用PS命令,只不过选项不同
ps axo user,pid,ppid,%mem
注意事项:我们使用自定义查看进程信息的命令是axo不是aux,其次,属性列之间使用逗号进行分隔
4.1.2.1.2进程排序(默认为升序排序)
我们学会了使用自定义查看命令之后,假设我们还是想要user,pid,ppid,%mem查看这些自定义进程信息,但是在这些信息中有一个内存占用较高的前四项我要进行删除,我们可以将自定义进程属性列和排序功能进行结合。
ps axo user,pid,ppid,%mem --sort=-%-mem
排序的语法是--sort = 按照什么进行排序(如下图所示)

如果想要从小到大进行排序则要将“按照什么进行排序"的前面的‘-’删除
ps axo user,pid,ppid,%mem --sort=-%mem
我们发现计算机中会存在很多进行我们输入一遍命令之后会弹出很多行,但是我们又想进行排序又不想数据那么长,我们只想查看内存占用最高的那前几个,我们可以将自定义进程属性列、排序命令与管道相结合,创造出既可以自定义查看内容又可以进行排序还不会显得数据冗余过长,快速的找出我们想要的数据(如下图,我们找出了内存占比最高的两个进程)
ps axo user,pid,ppid,%mem --sort=-%mem | head -3
耗费cpu最多的程序是gnome-shell,gnome-shell:Windows的图形程序。PID为2160,kill之后桌面会崩溃,CPU占用率0.7,内存占用率10.7%(具体数值分情况讨论)

利用上述命令我们对就可以查看到内存排序的进程了,删除进程我们后期再讲。
4.1.2.1.3进程的父子关系
通过上述的基础理论知识学习,我们已经搞明白了何为父进程,何为子进程,而且明白了PID和PPID的概念以及父子进程的相互关系,那么我们在计算机中是如何查看哪些进程的父进程是谁呢?Linux中给我们提供了ps -ef命令。
ps -ef命令是一个常用的命令行工具,用于显示系统中所有进程的详细信息。这个命令的参数组合如下:
- -e:显示所有进程。
- -f:以完整格式显示进程列表,包括更多的信息,例如用户、终端、CPU和内存使用率等。
执行ps -ef后,你将获得一个包含许多列的长列表,显示了所有进程的详细信息。

ps -ef弹出的属性列为:
1.UID:用户ID
2.PID:程序ID(1号进程名称为system,操作系统本身的进程就是这个)
3.PPID:父系程序ID,PPID不为零说明有亲爹,PPID定位到PID就是那个进程的爹
4.C:CPU使用率的百分比(CPU usage),表示进程占用的CPU资源比例。
5.STIME:启动时间(start time)
6.TTY:终端
7.TIME:运行时间
8.CMD:程序名称
示例:ps -ef
假设A的PID是2 PPID是0
假设B的PID是0 PPID是2
那么B的爹就是A
PPID->PID
PPID映射PID
4.1.2.2动态查看进程top
PS静态查看进程的优点是不会过多的占用系统资源,但是如果我们想要实时查看进程信息的话用什么命令来实现呢?我们可以使用top命令完成对进程的实时查看
top
使用top 显示的信息一般有五行12列
五行(如下)

第一行:
top - 18:15:32 up 1 day ,12:18, 5 users, load average:0.00,0.06,0.06
程序名 - 系统时间 运行时间 登录用户数 cpu平局在5、10、15分钟内负载均衡的值
第二行(关于进程的汇总信息):
Tasks:361 total, 1running,360 sleeping, 0 stopped, 0 zombie
任务总数,正在运行的任务数,睡眠数、停止数、僵尸数
第三行(Cpu占用率):
%cpu(s)13.4us,5.7sy,0.0ni,80.8id,0.0wa,0.0hi,0.0si,0.0st
us表示由人执行的程序占用了多少cpu(%)
sy则表示系统
ni表示设置优先级的程序运算占用Cpu多少
id表示空闲Windows中的 Sysytem Idle进程代表了cpu还剩多少进程可用,不是占领了高的cpu占用率
wa表示等待
hi表示硬件
st表示虚拟机
第四行:
KiB MeM:2027936 total,80160 free, 1557772 used, 390004 buff/cache
物理内存总大小 闲置的物理内存大小 已经使用的物理内存 cache缓存的大小
第五行(虚拟内存,交换空间):
KiB Swap:2097148total,1199612 free, 897536 used。182468 avail Mem
虚拟内存总大小 空闲 已经使用的虚拟内存
十二列(如下)有

PID:进程编号
USER:谁启动的该进程
PR:系统优先级
NI:用户自定义优先级
VIRT
RES
SHR
这三个字母表示内存
S:状态
%CPU:CPU占用率
%MEM
TIME+:运行耗时
COMMAND:程序名
4.1.2.2.1top的选项

我们在输入top命令(如上)实时显示出进程信息的时候,top窗口会实时监听用户键盘的输入,当我们输入固定的指令的时候计算机才会执行相应的步骤
具体的指令如下:
h:获取帮助
M:按内存占比对进程进行排序
P:按CPU的占比进行排序
N:按PID的大小进行排序
< :向前翻页(需要按住SHIFT)
>:向后翻页(需要按住SHIFT) Z:设置字体为彩色
top的其他操作:
1.当我们想要将top的更新时间调整的更加频繁或者更加平缓,我们可以使用
top -d n (n为用户输入的数字,单位为秒)
来定义top命令的刷新时间
top每n秒刷新一次
例如:
top -d 0.2
top动态进程查看每0.2秒刷新一次
2.结束top窗口
我们可以输入ctrl + c、ESC、Q键来退出top窗口
当然,进程仍涉及到像优先级、进程信号、如何查看内存、如何查看磁盘空间、作业控制Jobs、虚拟文件系统等知识,大家不要急,我们马上就会讲到~
还是那句话,如果文章中哪些地方有问题或者不明白评论发即可~

相关文章:
第五篇:Linux进程的相关知识总结(1)
目录 第四章:进程 4.1进程管理 4.1.1进程管理需要的学习目标 4.1.1.1了解进程的相关信息 4.1.1.2僵尸进程的概念和处理方法: 4.1.1.3PID、PPID的概念以及特性: 4.1.1.4进程状态 4.1.2进程管理PS 4.1.2.1静态查看进程 4.1.2.1.1自定义…...
企业级Windows server服务器技术(1)
windows server服务器安装 准备工作: 1.准备安装的镜像 2.安装好虚拟机VMware或者virtual box 3.准备安装的位置(选择你的电脑的磁盘上比较空闲的位置,新建一个文件夹并命名) 4.开始安装(按步骤)----…...
【30天玩转python】单元测试与调试
单元测试与调试 在 Python 开发中,编写单元测试和进行调试是保证代码质量、减少错误的重要步骤。单元测试可以帮助我们验证代码功能是否符合预期,调试则可以在代码出现问题时快速定位错误原因。 1. 单元测试简介 单元测试是对程序中最小可测试部分&…...
13.第二阶段x86游戏实战2-动态模块地址
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…...
【WebLogic】WebLogic 11g 控制台模式下安装记录
WebLogic 11g的安装有三种方式: 1)GUI图形化模式; 2)控制台模式; 3)静默模式; 下面为大家展示下控制台模式下的安装过程记录,整个安装过程大部分都是回车,仅在【接收…...
失踪人口回归(明天开始继续更新学习内容)
从明天开始继续更新个人学习经验及收获,可能会直接从C入门开始,总结一下C在C的基础上增加的新语法。这篇就当作水贴算了,大家别点赞,留点赞给明天的文章,哈哈 我是安姐的修沟..............
AIGC对网络安全的影响
AIGC对网络安全的影响 引言 人工智能生成内容(AIGC)技术的快速发展对网络安全领域产生了深远影响。AIGC不仅在内容创作、媒体生成等方面展现了强大的能力,还可能被恶意使用,带来新的安全威胁。本文将探讨AIGC对网络安全的影响,列举实际案例,并提供相关建议。 AIGC技术…...
golang学习笔记25——golang 实现 MD5加密、RSA加密 和 Base64编码
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
2024海外电商数据分析之印度篇
在2024年,印度电商市场继续保持着强劲的增长势头,成为全球电商领域中的一个亮点。根据Inc42发布的《2024年上半年印度电商市场报告》,印度电商市场规模已经达到1160亿美元,预计在2023年至2030年间,将以19%的复合年增长…...
JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码
通过Tomcat进行发布项目的目的是为了提供项目的访问能力:Tomcat作为Web服务器,能够处理HTTP请求和响应,将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式: 第一种:直接在Tomcat文件夹里的webapp…...
为什么数据需要 QA 流程
当有人问我做什么工作时,我会说我是一名数据质量保证 (QA) 工程师。他们并不真正理解我的意思。“嗯,我做数据测试,”我试图解释,但常常无济于事。我有一些从事技术和软件开发的朋友,他们不太了解数据测试是什么&#…...
Spring Boot 学习之路 -- 基础认知
前言 最近因为业务需要,被拉去研究后端的项目,代码框架基于 Spring Boot,对我来说完全小白,需要重新学习研究…出于个人习惯,会以 Blog 文章的方式做一些记录,文章内容基本来源于「 Spring Boot 从入门到精…...
JavaScript --json格式字符串和对象的转化
json字符串解析成对象 : var obj JSON.parse(str) 对象转化成字符串:var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…...
LabVIEW提高开发效率技巧----采用并行任务提高性能
在复杂的LabVIEW开发项目中,合理利用并行任务可以显著提高系统的整体性能和响应速度。并行编程是一种强大的技术手段,尤其适用于实时控制、数据采集以及多任务处理等场景。LabVIEW的数据流编程模型天然支持并行任务的执行,结合多核处理器的硬…...
裸土检测算法实际应用、裸土覆盖检测算法、裸土检测算法
裸土检测算法主要用于环境保护、农业管理、城市规划和土地管理等领域,通过图像识别技术来检测和识别地表上的裸露土壤。这种技术可以帮助管理者实时监控裸土面积,及时采取措施,防止水土流失、环境污染和生态退化。 一、技术实现 裸土检测算…...
深入剖析链表反转:多语言实现与高级语法特性20240924
深入剖析链表反转:多语言实现与高级语法特性 引言 在数据结构与算法的学习中,链表是基础结构之一,尤其在动态内存分配和操作中体现了它的重要性。今天,我们将通过反转单链表这一经典算法题,从不同编程语言的角度进行…...
【数据结构初阶】链式二叉树接口实现超详解
文章目录 1. 节点定义2. 前中后序遍历2. 1 遍历规则2. 2 遍历实现2. 3 结点个数2. 3. 1 二叉树节点个数2. 3. 2 二叉树叶子节点个数2. 3. 3 二叉树第k层节点个数 2. 4 二叉树查找值为x的节点2. 5 二叉树层序遍历2. 6 判断二叉树是否是完全二叉树 3. 二叉树性质 1. 节点定义 用…...
力扣189 轮转数组 Java版本
文章目录 题目描述代码 题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4…...
RMAN异机恢复数据库记录
场景:数据库服务器宕机,无法恢复 处理:使用备份资料进行异地恢复 1.此处环境为同平台、同版本(操作系统版本可以不同,但数据库版本需相同),源机器和目标机器具有相同的目录结构。 2.目标机器只…...
JVM 调优篇7 调优案例4- 线程溢出
一 线程溢出 1.1 报错信息 每个 Java 线程都需要占用一定的内存空间,当 JVM 向底层操作系统请求创建一个新的 native 线程时,如果没有足够的资源分配就会报此类错误。报错信息:java.lang.outofmemoryError:unable to create new Native Thr…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
