最新资讯

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

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

2025-04-29 20:02:44 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/5779.html

搜索文章

Tags

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