当前位置: 首页 > article >正文

[Rust_1] 环境配置 | vs golang | 程序运行 | 包管理

目录

Rust 环境安装

GoLang和Rust

关于Go

关于Rust

Rust vs. Go,优缺点

GoLang的优点

GoLang的缺点

Rust的优点

Rust的缺点

数据告诉我们什么?

Rust和Go的主要区别

(1) 性能

(2) 并发性

(3) 内存安全性

(4) 开发速度

(5) 开发者体验

Rust和Go的共同特点

交互性

何时应该使用GoLang?

何时应该使用Rust?

总结

Rust 学习

1.介绍

2、Rust简介

3、第一个Rust程序

4、初识包管理

5、总结


终极目标:用rust实现一个Pratt 解析器,并运行测试

预计实现结果:

学习契机:

  • 有个作业涉及到了 pratt 解析的实现,然后搜论文的时候,发现论文中使用 rust 实现的,就学习了一下 rust。
  • and 看到了说一旦学会了 Rust,即使是作为较为底层的开发人员,同样也能享受到像 py 一样的包管理的便利了 ovo
  • (下篇文章会在学完语法后,就来尝试实现 pratt 啦)

参考资料:

社区 - Rust 程序设计语言

https://crates.io/


Rust 环境安装

linux 上 rust 环境安装,一行命令即可解决

sudo apt update && sudo apt install -y cargo
cargo new pratt_parser

win 上环境也好配,官网安装完包后 配合 vecode rust 插件即可


关于外网上面一篇关于 rust & go 的文章翻译

and 谨记 万变不离其宗,语言只是工具

GoLang和Rust

Rust vs. Go,在2024年,应该选择哪一个?或者说应该选择哪种语言——GoLang还是Rust。这可能是许多程序员在选择语言时考虑的一个问题。选择理想的编程语言被视为在这个不断变化的环境中取得成功的重要抉择。

  • GoLang和Rust是当今使用的最年轻的编程语言。Go于2009年在Google推出,而在Go之后,Rust于2010年在Mozilla推出。
  • 这两种语言在当前流行的编程语言工具中有一些相似之处和差异。
  • 通过本文,我们将讨论Rust和Go之间的基本差异和相似之处。

关于Go

Go是一门开源的计算机语言,可以更轻松地创建简单、高效和强大的软件。

Go是精确、流畅和高效的。编写一个利用多核和网络机器的程序非常方便。

  • Go或GoLang是由Google工程师创建的,他们希望创建一种既具有C++的效率,又更容易学习、编写、阅读和安装的语言。
  • GoLang主要用于创建网络API和小型服务,特别是其goroutines,具有可扩展性。GoLang可以流畅地组装为机器代码,并提供舒适的垃圾回收和表示运行时的能力。
  • Go是一种快速、静态类型的汇编语言,给人一种解释型和动态类型语言的感觉。Goroutines的语言使开发人员能够创建完全掌控并发的应用程序,例如大型电子商务网站,同时在多个CPU核心上调度工作负载。

因此,准确地说,它非常适合并行计算环境。

垃圾回收是Go的另一个特性,可以保证高效的内存管理。因此,未使用的内存可以用于新项目,而未使用的对象则从内存中“丢弃”。

关于Rust

Rust是一种静态类型的编译型编程语言,受到多种编程原型的支持。

  • 该语言最初的创建目标是优先考虑性能和安全性,其中安全性是主要目标。
  • Rust主要用于处理CPU密集型的活动,例如执行算法和存储大量数据。因此,需要高性能的项目通常使用Rust而不是GoLang。
  • 理想情况下,Rust是C++的镜像。与GoLang和Java不同,Rust没有垃圾回收。相反,Rust使用借用检查器来确保内存安全。这个借用检查器强制执行数据所有权协议,以避免数据竞争。在这里,数据竞争意味着多个指针指向同一个内存位置。
  • Rust是一种用于长时间大型或小型团队的计算机编程语言。对于这种类型的编程,Rust提供了高度并发和极其安全的系统。

Rust现在被广泛用于Firefox浏览器的大部分部分。在2016年之后,Rust被宣称为最受欢迎的编程语言。Rust是一种非常基础的语言,可以在短短5分钟内学会。

Rust vs. Go,优缺点

要准确决定选择Go还是Rust,最好看一下GoLang和Rust的优势和劣势。上面我们已经对它们有了简单的了解,下面是它们的优点和缺点。

GoLang的优点
  • 它是一种简洁和简单的编程语言。
  • 它是一种良好组合的语言。
  • 以其速度而闻名。
  • Go具有很大的灵活性,并且易于使用。
  • 它是可扩展的。
  • 它是跨平台的。
  • 它可以检测未使用的变量。
  • GoLang具有静态分析工具。
GoLang的缺点
  • 没有手动内存管理。
  • 因为它太容易,所以感觉很表面。
  • 由于年轻,所以库较少。
  • 其中一些函数(如指针算术)是底层的。
  • GoLang的工具有一些限制。
  • 分析GoLang中的错误可能很困难。
Rust的优点
  • 提供非凡的速度。
  • 由于编译器,提供最佳的内存安全性。
  • 零成本抽象的运行时更快。
  • 它也是跨平台的。
  • 它提供可预测的运行时行为。
  • 它提供了访问优秀模式和语法的方式。
  • 它具有特殊的所有权特性。
  • 它易于与C语言和其他语言结合使用。
Rust的缺点
  • 尽管它确实很快,但有人声称它比F#慢。
  • 具有基于范围的内存管理,可能导致内存泄漏的无限循环。
  • 在Rust中无法使用纯函数式数据框架,因为没有垃圾回收。
  • Rust没有Python和Perl语言支持的猴子补丁水平。
  • 由于语言还很新,可能会对语法感到担忧。
  • 编译时有时会很慢,因此学习变得困难。

数据告诉我们什么?

  • 根据一份报告,GoLang语言被认为是参与者最喜欢的语言。
  • 我们对GoLang和Rust语言有了基本的了解,现在继续进行Rust vs. Go的比较,并清楚地认识到这两种语言之间的差异。
Rust和Go的主要区别

GoLang和Rust之间的主要区别包括:

  • 性能
  • 并发性
  • 内存安全性
  • 开发速度
  • 开发者体验
(1) 性能
  • Google推出Go作为易于编码和学习的C++替代品。Go提供Goroutines,通过其中一个可以通过简单地包含Go语法来运行函数。
  • 尽管Go具有这些有用的功能和对多核CPU的支持,但Rust占据上风,超过了Go。
  • 因此,Go vs Rust:性能是Rust在与GoLang的比较中获得更多分数的一个特点。这些编程语言都是为了与C++和C等价而创建的。然而,在Rust vs. Go的比较中,GoLang的开发速度略高于Rust的性能。
  • 虽然Rust在性能上优于Go,但在编译速度方面,Rust落后于Go。
  • 然而,人们对编译时间并不太在意,所以整体上Rust在这方面是胜利者。
(2) 并发性
  • GoLang支持并发,在这一因素上比Rust有优势。Go的并发模型允许开发人员在不同的CPU核心上安装工作负载,使Go成为一种连贯的语言。
  • 因此,在运行处理API请求的网站的情况下,GoLang goroutines将每个请求作为子进程运行。这个过程提高了效率,因为它将任务从所有CPU核心中卸载出来。
  • 另一方面,Rust只有一个原生的等待或同步语法。因此,程序员更喜欢使用Go的方式来处理并发问题。
(3) 内存安全性
  • Rust使用编译时头文件策略来实现零成本中断的内存安全性。如果不是内存安全的程序,Rust将无法通过编译阶段。实际上,Rust的好处之一就是提供了内存安全性。
  • 为了实现内存安全的并发,Rust使用类型安全性。Rust编译器调查你引用的每个内存地址和使用的每个变量。Rust的这个特性将通知你任何未定义行为和数据竞争。
  • 它确保程序员不会遇到缓冲区溢出的情况。
  • 相比之下,Go在运行时完全自动化。因此,开发人员在编写代码时不必担心内存释放。
  • 因此,无论是GoLang还是Rust都优先考虑内存安全特性,但在性能方面,GoLang具有数据竞争的可能性。
(4) 开发速度
  • 在某些情况下,开发速度比性能和程序速度更重要。Go语言的直接性和清晰性使其成为一种开发速度较快的语言。Go语言具有更短的编译时间和更快的运行时间。
  • 尽管Go既提供了开发速度和简单性,但它缺少一些重要的功能。为了使语言更简单,Google删除了其他编程语言中可用的许多功能。
  • 另一方面,Rust比Go拥有更多的功能。Rust具有更长的编译时间。
  • 因此,如果项目的优先级是开发速度,Go比Rust要好得多。如果你不太关心开发速度和开发周期,但希望获得性能和内存安全性,那么Rust是你的最佳选择。
(5) 开发者体验
  • 由于开发Go的主要动机是简单和易用性,大多数程序员认为它是一种“无聊的语言”或“简单的语言”。Go中的功能有限,使得学习和实现非常简单。
  • 相反,Rust具有更高的内存安全功能,使得代码更复杂,降低了程序员的生产力。所有权的概念使得Rust语言对许多人来说不是理想的选择。
  • 与Go相比,Rust的学习曲线要陡峭得多。然而,值得注意的是,与Python和JavaScript等语言相比,GoLang的学习曲线也较陡峭。
Rust和Go的共同特点
  • 在Rust vs Go的比较中,这两者之间有很多共同之处。GoLang和Rust都是许多年轻开发人员使用的现代编程语言。
  • GoLang和Rust都是编译语言,都是开源的,并且都是用于微服务的计算环境。
  • 此外,如果你对C++有一些了解,那么这两个程序都非常容易理解。
交互性
  • Rust能够与代码进行接口交互,例如直接与C库进行通信。Rust没有提供内存安全性的认证。
  • 交互性带来了速度。Go提供了与C语言配合使用的Go包。
何时应该使用GoLang?
  • Go语言可用于各种不同的项目。根据一份报告,Go的用例包括网页开发、数据库和Web编程。大多数GoLang开发人员声称,由于Go的并发性,它对Web服务有一些限制。
  • 不仅如此,Go还被列为后端Web开发的首选语言。Go语言还为Google Cloud Platform提供支持。因此,在高性能云应用中,Go确实是性能消耗大的语言。
何时应该使用Rust?
  • Rust是一种几乎可以在任何地方使用的计算机编程语言。然而,仍然有一些领域比其他领域更适合使用。系统编程就是其中之一,因为Rust在高性能方面表现出色。
  • 系统程序员基本上是在硬件侧开发的软件工程师。由于Rust处理硬件侧内存管理的复杂性,它经常用于设计操作系统或计算机应用程序。
  • 尽管在开发者社区内对什么构成中级语言存在一些争议,但Rust被视为具有面向机器的现代语言的特点。

总结

  • 这两种语言,GoLang和Rust,由于它们非常相近的起源时间,被认为是彼此的竞争对手。Go的发展速度比Rust快。这两种语言有很多相似之处。
  • GoLang和Rust之间的区别在于Go是简单的,而Rust是复杂的。然而,它们的功能和优先级在各种有意义的方面有所不同。
  • Go与Rust并驾齐驱。这意味着这完全取决于拥有的项目类型,主要取决于对业务来说什么是最好的。

Rust 学习

1.介绍

近些年来不断有新的语言崛起,比如当下非常火的 go 语言,不过相比于 C++,go 语言确实是非常简单的。

  • rust 作为一名新兴语言,与 go 又有些许不同,因为它的目标是对标系统级开发,也就是试图动摇 C、C++ 这两位纵横编程界数十年的老大哥位置。
  • 比如我们最常用的 windows 系统,就是用 C/C++ 语言开发的,也正因如此,我们才能用 C++ 在 VS 中非常方便的调用 win API 函数。
  • 而同样的,越是涉及到底层,需要控制的细节就会越多,即使是这位试图通过简便语法便利包管理安全可靠等良好特性脱颖而出的 rust 语言,也同样不例外。
  • 目前来看,rust 语言最大的缺陷是诞生时间太短,生态还不够完善。

比如当你想要用 rust 写 GUI 程序,就很麻烦,因为官方目前还没有推出 GUI 库。

  • 但这并非是无法解决的,rust 同样意识到了这个问题,所以它提供了简便的方式让你可以直接在代码中调用 C 语言开发的库。
  • 这意味着只要是用 C 语言开发的库,你就能用 rust 语言调用它进行开发!
  • 比如你可以使用 rust 绑定 C 开发的 FLTK、GTK 等 GUI 库就可以进行开发 GUI 程序了,当然也有正在发展的库,比如 egui、iced、tauri 等等。

目前比较推荐的是 Tauri,不过前提是需要会 web 前端,关于 Tauri 后续专栏会提到,并进行学习~

而 rust 带来的代码安全、便捷的开发又是 C 语言所无法比拟的,所以预测要不了多少年,随着 Rust 生态的不断完善,会取代很大一部分 C/C++ 的份额。

  • 不过想要彻底将 C/C++ 取代,短时间内还是有点不现实的,比如 windowslinuxmac 三大操作系统以及各种 C/C++ 开源库的代码量是一个非常恐怖的数字,想要彻底替换,绝非一朝一夕之功。
  • 同时需要注意:学习 rust 前,最好对 C/C++ 语言有一定的了解,否则 rust 里面的很多概念你都可能无法理解。

2、Rust简介

参考百度百科:

Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目。第一个有版本号的 Rust 编译器于2012 年 1 月发布。Rust 1.0 是第一个稳定版本,于 2015年5月15日发布。

可以看到,Rust 是 2015 才对外开放稳定版本的,距今不到 10 年,根据目前程序员对 Rust 这门语言的普遍评价来说,现在学习 Rust,还有机会享受到这门语言在不久的将来可能会带来的福利。

事实上现在在国内的招聘市场上,与 rust 语言相关的岗位已经开始变多了。

那么具体来说,Rust 能为开发人员带来哪些便利呢?

主要有以下几点:

  • 内存安全
    Rust 中的所有内存访问都经过了编译器的严格检查,并且在运行时不会出现空指针异常或数据竞争等问题。这意味着 Rust 代码具有更高的可靠性和安全性,可以避免常见的安全漏洞。
    而 C/C++ 中则时常需要担心指针、内存问题,尤其是在大型项目中,非常容易因此出现各种各样的 Bug。
  • 高效性能
    Rust 具有与 C 和 C++ 相当的性能,并采用了现代语言的特性和设计理念,如智能指针、闭包和模式匹配等。这使得 Rust 很适合编写高性能、低延迟的系统级应用程序和库。
  • 并发性
    Rust 的所有权系统和借用规则使其易于编写线程安全的代码,即使在多线程环境下也可以保持高效率和可靠性。
  • C/C++ 中则完全需要自己进行控制。
  • 社区支持
    Rust 拥有活跃的社区,在crates上提供了许多开源库、工具和框架,可以大幅度提升开发效率。
    C/C++ 虽然学习的人很多,但却几乎没有官方的、活跃的社区可以供大家交流,都是在各搞各的。
  • 统一包管理
    C/C++ 中,最让人诟病的便是包管理了,想要用一个包,还需要自己下载、安装、配置等等。
    • 💡在 AI 时代,是否可以借助 AI 来实现让 C++和 Rust 一样的包管理呢?(可行性)
    • 之后的文章会更新和 AI 的讨论结果🤔

  • Rust 则直接提供了一个统一的包管理程序,只需要写一行代码,就能自动为你下载配置好你所需要的一切,并且还提供对应的文档,使用起来非常方便!

综上,你便能看出 Rust 的优势所在了。

  • Python 语言之所以能火,有很多原因,而其中相当大的一个原因就是 Python 有一个统一的包管理程序 pip,可以很方便的下载各种第三方包而不需要像 C/C++ 那样自己配置。
  • 一旦学会了 Rust,即使是作为较为底层的开发人员,我们同样也能享受到这种便利了!
  • 这是学习 C/C++ 所无法想象的,虽然目前有一个 vcpkg 包管理库很不错,但这毕竟不是标准委员会推出的,而是微软带头组织的一个开源项目,如果不会科学上网,中国几乎也无法使用。

3、第一个Rust程序

我们可以通过命令

cargo new projectName

来创建一个 Rust 项目。

比如运行

cargo new hello-world

然后它就会为我们在当前目录中生成一个项目文件夹:

这里简单对其介绍一下:

  • src:这是存放代码的地方,以后我们写的 rust 代码就放在这个文件夹里面。
  • .gitignore:这同样是 git 使用的,用于忽略哪些类型文件,不进行版本管理,一般同样不用管
  • Cargo.toml :这个文件就很重要了cargo 作为 rust 的包管理程序,就是通过这个文件知道你这个项目中需要哪些依赖库的

打开 Cargo.toml,就能看到下面这样的内容:

对于想要用到的库,直接写在 [dependencies] 项的下面即可,后面我会再对其进行详细介绍。


然后来到 src 这个存放 rust 代码的目录里面。

  • 这里面默认有一个 main.rs 文件,其中后缀 .rs 便是 rust 的简写,这个文件是 rust 项目中不可或缺的,因为它将作为整个项目的入口文件。
  • 注意:不可更改这个文件的名称否则后面的编译将会直接失败!(hh 因为尝试过失败了,才知道......踩坑+1)
  • 同样的,我们可以打开它:

这里写的是一个函数:

  • fn:rust 中的关键字,即为 function 的简写,代表后面跟着的是一个函数。
  • main:这个函数的名称,这里不可更改!因为这是程序的入口函数,程序将从这个函数开始顺序执行内部的代码。
  • ():与前面的函数名、fn 关键字、后面紧跟的 {} 组成一个完整的函数签名,最简单的函数就是fn name(){}
  • {}:函数体,即这个函数要执行的代码,比如这里填写的是 println!(\"Hello, world!\");,就是说要打印出 "hello world" 这个字符串。

println! 是一个 rust 中的宏,用于简化我们输出一个字符串到控制台的步骤。

  • 如果你学过 C/C++、python、java 等等其它语言,前期学习过程中可以直接把它当作一个 print 函数即可,只是要注意它的后面先有一个 !,然后才是 ()
  • 这里同时要注意,每一个语句的结尾用的英文符号 ;,不用则会报错,这一点和 C/C++ 保持一致。

现在回到控制台,进入这个文件夹,然后来运行这段代码试一试,运行代码的命令为

cargo run

然后就可以看到它成功运行并打印出了 Hello World! 字符串。

  • 如果你学过 C/C++,会发现到目前为止,rustC/C++ 会稍稍复杂一点,毕竟 C/C++ 只需要一个源代码文件就能输出 hello world 了,而 rust 却一上来就给我们生成了这么多文件。
  • 但很快你就会发现 rust 这样做的好处,尤其是在后面开发项目时。
  • 前面我们说了,rust 是一个编译型的语言,所以会编译成二进制后才能运行,我们可以在下面的目录中找到这个生成的 exe 程序:

不过直接点击它运行是不行的,因为前面的代码中我们只写了一个打印字符串的代码,打印完程序就结束了,后面我们会想办法解决这个问题。

上面提到的这个 cargo run 命令即为编译并运行当前项目的意思,可如果我只想编译,不运行呢?

那就可以使用命令

cargo build

其默认构建的是 Debug 版本,即可调试版本,直观的来说就是生成的 exe 程序会稍微比较大。

我们也可以构建 Release 版本,使用命令:

cargo build --release

直观来说,这个命令生成的可执行文件会较小:

如果你还是觉得它比较大,那么我们还可以使用一些工具来进一步压缩它,可以让它只有几十 kb,有兴趣的可以了解一下 upx 工具。


4、初识包管理

配置 IDE

我们 来 试一下 rust 官网提供的一个示例,来看看 rust 的包管理有多好用。

比如我想要在终端打印出下面这个图案:

这里就用到了 ferris-says 这个库,首先来到前面提到的 Cargo.toml 文件,然后在 [dependencies] 项添加一下这个库:

  • 后面的数字是这个库的版本号,Ctrl+S 保存后,vscode 就会自动给我们拉取这个库包到本地。
  • 你可能也注意到了不知道什么时候,项目文件夹中多了一个 Cargo.lock 文件。

这个文件用于记录我们当前项目用到的所有库以及依赖,是由 cargo 自动管理的,我们无需操心。

现在来到代码中,让我们来使用一下这个库

use ferris_says::say; // from the previous step
use std::io::{stdout, BufWriter};fn main() {let stdout = stdout();let message = String::from("Hello lvy");let width = message.chars().count();let mut writer = BufWriter::new(stdout.lock());say(message.as_bytes(), width, &mut writer).unwrap();
}

第一次看上去,你可能会感觉怎么有点复杂啊?

  • 因为这一小段代码就涉及到了 rust 中相当多的概念,所以我暂时并不会讲解这段代码的逻辑,你可以自己随意更改这段代码里面的字符串:"Hello lvy"
  • 然后运行上面这段代码,就能在终端看到输出的图案了。
  • 而这个库的下载安装位置默认为当前用户文件夹的 .Cargo 文件夹中

至于库代码上层的这个文件夹,则是代表着仓库名


5、总结

学习 了 rust 的特点、安装、项目结构、IDE 环境配置、代码运行。

主要有以下几个命令需要稍微记忆一下:

  • cargo new:新建一个 rust 项目
  • cargo run :直接运行代码
  • cargo build :只编译代码,不运行,默认编译的为 debug 版本
  • cargo build --release:编译为 release 版本

同时还可以使用 upx 工具减小最终编译程序的体积。

相关文章:

[Rust_1] 环境配置 | vs golang | 程序运行 | 包管理

目录 Rust 环境安装 GoLang和Rust 关于Go 关于Rust Rust vs. Go,优缺点 GoLang的优点 GoLang的缺点 Rust的优点 Rust的缺点 数据告诉我们什么? Rust和Go的主要区别 (1) 性能 (2) 并发性 (3) 内存安全性 (4) 开发速度 (5) 开发者体验 Ru…...

二十五、面向对象底层逻辑-SpringMVC九大组件之HandlerMapping接口设计

一、引言:MVC架构的交通枢纽 在Spring MVC框架中,HandlerMapping接口扮演着"请求导航仪"的关键角色,它决定了HTTP请求如何被路由到对应的Controller处理器。作为MVC模式的核心组件之一,HandlerMapping在请求处理的生命…...

构建安全高效的邮件网关ngx_mail_ssl_module

一、快速上手:最小配置示例 worker_processes auto;mail {server {# 监听 IMAP over TLSlisten 993 ssl;protocol imap;# TLS 协议与密码套件ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 证书与私钥ssl_…...

HUAWEI交换机配置镜像口验证(eNSP)

技术术语: 流量观察口:就是我们常说的镜像口,被观察的流量的引流目的端口 流量源端口:企业生产端口,作为观察口观察对象。 命令介绍: [核心交换机]observe-port [观察端口ID或编号(数字&am…...

前端vue3实现图片懒加载

场景和指令用法 场景:电商网站的首页通常会很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到只有进入视口区域才发送图片请求 核心原理:图片进入视口才发送资源请求 首先:我们需要定义一个全局的指令&#x…...

网站每天几点更新,更新频率是否影响网站收录

1. 每天几点更新网站最合适?总怕时间选错影响收录? 刚开始搞网站的时候,是不是老纠结啥时候更新合适?早上刚上班?半夜没人的时候?选不对时间,总担心搜索引擎爬虫来了没抓到新内容,影…...

主流Markdown编辑器的综合评测与推荐

根据2025年最新资料,结合功能特性、用户体验和技术适配性,以下是对主流Markdown编辑器的综合评测与推荐: 一、核心对比维度与评估方法 功能完整性:支持数学公式、流程图、代码高亮等复杂格式。跨平台兼容性:Windows/m…...

计算机网络-MPLS VPN应用场景与组网

上一篇文章我们通过一个基础实验实现了企业分支间的MPLS VPN互联,如果还不理解的可以多看几遍前面的文章或者多敲下实验。今天来学习几种常见的MPLS VPN应用场景与这些场景下MPLS VPN的部署方法。 一、MPLS VPN典型应用 目前,MPLS VPN的主要应用包括企…...

AugmentFree:解除 AugmentCode 限制的终极方案 如何快速清理vscode和AugmentCode缓存—windows端

AugmentFree1.0工具包:解除 AugmentCode 免费试用限制的终极方案 Augment VIP 是一个专为 VS Code 用户设计的实用工具包,旨在帮助用户管理和清理 VS Code 数据库,解除 AugmentCode 免费试用账户的限制。 augment从根源上解决免费额度限制问…...

WPF【11_7】WPF实战-重构与美化(ViewModel的嵌套与分解、海量数据不要Join)

11-12 【重构】ViewModel的嵌套与分解 目前我们的代码中有一个不易发现的致命问题,如果工作中这样写代码大概率会被打回去重做。那么这个问题是什么呢? --\ViewModels\MainViewModel.cs 视图模型中的 LoadCustomers() 方法,考虑一下在这里我…...

Linux 的编辑器--vim

1.Linux编辑器-vim使⽤ vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以…...

Oracle 慢sql排查

Oracle慢sql排查步骤 1.1. 前言 Oracle 慢查询的排查方向包括以下几个方向 : 基准测试 (吞吐量): 包括 Oracle 本身吞吐量和磁盘 I/O 吞吐量硬件分析 (资源情况): 包括查看服务器 CPU , 硬盘的使用情况SQL分析:分析 SQL 中是否存在慢查询 , 是否命中索引配置优化…...

[Protobuf] 快速上手:安全高效的序列化指南

标题:[Protobuf] (1)快速上手 水墨不写bug 文章目录 一、什么是protobuf?二、protobuf的特点三、使用protobuf的过程?1、定义消息格式(.proto文件)(1)指定语法版本(2)package 声明符 2、使用protoc编译器生成代码&…...

uniapp开发企业微信小程序时 wx.qy.login 在uniapp中使用的时候,需要导包吗?

在 UniApp 中使用 “wx.qy.login” 不需要手动导包,但需要满足以下条件: 一、环境要求与配置 1� 企业微信环境判断 必须确保当前运行环境是企业微信客户端,通过 “uni.getSystemInfoSync().environment” 判断是否为 “wxwork”…...

如何将通话记录从Android传输到Android

“如何将通话记录从 Android 转移到 Android?我换了一部新的 Android 手机,想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况,因为通话记录是手机上最重要的数据之一。幸运的是,如果您从…...

Word 目录自动换行后错位与页码对齐问题解决教程

📘 Word 目录自动换行错位与页码对齐问题解决教程 🎯 目标效果 目录条目过长自动换行后,第二行左对齐整齐;页码始终靠右对齐,前方带有“……”引导符;解决页码错位、制表符消失或格式混乱问题。 &#x1…...

数据结构第4章 栈、队列和数组 (竟成)

目录 第 4 章 栈、队列和数组 4.1 栈 4.1.1 栈的基本概念 4.1.2 栈的基本操作 4.1.3 栈的实现 1.顺序栈 2.链式栈 3.共享栈 4.1.4 顺序栈的基本操作实现 1.初始化栈 2.判空 3.判满 4.元素进栈 5.元素出栈 6.获取栈顶元素 4.1.5 链栈的基本操作实现 1.元素进栈 2.元素出栈 4.1.6…...

removeIf() 方法,结合 Lambda 表达式

在 Java 8 中,removeIf() 方法是 Collection 接口新增的一个默认方法,用于根据条件批量删除集合中的元素。结合 Lambda 表达式,可以以极简的语法实现复杂的过滤逻辑。以下是详细说明: 1. 方法定义与语法 // java.util.Collection 接口中的定义 default boolean removeIf(P…...

汽车售后诊断数据流详细分析

一、引言 随着汽车电子化程度的不断提升,电控系统已成为车辆运行的核心支撑。据罗兰贝格 2025 年智能汽车白皮书数据显示,中央计算 区域控制架构(Zonal EEA)的普及率已突破 58%,推动整车线束成本下降 41%12。与此同时…...

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖(漏洞挖掘&#x…...

Unity 游戏优化(持续更新中...)

垃圾回收 是什么? 垃圾回收(Garbage Collection)GC 工作机制 1、Unity 为用户生成的代码和脚本采用了自动内存管理。 2、小块数据(如值类型的局部变量)分配在栈上。大块数据和长期存储分配在托管堆上。 3、垃圾收集…...

LlamaFactory——如何使用魔改后的模型

需求来源:有时我们可能想在llamafactory框架支持的模型上进行一些改动,例如修改forward()方法等,修改方法我们可以通过继承Transformers库中相应的class并重写相应的方法即可,那我们如何使用自己的模型呢? 首先&#…...

【前端】【css预处理器】Sass与Less全面对比与构建对应知识体系

第一章 概述 1.1 Sass和Less简介 1.1.1 Sass简介 Sass(Syntactically Awesome Stylesheets)是一种 CSS 预处理器,它为 CSS 赋予了更多强大的功能和更灵活的语法结构😎。 语法特点:Sass 有两种语法格式。一种是 .sa…...

【请关注】关于VC++实现使用Redis不同方法,有效达到 Redis 性能优化、防击穿

麻烦先关注方便了解最新分享。 关于VC实现使用Redis不同方法,有效达到 Redis 性能优化、防击穿。 一、性能优化核心方法 1. 使用连接池复用连接 // 连接池结构体 struct RedisPool { hiredisContext** connections; int size; sem_t sem; // 信号量控制并发 }; //…...

【加密算法】

计算机网络加密算法详解 在计算机网络中,加密算法是保障数据安全的核心技术,用于防止数据在传输过程中被窃听、篡改或伪造。本文将详细介绍常见的加密算法分类、工作原理及其在网络中的应用。 1. 加密算法分类 加密算法主要分为以下三类: 类型特点典型算法对称加密加密和解…...

20250529-C#知识:索引器

C#知识:索引器 索引器给对象添加了索引访问的功能,实际访问的是对象的成员,感觉不太常用。 1、主要内容及代码示例 索引器中类似属性,也包含get和set方法索引器能够使像访问数组一样访问对象一般当类中有数组类型的成员变量时&am…...

【笔记】suna部署之获取 Tavily API key

#工作记录 Tavily 注册 Tavily 账号5: 打开浏览器,访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮,按照提示填写注册信息,如邮箱地址、设置密码等,完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…...

06-Web后端基础(java操作数据库)

1. 前言 在前面我们学习MySQL数据库时,都是利用图形化客户端工具(如:idea、datagrip),来操作数据库的。 我们做为后端程序开发人员,通常会使用Java程序来完成对数据库的操作。Java程序操作数据库的技术呢,有很多啊&a…...

JavaScript性能优化实战的技术文-——仙盟创梦IDE

JavaScript性能优化实战技术文章大纲 性能优化的核心原则 减少代码执行时间降低内存消耗优化网络请求提升用户体验 代码层面的优化 减少全局变量使用,避免命名冲突和内存泄漏使用节流(throttle)和防抖(debounce)优…...

GitHub Copilot 使用手册与原理解析

一、Copilot 简介 GitHub Copilot 是由 GitHub 联合 OpenAI 推出的 AI 编程助手。它能在你编程时,基于上下文智能补全代码、自动生成函数、编写测试用例、解释代码含义等,大幅提高编程效率。 即便有 Google、Amazon、Meta 等强劲竞争对手推出免费工具&…...