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

wsl2配置xv6全解(包括22.04Jammy)

文章目录

  • 获取xv6源代码
  • Ubuntu
    • 20.04 Version
      • 安装指令
      • 成功测试
      • 参考MIT2021年官方文档
    • 24.04 Version
      • 安装指令
      • 成功测试
      • 参考MIT2024年官方文档
  • Ubuntu 22.04
      • 没有官方文档?
    • 配置大体流程
      • 1. 卸载原本qemu(如果之前安装了)
      • 2. clone qemu官方源代码,切换到stable 7.2 version
      • 3. configure
      • 4. make 并 install
      • 5. 删除下载的qemu项目
  • 心酸历程
    • 能不能用24.04的Qemu?
  • 更多
    • 三种riscv-gcc的应用场景与区别
      • 能不能在wsl下使用?
        • riscv64-linux-gnu-gcc
        • riscv64-unknown-elf-gcc
        • riscv64-unknown-linux-gnu-gcc
    • 配置环境项讲解
      • 1. git
      • 2. build-essential
      • 3. gdb-multiarch
      • 4. qemu-system-misc
      • 5. gcc-riscv64-linux-gnu
      • 6. binutils-riscv64-linux-gnu
      • 总结
    • 自己安装的qemu和apt安装的有什么区别
      • 1. 版本差异
      • 2. 编译选项
      • 3. 安装路径
      • 4. 依赖管理
      • 5. 更新与维护
      • 6. 兼容性

获取xv6源代码

git clone https://github.com/mit-pdos/xv6-riscv.git
cd xv6-riscv #视下载后项目文件而定,可能在更多层中

下载好并正确进入OS源代码所在文件夹后,结构应该为

请添加图片描述

Ubuntu

20.04 Version

最终环境:QEMU 5.1+, GDB 8.3+, GCC, and Binutils.

安装指令

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

成功测试

# in the xv6 directory
$ make qemu
# ... lots of output ... 最终显示
init: starting sh
$

如果没有成功,可以检查下面环境

$ qemu-system-riscv64 --version
QEMU emulator version 5.1.0

至少一个以下GCC版本

$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...

参考MIT2021年官方文档

6.S081 / Fall 2021

24.04 Version

最终环境:RISC-V versions of QEMU 7.2+, GDB 8.3+, GCC, and Binutils.

安装指令

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

成功测试

# in the xv6 directory
$ make qemu
# ... lots of output ...
init: starting sh
$

如果没有成功,可以检查下面环境

$ qemu-system-riscv64 --version
QEMU emulator version 7.2.0

至少一个以下GCC版本

$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...

参考MIT2024年官方文档

6.1810 / Fall 2024

Ubuntu 22.04

有人又要说了,博主博主这不是CV官方文档吗。这也可以水一篇博客,强烈谴责!

也有人就要问了,主播主播,20.04和24.04版本的配置环境太没有含金量了,有没有什么又没有什么博客指引,也没有官方文档的版本?

有的,兄弟,有的。像这样的牢版本还有2(jiǔ)个……其中一个便是咱们的22.04,高贵的Jammy玩家

没有官方文档?

20年没有wsl版本,21~23年是20.04的天下,24年终于更新了……是24.04(Jammy玩家悬着的心还是死了)

不过以下指令还是要先执行的

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch binutils-riscv64-linux-gnu

配置大体流程

  1. 卸载原先qemu
  2. clone qemu官方源代码,切换到stable 7.2 version
  3. configure
  4. make 并 install

1. 卸载原本qemu(如果之前安装了)

22.04版本使用 apt install 直接安装的版本是 6.2.0
请添加图片描述

由于不知名原因,这个qemu并无法直接使用。会出现执行 make qemu 到一半卡住无反馈的情况

请添加图片描述

我当时还寻思着怎么启动个系统这么久……

此时有两个选择,一是使用老版本qemu(5.1),二是使用新版本qemu(7.2)。由于官方已更新,所以我们选择后者。

使用apt移除qemu

sudo apt remove --purge qemu qemu-system qemu-utils qemu-system-* -y

清理残留文件

sudo apt autoremove -y
sudo apt autoclean

检查是否仍然存在 QEMU

qemu-system-riscv64 --version

如果命令返回 “command not found”,说明 QEMU 已成功卸载。

2. clone qemu官方源代码,切换到stable 7.2 version

git clone https://gitlab.com/qemu-project/qemu.git
cd ./qemu
git checkout stable-7.2

注意:这里没有用到最新版(学都是学最新的,用都是用最老的~~~)

3. configure

cd qemu/
mkdir build
cd build/
../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug

注意这里我们只make了x86_64和riscv-64版本并且之后安装到/usr/local下。此时调用项目中可执行文件configure为make作准备。

出现 ERROR: Cannot find Ninja

执行命令

sudo apt install ninja-build

出现 ERROR: glib-2.56 gthread-2.0 is required to compile QEMU

执行命令

sudo apt install libglib2.0-dev

之后想要将qemu安装到/usr而非/usr/local下(不推荐,可能会和系统自带包管理器相冲突)

将原本configure指令替换为

../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug --prefix=/usr

成功configure之后显示
请添加图片描述
后面还有很多参数,没有截全

4. make 并 install

make -j$(nproc)
sudo make install

make过程可能会持续几分钟,因机而异

完成后尝试

qemu-system-riscv64 --version

如果正常输出则ok,如果没有找到则需要将 /usr/local 也添加到 PATH

尝试

 export PATH=/usr/local/bin:$PATHqemu-system-riscv64 --version

如果正常输出则将该路径添加到配置文件的PATH中

echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

如果,不出意外的话。此时回到 xv6-riscv 目录便可以执行 make qemu
请添加图片描述

5. 删除下载的qemu项目

如果之后不打算make其他架构的硬件模拟,此时便可以把下载的qemu源代码文件夹删除了

sudo rm -rf ./qemu

心酸历程

能不能用24.04的Qemu?

你可真是个小天才,借腹生子是吧!!!

警告:以下命令不要随便执行

sudo add-apt-repository ppa:jacob/virtualisation -y
sudo apt update
sudo apt install qemu-system-riscv64 -y

运行之后再去试试 make qemu ,结果能执行了!!!然后发现你的 gdb 就神奇的不见了……
请添加图片描述

原因就是你安装高版本的 qemu-system 时安装了覆盖一些依赖,此时便将冲突的gdb给卸载了。仔细检查 sudo apt install qemu-system-riscv64 -y 的输出日志可以发现信息

The following packages will be REMOVED:debhelper debugedit gdb gdb-multiarch ...

sad~~~天地好轮回,苍天饶过谁

这个教训告诉我们,以后在看到有哪篇博客里存在指令 apt *** -y-y 结尾,基本可以拖出去斩了(bushi)

后面就因为这个事情导致22.04版本的一些依赖变成了24.04,这个做法实在是个烂主意!

请添加图片描述

原以为22.04玩家已经是最牢的,没想到b站上还有更牢的18.04玩家(bushi)

立创泰山派训练营学习笔记–Ubuntu22.04.4 rootfs根文件系统制作-Linux SDK编译(二)

更多

三种riscv-gcc的应用场景与区别

编译器适用场景目标架构典型应用是否支持标准 C 库
riscv64-linux-gnu-gccLinux 用户空间riscv64-linux-gnu编译 RISC-V Linux 应用程序✅ (glibc)
riscv64-unknown-elf-gcc裸机 / RTOS / OS 内核riscv64-unknown-elf编译 xv6、U-Boot、裸机程序❌(无操作系统支持)
riscv64-unknown-linux-gnu-gccLinux 用户空间riscv64-unknown-linux-gnu交叉编译 Linux 程序(可能使用 musl)✅ (glibcmusl)
  • 如果你在开发 Linux 用户空间应用(如普通软件)
    → 用 riscv64-linux-gnu-gccriscv64-unknown-linux-gnu-gcc
  • 如果你在开发 RISC-V 操作系统或裸机程序(如 Bootloader、xv6
    → 用 riscv64-unknown-elf-gcc
  • 如果你不确定,但目标是在 RISC-V Linux 运行
    → 用 riscv64-linux-gnu-gcc

能不能在wsl下使用?

riscv64-linux-gnu-gcc

请添加图片描述

情况:可以编译成功但是无法执行

这个gcc最终编译的二进制文件针对的是RISCV架构,所以无法在一般的x86-64架构上直接执行。而xv6-riscv是通过qemu模拟riscv硬件才能够执行

riscv64-unknown-elf-gcc

请添加图片描述

情况:连编译都编译不过去了

riscv64-unknown-elf-gcc 针对的是裸机环境,那么包没有 <stdoi.h> 的。所以确实无法编译

riscv64-unknown-linux-gnu-gcc

没下……

配置环境项讲解

MIT的 apt-get install 命令安装了以下几个关键的软件包,主要用于在 WSL2 的 Ubuntu 22.04 上配置 xv6(一个 RISC-V 架构的类 Unix 操作系统)的开发和调试环境。


1. git

  • 作用:Git 版本控制系统,用于下载 xv6 源码,并进行代码管理(如克隆、提交和更新)。
  • xv6 相关性:从 GitHub 上克隆 xv6 源代码,例如:
    git clone https://github.com/mit-pdos/xv6-riscv.git
    

2. build-essential

  • 作用:提供了一组基本的编译工具,包括 gccg++make 等。
  • xv6 相关性
    • xv6 使用 make 进行编译,依赖 gcc 进行 C 语言编译。
    • build-essential 里包含 make,而 xv6 的 Makefile 需要 make 来组织编译流程。

3. gdb-multiarch

  • 作用:支持多架构的 GNU 调试器(GDB),可用于调试不同 CPU 指令集(如 x86、ARM、RISC-V 等)的程序。
  • xv6 相关性
    • xv6 运行在 RISC-V 上,因此需要一个支持 RISC-V 的 GDB 进行调试。
    • 可以用它远程调试 QEMU 模拟器运行的 xv6:
      gdb-multiarch
      (gdb) target remote localhost:1234
      

4. qemu-system-misc

  • 作用:QEMU 是一个通用的CPU 模拟器,qemu-system-misc 包含对多个架构的 QEMU 模拟支持。
  • xv6 相关性
    • xv6 需要 QEMU 来模拟 RISC-V 硬件环境
    • 通常用如下命令运行 xv6:
      make qemu
      

5. gcc-riscv64-linux-gnu

  • 作用:RISC-V 交叉编译器,可以编译 RISC-V 目标平台的代码
  • xv6 相关性
    • xv6 运行在 RISC-V 上,而你的开发环境是 x86_64,因此需要交叉编译器编译 RISC-V 代码。
    • 可以用它手动编译 xv6 代码:
      riscv64-linux-gnu-gcc -o hello hello.c
      

6. binutils-riscv64-linux-gnu

  • 作用:RISC-V 目标平台的 GNU binutils 工具集,包括 as(汇编器)、ld(链接器)等。
  • xv6 相关性
    • xv6 需要 as 来编译汇编代码。
    • ld 用于链接最终的 xv6 可执行文件。

总结

软件包作用在 xv6 中的用途
git版本控制克隆 xv6 源码
build-essentialC/C++ 编译工具编译 xv6
gdb-multiarch多架构调试调试 xv6
qemu-system-miscCPU 模拟器运行 xv6
gcc-riscv64-linux-gnu交叉编译编译 RISC-V 代码
binutils-riscv64-linux-gnu汇编/链接工具处理 RISC-V 汇编和链接

自己安装的qemu和apt安装的有什么区别

1. 版本差异

apt 安装:Ubuntu 官方软件源提供的 QEMU 可能是稳定版,但版本较老/或太新,可能缺少一些新功能或优化。
自己编译:可以选择最新的源码,获取最新功能、修复的 bug 和性能优化。

2. 编译选项

apt 安装:使用的是 Ubuntu 维护者编译的二进制文件,默认开启了一些常见的功能,但可能未启用所有选项。
自己编译:可以根据需求启用或禁用特定功能,例如:

  • 仅编译支持特定架构(如 --target-list=riscv64-softmmu
  • 选择特定的加速选项(如 --enable-kvm--enable-tcg
  • 进行特定优化(如 --enable-lto 进行链接时优化)

3. 安装路径

apt 安装:QEMU 会被安装到系统路径(如 /usr/bin/qemu-system-*
自己编译
默认安装在 ·/usr/local/bin·,不会影响系统自带的 QEMU
可以自定义安装路径(如 ./configure --prefix=/opt/qemu
安装路径在 configure 之后的报告里有,如果保存了源代码build文件夹还可以执行 sudo make uninstall 进行卸载

4. 依赖管理

apt 安装:自动处理依赖关系,安装/卸载时不容易出问题。
自己编译:需要手动安装依赖(如 libglib2.0-dev、libpixman-1-dev),可能会遇到缺少库或不兼容的问题。

5. 更新与维护

apt 安装:系统更新时可以自动升级(sudo apt upgrade)。
自己编译:需要手动拉取源码并重新编译安装,维护成本更高。

6. 兼容性

apt 安装:官方软件源提供的版本经过测试,与 Ubuntu 其他软件兼容性较好。
自己编译:如果使用了非官方补丁或特定配置,可能会遇到不兼容问题,例如影响 gdb、libvirt、kvm 相关组件的使用。

相关文章:

wsl2配置xv6全解(包括22.04Jammy)

文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档&#xff1f; 配置大体流程1. 卸载原本qemu&#xff08;如果之前安装了&#xff09;2. clone qemu官方源代码&…...

并查集——108. 冗余连接

108. 冗余连接 题目描述 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图),如图: 现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图,如图: 先请你找出冗余边,删除后…...

初识XXL-JOB分布式任务调度

XXL-JOB架构分析 设计思想 将调度行为抽象形成"调度中心"公共平台&#xff0c;而平台自身并不承担业务逻辑&#xff0c;"调度中心"负责发起调度请求。 将任务抽象成分散的JobHandler&#xff0c;交由"执行器"统一管理&#xff0c;"执行器…...

第29章:Service Mesh概念与Istio架构解析

第29章:Service Mesh概念与Istio架构解析 作者:DogDog_Shuai 阅读时间:约30分钟 难度:高级 目录 1. 引言2. Service Mesh基础概念3. Istio架构详解4. Istio核心功能5. Istio部署与配置6. 服务治理实战...

AI 核心技术教程:LLM、Text Embedding、Speech2Text、Moderation、TTS

AI 核心技术教程&#xff1a;LLM、Text Embedding、Speech2Text、Moderation、TTS 引言 随着人工智能的快速发展&#xff0c;NLP&#xff08;自然语言处理&#xff09;、语音识别、内容审核等技术正在重塑各个行业。本教程将详细介绍 大语言模型&#xff08;LLM&#xff09;、…...

【数据结构进阶】位图

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、位图的概念与结构 二、位图的实现 1. 结构定义 2. 构造函数 3. 三大接口实现 set unset test 总代码 4. 测试 三、 标准库的…...

[极客大挑战 2019]BabySQL—3.20BUUCTF练习day4(3)

[极客大挑战 2019]BabySQL-3.20BUUCTF练习day4(3) 做题过程 打开是以下页面&#xff08;前几天有它的第一版和第二版出现&#xff09;输入1’ 回显以下内容&#xff08;还是字符型以单引号闭合&#xff0c;因为有报错信息回显&#xff09; 输入1 order by 4%23回显成这个 被过…...

`sscanf` 和 `scanf` 的区别

sscanf 和 scanf 都是 C 语言中用于从字符串中读取格式化输入的函数&#xff0c;但它们的主要区别在于输入源的不同。 1、### scanf scanf 函数用于从标准输入&#xff08;通常是键盘&#xff09;读取格式化的输入。它的原型如下&#xff1a; int scanf(const char *format, .…...

JVM 学习前置知识

JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件&#xff0c;从底层操作系统到上层开发工具&#xff0c;逐步构建完整的开发与运行环境&#xff1a; 1. 操作系统&#xff08;Windows, MacOS, Linux, Solaris&#xff09; 作用&…...

数智读书笔记系列021《大数据医疗》:探索医疗行业的智能变革

一、书籍介绍 《大数据医疗》由徐曼、沈江、余海燕合著&#xff0c;由机械工业出版社出版 。徐曼是南开大学商学院副教授&#xff0c;在大数据驱动的智能决策研究领域颇有建树&#xff0c;尤其在大数据驱动的医疗与健康决策方面有着深入研究&#xff0c;曾获天津优秀博士论文、…...

Oracle 常用语法汇总

系列文章目录 本文对Oracle 常用的语法进行汇总 文章目录 系列文章目录一、Oracle 表&表字段操作&#xff1a;1.1 DDL语句(数据定义语言)Create、Alter、Drop、Truncate&#xff1a;1.1.1 建表&#xff1a;建表&#xff1a;注释COMMENT :表中字段的约束&#xff1a;表中字…...

解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题

配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下&#xff0c;ConfigParser会将ini配置文件中的KEY&#xff0c;转为小写。 重载后配置类&#xff1a; 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…...

第一天 UnityShader的结构

Shader初学者的学习笔记 第一天 Unity Shader的结构 文章目录 Shader初学者的学习笔记前言一、Unity Shader结构二、Unity Shader结构解析① Properties② Tags③ RenderSetup(可选状态)④ Name⑤ [Tags]⑥ [RenderSetup]⑦ 顶点着色器和片元着色器的代码 (Unity最聪明的孩子)…...

什么是 BA ?BA怎么样?BA和BI是什么关系?

前几天有朋友在评论区提到了BA这个角色&#xff0c;具体是干什么的&#xff0c;我大概来说一下。 什么是BA BA 英文的全称是Business Analyst&#xff0c;从字面上意思就是商业分析师&#xff0c;做过商业智能BI项目的应该比较了解。实际上以我个人的经验&#xff0c;BA 的角…...

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本&#xff1a;5.4.1...

Python帕累托图(Pareto Chart): 从数据排序到决策优化

帕累托图&#xff08;Pareto Chart&#xff09;是一种基于80/20法则的经典数据可视化工具&#xff0c;广泛应用于质量管理、项目管理、业务分析等领域。本文将从其原理、构成、实现方法到应用场景进行全面解析&#xff0c;并附Python代码示例。 一、帕累托图的定义与起源 帕累…...

Linux中执行 ifconfig 命令时提示 “未找到命令”

在 Linux 系统里&#xff0c;若执行 ifconfig 命令时提示 “未找到命令” 通常是由于系统没有安装 net-tools 包&#xff0c;或者该命令不在系统的 PATH 环境变量所包含的路径中 安装 net-tools 包 # Ubuntu/Debian sudo apt update sudo apt install net-tools# CentOS 7 及以…...

Python---数据分析(Pandas六:二维数组DataFrame,DataFrame的创建,DataFrame的属性)

一、 二维数组DataFrame DataFrame 是 Pandas 中的一个表格型的数据结构&#xff0c;包含有多列的数据&#xff0c;每列可以是不同的值类型(数值、字符串、布尔型等)&#xff0c;DataFrame 即有行索引也有列索引&#xff0c;可以被看做是由 Series 组成的字典。 二、DataFrame的…...

内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

1.WinRM&WinRS 条件&#xff1a; 双方开启winrm winrs服务 2008版本以上默认开启&#xff0c;win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …...

深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!

&#x1f6e1;️ 深入理解 < 和 >&#xff1a;HTML 实体转义的核心指南 &#x1f6e1;️ 在编程和文档编写中&#xff0c;< 和 > 符号无处不在&#xff0c;但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶&#xff01;&#x1f525; 本文将聚焦 <&#…...

使用uniapp的vite版本进行微信小程序开发,在项目中使用mqtt连接、订阅、发布信息

1、保证在微信公众平台配置socket合法域名 2、项目中使用mqtt 建议在package.json中配置"mqtt": “4.1.0”&#xff0c;使用这个版本的依赖 页面中引入mqtt并配置连接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用这里面的const state reacti…...

Trae 实战深度揭秘,开启高效编程新时代

导语 在AI编程工具层出不穷的当下,Trae凭借其独特的功能和强大的性能脱颖而出。它不仅是一款工具,更是提升编程效率、突破开发瓶颈的得力助手。本文将带你深入Trae实战,从项目创建到复杂代码优化,全方位展示Trae的魅力,让你迅速掌握这一编程利器。 一、Trae的安装与环境…...

SEARCH-R1:大型语言模型的多轮搜索推理革命

当AI学会"边搜索边思考" 2025年&#xff0c;语言模型领域迎来重大突破——SEARCH-R1框架通过强化学习&#xff08;RL&#xff09;让大模型实现"动态搜索自主推理"的协同进化。这项技术不仅让模型在回答"泰坦尼克号沉没时的船长是谁"时能自动检索…...

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…...

关于TVS管漏电流的问题?

问题描述&#xff1a; 在量产的带电池故事机生产中&#xff0c;工厂产线测试电流时&#xff0c;有1台机器电流比正常机器大10mA左右。 原因分析&#xff1a; 1、分析电路原理图&#xff0c;去除可能出现问题的电压或器件&#xff08;不影响系统&#xff09;&#xff0c;发现…...

LS-NET-004-简单二层环路解决(华为锐捷思科)

LS-NET-004-简单二层环路解决&#xff08;华为锐捷思科&#xff09; 以下是为您准备的二层环路示意图及解决方案&#xff0c;包含四大厂商配置对比&#xff1a; 一、Mermaid 二层环路示意图 graph TD SW1 -->|Gi0/1| SW2 SW2 -->|Gi0/2| SW3 SW3 -->|Gi0/3| SW1 SW1…...

区块链交易所平台开发全解析

在数字化飞速发展的今天&#xff0c;区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台&#xff0c;区块链交易所的开发不仅涉及复杂的技术环节&#xff0c;还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…...

Redis 面试思路

分布式redis面试思路俩点 高性能 高并发 高性能 1.存储在内存 所以速度快 2. 线程模型 io多路复用 监控多个客户端socket 放入队列里面 只是文件分发机制是单线程的 处理队列中的数据 根据不同类型 分发给不同处理器 后面处理的过程 也是多线程的 3. 内存回收机制 定期懒惰 …...

蓝桥杯_拔河_java

佬们能不能对思路二提供点建议&#xff0c;一直过不了T_T。 题目 思路 首先感觉有个坑点&#xff0c;就是可以不用把所有学生都选上&#xff0c;但是一定要保证两个部分学生的编号是连续的。比如一共5个人&#xff0c;编号是{1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…...

fastapi 实践(三)Swagger Docs

fastapi 实践&#xff08;一&#xff09;基础 fastapi 实践&#xff08;二&#xff09;异常捕获 fastapi 实践&#xff08;三&#xff09;Swagger Docs fastapi Swagger 1. FastAPI 交互式 API 文档2. 故障解决2.1. FastAPI 访问 docs 显示空白/加载失败2.2. Swagger 报错&…...