最新资讯

  • 【寻找Linux的奥秘】第四章:基础开发工具(下)

【寻找Linux的奥秘】第四章:基础开发工具(下)

2025-04-27 23:38:05 0 阅读


请君浏览

    • 前言
    • 1. 自动化构建
      • 1.1 背景
      • 1.2 基本语法
      • 1.3 make的运行原理
      • 1.4通用的makefile
    • 2. 牛刀小试--Linux第一个小程序
      • 2.1 回车与换行
      • 2.2 行缓冲区
      • 2.3 倒计时小程序
      • 2.4 进度条小程序
        • 原理
        • 代码
    • 3. 版本控制器git
      • 3.1 认识
      • 3.2 git的使用
        • 三板斧
      • 3.3 其他
    • 4. 调试器gdb/cgdb
      • 4.1 了解
      • 4.2 使用
      • 4.3 小技巧
        • 4.3.1 安装cgdb
        • 4.3.2 watch
        • 4.3.3 set var
        • 4.3.4 条件断点
    • 尾声

前言

本专题将介绍关于Linux操作系统的种种,那么上一章我们讲解了Linux中最常用的编辑器vim和编译器gcc,本章将继续讲解Linux中的其他的基本开发工具。(本章节默认使用的环境是centos 7.8)

1. 自动化构建

1.1 背景

首先,我们要知道什么是自动化构建,自动化构建到底有什么作用。

自动化构建是提高开发流程效率与质量的工具。在Linux中最常用的自动化构建工具由两部分组成:make和makefile

  • make是⼀个命令⼯具,用于解释makefile中指令的命令⼯具
  • makefile是一个文件,用于定义构建规则和依赖关系

两者搭配使用,完成项目自动化构建。

那么自动化构建适用于哪里、有什么作用呢?

在我们编写一些项目时,通常会把各种声明和定义以及测试放在不同的文件中,例如我们之前自己实现数据结构的时候:

我们会把栈的各种声明放在Stack.h的头文件中,把其中函数的具体实现放在Stack.c中,最后在main.c中进行测试以及使用,放在不同的文件中可以提高代码的可维护性以及方便代码的复用等好处,特别是在大型项目这些好处体现的就会更加明显。

我们知道,对于这种多文件的编译我们是先把所有的.c文件编译为.o文件,也就是可重定位目标二进制文件,使之停留在汇编阶段,然后再将所有.o文件链接形成最后的可执行文件。那么在Linux下我们该如何操作呢?其实很简单,如下图所示:

我们只需要用gcc同时编译需要链接的.c文件,这样它们就可以链接在一起了。虽然目前来看也并没有难度,可是如果我们需要链接的一起的源文件有几十个、几百个、甚至上千个呢?如果再靠我们一个一个手动去输入的话恐怕等输入完黄花菜都凉了。这个时候就需要用到我们的自动化构建工具——make了。我们可以通过一个make命令来完成这繁琐以及更复杂的功能。

⼀个⼯程中的源⽂件不计数,其按类型、功能、模块分别放在若⼲个⽬录中,我们可以在makefile文件中定义⼀系列的规则来指定,哪些⽂件需要先编译,哪些⽂件需要后编译,哪些⽂件需要重新编译,甚⾄于进⾏更复杂的功能操作。通过make软件来执行我们makefile文件中的操作,可以实现大面积的自动化。

makefile带来的好处就是⸺“⾃动化编译”,⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤的提⾼了软件开发的效率。

下面让我们来看看该如何使用make。

1.2 基本语法

使用make最重要的就是编写makefile文件了,只有在makefile文件中合理且正确的写出我们需要的指令,才能使用make来达到我们想要的效果,下面让我们简单来看一看如何在makefile中编写指令从而可以编译我们上面的代码:

我们先来看一个最简单但没有通用性的:

例如上图,test.c是一个我们最基础的C语言代码,我们通过编写Makefile文件执行make命令,就可以自动编译该文件:

下面让我们来看一看Makefile文件中的每一句指令都是什么意思,代表了什么:

  • 目标文件:首先目标文件也就是我们通过依赖关系和依赖方法需要形成的文件
  • 依赖关系:依赖关系是我们生成目标文件所需要的文件
  • 依赖方法:依赖方法是我们通过依赖关系生成目标文件的命令
  • 伪目标:在Makefile中,伪目标是一种特殊的目标,它们不对应于实际的文件,而是用来执行特定的命令。伪目标通常用于清理项目(如删除编译生成的文件),执行测试,或者其他不产生文件的操作。

1.3 make的运行原理

clean这种,没有被第⼀个⽬标⽂件直接或间接关联,那么它后⾯所定义的命令将不会被⾃动执⾏,不过,我们可以显⽰要make执⾏。即命令⸺make clean,以此来清除所有的⽬标⽂件,以便重编译。因此,我们通常将它设置为伪目标。用.PHONY 修饰,伪⽬标的特性是,总是被执⾏的。

总是可执行我们该如何理解呢?想要理解这个概念我们要知道make是如何⼯作的,在默认的⽅式下,也就是我们只输⼊make命令。那么:

  • 首先,make会在当前⽬录下找名字叫Makefilemakefile的⽂件,在找到Makefile文件后会自定向下扫描Makefile文件,默认形成第一个目标文件,如果想要指定形成,可以使用make+targetname命令。还是以上面的Makefile为例,它会找到test这个文件,并把这个文件作为最终的目标文件。

我们修改一下Makefile中的内容,来演示一下在Makefile中如果依赖关系暂时不存在时make的运行:

如上图所示,使用make默认形成的最终文件是test,它的依赖是test.o,可是我们在当前目录下并没有找到test.o文件,那么那么 make 会寻找⽬标为test.o ⽂件的依赖性,如果找到则再根据那⼀个规则⽣成tesc.o ⽂件。(这有点像⼀个堆栈的过程),具体的过程如下图所示:

这就是整个make的依赖性,make会⼀层⼜⼀层地去找⽂件的依赖关系,直到最终编译出第⼀个⽬标⽂件。在找寻的过程中,如果出现错误,⽐如最后被依赖的⽂件找不到,那么make就会直接退出,并报错。make只管⽂件的依赖性,即,如果在我找到了依赖关系之后,冒号后⾯的⽂件还是不存在,那么就会报错。

那么如果我们连续使用make命令会发生什么呢?

我们拿上面的Makefile为例,如果test文件不存在,或者 test 所依赖的后⾯的 test.c ⽂件的⽂件修改时间要⽐ test 这个⽂件新,那么,他就会执⾏后⾯所定义的命令也就是依赖方法来⽣成test 这个⽂件。 但是当test存在且它所依赖的test.c文件的修改时间要小于test的修改时间,那么我们再次执行make命令时系统会给我们一个提示,并且make不再执行:

如上图所示,我们在使用一次make后再次使用系统给了我们一个提示:test文件以及是最新的了。如果再次进行编译得到的结果也与之前一样。那么make是怎么识别的呢?它其实看的就是test文件与test.c文件修改时间的比较,test.c的修改时间小于test:

那么什么是修改时间呢?这里就涉及到了文件属性中的三大时间,分别为:

  • 访问时间(atime):最近一次访问的时间,使用cat、more等指令时该时间会改变。
  • 修改时间(mtime):文件内容最后被修改的时间,对文件进行写入操作并保存后该时间会改变。
  • 状态改动时间(ctime):文件属性最后被修改的时间,文件的属性包括大小、权限等等,当它们发生变化的时候该时间会改变。

(小贴士:我们可以用stat命令查看文件的详细属性,用file命令查看文件的详细类型)

其中,make比较的是文件的修改时间(mtime),也就是Modify时间,通过下图相信大家能有更深的理解:

上面的原理我们理解之后再来看伪目标的总是被执行的特性就可以理解了,也就是说伪目标可以让make忽略源⽂件和可执⾏⽬标⽂件的M时间对⽐,每次使用时都可以被执行。

1.4通用的makefile

上面我们所写的makefile局限性很大,它限制了我们源文件的文件名以及个数,那么我们该如何实现一个通用的makefile文件呢?

  • 首先,对于很多的程序它的源文件都不止一个,我们需要先将这些源文件都编译成.o文件,然后再进行链接形成可执行程序。

我们通过下图来介绍一下,这就是一个比较通用的Makefile文件:

  • 在Makefile文件中#用来注释,使用变量需要用$(变量名)
  • 在命令前加上@符号可以在make执行时不在shell上再显示执行的命令,也就是使命令不再回显
  • 我们用echo可以显示我们使用make的过程
  • $^代表依赖文件列表,$@代表目标文件名,$<代表对展开的依赖.c文件,一个个交给gcc
  • %.c:展开当前目录下所有的.c文件
  • %.o:展开当前目录下所有的.o文件

下面让我们来看一看效果,我们用最开始的代码为例:

当前我们只有两个源文件,已经能够管中窥豹,如果是在大型项目中,使用自动化构建make会非常的方便。当然,上面的通用Makefile文件也只是一个简单的版本,我们还可以加入更多的指令去满足我们更多样化的需求,在使用中相信大家会逐渐体会到make对于提高编译效率方面的好处。

2. 牛刀小试–Linux第一个小程序

工具学到这里,我们已经学会了编辑器vim、编译器gcc和自动化构建make,这些已经可以支撑我们在Linux中写一些有趣的小程序了。俗话说得好,光说不练假把式。既然我们已经学了这么多工具,那么接下来让我们来实际的上手操作一下,巩固之前的学习,让我们来一个小程序叫做进度条。

2.1 回车与换行

在写进度条之前我们需要先明确两个概念:回车与换行。我们日常经常把回车和换行看作是同一种东西,其实并不然:

  • 回车:回到所在行的起始位置
  • 换行:换到当前位置的下一行

如下图所示:

可以看到,我们实际上的换行操作是换行加上回车,我们的' '就是一个典型的例子,键盘上的Enter键的图标也在提醒我们:

在C语言中,我们用' '来表示回车。

2.2 行缓冲区

接着我们再来看一看行缓冲区的概念。这里提出一个问题:我们使用printf函数打印的内容是直接出现在显示器上的吗?

我们可以通过代码来验证一下:

通过对两种情况的测试我们发现,在带 时,我们打印的内容是先出现在显示屏后再等待两秒;而不带 时,是先等待了两秒后我们打印的内容才显示在显示器上。

这是因为在内存上存在一片缓冲区,我们显示器的刷新策略是行刷新:一行一行的刷新。在遇到' '时由于要进行换行,所以直接刷新在显示器上,而没有 时,要打印的内容一直在缓冲区中,当程序运行完后才刷新到显示器上。那么有没有什么方法让它立即刷新呢?C语言提供了一个名为fflush的函数,可以立即刷新缓冲区中的内容:

那么在使用fflush函数后我们可以发现,即便没有' ',我们的程序也是先打印出内容后再进行等待:

2.3 倒计时小程序

那么基于此,我们便可以写一个简单的倒计时程序:

#include
#include
int main()
{
        int ret = 10;
        while(ret >= 0)
        {
                printf("%-2d
", ret--);
                fflush(stdout);
                sleep(1);
        }
        printf("
");
        return 0;
}

每一次打印后’ ’回到起始位置,然后使用fflush函数将缓冲区中的内容刷出,每次打印间隔一秒,这样,我们就得到了一个简单的倒计时程序。

2.4 进度条小程序

上面通过简单的倒计时小程序我们学会了' '结合fflush的小用法,那么接下来让我们更进一步,在设计一个进度条程序。

原理

我们再下载程序以及上传软件等状况下都会有一个进度条来显示我们的进度。一个简单的进度条我们可以看作三个部分组成:条形图、百分比、旋转光标

我们知道,在进度条运行的过程中总长度并不会改变,只是条形图中的填充物会逐渐增多,百分比逐渐变大,旋转光标不停的转动,代码进度条在正常运行。因此,我们只需要提前预留出若干个空间,用作填充条形图,预留空间是固定条形图的总长度;然后根据倒计时小程序去设计百分比不断的变大,直到达到百分之百;而旋转光标我们只需要用一个字符数组,不断遍历其中的字符即可。

代码

思路有了,那么让我们直接用vim来编写我们在Linux中的C语言程序吧:

#include "process.h"
#include 
#include 

#define NUM 101
#define STYLE '='

int main()
{
    char buffer[NUM];
    memset(buffer, 0, sizeof(buffer));
    const char *lable="|/-";
    int len = strlen(lable);
    
    int cnt = 0;
    while(cnt <= 100)
    {
        printf("[%-100s][%d%%][%c] 
", buffer, cnt, lable[cnt%len]);
        fflush(stdout);
        buffer[cnt]= STYLE;
        cnt++;
        usleep(50000);
    } 
    printf("
");
}

运行后我们可以发现跟我们的预期基本一致。当然,我们这个只是非常简易的进度条,并没有什么实际用途,我们只是用作对之前所学工具的巩固。大家感兴趣的话也可以自己去模拟变化的网速去设计更加有效果的进度条玩一玩。

3. 版本控制器git

3.1 认识

我们该如何理解版本控制呢?这里举一些简单的例子:

  • 当我们再玩一些单机的游戏时,由于我们的各种游戏数据都存储在本地,因此当我们在打boss前或者去进行一些危险的操作时可以提前把我们的游戏数据进行备份,这样在我们打boss失败了还损失了强力道具时我们可以通过之前的备份来恢复到我们打boss前的状态。当然我们可以在不同的时间段留下不同的备份,可以使我们恢复到想要的时间段。

  • 我们写论文的时候也是如此,当我们写完初稿后会找导师进行请教,根据导师的建议不断完善我们的论文,每一次修改前我们都需要做好相应的备份,以便失误后能够恢复到原来的版本。

这些不同的备份我们通常将其称作不同的版本,当我们的版本越来越多之后,我们该如何知道每个版本各自都是修改了什么呢?

我们写的项目代码也是如此,随着不断的迭代产生了许多不同的版本。为了方便管理这些不同版本的文件,便有了版本控制器

所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业

⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!⾃诞⽣于 2005 年以来,Git ⽇臻成熟完善,在⾼度易⽤的同时,仍然保留着初期设定的⽬标。 它的速度⻜快,极其适合管理⼤项⽬,有着令⼈难以置信的⾮线性分⽀管理系统。

但是这些文件只是放在本地可能会遭遇硬件受损等外力影响导致文件丢失,于是,基于Git的代码托管服务平台就诞生了,例如我们耳熟能详的Github,这是一个全球程序员都在使用的代码托管平台。但是由于某些原因,我们在国内想要使用GitHub不太容易。但是国内也有自己的代码托管平台,例如Gitee

3.2 git的使用

我们要想使自己的项目上传到远端,也就是GitHub或者Gitee上,首先需要有相应平台的账户(由于某些原因,我们以Gitee为例),然后新建一个仓库:

然后根据我们的需要填写相关的内容:

创建好之后我们点击克隆/下载,复制对应的链接 :

之后我们在Linux下就可以下载项目到本地了(windows的操作一样):git clone [url],url就是我们刚才复制的链接。

当然,如果你在GitHub和Gitee上想要下载开源项目也是一样的操作,复制项目的链接使用上面的命令下载到本地。

我们可以先检查一下当前环境下是否安装了git,通过命令git --version

如果没有安装,我们使用命令yum install -y git进行安装。

我们来看一下下载到本地后都有些什么文件:

  • 前两个不用再进行解释了,分别代表了上级目录和当前目录
  • README.md:可以理解为项目说明书,一份中文版,一份英文版。
  • .git:本地仓库。里面包含了我们所有的修改记录。
  • .gitignore:在该文件中进行配置可以忽略一些特殊不需要或者不想add的文件。

Git提交的时候,只会提交变化的部分。例如我们有一个100行代码的文件,我们对其最后一行进行了修改,随后提交到了git上,这里git上只是保存了我们变化的那一部分,而不是全部保存。

三板斧
  1. git add

    将文件放到刚才下载好的目录中

    git add [文件名]

    第一步将需要用git管理的文件告知git。

  2. git commit

    提交改动到本地

    git commit -m "说明"

    提交的时候应该注明提交⽇志, 描述改动的详细内容。

  3. git push

    同步到远端服务器上

    git push

    需要填⼊⽤⼾名和密码,同步成功后, 刷新 Gitee⻚⾯就能看到代码改动了。

我们来操作一下:

我们在拉取项目到本地后的目录称为工作区,我们在工作区中新建一个文件:

这个时候我们的code文件还不在本地仓库中,我们需要把他先add到一块命为暂存区的地方,然后commit把暂存区中的所有内容提交到本地仓库,最后在push同步到远端仓库上:

(我们可以使用git add *将当前目录下所有陌生的文件添加到暂存区中)

push我们需要输入账户名和密码:

成功之后刷新我们的Gitee网页,就可以看到代码已经同步了:

3.3 其他

我们可以使用git log 来查看我们该仓库所有的提交记录:

使用git进行版本管理,我们只进行管理源文件,也就是.c .cpp .h等,不管理各种临时文件,上面我们提到的.gitignore文件中就是各种临时文件的后缀名,可以帮助我们过滤这些文件,在提交的时候不提交这些文件:

当然,我们也可以进行修改,例如加入一些我们不需要的特殊文件。

git status 命令是一个用于查看 Git 仓库当前状态的命令。它显示了工作目录和暂存区的状态,帮助开发者了解哪些文件已修改、哪些文件未跟踪以及哪些文件已暂存。

至于git还有更多的操作,这里就不再详细的讲解了,我们现在的目的是能够简单的使用git上传和下载项目就可以了。

4. 调试器gdb/cgdb

4.1 了解

相信之前使用vs2022这些集成式开发环境时大家都领略到了调试的魅力,通过调试我们可以快速的找到代码中的问题所在。那么在Linux下我们可以对代码进行调试吗?答案是当然可以。

在Linux下有专门的调试器gdb来帮助我们进行调试的工作。

程序的发布方式有两种,一种是debug模式,一种是release模式,在vs2022上我们想要对代码进行调试需要在debug模式上,在Linux中的gdb也是如此,而我们在Linux下使用gcc/g++进行编译出来的程序默认是release模式,因此要想使用gdb进行调试,我们需要在编译时带上-g选项gcc xxx.c -o xxx -g,使其以debug模式发布。我们日常使用的各种软件都是release模式。

可以看到我们debug模式下的可执行程序的内存是要大于release模式下的,这是因为在debug模式中包含了我们的调试信息,正是有了这些调试信息我们才能对其进行调试。

两种模式下运行结果也是一样的

我们调试的对象是携带调试信息的可执行程序(也就是debug模式),而不是我们的源文件。

4.2 使用

  • 开始:我们直接用gdb加上需要调试的程序名即可使用gdb:gdb [name]

  • 退出:ctrl+d或者quit调试命令

下面是一些gdb的常用命令:

命令作⽤样例
list/l显⽰源代码,从上次位置开始,每次列出10⾏list/l 10
list/l 函数名列出指定函数的源代码list/l main
list/l ⽂件名:⾏号列出指定⽂件的源代码list/l mycmd.c:1
r/run从程序开始连续执⾏run
n/next单步执⾏,不进⼊函数内部next
s/step单步执⾏,进⼊函数内部step
break/b [⽂件名:]⾏号在指定⾏号设置断点break 10break test.c:10
break/b 函数名在函数开头设置断点break main
info break/b查看当前所有断点的信息info break
finish执⾏到当前函数返回,然后停⽌finish
print/p 表达式打印表达式的值print start+end
p 变量打印指定变量的值p x
set var 变量=值修改变量的值set var i=10
continue/c从当前位置开始连续执⾏程序continue
删除所有断点delete breakpoints
删除序号为n的断点delete breakpoints 1
disable breakpoints/[断点编号]禁⽤所有/指定断点disable breakpoints
enable breakpoints/[断点编号]启⽤所有/指定断点enable breakpoints
info/i breakpoints查看当前设置的断点列表info breakpoints
display 变量名跟踪显⽰指定变量的值(每次停⽌时)display x
undisplay 编号取消对指定编号的变量的跟踪显⽰undisplay 1
until X⾏号执⾏到指定⾏号until 20
backtrace/bt查看当前执⾏栈的各级函数调⽤及参数backtrace
info/i locals查看当前栈帧的局部变量值info locals
quit退出GDB调试器quit

调试的本质:帮助我们找到代码的问题所在。

4.3 小技巧

在没有图形化界面进行调试还是很难操作的,下面的一些技巧可以帮助我们更好的进行调试。

4.3.1 安装cgdb

我们用gdb的时候只能通过list命令看到我们的代码,不是很方便,cgdb这个工具的命令与gdb基本一样,不过它可以使我们的代码在上方展现,使我们的调试过程更加清晰一点:

  • Ubuntusudo apt-get install -y cgdb
  • Centossudo yum install -y cgdb
4.3.2 watch

执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,gdb会暂停程序的执⾏,并通知使⽤者:

如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变化了,就会通知你。

4.3.3 set var

可以直接修改变量的值,可以帮助我们直接确定原因所在:set var [变量名]=[值]

4.3.4 条件断点

我们在建立断点时可以给予其特定的条件,使其在满足条件时才可以触发:b [行号] [条件]

当然,我们也可以给已经存在的断点设定条件,使用命令:condition [断点编号] [条件]

注意:

  • 上面条件断点添加两种⽅式语法略有不同,第一种条件前需要加if,第二种则不用。
  • cgdb中可以使用esc进入上方代码屏,用i回退到下方gdb屏。

尾声

本章讲解就到此结束了,若有纰漏或不足之处欢迎大家在评论区留言或者私信,同时也欢迎各位一起探讨学习。感谢您的观看!

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

搜索文章

Tags

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