2024三掌柜赠书活动第三期:Rust系统编程

目录

前言

Rust语言概念

关于《Rust系统编程》

Rust系统编程的核心点

Rust系统编程的关键技术和工具

编辑推荐

内容简介

作者简介

图书目录

书中前言/序言

《Rust系统编程》全书速览

结束语


前言

在技术圈,最近的编程语言新秀当属Rust莫属,Rust是一种现代化的系统编程语言,具有强大的性能、内存安全和并发性,它旨在提供高效的低级控制和抽象,使开发人员能够编写高性能、可靠且安全的系统级应用程序。据悉在 Stack Overflow 的年度开发者调查报告中,Rust 连续多年被评为“最受喜爱的编程语言”,越来越多的大公司如谷歌、微软、腾讯等都开始将Rust运用于各类项目中。本文就来简单聊聊Rust系统编程的基本概念和特点,并聊聊如何使用Rust构建可靠的系统级软件。

Rust语言概念

作为开发者想必都知道,Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,设计者想要在保证性能的同时提供更好的内存安全。据悉 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的,Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。

还有就是Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件,另外,Rust已经连续七年(2016,2017,2018,2019,2020, 2021, 2022)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。

关于《Rust系统编程》

接下来给大家推荐一本关于Rust系统编程学习必备的书籍,这是一本关于Rust系统编程实战类的干货图书,一经上市就登上了京东“计算机与互联网”图书排行榜前列。另外,关注本文博主,点赞+收藏本文,且在本文评论区评论“我要入门Rust编程”,将选取三名幸运读者送出纸质版《Rust系统编程》一本,截止时间:2024.01.14。入手《Rust系统编程》传送门:https://item.jd.com/13434725.html 或者 《Rust系统编程》([印]普拉布·艾什沃拉 著 刘君 译)【简介_书评_在线阅读】 - 当当图书,个人觉得这本书非常的不错,尤其是想构建可靠的系统级软件的开发者来讲,是一本不可多得的好书,值得拥有去学习。

Rust系统编程的核心点

  1. 内存安全:Rust的所有权系统和借用检查器能够在编译时防止常见的内存错误,如空指针引用、数据竞争等。
  2. 零成本抽象:Rust提供了高级抽象和模块化的编程机制,同时保证在运行时不引入额外的开销。
  3. 高性能:Rust的运行时性能接近于C/C++,并且具备对内存分配和线程管理的精细控制。
  4. 并发性:Rust的并发模型允许开发人员编写安全的并发代码,包括线程安全、跨线程通信等。

Rust系统编程的关键技术和工具

  1. unsafe关键字:Rust提供了unsafe关键字,用于处理需要绕过编译时检查的底层操作,如访问原始指针和调用不安全的函数。
  2. FFI(Foreign Function Interface):Rust支持与其他语言进行无缝集成,可以直接调用C语言函数和使用C语言的数据结构。
  3. Cargo构建系统:Cargo是Rust的默认构建系统,提供了便捷的项目管理、依赖管理和构建工具等功能。

编辑推荐

Rust是一种现代开源系统编程语言,它承诺并做到了3个领域的:Java的类型安全;C 的速度、表现力和效率;无须垃圾收集器的内存安全。通读完本书,你会对如何使用Rust管理和控制操作系统资源(如内存、文件、进程、线程、系统环境、外围设备、网络接口、终端和外壳程序)有清晰的了解,并掌握如何通过FFI构建跨语言绑定。在此过程中,你会对Rust为构建安全、高性能、可靠和高效的系统级软件带来的价值有深刻的认识。

内容简介

《Rust系统编程》详细阐述了与Rust系统编程相关的基本解决方案,主要包括Rust工具链和项目结构,Rust编程语言之旅,Rust标准库介绍,管理环境、命令行和时间,Rust中的内存管理,在Rust中使用文件和目录,在Rust中实现终端I/O,处理进程和信号,管理并发,处理设备I/O,学习网络编程,编写不安全Rust和FFI等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

图书目录

目    录

第1篇  Rust系统编程入门

第1章  Rust工具链和项目结构 3

1.1  技术要求 3

1.2  为项目选择正确的Rust配置 4

1.2.1  选择Rust发布通道 4

1.2.2  选择Rust项目类型 6

1.3  Cargo和项目结构简介 7

1.4  使用Cargo自动化构建管理 9

1.4.1  构建一个基本的二进制项Crate 9

1.4.2  配置Cargo 11

1.4.3  构建静态库Crate 13

1.5  自动化依赖项管理 14

1.5.1  指定依赖项的位置 15

1.5.2  在源代码中使用依赖包 16

1.6  编写和运行自动化测试 16

1.6.1  用Rust编写单元测试 17

1.6.2  用Rust编写集成测试 18

1.6.3  控制测试执行 19

1.6.4  按顺序或并行运行测试 21

1.7  生成项目文档 21

1.7.1  在Crate中编写内联文档注释 22

1.7.2  在Markdown文件中编写文档 23

1.7.3  运行文档测试 24

1.8  小结 24

1.9  延伸阅读 25

第2章  Rust编程语言之旅 27

2.1  技术要求 28

2.2  分析问题域 28

2.3  系统行为建模 29

2.4  构建标记化器 32

2.4.1  Tokenizer数据结构 32

2.4.2  Tokenizer数据处理 36

2.5  构建解析器 40

2.5.1  Parser数据结构 41

2.5.2  Parser方法 43

2.5.3  运算符优先级 47

2.6  构建求值器 50

2.7  处理错误 51

2.8  综合演练 55

2.9  小结 57

第3章  Rust标准库介绍 59

3.1  技术要求 59

3.2  Rust标准库和系统编程 59

3.3  探索Rust标准库 62

3.4  面向计算的模块 67

3.4.1  数据类型 67

3.4.2  数据处理 69

3.4.3  错误处理 69

3.4.4  外部函数接口 70

3.4.5  编译器 70

3.5  面向系统调用的模块 70

3.5.1  内存管理 70

3.5.2  并发 72

3.5.3  文件系统 73

3.5.4  输入/输出 73

3.5.5  网络连接 73

3.5.6  与特定操作系统相关的模块 73

3.5.7  时间 73

3.5.8  异步 73

3.6  构建模板引擎 74

3.7  模板语法和设计 76

3.7.1  模板文件的常见元素列表 76

3.7.2  模板引擎的概念模型 77

3.7.3  模板引擎的工作原理 79

3.7.4  模板引擎生成HTML的步骤 80

3.7.5  新建库项目 81

3.7.6  模板引擎的代码结构 81

3.7.7  数据结构 82

3.7.8  关键函数 83

3.7.9  测试用例 84

3.8  编写模板引擎 86

3.8.1  解析器的设计 86

3.8.2  编写解析器 87

3.8.3  支持函数 88

3.8.4  main()函数 91

3.8.5  执行模板引擎 95

3.9  小结 96

3.10  延伸阅读 97

第4章  管理环境、命令行和时间 99

4.1  技术要求 100

4.2  项目范围和设计概述 100

4.2.1  要构建的内容 100

4.2.2  技术设计 103

4.3  使用Rust标准库 106

4.3.1  路径操作和目录迭代 106

4.3.2  时间测量 108

4.3.3  使用环境变量 108

4.3.4  使用命令行参数 110

4.3.5  imagix库设计方法总结 111

4.4  编写imagix库代码 111

4.4.1  imagix库的模块结构 112

4.4.2  添加依赖项 114

4.4.3  遍历目录条目 114

4.4.4  调整图像大小 115

4.4.5  图像文件信息统计 117

4.4.6  错误处理 118

4.5  开发命令行应用程序 119

4.5.1  设计命令行界面 120

4.5.2  使用structopt对命令行二进制文件进行编码 122

4.6  小结 125

第2篇  在Rust中管理和控制系统资源

第5章  Rust中的内存管理 129

5.1  技术要求 130

5.2  操作系统内存管理的基础知识 130

5.2.1  内存管理生命周期 130

5.2.2  进程的内存布局 134

5.3  Rust程序的内存布局 136

5.3.1  理解Rust程序的内存布局 136

5.3.2  栈、堆和静态内存的特性 139

5.4  Rust内存管理生命周期 141

5.4.1  Rust内存管理生命周期概述 142

5.4.2  内存分配 144

5.4.3  内存使用和操作 146

5.4.4  Rust的所有权规则 147

5.4.5  Rust借用和引用规则 148

5.4.6  内存释放 148

5.4.7  内存安全 149

5.5  实现动态数据结构 150

5.5.1  模板引擎设计的变化 152

5.5.2  编写动态数据结构的代码 154

5.6  小结 159

5.7  延伸阅读 159

第6章  在Rust中使用文件和目录 161

6.1  技术要求 161

6.2  理解用于文件操作的Linux系统调用 161

6.3  在Rust中执行文件I/O操作 164

6.3.1  创建 166

6.3.2  打开 166

6.3.3  复制 167

6.3.4  重命名 167

6.3.5  读取 167

6.3.6  写入 168

6.3.7  查询 168

6.3.8  元数据 169

6.3.9  关闭 170

6.4  了解目录和路径操作 170

6.4.1  读取目录条目的详细信息 172

6.4.2  以编程方式创建目录结构 173

6.4.3  动态构造路径字符串 173

6.5  设置硬链接、符号链接和执行查询 174

6.5.1  创建硬链接 175

6.5.2  创建和查询符号链接 175

6.6  在Rust中编写shell命令 176

6.6.1  代码概述 176

6.6.2  错误处理 178

6.6.3  源指标计算 180

6.6.4  main()函数 184

6.7  小结 186

第7章  在Rust中实现终端I/O 187

7.1  技术要求 187

7.2  终端I/O基础知识 188

7.2.1  终端的特性 188

7.2.2  Termion Crate 189

7.2.3  定义项目构建内容 190

7.3  处理终端用户界面和光标 192

7.3.1  编写数据结构和main()函数 192

7.3.2  初始化文本查看器并获取终端大小 195

7.3.3  显示文档并设置终端颜色、样式和光标位置 196

7.3.4  退出文本查看器 197

7.4  处理键盘输入和滚动 198

7.4.1  侦听用户的按键 199

7.4.2  定位终端光标 200

7.4.3  在终端上启用滚动功能 202

7.5  处理鼠标输入 203

7.6  小结 205

第8章  处理进程和信号 207

8.1  技术要求 207

8.2  理解Linux进程概念和系统调用 208

8.2.1  程序和进程之间的区别 208

8.2.2  程序内存布局和进程管理 209

8.3  深入了解Linux进程基础知识 211

8.3.1  进程管理关键任务分解 211

8.3.2  创建新进程 212

8.3.3  检查子进程的状态 213

8.3.4  使用进程间通信 213

8.3.5  设置环境变量 213

8.3.6  终止进程 214

8.3.7  处理信号 214

8.4  使用Rust生成进程 214

8.4.1  生成新的子进程 214

8.4.2  终止进程 216

8.4.3  检查子进程的执行状态 217

8.5  处理I/O和环境变量 218

8.5.1  处理子进程的I/O 218

8.5.2  为子进程设置环境变量 220

8.6  处理恐慌、错误和信号 221

8.6.1  中止当前进程 221

8.6.2  信号处理 223

8.7  用Rust编写shell程序 225

8.7.1  新建项目 225

8.7.2  迭代1—生成执行命令的子进程 225

8.7.3  迭代2—添加对命令参数的支持 227

8.7.4  迭代3—支持自然语言命令 228

8.7.5  测试和错误处理 229

8.7.6  练习和改进 230

8.8  小结 231

第9章  管理并发 233

9.1  技术要求 233

9.2  并发的基础知识 234

9.2.1  并发与并行 234

9.2.2  多线程的概念 237

9.3  生成和配置线程 239

9.3.1  使用thread::spawn()函数 240

9.3.2  使用thread::Builder结构 241

9.4  线程中的错误处理 242

9.5  线程间消息传递 245

9.6  通过共享状态实现并发 247

9.6.1  互斥锁和原子引用计数 248

9.6.2  定义程序结构 249

9.6.3  汇总共享状态下的源文件统计信息 250

9.7  使用计时器暂停线程执行 254

9.8  小结 255

第3篇  高 级 主 题

第10章  处理设备I/O 259

10.1  技术要求 259

10.2  了解Linux中设备I/O的基础知识 260

10.2.1  设备驱动程序 260

10.2.2  设备类型 262

10.3  执行缓冲读取和写入操作 263

10.4  使用标准输入和输出 266

10.5  I/O上的链接和迭代器 268

10.6  处理错误和返回值 270

10.7  获取已连接USB设备的详细信息 272

10.7.1  设计项目 272

10.7.2  编写数据结构和工具函数 274

10.7.3  编写main()函数 276

10.8  小结 278

第11章  学习网络编程 279

11.1  技术要求 279

11.2  Linux中的网络连接基础知识 280

11.3  理解Rust标准库中的网络原语 283

11.3.1  Rust网络标准库中的基础数据结构 283

11.3.2  IP地址应用示例 284

11.3.3  套接字示例 286

11.4  在Rust中使用TCP和UDP进行编程 286

11.4.1  编写UDP服务器和客户端 286

11.4.2  编写TCP服务器和客户端 289

11.5  编写一个TCP反向代理 290

11.5.1  代理服务器类型 291

11.5.2  新建项目 292

11.5.3  编写源服务器—结构体和方法 293

11.5.4  编写源服务器—main()函数 295

11.5.5  测试源服务器 298

11.5.6  编写反向代理服务器 299

11.5.7  测试反向代理服务器 302

11.6  小结 303

第12章  编写不安全Rust和FFI 305

12.1  技术要求 305

12.2  不安全Rust简介 306

12.2.1  区分安全Rust和不安全Rust代码 307

12.2.2  在不安全Rust中的操作 308

12.3  FFI简介 310

12.3.1  通过FFI接口调用外部函数 310

12.3.2  跨FFI边界共享联合体 311

12.4  安全FFI指南 313

12.5  从C中调用Rust 314

12.5.1  项目操作步骤概述 314

12.5.2  具体操作过程 314

12.6  理解ABI 316

12.6.1  关于ABI 317

12.6.2  条件编译选项 317

12.6.3  数据布局约定 318

12.6.4  链接选项 319

12.7  小结 319

书中前言/序言

现代软件堆栈的规模和复杂性迅速发展。云、网络、数据科学、机器学习(ML)、开发运营一体化(DevOps)、容器、物联网(IoT)、嵌入式系统、分布式账本、虚拟现实(VR)和增强现实(AR)以及人工智能(AI)等技术领域不断发展和专业化,导致能够构建系统基础设施组件的系统软件开发人员严重短缺。

现代社会、企业和政府越来越依赖数字技术,因此更加重视开发安全、可靠和高效的系统软件和软件基础设施,以构建现代Web和移动应用程序。

数十年来,C和C++等系统编程语言在该领域证明了自己的实力,并提供了高度灵活的控制和性能,但这是以牺牲内存安全为代价的。

Java、C#、Python、Ruby和JavaScript等高级语言提供了内存安全,但对内存布局的控制较少,并且会受垃圾收集暂停的影响。

Rust是一种现代开源系统编程语言,它承诺并做到了3个领域的最佳:Java的类型安全;C++的速度、表现力和效率;无须垃圾收集器的内存安全。

本书采用了独特的三步法来教授Rust系统编程。本书的每一章都首先概述了类UNIX 操作系统(UNIX、Linux、macOS)中该主题的系统编程基础和Kernel系统调用,然后通过丰富的代码片段演示如何使用Rust标准库执行常见的系统调用(有些用例会用到外部Crate),再通过构建实际示例项目来强化这些知识的掌握。

通读完本书,你会对如何使用Rust管理和控制操作系统资源(如内存、文件、进程、线程、系统环境、外围设备、网络接口、终端和外壳程序)有清晰的了解,并掌握如何通过FFI构建跨语言绑定。在此过程中,你会对Rust为构建安全、高性能、可靠和高效的系统级软件带来的价值有深刻的认识。

本书读者

本书面向具有Rust基础知识但系统编程经验较少的程序开发人员,也适用于具有系统编程背景并将Rust视为C或C++替代品的人。

读者应该对C、C++、Java、Python、Ruby、JavaScript或Go语言的编程概念有基本的了解。

内容介绍

本书共分为3篇12章,具体内容如下。

第1篇:Rust系统编程入门,包括第1~4章。

第1章“Rust 工具链和项目结构”,介绍用于构建和管理依赖项、自动化测试和生成项目文档的Rust工具链。

第2章“Rust 编程语言之旅”,通过一个示例项目说明Rust编程语言的关键概念,包括类型系统、数据结构和内存管理基础。

第3章“Rust 标准库介绍”,详细讨论Rust标准库的关键模块,这些模块为Rust中的系统编程提供构建块和预定义功能。

第4章“管理环境、命令行和时间”,讨论如何以编程方式处理命令行参数、设置和操作进程环境,以及使用系统时间。

第2篇:在Rust中管理和控制系统资源,包括第5~9章。

第5章“Rust中的内存管理”,全面介绍Rust提供的内存管理工具,阐释 Linux内存管理的基础知识、C/C++的传统缺点,以及如何使用Rust来克服这些缺点。

第6章“在Rust中使用文件和目录”,介绍Linux文件系统的工作方式,以及如何在Rust中执行文件I/O操作,并提供一个在Rust中编写shell命令的项目示例。

第7章“在Rust中实现终端 I/O”,介绍伪终端应用程序的工作方式,以及如何创建这样一个程序。本章的项目示例是一个处理流的交互式应用程序。

第8章“处理进程和信号”,详细解释什么是进程、如何在Rust中处理进程、如何创建子进程并与子进程通信,以及如何处理信号和错误等。

第9章“管理并发”,阐释并发、并行和多线程的基础知识,以及在Rust中跨线程共享数据的各种机制,包括通道、互斥锁和引用计数器。

第3篇:高级主题,包括第10~12章。

第10章“处理设备I/O”,解释Linux中设备I/O的概念,如缓冲、标准输入和输出,以及设备I/O,并演示如何使用Rust控制I/O操作。

第11章“学习网络编程”,详细阐释Rust标准库中的低级网络原语和协议,并提供构建低级TCP和UDP服务器、客户端及TCP反向代理的项目示例。

第12章“编写不安全Rust和FFI”,描述与不安全Rust相关的主要机制和风险,并演示如何使用FFI将Rust与其他编程语言安全地连接起来。

充分利用本书

使用本书前,必须将Rustup安装在本地开发环境中。其网址如下:

GitHub - rust-lang/rustup: The Rust toolchain installer

官方安装说明网址如下:

https://www.rust-lang.org/tools/install

安装完成后,可使用以下命令检查rustc和cargo是否安装正确:

rustc --version

cargo –version

操作系统可使用Linux、macOS或Windows。

虽然Rust标准库在很大程度上是独立于平台的,但本书的总体风格是面向基于Linux/ UNIX系统的。因此,如果使用Windows系统,则在某些章节(或章节中的某些部分)中,建议使用本地Linux虚拟机,如Virtual box(也可以使用云虚拟机),这是因为部分示例代码和项目中使用的命令、外部Crate或共享库等可能是特定于Linux/UNIX系统的。

注意:使用Windows系统进行开发的注意事项

有些章节需要运行类UNIX操作系统(UNIX/Linux/macOS)的虚拟机或Docker镜像。

本书每章有两种类型的代码,它们放置在本书配套的GitHub存储库中:

与示例项目相对应的代码(对应章节中的命名源文件)。

独立的代码片段,放置在每章的miscellaneous文件夹中。

建议开发人员通过本书配套的GitHub存储库(下文将提供链接)访问代码。这样做有助于避免与复制和粘贴代码相关的任何潜在错误。

在使用cargo run命令构建和运行Rust程序时,如果运行该命令的用户ID没有足够的权限来执行系统级操作(如读取或写入文件),则可能会收到“权限被拒绝”之类的消息。在这种情况下,解决方法之一是使用以下命令运行程序:

sudo env "PATH=$PATH" cargo run

下载示例代码文件

读者可以访问www.packtpub.com并通过个人账户下载本书的示例代码文件。具体步骤如下:

(1)注册并登录www.packtpub.com。

(2)在页面顶部的搜索框中输入图书名称Practical System Programming for Rust Developers(不区分大小写,也不必输入完整),即可看到本书出现在列表中,单击超链接,如图P-1所示。

图P-1 搜索图书

(3)在本书详情页面中,找到并单击Download code from GitHub(从GitHub中下载代码文件)按钮,如图P-2所示。

提示:如果看不到该下载按钮,可能是没有登录packtpub账号。该站点可免费注册账号。

(4)在本书GitHub源代码下载页面中,单击Code(代码)下拉按钮,在弹出的下拉菜单中选择Download ZIP(下载压缩包),如图P-3所示。

图P-2 单击下载代码的按钮

图P-3 下载GitHub存储库中的代码压缩包

下载文件后,请确保使用最新版本软件解压或析取文件夹:

WinRAR/7-Zip(Windows系统)。

Zipeg/iZip/UnRarX(macOS系统)。

7-Zip/PeaZip(Linux系统)。

你也可以直接访问本书在GitHub上的存储库,其网址如下:

GitHub - PacktPublishing/Practical-System-Programming-for-Rust-Developers: Practical System Programming for Rust Developers, published by Packt

如果代码有更新,则也会在现有GitHub存储库上更新。

本书中的代码片段是为学习而设计的,因此可能并不满足生产环境中的要求。也就是说,虽然代码示例是实用的并且使用了地道的Rust语言,但它们并不以具有强大错误处理机制的全功能为目标,无法涵盖所有极端情况。这是有意为之,以免妨碍你的学习过程。

下载彩色图像

本书提供了一个PDF文件,其中包含本书中使用的屏幕截图和图表的彩色图像,可以通过以下地址下载:

http://www.packtpub.com/sites/default/files/downloads/9781800560963_ColorImages.pdf

本书约定

本书中使用了许多文本约定。

(1)有关代码块的设置如下所示:

fn main() {

println!("Hello, time now is {:}", chrono::Utc::now());

}

(2)当我们希望让你注意代码块的特定部分时,相关行或项目采用粗体表示,示例如下:

fn main() {

println!("Hello, time now is {:}", chrono::Utc::now());

}

(3)任何命令行输入或输出都采用如下所示的粗体代码形式:

cargo new Chapter2 && cd Chapter2

(4)术语或重要单词采用中英文对照形式给出,在括号内保留其英文原文,示例如下:

分词器或标记化器(tokenizer)是本项目系统设计中的一个模块,它从算术表达式中读取一个或多个字符并将其转换为一个标记(token)。换句话说,输入是一组字符,而输出则是一组标记。

(5)本书使用了以下两个图标:

表示警告或重要的注意事项。

表示提示或小技巧。

《Rust系统编程》全书速览

结束语

通过上面的介绍,想必大家都知道Rust是一种强大的系统编程语言,具备内存安全、高性能和并发性等关键特点,通过使用Rust进行系统编程,开发人员可以编写可靠、高效且安全的系统级应用程序。上文简要介绍了Rust系统编程的基本概念、核心特点、关键技术和实践案例,并展望了Rust系统编程的挑战和未来发展方向。希望本文对读者了解Rust系统编程的基本概念和应用场景有所帮助,并激发对Rust的兴趣和探索,通过介绍,读者可以深入了解Rust系统编程的更多细节,并将其应用于实际的系统级开发中,从而构建高性能、可靠和安全的软件系统。

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

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

相关文章

Java Swing 图书借阅系统 窗体项目 期末课程设计 窗体设计

视频教程: 【课程设计】图书借阅系统 功能描述: 图书管理系统有三个角色,系统管理员、图书管理员、借阅者; 系统管理员可以添加借阅用户; ​图书管理员可以添加图书,操作图书借阅和归还; 借…

希尔排序和计数排序

📑前言 本文主要是【排序】——希尔排序、计数排序的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句…

ElasticSearch(1):Elastic Stack简介

1 简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据搜索、分析和收集的场景&#xf…

linux创建文件夹命令

我们可以使用mkdir命令在 Linux 或类似 Unix 的操作系统中创建新目录或文件夹。本文将介绍如何在 Linux 或 Unix 系统中创建文件夹(也称为“目录”)。 操作步骤如下:1.在 Linux 中打开终端应用程序。2.输入mkdir命令。3.输入文件夹名称。 m…

Unity与Android交互通信系列(4)

上篇文章我们实现了模块化调用,运用了模块化设计思想和简化了调用流程,本篇文章讲述UnityPlayerActivity类的继承和使用。 在一些深度交互场合,比如Activity切换、程序启动预处理等,这时可能会需要继承Application和UnityPlayerAc…

服务器 conda update 失败解决方法

1. 强制 conda update 租借一台服务器,发现 conda 版本是4.10.3,需要升级,使用了如下命令都没有效果,仍然是一样的版本 conda update conda update --all conda update -n base -c defaults conda最后强制用conda-forge通道更新…

Python3.10安装教程

Python3.10安装 Python的安装按照下面几步进行即可,比较简单。 下载Python安装文件,打开Python的下载页面,我这里选择安装的版本是3.10.11,根据自己电脑版本选择对应安装包 安装包下载完毕后,按照步骤开始安装。选择…

[GN] 微服务开发框架 --- Docker的应用 (24.1.9)

文章目录 前言Docekr镜像命令 Docekr镜像命令容器操作创建容器查看容器日志查看容器状态进入容器 数据卷数据集操作命令给nginx挂载数据卷给MySQL挂载本地目录 Dockerfile自定义镜像镜像结构 使用Dockerfile构建Java项目基于Ubuntu构建Java项目基于java8构建Java项目 Docker-Co…

SQLServer设置端口,并设置SQLServer和SQLServer Browser服务

SQLServer默认使用动态端口,即每次启动sqlserver.exe时,端口port都会动态变化。若要使用静态端口,比如port1433,则需要在SQL Server Configuration Manager(简称SSMS)里配置。这里以SQL Server 2005 Configuration Man…

按键精灵调用奥迦插件实现图色字识别模拟键鼠操作源码

奥迦插件于2019年9月开始开发,在Windows 10操作系统上使用Visual Studio 2019编写,适用于所有较新的Windows平台,是一款集网络验证,深度学习,内核,视觉,文字,图色,后台,键鼠,窗口,内存,汇编,进程,文件,网络,系统,算法及其它功能于一身的综合插件 插件使用C语言和COM技术编写,是…

室内定位相关中文期刊/学报笔记

这里写目录标题 文章最重要的部分通信学报1. 2023 基于扩散模型的室内定位射频指纹数据增强方法2. 2023 基于 CHAN 的改进卡尔曼滤波室内定位算法3. 2022 基于自适应蝙蝠算法的室内 RFID 定位算法4. 2017 基于核函数特征提取的室内定位算法研究5. 2021 基于CSI张量分解的室内Wi…

【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍

目录 1 Table表格组件1.1 组件演示1.2 组件属性详解 2 Pagination分页2.1 组件演示2.2 组件属性详解2.3 组件事件详解 接下来我们来学习一下ElementUI的常用组件,对于组件的学习比较简单,我们只需要参考官方提供的代码,然后复制粘贴即可。本节…

c++学习:STL库(框架)+字符串模板类string+vector容器+list链表

目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机,测试中国芯!新年伊始,国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻,ST2500 数模混合信号测试设备累计装机量突破500台!加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…

SAP SD-DN-MM 交货单相关物料凭证的视图的日期问题

眼下有个需求 获取交货单对应的物料凭证的过账日期BLDAT。 同步BW数据过去 新增一个数据库视图 但是实际使用时,有效部分仅本月,再选择条件里面要加上 MATdoc-bldat > sy-datum - sydatum6(2). 于是使用ST05 跟踪了一下,发现在DD28S…

MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

前言:本文对MCU最小系统原理图中的四个问题进行详解:芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件。本文以GD32F103C8T6最小系统原理图举例 目录: 芯片中有很多电源管脚的原因&#x…

SQL Server 配置远程连接

Windows 安装好 SQL Server 的 SSMS,打开SSMS配置远程连接 找到 配置管理器 启用 TCP/IP 打开防火墙设置 新建入站规则 端口TCP - 特定本地端口 (1433)允许连接下一步名称完成 重启 SQL Server 服务

yum来安装php727

yum 安装php727,一键安装,都是安装在系统的默认位置,方便快捷 先确定linux平台中centos的版本信息,一下内容针对el7 查看linux版本 : cat /etc/redhat-release 查看内核版本命令: cat /proc/version (0)如果有安装好…

使用Adobe Acrobat Pro DC给pdf文件填加水印

前言 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口,就可以按使用量付费,用多少付多少,而且没有3个小时内只能提问50条的使用限制。 但是对很多人来说调用接口是比较麻烦…