windows下docker使用笔记

目录

镜像的配置

镜像的拉取

推荐镜像源列表(截至2025年2月测试有效) 

配置方法

修改容器名字

如何使用卷

创建不同的容器,每个容器中有不同的mysql和java版本(不推荐)

1. 安装 Docker Desktop(Windows)

2. 启用 WSL 2(Windows Subsystem for Linux 2)

3. 拉取 MySQL 和 Java 镜像

4. 创建并启动容器

5. 使用 Docker Compose(Windows)

总结

但是上面的做法是不推荐的

使用Navicat连接docker中的MySQL8

docker中MySQL数据库的导出和恢复

导出 MySQL 数据库并发送给别人

在别人容器中恢复数据库

演示

使用卷(volumes)来持久化数据

示例:如何持久化数据库数据

你可以查看这些卷:

如何避免自动卷?


镜像的配置

这是我的

"registry-mirrors": ["https://你的id.mirror.aliyuncs.com","https://mirror.ccs.tencentyun.com","http://hub-mirror.c.163.com","https://registry.docker-cn.com"]

镜像的拉取

根据2025年2月的最新测试结果,以下是国内可用的Docker镜像加速源推荐列表,这些镜像源在速度和稳定性方面表现较好,适合替代默认的Docker Hub以提升镜像拉取效率:


推荐镜像源列表(截至2025年2月测试有效) 

  1. docker.m.daocloud.io

    • DaoCloud 提供的官方镜像加速服务,覆盖主流镜像,拉取速度快且稳定性高。

  2. docker-0.unsee.tech

    • 社区维护的镜像站,实测拉取时间约8.77秒,适合基础镜像加速。

  3. docker.1ms.run

    • 毫秒级响应,适合对速度要求较高的场景,拉取时间约10.70秒。

  4. func.ink

    • 快速且稳定,拉取时间仅8.32秒,适合高频使用1。

  5. docker.imgdb.de

    • 德国镜像站的中国节点,支持多类镜像,同步速度较快。

  6. docker.hlmirror.com

    • 国内社区维护,实测拉取时间约14.16秒,支持主流镜像。

  7. docker.zhai.cm

    • 个人开发者维护,拉取时间约8.89秒,适合轻量级镜像。

  8. fast360.xyz

    • 企业级镜像加速服务,响应速度快,适合大型镜像。

  9. lispy.org

    • 社区推荐,拉取时间约14.09秒,支持多种公共镜像。

  10. 中国官方镜像:https://registry.docker-cn.com
    网易163镜像:http://hub-mirror.c.163.com
    中科大镜像:https://docker.mirrors.ustc.edu.cn
    阿里云镜像:https://[xxx].mirror.aliyuncs.com


配置方法

  1. 永久配置(推荐)
    修改 Docker 的配置文件 daemon.json,添加多个镜像源以提升容错性:

      "registry-mirrors": ["https://docker.m.daocloud.io","https://docker-0.unsee.tech","https://docker.1ms.run","https://func.ink","https://docker.imgdb.de"]
    
  2. 临时使用
    在拉取命令中直接指定镜像源地址(无需 https:// 前缀):

    docker pull docker.m.daocloud.io/hello-world:latest

注意事项

  1. 镜像同步延迟
    部分镜像源可能未同步最新镜像(如阿里云镜像站),若拉取失败可切换其他源。

  2. 地区限制
    某些镜像源可能受地区网络影响(如企业内网限制),建议结合本地网络环境测试。

  3. 服务波动
    社区维护的镜像源可能存在不稳定性,推荐配置多个备用地址。

  4. 验证配置是否生效
    执行 docker info,若输出中显示 Registry Mirrors 列表,则配置成功。


性能测试建议

  • 使用 time 命令对比镜像拉取速度:

    time docker pull hello-world:latest
  • 移除本地缓存后测试,结果更准确。

修改容器名字

Docker Desktop 界面本身没有直接修改容器名字的选项,但你可以通过以下步骤来完成:

步骤:

  1. 停止容器: 首先,确保容器处于停止状态。在 Docker Desktop 界面,找到 quizzical_brattai 容器,点击右侧的 "Stop" 按钮停止该容器。

  2. 重命名容器: 打开 Docker Desktop 中的 Terminal 或者使用命令行,输入以下命令来重命名容器,假设你想把 quizzical_brattai 容器改名为 new-hello-world,命令应该是:

    docker rename quizzical_brattai new-container-name
  3. 启动容器: 重命名容器后,你可以重新启动它。在 Docker Desktop 界面中,找到该容器,点击 "Start" 按钮。

注意:

  • 容器重命名不会改变容器的功能或配置,它只是更改容器的名称。
  • 容器的镜像 (hello-world) 不会改变,因为镜像和容器是不同的概念。你可以用相同的镜像启动多个容器,只需要不同的容器名称。

如何使用卷

卷(volumes)主要用于数据持久化和容器之间的数据共享。容器在运行时会创建文件系统,但这些文件系统是临时的,容器停止后数据会丢失。而卷提供了一种方式,让你能够在容器和主机之间持久化数据,并且容器之间也可以共享这些数据。

在Docker中,卷可以通过以下几种方式进行使用:

  • 命令行创建和使用卷:可以通过 docker volume create 命令创建卷,使用时通过 -v 参数将卷挂载到容器中。

    示例:

    docker volume create myvolume
    docker run -d -v myvolume:/data mycontainer
    
  • 将主机目录挂载为卷:除了使用 Docker 管理的卷,还可以将主机的某个目录直接挂载到容器中,这对于开发和调试非常方便。

    示例:

    docker run -d -v C:\path\to\host\folder:/data mycontainer
    

总之,Docker中的卷是一种非常重要的功能,能够保证数据的持久性,并提高容器的可移植性和灵活性。

创建不同的容器,每个容器中有不同的mysql和java版本(不推荐)

要在 Docker 中创建多个容器,每个容器中包含不同版本的 MySQL 和 Java,可以使用 Docker 的 多容器管理。你可以为每个容器选择不同的 MySQL 和 Java 版本,以下是详细的步骤。

1. 安装 Docker Desktop(Windows)

确保你已经在 Windows 上安装并启动了 Docker Desktop。如果没有安装,你可以从 Docker 官网下载并安装:Docker Desktop for Windows。

2. 启用 WSL 2(Windows Subsystem for Linux 2)

在 Windows 上运行 Docker Desktop 时,通常需要启用 WSL 2(Windows Subsystem for Linux 2)作为后端。Docker Desktop 会自动配置 WSL 2。

  • 打开 PowerShell 以管理员身份运行,执行以下命令来启用 WSL:

    wsl --install
    
  • 如果已安装 WSL,可以通过以下命令升级为 WSL 2:

    wsl --set-default-version 2
    
  • 确保你已经安装了合适的 Linux 发行版(例如 Ubuntu)。可以在 Microsoft Store 中找到并安装。

3. 拉取 MySQL 和 Java 镜像

在 Windows 上,你可以使用 Docker Desktop 自带的 PowerShell命令提示符 来运行 Docker 命令。

  • 拉取 MySQL 镜像: 打开 PowerShell 或命令提示符,输入以下命令来拉取 MySQL 镜像(例如 MySQL 5.7):

    docker pull mysql:5.7
    
  • 拉取 Java 镜像: 同样,拉取 Java 镜像(例如 OpenJDK 8):

    docker pull openjdk:8
    

4. 创建并启动容器

  • 你可以使用下面的命令在 Windows 上创建和启动容器。

    创建 MySQL 5.7 容器

    docker run --name mysql-java8-container -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:5.7
    

    进入容器

    docker exec -it mysql-java8-container bash
    

    安装 Java 8: 在容器内使用以下命令安装 Java 8:

    apt-get update
    apt-get install openjdk-8-jdk -y
    

    创建 MySQL 8.0 容器并安装 Java 11

    docker run --name mysql-java11-container -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:8.0
    docker exec -it mysql-java11-container bash
    apt-get update
    apt-get install openjdk-11-jdk -y
    

5. 使用 Docker Compose(Windows)

详细教程:Windows下Docker Compose使用教程-CSDN博客

Docker Desktop 也支持 Docker Compose,在 Windows 上使用与其他操作系统相同。你可以创建一个 docker-compose.yml 文件来定义多个容器服务。

  1. 创建 docker-compose.yml 文件

    使用文本编辑器创建一个名为 docker-compose.yml 的文件,并将以下内容复制到该文件中:

    version: '3'
    services:mysql-java8:image: mysql:5.7container_name: mysql-java8-containerenvironment:MYSQL_ROOT_PASSWORD: rootpasswordvolumes:- mysql-data:/var/lib/mysqlports:- "3306:3306"java8:image: openjdk:8container_name: java8-containercommand: ["java", "-version"]mysql-java11:image: mysql:8.0container_name: mysql-java11-containerenvironment:MYSQL_ROOT_PASSWORD: rootpasswordvolumes:- mysql-data:/var/lib/mysqlports:- "3307:3306"java11:image: openjdk:11container_name: java11-containercommand: ["java", "-version"]volumes:mysql-data:
    
  2. 启动 Docker Compose 服务

    打开 PowerShell 或命令提示符,导航到 docker-compose.yml 文件所在的目录,然后运行以下命令来启动服务:

    docker-compose up -d
    
  3. 检查容器状态: 运行 docker ps 命令检查容器是否成功启动。

总结

这些步骤是针对 Windows 环境的。如果你在 Windows 下遇到任何问题,确保 Docker Desktop 和 WSL 2 正常运行。如果你已经完成了 Docker Desktop 的安装并启用了 WSL 2,剩下的步骤和 Linux/macOS 环境类似,可以直接使用命令行操作。

通过上述步骤,你可以创建多个 Docker 容器,每个容器中有不同版本的 MySQL 和 Java。使用 Docker Compose 可以简化多个容器的管理,便于同时运行和管理不同版本的服务。这样,你可以根据需要在同一台机器上运行多个环境,每个环境包含不同的 MySQL 和 Java 版本。

但是上面的做法是不推荐的

在 Docker 中,容器是相互隔离的。你可以在同一个容器中运行多个服务或应用程序,但这样做并不推荐,因为这会违背容器化的基本理念:每个容器应该只负责一个服务。这种做法可能会导致管理上的复杂性以及环境冲突。

对于你的情况,如果你将 MySQL 和 JDK 8 放在同一个容器中运行,确实不会直接影响到 Windows 环境中的 Java 设置。然而,这样做并不符合最佳实践,因为它会让你失去容器本来的隔离性和灵活性,且在需要维护时可能更加困难。

更推荐的做法是分别为 MySQL 和 JDK 创建单独的容器,并通过 Docker 的网络功能将它们连接起来,这样可以避免相互干扰并保持每个服务的独立性。你还可以使用 Docker Compose 来管理多个容器。

如果你坚持将它们放入同一个容器,可以在 Dockerfile 中基于某个基础镜像(例如 Ubuntu)安装 JDK 和 MySQL 服务,并确保它们能够正常启动。但我建议你考虑分开部署,以便更容易管理和维护。

在你使用 docker exec 进入容器时,运行 apt-get install openjdk-8-jdk -y 不会从本地已经拉取的 openjdk-8 镜像安装,而是会从 Docker Hub 上下载对应的 OpenJDK 8 镜像。

这是因为你创建的容器基于 MySQL 镜像(mysql:8),该镜像中并不包含 Java 环境。因此,运行 apt-get install openjdk-8-jdk 会尝试从 Docker Hub 下载并安装 OpenJDK 8。由于 MySQL 镜像并不包含 Java,所以它没有相关的 Java 环境。

要在容器内使用 Java,你有两种选择:

  1. 直接在容器中安装 OpenJDK: 你可以在容器内运行 apt-get updateapt-get install openjdk-8-jdk -y 来安装 OpenJDK 8。这会从网络下载并安装 OpenJDK 8。在安装完成后,你就可以在容器中使用 Java 了。

  2. 基于 OpenJDK 镜像创建容器: 你可以创建一个基于 OpenJDK 镜像的容器。例如,你可以运行以下命令来拉取 OpenJDK 镜像并创建容器:

    docker run --name java-container -it openjdk:8 bash
    

    然后,你就可以在这个容器中直接使用 Java,而不需要安装 OpenJDK。

如果你希望在同一个容器中同时运行 MySQL 和 Java,建议使用 Docker Compose 来同时启动多个服务容器。

使用Navicat连接docker中的MySQL8

端口映射:你需要将 MySQL 容器的端口暴露到主机上,这样才能通过 Navicat 连接。默认情况下,MySQL 使用 3306 端口。你需要在运行容器时添加端口映射参数

打开docker的终端输入:

docker run --name mysql8-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:8

会出现并运行该容器

打开Navicat新建连接,测试连接,密码就是刚刚设置的123456

(此时本地的MySQL是关闭的,说明连接的就是docker中的MySQL)

docker中MySQL数据库的导出和恢复

如果你想将当前容器中的 MySQL 数据库导出并发送给别人,这两个文件(SQL 文件和配置文件)可以作为导出的结果来复制你的数据库:

  1. xx.sql 文件:这个文件包含了数据库的结构(例如表、索引、视图等)和数据(例如 INSERT 语句)。它可以用来在其他 MySQL 容器或实例中重建相同的数据库,包括数据表、数据等。

  2. xx.cnf 文件:这是 MySQL 的配置文件,包含了 MySQL 服务的运行参数(如端口、字符集等)。如果别人希望使用与你相同的配置,可以将这个文件放到他们的 MySQL 容器中,替换掉现有的配置文件(如果有不同配置需求)。

导出 MySQL 数据库并发送给别人

假设你希望导出 MySQL 数据库,可以使用 mysqldump 命令来进行备份:

  1. 导出数据库结构和数据: 在 Docker 容器中执行以下命令将数据库导出为 SQL 文件:

    docker exec -it mysql-java8-container mysqldump -u root -p123456 --all-databases > /tmp/all_databases.sql
    

    这将导出所有数据库的数据和结构。如果你只想导出特定的数据库,可以使用:

    docker exec -it mysql-java8-container mysqldump -u root -p123456 database_name > /tmp/database_name.sql
    
  2. 复制导出的 SQL 文件到本地: 使用 docker cp 命令将导出的 SQL 文件从容器复制到本地:

    docker cp mysql-java8-container:/tmp/all_databases.sql /path/to/local/directory
    
  3. 复制配置文件(如果需要): 如果你需要包括配置文件,可以将 hm.cnf 文件从容器复制到本地:

    docker cp mysql-java8-container:/etc/mysql/my.cnf /path/to/local/directory/hm.cnf
    
  4. 发送给别人: 你可以将 all_databases.sql 或单个数据库的 SQL 文件以及 hm.cnf 文件发送给别人。别人只需要按照前面的步骤,先将这些文件导入到他们的 MySQL 容器中,然后再根据需要配置 hm.cnf 文件即可。

在别人容器中恢复数据库

  1. 导入数据库结构和数据: 别人可以将 all_databases.sqldatabase_name.sql 文件复制到他们的 MySQL 容器中,然后使用以下命令恢复:

    docker cp /path/to/all_databases.sql mysql-java8-container:/tmp/all_databases.sql
    docker exec -it mysql-java8-container bash
    mysql -u root -p123456 < /tmp/all_databases.sql
    
  2. 应用配置文件(如果需要): 如果有配置文件需要替换,别人可以将 hm.cnf 文件复制到容器中,并重启 MySQL 服务:

    docker cp /path/to/hm.cnf mysql-java8-container:/etc/mysql/my.cnf
    docker restart mysql-java8-container
    

总结

  • SQL 文件 用于导出和导入数据库的结构和数据。
  • 配置文件 用于在不同环境中复制相同的 MySQL 配置。

通过这两个文件,别人可以在他们的容器中恢复你的数据库并应用相同的配置。

演示

现在我本地已经有hmall.sql和hm.cnf

有两种方式来恢复该数据库

方式一:在 Docker 中的 MySQL 容器中运行这些文件,hmall.sql和hm.cnf

  1. 运行 SQL 文件 (hmall.sql): 你可以将 hmall.sql 文件加载到 MySQL 容器中,步骤如下:

    • 将 SQL 文件复制到容器中: 使用 docker cp 命令将 hmall.sql 文件从本地复制到容器中:

      docker cp "F:\hmall.sql" mysql8-container:/tmp/hmall.sql
      
    • 进入容器并执行 SQL 文件: 进入容器并使用 MySQL 命令行工具运行该 SQL 文件:

      docker exec -it mysql8-container bash
      mysql -u root -p123456 < /tmp/hmall.sql
      

      这样会执行 hmall.sql 中的所有 SQL 命令,将数据和结构导入到 MySQL 数据库中。

  2. 应用配置文件 (hm.cnf): 配置文件通常用于自定义 MySQL 的运行设置。要在 Docker 中使用 hm.cnf 文件,你可以将它复制到容器中的 MySQL 配置目录,并重启 MySQL 服务。

    • 复制配置文件到容器中

      docker cp /path/to/hm.cnf mysql-java8-container:/etc/mysql/my.cnf
      
    • 重启 MySQL 容器: 重启容器使新配置生效:

      docker restart mysql-java8-container
      

方式二:运行docker中含有MySQL的容器后,在Navicat中运行hmall.sql

你可以在 Navicat 中直接打开 hmall.sql 文件并执行它。具体操作步骤如下:

  1. 打开 Navicat,连接到你运行的 MySQL 容器。
  2. 在 Navicat 中选择你希望导入数据库的 MySQL 实例。
  3. 使用 Navicat 打开 hmall.sql 文件。
  4. 点击执行按钮,这样 SQL 文件中的所有命令将会执行,数据库将会根据 SQL 文件中的定义创建并填充数据。

使用卷(volumes)来持久化数据

如果你在容器中创建了数据库和数据表,并且没有使用卷(volumes)来持久化数据,那么当容器停止、删除或重新创建时,这些数据会丢失。因为容器的文件系统是临时的,只存在于容器的生命周期内。

为了防止数据丢失,你需要使用卷来持久化数据库的数据。你可以将容器中的数据库文件目录映射到宿主机上的目录,或者使用Docker卷来存储数据库数据,这样即使容器停止或删除,数据仍然会保存在宿主机或卷中。

示例:如何持久化数据库数据

假设你使用的是MySQL数据库,可以通过如下方式将数据库的数据保存在卷中:

docker run -d \-v mysql_data:/var/lib/mysql \--name mysql_container \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest

在上面的命令中:

  • -v mysql_data:/var/lib/mysql:这将创建一个名为 mysql_data 的卷,并将其挂载到容器的 /var/lib/mysql 目录,这个目录是MySQL存储数据的默认路径。
  • 这样即使容器停止或删除,数据库的数据也会被保存在 mysql_data 卷中,下一次启动容器时可以恢复这些数据。

如果你使用的是本地目录作为数据存储位置,可以这样做:

docker run -d \-v C:\path\to\host\mysql_data:/var/lib/mysql \--name mysql_container \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest

这样,即使容器被删除或停止,C:\path\to\host\mysql_data 目录中的数据仍然会被保留在主机上。

如果你没有手动挂载卷,但是docker在没有明确指定使用volumes的情况下,仍然会自动为某些容器创建一个卷,尤其是像MySQL这样的数据库容器。即使你没有显式地为容器创建卷,Docker会在容器启动时自动为MySQL等服务创建一个名为<容器ID>_data的匿名卷,用来持久化数据库的文件。例如下:

这个自动创建的卷通常位于Docker的内部管理目录(通常是Docker的默认数据目录),它会存储MySQL的数据库文件,即使你没有使用-v选项来指定一个挂载卷。这个匿名卷的作用是确保数据库在容器重启、停止或删除后仍能保留数据。

你可以查看这些卷:

  1. 列出所有卷: 你可以通过 docker volume ls 命令查看所有卷,包括自动生成的匿名卷。

    docker volume ls
    
  2. 查看卷的详细信息: 可以通过 docker volume inspect <卷名> 来查看卷的详细信息,包括它的存储路径。

    docker volume inspect <卷名>
    

如何避免自动卷?

如果你想要管理卷并显式地指定数据存储位置,最好是在启动容器时使用 -v 参数来挂载自定义的卷或主机目录。例如:

docker run -d -v /path/to/host/mysql_data:/var/lib/mysql --name mysql_container -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest

这样,你就可以明确控制数据库数据的位置,而不是依赖Docker自动创建的匿名卷。

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

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

相关文章

1005 K 次取反后最大化的数组和(贪心)

文章目录 题目[](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/)算法原理源码总结 题目 如上图&#xff0c;k是取反的次数&#xff0c;在数组【4&#xff0c;-1,3】中&#xff0c;当k 1&#xff0c;把-2取反为2&#xff0c;和为9&#xff1b;在数组…

java毕业设计之医院门诊挂号系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的医院门诊挂号系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 医院门诊挂号系统的主要使用者…

深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案

华为终端正面临销售模式转型的关键时刻&#xff0c;旨在通过构建MPRLTC项目&#xff0c;以规避对运营商定制的过度依赖&#xff0c;并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统&#xff0c;支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…

JUC并发—8.并发安全集合一

大纲 1.JDK 1.7的HashMap的死循环与数据丢失 2.ConcurrentHashMap的并发安全 3.ConcurrentHashMap的设计介绍 4.ConcurrentHashMap的put操作流程 5.ConcurrentHashMap的Node数组初始化 6.ConcurrentHashMap对Hash冲突的处理 7.ConcurrentHashMap的并发扩容机制 8.Concu…

Cython学习笔记1:利用Cython加速Python运行速度

Cython学习笔记1&#xff1a;利用Cython加速Python运行速度 CythonCython 的核心特点&#xff1a;利用Cython加速Python运行速度1. Cython加速Python运行速度原理2. 不使用Cython3. 使用Cython加速&#xff08;1&#xff09;使用pip安装 cython 和 setuptools 库&#xff08;2&…

DApp 开发入门指南

DApp 开发入门指南 &#x1f528; 1. DApp 基础概念 1.1 什么是 DApp&#xff1f; 去中心化应用&#xff08;DApp&#xff09;是基于区块链的应用程序&#xff0c;特点是&#xff1a; 后端运行在区块链网络前端可以是任何框架使用智能合约处理业务逻辑数据存储在区块链上 1…

基于Spring Security 6的OAuth2 系列之二十 - 高级特性--令牌交换(Token Exchange)

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级…

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

目录 1 环境搭建 2 交叉编译opencv 3 模型训练 4 模型转换 4.1 pt模型转onnx模型 4.2 onnx模型转rknn模型 4.2.1 安装rknn-toolkit 4.2.2 onn转成rknn模型 5 升级npu驱动 6 C++推理源码demo 6.1 原版demo 6.2 增加opencv读取图片的代码 7 交叉编译x264 ffmepg和op…

【开源】编译器,在线操作

目录 1. 思绪思维导图&#xff1a;simple mind map2. Markdown&#xff1a;md-editor-v33. 文档&#xff1a;wangEditor4. 电子表格&#xff1a;Luckysheet5. 幻灯片&#xff1a;PPTist6. 白板&#xff1a;excalidraw7. 流程图&#xff1a;drawio 1. 思绪思维导图&#xff1a;…

跳表(Skip List)详解

一、什么是跳表&#xff1f; 跳表是一种基于有序链表的高效数据结构&#xff0c;通过建立多级索引实现快速查询。它在平均情况下支持O(log n)时间复杂度的搜索、插入和删除操作&#xff0c;性能接近平衡树&#xff0c;但实现更为简单。 二、核心原理 1. 层级结构 底层为完整…

【Quest开发】全身跟踪

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …

25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型

看文献过程中不断发现有太多不懂的基础知识&#xff0c;故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关&#xff0c;故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…

栈,优先级队列,map,set

文章目录 栈题目解析代码 优先级队列题解代码 map题解代码 set题解代码 栈 题目解析 1.先把元素push进栈中&#xff0c;如果栈非空并且栈中的元素按顺序和k相等就出栈&#xff0c;直到栈为空或者k ! sk.top() 代码 #include<iostream> #include<stack> #include&l…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…

Redis的预备知识

1.Redis的基本全局命令 Redis有多种数据结构&#xff0c;但它们都是键值对的&#xff0c;对于与键来说有一些通用的命令 1.1 KEYS 返回所有满足样式&#xff08;pattern&#xff09;的key 假定当前具有以下value值&#xff1a;hllo&#xff0c;hello&#xff0c;hallo&…

量子计算的威胁,以及企业可以采取的措施

当谷歌、IBM、Honeywell和微软等科技巨头纷纷投身量子计算领域时&#xff0c;一场技术军备竞赛已然拉开帷幕。 量子计算虽能为全球数字经济带来巨大价值&#xff0c;但也有可能对相互关联的系统、设备和数据造成损害。这一潜在影响在全球网络安全领域引起了强烈关注。也正因如…

nlp|微调大语言模型初探索(3),qlora微调deepseek记录

前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …

【设计模式】【创建型模式】工厂方法模式(Factory Methods)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

DeepSeek模型快速部署教程-搭建自己的DeepSeek

前言&#xff1a;在人工智能技术飞速发展的今天&#xff0c;深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型&#xff0c;凭借其高效的性能和灵活的部署方式&#xff0c;受到了广泛关注。无论是自然语言处理、图像识别&#xff0c;还是…

Deepseek 与 ChatGPT:AI 浪潮中的双子星较量

引言 在人工智能飞速发展的当下&#xff0c;AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者&#xff0c;各自展现出独特的魅力&#xff0c;引领着 AI 技术的发展潮流。今天&#xff0c;就让我们深入探讨这两款模型&#xff0c;看看它们在 AI 领域中是…