最新资讯

  • Linux《进程概念(上)》

Linux《进程概念(上)》

2025-04-25 18:59:05 1 阅读

在之前的Linux学习当中我们已经了解了基本的Linux指令以及基础的开发工具的使用,那么接下来我们就要开始Linux当中一个非常重要的部分的学习——进程,在此进程是我们之后Linux学习的基础,并且通过进程的学习会让我们了解更多的操作系统的相关知识以及基本的底层原理。在本篇当中我们会先了解冯诺依曼体系、进一步了解操作系统概念、了解进程的概念。那么接下来就开始本篇的学习吧!!!


 1.冯诺依曼体系

在了解进程的相关概念之前我们需要先来了解在计算机当中一个非常重要的体系——冯诺依曼体系。

冯诺依曼体系的结构示意图如下所示:

其实在当前我们常见的计算机,如笔记本等都是遵循冯诺依曼体系的。通过以上图示就可以看出当中的中央处理器其实就是CPU,而存储器就是内存

在此就可以发现CUP=运算器+控制器,存储器其实就是内存。

注:在此内存不是日常当中说的内存,日常当中我们提到的512GB/1TB等其实都是外存,而像16GB/32GB等才是内存。


 

 

在以上的图示当中的输入设备以及输出设备其实就是外设,而其中的输入设备就是键盘、鼠标、网卡、摄像头、话筒等;输出设备就是显示器、磁盘、网卡、打印机等。

注:以上的磁盘其实就是外存。

那么在了解了冯诺依曼体系的基本结构之后接下来就来了解在计算机当中按照该体系进行运转时会有什么特点?

通过以上的图示就看到在CUP当中处理的数据都是内存给他的,在这之前是需要输入设备将数据输入到内存当中的,之后CPU处理完之后再将对应的数据传输给内存之后再从内存将数据传输给输出设备。那么通过该过程就可以看出CPU在获取、写入等操作时只能从内存当中来进行。

那么此时问题就来了,为什么在冯诺依曼体系当中要这么设计呢?

这其实是因为当代的计算机其实是性价比的产物,接下来来看以下的图

通过以上的图示就可以看出存储设备的进行存取的速度其实是和设备的成本程正比的,这时也是有什么相同大小的内存会比磁盘要贵的多。

那么此时就可以思考如果在计算机当中直接将CPU和磁盘等输入设备打交道会有什么问题?

这时如果像以上这样直接将CUP从输入设备当中进行数据的读取再将处理之后的数据输出给输出设备,这时其实就会出现一个问题了,那就是CPU进行数据的处理的速度相比从磁盘等设备进行读写的速度是要快非常多的,这也就使得在这种情况下会出现CPU已经早已经将读取的数据处理之后接下来就会进入到等待数据的过程当中,这时磁盘已经使出了全力还是无法匹配CPU的处理速度,那么这就会造成程序运行的效率十分的低下,即使CPU的性能非常的高也无法正常的发挥其的性能;处理数据的效率转而由更慢的磁盘决定了,这是非常不合理的。

那么此时你可能就会想那么直接数据的存储放在内存当中不就好了,这样不就不会出现以上的问题了?

话是这么说,但是大内存太贵了啊,即使现在16GB的内存基本也是不便宜的,如果都使用内存来进行数据的存储那么计算机就不会像现在这样成为普通人也能使用的科技产物。

因此为了平衡效率和价格就出现了冯诺依曼体系,在该体系下内存进行外部设备的数据的读写,之后再将得到的数据给CPU进行处理,那么这样就不会出现CPU大量时间在闲置的问题。

总的来说在冯诺依曼体系当中CPU在数据层面,只和内存打交道。外设只和内存打交道。

接下来我们就通过一个实际的例子来了解在当你登录上qq开始和某位朋友聊天开始,数据的流动过程。

其实大致的过程就如下所示,在此你在键盘输入对应的信息之后就会先传输到内存当中,之后再由内存将数据信息转至CPU进行处理之后再将处理完的数据传输给网卡,网卡再通过网络的传输将你的数据信息传输到指定用户下,由该用户的网卡接收数据之后再传输到内存当中再由CPU处理后传输到显示器上,最终就可以在该用户的显示器上显示出你发的信息。

以上就可以看出你的键盘在你的体系当就是输入设备,网卡就是输出设备,在另一个用户下输入设备就是网卡,输出设备就是显示器。 

2.操作系统(Operator System)

在之前的Linux《权限》当中我们就初步了解了Shell命令以及运行原理,我们知道了操作系统与shell外壳之间的关系,但是在之前我们是感性的了解,这还是不够的,在此接下来我们就将理性的理解。

2.1 概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
• 内核(进程管理,内存管理,⽂件管理,驱动管理)
• 其他程序(例如函数库,shell程序等等)

 在此之前我们就提到了安卓的底层是基于Linux的,在此其实就是安卓的·底层结构是基于的是Linux的内核。之后再设计适合手机的外壳程序就形成的安卓。

2.2 设计OS的目的

在此要通过是什么、为什么、怎么办三步来了解操作系统,以上我们已经了解了是什么,那么接下来就来了解为什么要有OS

以上就是操作系统与硬件以及用户之间的关系图,通过之前的学习我们知道在计算机当中硬件部分是符合冯诺依曼体系的,此时再看以下的关系图就可以看出在操作系统和硬件之间其实是存在驱动。

那么驱动存在的作用是什么呢?

首先要了解的是不同的硬件设备是拥有不同的读取方式的,例如网卡和磁盘进行读取的方式就完全不同。因此为了能让操作系统能对相关的硬件进行管理就需要驱动的辅助,当外设物理链接计算机之后还要将对应的驱动也安装才能使得硬件能正常的运行,就例如在我们是使用鼠标的适合,只有在电脑当中也安装了鼠标相应的驱动才能使得鼠标能正常的使用。

那么通过以上的驱动以及硬件和操作系统之间的关系就可以看出在操作系统其实对下,是要进行硬件的交互的,管理所有的软硬件资源

但是其实操作系统在将底层的硬件进行管理不是目的而是手段,真正的目的是为了给用户提供一个稳定的环境。就例如在我们使用电脑的时候操作系统对屏幕进行管理的目的就是为了让我们能从屏幕当中看到想要的信息,而不能出现蓝屏等异常德情况。

因此总的来说在计算机当中操作系统的作用就分为两个方面:

• 对下,与硬件交互,管理所有的软硬件资源
• 对上,为用户程序(应用程序)提供⼀个良好的执行环境

 

接下来在了解了为什么要有操作系统之后接下来就来了解几个补充的知识点

1.在计算机当中软硬件的体系结构其实是层状结构的

通过以上的图示其实就可以看出计算机当中体系结构是分层的,有用户、操作系统、驱动、硬件等

那么此时我们就要思考为什么在计算机的体系当中要设计为以上的层状结构呢?

这其实是在软件工程当中有一个非常重要的理念——高内聚低耦合。其实在之前C语言的学习当中我们就已经初步了解了这一基本的理念,在刚学习C语言的时候我们写的代码都是直接在main函数内的,到了之后学习了函数之后就开始逐渐将实现不同的功能使用函数进行划分。并且之后在C++当中还了解了面向对象的三大特点:封装、继承、多态。其实这些设计的根本目的就是为了增强代码的可维护性,这些其实就是高内聚低耦合的体现。

因此以上提到的是在软件上的设计,而在硬件上设计成为层状的结构也可以使得某一层次出现问题时只需要修复对应的层次即可其他的层次不需要进行修改,就例如当你的计算机网卡出现问题时只需要更换新的网卡即可、当计算机的网卡驱动出现问题时只需要再重新下载对应的网卡驱动即可。

2.访问操作系统,必须使用系统调用,在此我们使用的函数就是封装系统调用的

3.我们的出现,只要你判断出了它访问了硬件,那么它必须贯穿整个软硬件体系结构

4.库底层可能封装了系统调用

操作系统其实是不允许用户直接访问文件、内存;读取进程,在此必须要通过相应的系统调用来访问对应的进程等。但是这样不就说明要了解对应的系统调用才能实现对相关硬件的操作呢?那这不是要了解操作系统相关的知识吗?但是这样对应用户来说使用系统调用的学习成本太高了,因此语言就封装了系统调用。就例如之前我们C语言当中使用的printf是将你的数据写到硬件显示器上,但其实printf不是直接将对应的信息直接输出到显示器上的,而是调用了相应的系统调用,之后系统调用再将对应的数据输出的显示器上的。

2.3 核心功能

在此在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件

那么接下来我们就来理解管理

那么接下来我们就通过一个校长-辅导员-学生的例子来理解管理

在学校当中其实是有很多的角色的,但是在此假设我们就只有学生、辅导员、校长三种角色。

以下是这三种角色的关系图

在此校长就作为决策者要对被管理的学生进行管理的时候那么接下来就可以通过执行者辅导员来将学生的信息通过表格的方式编辑好之后给到校长,之后校长就可以通过这些表格来得到学生的信息。在此过程当中校长是没有见到学生的,但是还是实现了对学生的管理,因此要管理,管理者和被管理者之间其实是可以不需要见面的

当管理者要对被管理者进行管理时就只需要根据“数据”就可以进行进行

就例如当校长要选拔出学校的篮球队时就只需要通过辅导员统计的信息来进行

并且当有了表格之后,校长对学生管理就转化为了对表格的管理!可以对表格进行增删查改

但是校长是程序员出生的,还是觉得表格的方式进行管理不太好,此时他就想到可以使用链表来进行管理啊!链表每个节点就是一个学生的信息,在此使用一个结构体表示。

以上有了链表校长对学生的管理就转化为了对链表的增删查改

以上校长的管理过程就是建模的过程,其最本质就是先描述再组织,这也是对任何“管理”场景进行建模的过程。这也就可以解释为什么在C++、Java、php等面向对象的语言当中要提供类以及标准模板库就例如C++当中的STL。

在此类就是解决了先描述,而STL就是实现再组织

那么在此也就能理解为什么有人说当前面向对象语言已经成为主流,这就是因为我们世界的特点就是先描述再组织形成的。因此在计算机当中舍友的软硬件其实也是先描述再组织的。

2.4理解系统调用

以上已经提到了系统调用,那么系统调用实际上要如何去理解呢?

在此我们就通过银行的例子来理解。在银行当中银行要给用户提供存款取款等的服务,但是银行又不能直接将银行内不能完全信任用户,具体的表现就是用户在存款取款时不能直接进入到银行的保险库当中,但是银行还要给用户提供存款取款的服务啊,因此这就有了柜台

 在柜台上用户就可以将需求告知,之后柜台就可以将用户的需求进行解决。那么在此还有一种情况就是如果用户完全对存取款不了解,此时就需要银行的大堂经理来协助用户进行操作;此时用户将自己的需求转至大堂经理,之后大堂经理再将用户的需求转至柜台。

其实系统调用就和银行当中的柜台类似,普通的开发者是无法自己使用系统调用的,那么此时就有了库函数,在此库函数就和银行当中的大堂经理类似。用户只需要使用库函数,库函数就可以自主的调用系统调用


 

3. 进程

3.1 进程概念

以上我们了解了操作系统的基本知识之后接下来我们就来了解进程的基本概念,不过和课本当中不同不会一开始就直接引入一些概念的名称,就像以下一样

• 课本概念:程序的⼀个执⾏实例,正在执行的程序等
• 内核观点:担当分配系统资源(CPU时间,内存)的实体。

在此是通过实际的情况以及图示来了解

在此我们知道当形成可执行程序之后是存储在磁盘当中的,当我们调用对应的可执行程序之后就会将磁盘当中对应的可执行程序的代码和数据传输到内存当中, 那么是否这些代码和数据就是进程呢?

此时我们就要思考在一些情况下是会出现多个可执行程序同时运行的,那么这时就会有多份的代码额和数据在内存当中,那么此时操作系统要怎么分辨出不同的进程呢?

因此在此为了对不同的进程进行管理,就给每个进程都形成了一个对应的内核数据结构对象,在该数据结构对象当中存储着进程的信息。在此之后再将每个进程的数据结构对象使用链表连接起来对这些进程的管理就转化为了对链表的管理,这符合之前提到的先描述再组织

在操作系统当中将这些存储进程信息的数据结构对象叫做进程控制块,可以理解为进程属性的集合。在操作系统当中称为PBC(process control block)。在Linux当中将该结构体对象称为task_struct

其实进程就是由内核数据结构对象PBC再加自己的代码和数据构成的,而不是之前认为的是进程只是代码和数据。

进程=PBC(task_struct)+自己的代码和数据 

那么以上提到的task_struct内会存储哪些的信息呢?

其实会存储的信息非常的多,会有以下的数据等,在这当中有一些是想要我们了解的,只不过这要之后再慢慢的了解

• 标示符: 描述本进程的唯⼀标⽰符,⽤来区别其他进程。
• 状态: 任务状态,退出代码,退出信号等。
• 优先级: 相对于其他进程的优先级。
• 程序计数器: 程序中即将被执⾏的下⼀条指令的地址。
• 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
• 上下文数据: 进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。
• I / O状态信息: 包括显⽰的I/O请求,分配给进程的I∕O设备和被进程使⽤的⽂件列表。
• 记账信息: 可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。
• 其他信息

3.2 查看进程

在以上我们了解了进程的基本概念,那么接下就来学习如何查看进程

其实我们之前执行的所有的指令、工具、自己的程序,只要运行起来就都是进程。

并且当每个进程在运行起来之后都会有自己的ID,在Linux当中要查看当前进程的ID就想要使用到以下的系统调用

在此getpid的返回值其实就是当前进程的pid,在此返回值的类型为pid_t,其实类型就是int

 

在此接下我们就使用以下的代码来查看一个进程的pid

#include     
#include    
#include    
    
int main()    
{    
    printf("pid:%d
",getpid());                                                                                                                                                             
   return 0;    
}    

我们将以上代码的.c文件编译链接之后形成mytest的可执行程序,运行该程序就可以看出该程序的pid如下所示

以上我们了解了getpid这个系统调用,但是在使用man手册查询getpid还看到有另一个系统调用getppid,那么这个又是什么作用的呢? 

接下来我们就来了解,其实每个进程都是存在父进程的,而getppid这个系统调用就是用来获取父进程的id的。接下来在以上的代码当中加上getppid的使用。

#include     
#include    
#include    
    
int main()    
{   
    while(1)
    {
        printf("ppid:%d
",getppid());    
        printf("pid:%d
",getpid());                                                                                                                                                             
    }
                                                                                                                                                            
   return 0;    
}    

以上这样确实能获取到当前进程的ID,但是一般情况下我们是想要查看当中系统当中所有运行的进程的,那么就需要了解以下的指令

ps ajx

在此ps指令就可以查看所有的进程,之后的选项作用如下所示:

• a:显示⼀个终端所有的进程,包括其用户的进程。
• x:显示没有控制终端的进程,例如后台运⾏的守护进程。
• j:显示进程归属的进程组ID、会话ID、父进程ID,以及与作业控制相关的信息

但是以上使用了该指令之后会将当前系统当中的所有进程信息都显示在屏幕上

如果我们只是要获取一个进程的信息呢?此时就需要使用到管道外加grep

grep ajx | grep 程序名

以上我们启动mytest之后接下来再使用ps来获取该进程的信息

但是此时问题就是以上虽然显示出了对应的信息,但是我们无法分辨各个信息表示的是什么,那么还需要对使用ps指令时进行修改,在此我们就需要使用以下的指令

ps ajx | head -1;ps ajx | grep 程序名

以上你这时就会发现此时的./mytest进程的id和之前不一样了,这是为什么呢?

其实只不过是我将之前的进程停止了,重新再运行一次,这时系统就会重新为该进程分配pid

此时你可能还有还有问题就是为什么在查询mytest的进程信息时会有两个进程的信息,在此我们知道第一行表示的是进程的信息,那么第二行又表示的是什么呢?

其实在查询的时候会出现第二行是因为grep指令也是进程,那么在ps指令之后使用grep就会再形成一个进程。此时如果要忽略grep进程就可以在以上的指令之后加上以下的指令

ps axj | head -1;ps axj | grep 程序名 | grep -v grep 

以上我们的mytest可执行程序运行起来就不会停止,之前我们就知道要使得一个进程停止就需要使用CTRL+c,那么将进程停止之后再使用ps指令就可以看到对应进程也消失了

其实除了以上的方式可以杀掉进程之外还可以使用kill指令来杀掉进程,在此只需要使用以下指令即可

kill -9 进程ID

在此kill指令为什么能将进程结束以及是如何实现的具体要等到之后我们学习Linux信号时再了解

以上我们要查看当前系统内的进程除了可以使用ps指令外其实还可以通过系统内的一个目录进行查看,在此该目录路径如下所示:

/proc

此时使用ls指令就可以将当中系统内所有进程显示出来 ,在此每个目录就表示一个进程,每个命令内会存储进程对应的信息

以上我们将mytest再运行起来之后使用进程的pid进行查询就可以看到再pro目录下是存在对应的目录的

那么对应进程内的信息接下来就来补充两个小知识点

我们使用ls -l就可以看到在进程当中是存在许多的信息的,在此有两个是需要我们了解的分别是cwd和exe,在这其中cwd存储的就是当前进行所在的路径,而exe存储的就是进程对应的可执行文件所在的路径。

了解了以上的知识也就可以解释了为什么之前在C语言当中使用fopen打开一个文件时,当使用w方式打开时如果要打开的文件不存在时就会在当前路径下创建对应的文件,其实此时fopen会根据当前进程路径下创建对应的文件,在此路径就是从当前进程PCB内获取的。

此时在运行mytest程序的时候就会发现每次父进程的ID都是一样的,这又是为什么呢?

那么这时就使用ps来查询pid为27763的进程是什么

此时就可以看到其实我们创建的进程的父进程就是bash,bash不就是之前我们提到的命令行解释器吗?

因此我们执行可执行程序的时候系统新创建的进程的父进程就是bash进程,也就是进行命令行解释的时候创建的进程都是bash进程的子进程,这就和之前我们提到的王婆——实习生的模式吻合了。

其实只要我们登入上了Linux操作系统就会给我们分配一个bash进程

在此我们可以使用以下的指令来实现每隔一秒来将系统当中的所有的bash信息打印出来

while :;do ps axj | head -1;ps axj | grep  bash | grep -v grep ; sleep 1; done

此时再打开一个Xshell在大于时就会发现当前操作系统内存在三个bash,之后退出一个Xshell就会方向bash的数量会减少一个

3.3 创建子进程

以上我们了解了进程的基本概念之后接下来就来了解如何创建子进程

创建子进程需要使用到以下的系统调用

那么在程序内使用fork之后会出现什样的现象呢?接下来就来看以下的代码

#include       
#include      
#include      
      
int main()      
{      
    printf("父进程开始运行,pid:%d
",getpid());    
    fork();    
    printf("进程开始运行,pid:%d
",getpid());                                                                                                                                               
   return 0;    
}      

运行编译以上的代码形成可执行程序之后就会看到输出结构如下所示:

此时就可以看到以上的代码在调用fork之前是只有父进程在执行,调用了fork之后就会让父进程和子进程都执行之后的代码

以上就了解了使用了fork之后程序会如何运行,fork的返回值又是什么呢?接下来继续看看

通过使用man手册内fork函数的返回值的说明就可以看出fork的返回值有两个当返回值为0时表示子进程,返回值大于0时表示父进程。当返回值为-1时表示子进程创建失败 。

接下来先来看以下的代码 

#include     
#include    
#include    
#include    
int main()    
{    
    printf("父进程开始运行,pid:%d
",getpid());    
    pid_t id=fork();    
    if(id<0)    
    {    
        perror("fork");    
        return 1;                                                                                                                                                                            
    }    
    else if(id==0)    
    {    
        while(1)    
        {    
            sleep(1);    
            printf("我是一个子进程,我pid是%d,我的父进程是:%d
",getpid(),getppid());    
    
        }    
    }    
    else    
    {    
        while(1)    
        {    
            sleep(1);    
            printf("我是一个父进程,我pid是%d,我的父进程是:%d
",getpid(),getppid());    
        }    
    
    }    
   return 0;    
}    

运行以上代码形成的可执行程序就会输出以下的内容

这时就可以看出确实我们通过父进程创建了子进程,并且在子进程内可以得到父进程的pid

那么此时一系列的问题就来了

1.为什么fork给父子进程各自不同的返回值?

在此其实这个问题很显而易见,我们创建子进程一般都是需要让子进程去完成一些工作的,那么也个父进程其实可能会创建多个子进程的,那么要在查询各个子进程是否将对应的任务完成就需要有对应子进程的pid,这也是为什么在是使用fork之后给父进程返回的是子进程的pid。其实根本的原因也就是父进程:子进程是1对多的

2.为什么一个fork函数会有两个返回值?

不管是在学习C原因还是在学习C++的时候我们都知道一个函数的返回值不管怎么样都只能有一个的,那么在fork函数当中为什么返回值能有两个呢?

其实在fork函数当中在函数的内部实际上会进行申请新的pcb、拷贝父pcb给子进程、子进程pcb放在进程list甚至调度队列当中等操作,在进行了这些操作之后就会调用return语句,但其实在fork函数内调用return之前子进程就已经被创建,并且由于return也是语句那么这时return就会被执行两遍。

 

3. 为什么一个变量,即==0,又大于0?为什么在if……else语句当中两个分支能同时成立?

在此我们现在的知识还无法解释这个问题,要等到之后了解了虚拟地址空间相关的知识之后再进行解答

以上的问题3我们现在还无法解释,不过在此可以先了解一下写时拷贝

其实在我们通过父进程创建子进程之后子进程是先不会将父进程的代码和数据进行拷贝的,而是要等到数据原本的数据出现修改才会将父进程的代码和数据重新拷贝一份给子进程

 来看以下的代码:

#include 
#include
#include
#include


int cnt=100;
int main()
{
    printf("父进程开始运行,pid:%d
",getpid());
    pid_t id=fork();
    if(id<0)
    {    
        perror("fork");    
        return 1;    
    }    
    else if(id==0)    
    {    
    
        printf("我是一个子进程,我pid是%d,我的父进程是%dcnt:%d,
",getpid(),getppid(),cnt);    
        while(1)    
        {    
            sleep(5);    
            cnt+=10;    
        printf("我是一个子进程,我pid是%d,我的父进程是%d,cnt:%d
",getpid(),getppid(),cnt);    
    
        }    
    }    
    else    
    {    
        while(1)                                                                                                                                                                             
        {    
            sleep(1);    
        printf("我是一个父进程,我pid是%d,我的父进程是%d,cnt:%d
",getpid(),getppid(),cnt);
        }    
    
    }
   return 0;
}

以上代码的结构输出如下所示: 这时就可以发现父进程内的cnt变量的值是没有发生变化的,这也说明了在子进程内cnt发生变化时进行了写时拷贝

其实以上子进程进行写时拷贝的目的就是为了保持进程的独立性 

以就是本篇的全部内容了,接下来在《进程(中)》当中将继续带来进程的相关知识,未完待续……

本文地址:https://www.vps345.com/1000.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 python MCP javascript 前端 chrome edge deepseek Ollama 模型联网 API CherryStudio 进程 操作系统 进程控制 Ubuntu ssh 阿里云 网络 网络安全 网络协议 llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu 数据库 centos oracle 关系型 安全 分布式 flutter RTSP xop RTP RTSPServer 推流 视频 android harmonyos typescript 鸿蒙 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 华为 开发语言 计算机网络 github 创意 社区 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn jenkins react.js 前端面试题 node.js 持续部署 jmeter 软件测试 ssl java pytorch transformer 人工智能 机器学习 Dell R750XS 科技 ai 个人开发 笔记 C 环境变量 进程地址空间 udp unity tcp/ip uni-app windows 微服务 springcloud ollama llm vim ide php c++ 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 spring boot 后端 tomcat pycharm vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 前端框架 深度学习 YOLO 目标检测 计算机视觉 websocket docker 容器 LDAP 面试 性能优化 jdk intellij-idea 架构 adb nginx 监控 自动化运维 智能路由器 外网访问 内网穿透 端口映射 golang 运维开发 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 ffmpeg 音视频 WSL win11 无法解析服务器的名称或地址 django flask web3.py numpy rust http asm live555 rtsp rtp macos Hyper-V WinRM TrustedHosts web安全 Kali Linux 黑客 渗透测试 信息收集 产品经理 agi microsoft vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 mysql Agent LLM AI 爬虫 数据集 RAID RAID技术 磁盘 存储 云原生 gpu算力 stm32 W5500 OLED u8g2 TCP服务器 postgresql excel c# NPS 雨云服务器 雨云 conda 环境迁移 源码剖析 rtsp实现步骤 流媒体开发 系统架构 es jvm cpu 内存 实时 使用 电脑 嵌入式硬件 相差8小时 UTC 时间 Java vscode C语言 低代码 svn 经验分享 企业微信 Linux24.04 deepin 单片机 状态管理的 UDP 服务器 Arduino RTOS kvm 无桌面 命令行 git gitea HarmonyOS Next 媒体 微信公众平台 负载均衡 matlab av1 电视盒子 机顶盒ROM 魔百盒刷机 web Socket chatgpt YOLOv8 NPU Atlas800 A300I pro asi_bench 3d 数学建模 命名管道 客户端与服务端通信 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 express 宕机切换 服务器宕机 压力测试 https springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 ecm bpm redis mybatis sqlserver ddos 向日葵 c语言 qt stm32项目 ArcTS 登录 ArcUI GridItem list 数据结构 大模型 llama3 Chatglm 开源大模型 linux环境变量 自动化 多进程 1024程序员节 远程 命令 执行 sshpass 操作 prometheus iDRAC R720xd freebsd debian PVE k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm zotero WebDAV 同步失败 代理模式 AIGC 远程桌面 ansible playbook IIS .net core Hosting Bundle .NET Framework vs2022 XFS xfs文件系统损坏 I_O error java-ee spring cloud AI编程 物联网 iot firewalld 部署 服务器配置 华为云 Docker Compose docker compose docker-compose safari pip Mac 系统 dell服务器 go 硬件架构 微信小程序 小程序 android studio 交互 html pygame 小游戏 五子棋 TRAE 剧本 集成学习 集成测试 openEuler 学习 sql KingBase 代码调试 ipdb 软件工程 mysql离线安装 ubuntu22.04 mysql8.0 DevEco Studio 混合开发 环境安装 JDK 僵尸进程 jetty undertow UOS 统信操作系统 yum oceanbase rc.local 开机自启 systemd 麒麟 Trae AI代码编辑器 kubernetes VMware安装Ubuntu Ubuntu安装k8s k8s threejs 3D centos-root /dev/mapper yum clean all df -h / du -sh Windsurf 音乐服务器 Navidrome 音流 Qwen2.5-coder 离线部署 ping++ kylin 深度优先 图论 并集查找 换根法 树上倍增 智能手机 NAS Termux Samba Linux 嵌入式 linux驱动开发 arm开发 DeepSeek行业应用 DeepSeek Heroku 网站部署 串口服务器 缓存 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 Dify ESP32 学习方法 指令 ruoyi 实时音视频 服务器繁忙 IIS服务器 IIS性能 日志监控 react next.js 部署next.js nuxt3 devops springboot 设置代理 实用教程 bash 银河麒麟服务器操作系统 系统激活 Reactor 设计模式 C++ YOLOv12 数据库系统 漏洞 .net 安全威胁分析 vscode 1.86 unix minicom 串口调试工具 测试工具 gitlab 豆瓣 追剧助手 迅雷 nas 微信 unity3d rabbitmq 银河麒麟 kylin v10 麒麟 v10 网络穿透 云服务器 SSH Xterminal okhttp CORS 跨域 远程工作 HCIE 数通 大模型微调 mongodb maven intellij idea 文件系统 路径解析 腾讯云 dubbo gateway Clion Nova ResharperC++引擎 Centos7 远程开发 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 code-server echarts 信息可视化 数据分析 网页设计 gitee 大模型面经 职场和发展 Deepseek 大模型学习 pillow json html5 firefox kamailio sip VoIP 大数据 大数据平台 统信 国产操作系统 虚拟机安装 jar spring .netcore ci/cd ollama下载加速 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 温湿度数据上传到服务器 Arduino HTTP protobuf 序列化和反序列化 安装 WSL2 程序人生 WebRTC gpt 博客 webrtc 强制清理 强制删除 mac废纸篓 oneapi 开源 fpga开发 pdf 多线程服务器 Linux网络编程 springsecurity6 oauth2 授权服务器 token sas 蓝耘科技 元生代平台工作流 ComfyUI DeepSeek-R1 API接口 计算机外设 mac 软件需求 visualstudio CPU 主板 电源 网卡 wsl2 wsl IDE AI 原生集成开发环境 Trae AI 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 EasyConnect Cline ecmascript nextjs reactjs 流式接口 虚拟化 半虚拟化 硬件虚拟化 Hypervisor DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 apache Kylin-Server 服务器安装 系统开发 binder 车载系统 framework 源码环境 elasticsearch hadoop 微信分享 Image wxopensdk mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 virtualenv 搜索引擎 openwrt c Unity Dedicated Server Host Client 无头主机 开发环境 SSL证书 Linux PID elk dify 网络攻击模型 技能大赛 编辑器 LInux 代码托管服务 无人机 ROS 自动驾驶 outlook 机器人 vue vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 xrdp 远程连接 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap Ubuntu 24.04.1 轻量级服务器 NFS redhat 宠物 毕业设计 免费学习 宠物领养 宠物平台 AI大模型 程序员 小艺 Pura X 自动化测试 性能测试 功能测试 odoo 服务器动作 Server action 政务 分布式系统 监控运维 Prometheus Grafana 能力提升 面试宝典 技术 IT信息化 崖山数据库 YashanDB 视频编解码 实时互动 MacMini 迷你主机 mini Apple 交叉编译 tcpdump 直播推流 gpt-3 文心一言 jupyter 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 毕设 匿名管道 midjourney AI写作 其他 中间件 可信计算技术 安全架构 netty 大模型应用 远程控制 远程看看 远程协助 cnn GoogLeNet 超融合 rpc 远程过程调用 Windows环境 鸿蒙系统 visual studio code arm 蓝桥杯 佛山戴尔服务器维修 佛山三水服务器维修 ipython etcd 数据安全 RBAC VR手套 数据手套 动捕手套 动捕数据手套 鲲鹏 昇腾 npu 互信 三级等保 服务器审计日志备份 金融 数据挖掘 FTP服务器 seatunnel 华为od OD机试真题 华为OD机试真题 服务器能耗统计 驱动开发 mcu risc-v 计算机 干货分享 黑客工具 密码爆破 bootstrap docker run 数据卷挂载 交互模式 软考 网络结构图 css 联想开天P90Z装win10 7z Invalid Host allowedHosts 输入法 keepalived 统信UOS bonding 链路聚合 双系统 GRUB引导 Linux技巧 Redis Desktop 执法记录仪 智能安全帽 smarteye XCC Lenovo tailscale derp derper 中转 系统安全 矩阵 线性代数 电商平台 繁忙 解决办法 替代网站 汇总推荐 AI推理 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 CDN dba arkUI eNSP 网络规划 VLAN 企业网络 服务网格 istio skynet 课程设计 cursor 信息与通信 MCP server C/S windows日志 chrome devtools selenium chromedriver 游戏服务器 Minecraft embedding DOIT 四博智联 thingsboard 宝塔面板 r语言 H3C Linux的基础指令 kafka 自学笔记 小米 澎湃OS Android 阿里云ECS LORA 大语言模型 NLP Cursor 云服务 测试用例 shell 磁盘监控 kind minio 前后端分离 华为认证 网络工程师 历史版本 下载 语法 KVM 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 FunASR ASR 黑苹果 虚拟机 VMware file server http server web server wireshark sdkman Playwright muduo zabbix X11 Xming 生物信息学 gcc g++ g++13 nac 802.1 portal Cookie nvidia uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 Google pay Apple pay 服务器主板 AI芯片 ip命令 新增网卡 新增IP 启动网卡 王者荣耀 Wi-Fi cuda cudnn DNS 开机自启动 Spring Security Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer aws ESXi ue4 着色器 ue5 虚幻 rdp 实验 消息队列 alias unalias 别名 目标跟踪 OpenVINO 推理应用 游戏程序 源码 VMware创建虚拟机 交换机 硬件 设备 GPU PCI-Express anaconda mamba Vmamba QQ bot Docker regedit 开机启动 tidb GLIBC 阻塞队列 生产者消费者模型 服务器崩坏原因 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 ceph ISO镜像作为本地源 视觉检测 支付 微信支付 开放平台 GCC Linux环境 云电竞 云电脑 todesk hive Hive环境搭建 hive3环境 Hive远程模式 DeepSeek r1 Open WebUI Erlang OTP gen_server 热代码交换 事务语义 rocketmq MNN Qwen ip ui 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 宝塔 京东云 深度求索 私域 知识库 saltstack 基础入门 编程 银河麒麟桌面操作系统 Kylin OS 国产化 xss 进程信号 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 frp CLion 版本 腾讯云大模型知识引擎 游戏机 pppoe radius eclipse hugo 图像处理 Netty 即时通信 NIO 游戏引擎 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 SWAT 配置文件 服务管理 网络共享 flash-attention 报错 gaussdb C# MQTTS 双向认证 emqx vasp安装 AI作画 聊天室 epoll ocr gradle micropython esp32 mqtt AI agent 思科模拟器 思科 Cisco curl wget 算力 camera Arduino 电子信息 移动魔百盒 Radius googlecloud npm USB转串口 CH340 飞牛NAS 飞牛OS MacBook Pro JAVA IDEA qt项目 qt项目实战 qt教程 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP linux 命令 sed 命令 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? Ubuntu Server Ubuntu 22.04.5 数据可视化 权限 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 根服务器 clickhouse 社交电子 自动化任务管理 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 prompt easyui langchain EMQX MQTT 通信协议 hibernate idm 弹性计算 计算虚拟化 弹性裸金属 ragflow lua chfs ubuntu 16.04 显示管理器 lightdm gdm yum源切换 更换国内yum源 同步 备份 建站 laravel grafana IO模型 直流充电桩 充电桩 IPMI 音乐库 群晖 飞牛 junit 飞牛nas fnos 需求分析 规格说明书 bug iftop 网络流量监控 裸金属服务器 弹性裸金属服务器 p2p make命令 makefile文件 火绒安全 eureka Nuxt.js ios iphone n8n 工作流 workflow 备选 网站 api 调用 示例 AD域 vSphere vCenter 软件定义数据中心 sddc 反向代理 致远OA OA服务器 服务器磁盘扩容 安卓 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 docker命令大全 5G 3GPP 卫星通信 dns 大模型入门 HTTP 服务器控制 ESP32 DeepSeek 单例模式 边缘计算 智能硬件 mariadb 查询数据库服务IP地址 SQL Server AutoDL 技术共享 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 监控k8s 监控kubernetes sqlite MS Materials openssl 密码学 业界资讯 模拟退火算法 Docker Hub docker pull 镜像源 daemon.json mosquitto MacOS录屏软件 SysBench 基准测试 flink RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 Claude 华为机试 Python AnythingLLM AnythingLLM安装 AISphereButler 自定义客户端 SAS WebUI DeepSeek V3 银河麒麟高级服务器 外接硬盘 Kylin DenseNet 框架搭建 qemu libvirt 医疗APP开发 app开发 回显服务器 UDP的API使用 Dell HPE 联想 浪潮 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 armbian u-boot 策略模式 大模型教程 efficientVIT YOLOv8替换主干网络 TOLOv8 remote-ssh 模拟器 教程 ukui 麒麟kylinos openeuler rust腐蚀 RustDesk自建服务器 rustdesk服务器 docker rustdesk asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 ftp VPS pyqt VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 can 线程池 恒源云 EMUI 回退 降级 升级 tcp ux 多线程 vscode1.86 1.86版本 ssh远程连接 open Euler dde RTMP 应用层 USB网络共享 LLM Web APP Streamlit Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 监控k8s集群 集群内prometheus linux安装配置 服务器管理 配置教程 网站管理 big data kali 共享文件夹 opensearch helm 飞书 孤岛惊魂4 uniapp ssh漏洞 ssh9.9p2 CVE-2025-23419 sysctl.conf vm.nr_hugepages adobe 传统数据库升级 银行 LLMs k8s集群资源管理 云原生开发 VS Code 单一职责原则 网络编程 聊天服务器 套接字 TCP 客户端 工业4.0 IPMITOOL BMC 硬件管理 vmware 卡死 opcua opcda KEPServer安装 SSH 服务 SSH Server OpenSSH Server 自动化编程 open webui 软件构建 TrinityCore 魔兽世界 微信开放平台 微信公众号配置 远程登录 telnet 单元测试 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 selete 高级IO asp.net大文件上传下载 文件分享 xml iis VSCode 移动云 灵办AI 小智AI服务端 xiaozhi TTS 链表 Ark-TS语言 ros2 moveit 机器人运动 FTP 服务器 AD 域管理 网站搭建 serv00 spark HistoryServer Spark YARN jobhistory Headless Linux 虚拟显示器 zookeeper nfs 服务器部署ai模型 cmos SSL 域名 rsyslog Anolis nginx安装 linux插件下载 ruby 显示过滤器 ICMP Wireshark安装 raid5数据恢复 磁盘阵列数据恢复 图形化界面 僵尸世界大战 游戏服务器搭建 银河麒麟操作系统 硬件工程 嵌入式实习 perf crosstool-ng DBeaver 数据仓库 kerberos 重启 排查 系统重启 日志 原因 v10 软件 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 网络用户购物行为分析可视化平台 大数据毕业设计 我的世界服务器搭建 minecraft VMware安装mocOS macOS系统安装 黑客技术 多层架构 解耦 openstack Xen URL 本地部署 架构与原理 多个客户端访问 IO多路复用 TCP相关API SSE 分析解读 Logstash 日志采集 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 网工 压测 ECS pgpool ssrf 失效的访问控制 MI300x 端口测试 田俊楠 ABAP 防火墙 NAT转发 NAT Server MVS 海康威视相机 Deepseek-R1 私有化部署 推理模型 本地部署AI大模型 聚类 程序 性能分析 实习 信号 SRS 流媒体 直播 figma 虚拟局域网 TrueLicense dash 正则表达式 react native 具身智能 强化学习 cd 目录切换 常用命令 文本命令 目录命令 python3.11 proxy模式 Jellyfin 存储维护 NetApp存储 EMC存储 知识图谱 rustdesk 金仓数据库 2025 征文 数据库平替用金仓 显卡驱动 css3 sentinel OpenSSH 程序员创富 序列化反序列化 IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 信号处理 主从复制 swoole 容器技术 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 我的世界 我的世界联机 数码 Ubuntu共享文件夹 共享目录 Linux共享文件夹 iperf3 带宽测试 UDP 线程 智能音箱 智能家居 HarmonyOS seleium 加解密 Yakit yaklang sonoma 自动更新 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos xshell termius iterm2 triton 模型分析 neo4j 数据库开发 database 服务器时间 流量运营 RAGFlow 本地知识库部署 DeepSeek R1 模型 安防软件 代码 对比 工具 meld Beyond Compare DiffMerge lio-sam SLAM xcode uv glibc Kali rclone AList webdav fnOS IM即时通讯 剪切板对通 HTML FORMAT 环境配置 软负载 AI-native Docker Desktop 云桌面 微软 AD域控 证书服务器 HiCar CarLife+ CarPlay QT RK3588 yolov8 Node-Red 编程工具 流编程 合成模型 扩散模型 图像生成 wps matplotlib 软件卸载 系统清理 OpenHarmony 真机调试 deployment daemonset statefulset cronjob vpn 读写锁 AI Agent 字节智能运维 办公自动化 自动化生成 pdf教程 rnn Unity插件 iventoy VmWare OpenEuler etl 端口 查看 ss 图形渲染 MacOS arcgis less sequoiaDB 个人博客 捆绑 链接 谷歌浏览器 youtube google gmail ArkTs ArkUI 健康医疗 互联网医院 rag ragflow 源码启动 prometheus数据采集 prometheus数据模型 prometheus特点 c/c++ 串口 运维监控 相机 Mac内存不够用怎么办 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK word pyautogui PX4 db 带外管理 fd 文件描述符 yaml Ultralytics 可视化 grub 版本升级 扩容 Linux find grep 钉钉 用户缓冲区 模拟实现 MQTT协议 消息服务器 游戏开发 代理 onlyoffice 信创 信创终端 中科方德 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 webgl SenseVoice 大模型推理 OpenManus sqlite3 考研 抓包工具 在线office cocoapods dns是什么 如何设置电脑dns dns应该如何设置 miniapp 调试 debug 断点 网络API请求调试方法 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 apt 国内源 私有化 docker desktop image tensorflow 网络建设与运维 su sudo 渗透 jina x64 SIGSEGV xmm0 MySql 分布式训练 xpath定位元素 composer bat Ubuntu22.04 开发人员主页 harmonyOS面试题 trea idea docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 KylinV10 麒麟操作系统 Vmware 邮件APP 免费软件 SVN Server tortoise svn 开发 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 aarch64 编译安装 HPC EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 HAProxy iBMC UltraISO edge浏览器 物联网开发 树莓派 VNC log4j ubuntu24.04.1 域名服务 DHCP 符号链接 配置 deepseek r1 键盘 SEO 粘包问题 代理服务器 fast 内网服务器 内网代理 内网通信 Xinference vr ubuntu24 vivado24 免费域名 域名解析 kotlin 镜像 DocFlow mq perl 远程服务 李心怡 语音识别 navicat IMX317 MIPI H265 VCU Linux的权限 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 ShenTong nvm whistle wpf Python基础 Python教程 Python技巧 Attention WLAN EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 Typore 软链接 硬链接 查看显卡进程 fuser 串口驱动 CH341 uart 485 wsgiref Web 服务器网关接口 CrewAI llama.cpp rime WebVM 做raid 装系统 基础环境 流水线 脚本式流水线 win服务器架设 windows server ardunio BLE bcompare webstorm 迁移指南 CentOS 并查集 leetcode 项目部署到linux服务器 项目部署过程 CVE-2024-7347 问题解决 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 autodl 状态模式 ssh远程登录 Windows 嵌入式Linux IPC linux上传下载 web3 浏览器开发 AI浏览器 UOS1070e 中兴光猫 换光猫 网络桥接 自己换光猫 多端开发 智慧分发 应用生态 鸿蒙OS IMM 企业网络规划 华为eNSP lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 hexo 烟花代码 烟花 元旦 性能调优 安全代理 powerpoint dity make 元服务 应用上架 换源 Debian 磁盘清理 GIS 遥感 WebGIS 实战案例 trae searxng Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 大大通 第三代半导体 碳化硅 ros 人工智能生成内容 毕昇JDK ai工具 java-rocketmq ldap 产测工具框架 IMX6ULL 管理框架 内网环境 ubuntu20.04 ros1 Noetic 20.04 apt 安装 h.264 firewall top Linux top top命令详解 top命令重点 top常用参数 cfssl TCP协议 deekseek 抗锯齿 拓扑图 milvus QT 5.12.12 QT开发环境 Ubuntu18.04 网卡的名称修改 eth0 ens33 deep learning cpp-httplib 影刀 #影刀RPA# fstab P2P HDLC 项目部署 推荐算法 风扇控制软件 dock 加速 CentOS Stream yolov5 ranger MySQL8.0 西门子PLC 通讯 热榜 达梦 DM8 js 鸿蒙开发 移动开发 多路转接 rpa 端口聚合 windows11 本地化部署 搭建个人相关服务器 System V共享内存 进程通信 玩机技巧 软件分享 软件图标 云耀服务器 kernel 接口优化 k8s二次开发 欧标 OCPP nlp 极限编程 数字证书 签署证书 嵌入式系统开发 解决方案 IO 智能电视 Qwen2.5-VL vllm conda配置 conda镜像源 docker部署Python 大模型部署 稳定性 看门狗 yum换源 ArtTS AI员工 macOS 网络爬虫 服务器正确解析请求体 开机黑屏 沙盒 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR gnu MDK 嵌入式开发工具 论文笔记 sublime text 离线部署dify 虚幻引擎 Sealos 论文阅读 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 hosts nosql 网络搭建 神州数码 神州数码云平台 云平台 visual studio MobaXterm PPI String Cytoscape CytoHubba HarmonyOS NEXT 原生鸿蒙 搜狗输入法 中文输入法