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

如何使用docker在linux中配置C++环境

目录

1. 安装docker

2. 配置C++环境

1)启动ubuntu:22.04容器

2)配置编译环境G++

3)安装软件

4)测试

1. 如何打包容器生成tar?

a. 生成容器镜像

b. 将镜像压缩成tar

2. 如何将容器内部的端口映射至宿主机?

a. 使用 -p 选项启动容器并映射端口

b. 验证端口映射

c. 在外部客户端访问服务


我这里将我如何在linux服务器中安装docker以及在容器中配置C++环境的步骤以及遇到的一些问题总结如下。

参考:

https://www.bilibili.com/video/BV12z4y147y3?vd_source=cb95e3058c2624d2641da6f4eeb7e3a1​www.bilibili.com/video/BV12z4y147y3?vd_source=cb95e3058c2624d2641da6f4eeb7e3a1icon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV12z4y147y3%3Fvd_source%3Dcb95e3058c2624d2641da6f4eeb7e3a1

恋恋风辰官方博客​llfc.club/category?catid=225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Suf5jJjQEVKDClYNgIiKV9ipcbicon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//llfc.club/category%3Fcatid%3D225RaiVNI8pFDD5L4m807g7ZwmF%23%21aid/2Suf5jJjQEVKDClYNgIiKV9ipcb

Linux系统安装 docker 容器及部署项目​blog.csdn.net/weixin_67722778/article/details/139717151​编辑icon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//blog.csdn.net/weixin_67722778/article/details/139717151

解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc​blog.csdn.net/Liiiiiiiiiii19/article/details/142438122​编辑icon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//blog.csdn.net/Liiiiiiiiiii19/article/details/142438122

1. 安装docker

更新软件列表

sudo apt update

安装依赖项以允许使用 HTTPS 通过 APT 获取 Docker

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

添加 Docker 的官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

将 Docker APT 软件仓库添加到系统中

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件包列表,并安装 Docker CE

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

验证 Docker 是否已成功安装

sudo docker run hello-world

我这里在前面几步都成功了,但到最后一步的时候提示我连接超时,如下

我尝试了国内很多镜像源,比如阿里云的镜像源,但仍然会有这个问题

最后找到解决办法:

参考:

解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc​blog.csdn.net/Liiiiiiiiiii19/article/details/142438122​编辑icon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//blog.csdn.net/Liiiiiiiiiii19/article/details/142438122

首先打开daemon.json文件:

sudo nano /etc/docker/daemon.json

在该文件中写入

{"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

ctrl+x保存,点y+enter退出。

重载系统守护进程并重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

重新拉取docker hello world

sudo docker pull hello-world

启动容器:

sudo docker run hello-world

如果输出“Hello from Docker!”,那么容器拉取运行成功

2. 配置C++环境

该过程参考博主恋恋风辰:

恋恋风辰官方博客​llfc.club/category?catid=225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Suf5jJjQEVKDClYNgIiKV9ipcbicon-default.png?t=O83Ahttps://link.zhihu.com/?target=https%3A//llfc.club/category%3Fcatid%3D225RaiVNI8pFDD5L4m807g7ZwmF%23%21aid/2Suf5jJjQEVKDClYNgIiKV9ipcb

1)启动ubuntu:22.04容器

sudo docker run -itd --name cppubuntu ubuntu:22.04

itd:

ubuntu:22.04: 乌班图版本为22.04

出现这一段内容代表镜像拉取成功,输入‘sudo docker ps’查看容器

进入容器,,复制容器id,我这里是:‘5d2a7e6c07cb’,然后输入

sudo docker exec -it 5d2a7e6c07cb /bin/bash

以bash脚本的方式进入容器,查看该系统是什么样的

进入以后,用户名发生了改变,我之前的用户名是:‘yuanwenzheng@nwpu232:’,但进入容器后是:

2)配置编译环境G++

当前目录下创建一个test子目录

mkdir ./test

容器内更新源,安装最新的软件包

apt-get update

配置C++编译环境,容器内安装gcc/g++工具包

apt install build-essential

然后点y确定,安装成功:

测试安装的版本是否支持C++17

echo "#include <iostream>" > test.cpp

将‘#include <iostream>’输入至test.cpp,并将cpp移动至test文件中

mv ./test.cpp ./test

并cd至test文件中

cd ./test/

文件中只有test.cpp一个文件

然后将main函数加入至test.cpp文件中,将c++版本输出

echo "int main() { std::cout << __cplusplus << std::endl; return 0; }" >> test.cpp

使用g++编译test.cpp文件,c++版本为17,输入test执行文件

g++ -std=c++17 test.cpp -o test

这里执行test

./test

这里输出‘201703’,版本输出成功,因为C++17是2017年3月制定的标准。

3)安装软件

安装vim

apt install vim

测试vim,输入

vim ./test.cpp

vim安装成功

安装wget

apt install wget

获取boost库的源码包,我这里的boost版本是1.86.0

wget https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz

如果下载太慢,可以将文件下载好上传至宿主机,然后在宿主机输入,不能在容器内输入

sudo docker cp  /home/ubuntu/boost_1_86_0.tar.gz   cppubuntu:/test

这里docker容器从路径“/home/ubuntu/boost_1_86_0.tar.gz”copy至“cppubuntu:/test”

安装boost需要的一些库

apt-get install  python3-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev

因为 python-dev 包已经被废弃,可以使用 python-dev-is-python3 或 python2-dev 作为替代方案,自己选择具体的python版本进行安装,我这里选择python3.

解压boost库,并安装

首先,确保你在当前工作目录下已下载boost库压缩包

然后输入:

tar zxvf boost_1_86_0.tar.gz

然后,进入boost文件中,配置向导,预先设置安装目录为usr,并安装

cd ./boost_1_86_0
./bootstrap.sh --prefix=/usr/
./b2 install

安装完成后显示

安装git

apt install git

安装成功后进行git初始化

git config --global user.name "Qbb"
git config --global user.email "qbb@mail.nwpu.edu.cn"
git init

初始化用户名和邮箱,并在当前目录下设置初始化一个新的Git仓库,输入下面代码验证初始化是否成功

git config --global user.name
git config --global user.email

安装cmke

wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0.tar.gz

如果安装太慢,可以在下载好上传至宿主机,然后再宿主机内输入

sudo docker cp /mnt/datab/home/yuanwenzheng/C++/cmake-3.27.0.tar.gz cppubuntu:/test

安装必要的ssl库

apt install libssl-dev

解压cmake压缩包

tar -zxvf cmake-3.27.0.tar.gz

解压后进入‘cmake-3.27.0’文件夹内

./cmake-3.27.0/

设置引导程序

./bootstrap
make
make install

测试

cmake --version

出现该界面说明cmake安装成功

4)测试

进入test目录,创建一个code,并将该目录下所有test文件移除,只保留code文件,最后进入code文件

mkdir code
rm -rf ./test*
cd ./code/

创建一个helloboost.cpp文件并编辑

vim ./helloboost.cpp

键盘点击‘i’,进入插入模式,粘贴,将boost版本输出

#include <iostream>
#include <boost/version.hpp>
using namespace std;
int main() {cout << "Boost 版本" << BOOST_VERSION << endl;return 0;
}

然后点击esc,输入‘:wq’保存退出文件

使用g++编译该文件,生成helloboost 执行文件

g++ -o helloboost ./helloboost.cpp

执行helloboost 文件

./helloboost 

boost版本号被成功输出,boost被成功安装

拉取我们执行写的服务器代码,并进行测试,我们直接拉取博主恋恋风辰的个人仓库

git clone https://gitee.com/secondtonone1/boostasio-learn.git

cd至networl文件夹下

cd ./boostasio-learn/network/

选择‘day06-AsyncServer’这个代码文件,这个文件用于搭建一个最简单的异步服务器

这里首先写一个cmakelist,然后通过cmakelist生成makefile文件,再该文件下执行make生成可执行文件AsyncServer,运行即可测试。

编写makelist.txt

进入‘/test/code/boostasio-learn/network/day05-AsyncServer’目录下,输入

vim ./CMakeLists.txt

输入以下内容:

cmake_minimum_required(VERSION 3.12)
project(AsyncServer)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
# 设置 Boost 的路径
set(BOOST_ROOT /usr)
# 查找 Boost 库的组件
find_package(Boost REQUIRED COMPONENTS system thread)
# 添加可执行文件和源文件
file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer/*.cpp)
add_executable(AsyncServer ${SOURCES})
# 包含头文件路径(包括其他目录)
target_include_directories(AsyncServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer ${CMAKE_CURRENT_SOURCE_DIR}/other_directory# 添加其他目录路径...
)
# 包含 Boost 头文件路径
target_include_directories(AsyncServer PRIVATE ${Boost_INCLUDE_DIRS})
# 链接 Boost 库
target_link_libraries(AsyncServer PRIVATE ${Boost_LIBRARIES})
  • cmake_minimum_required:表示cmake所需的最低版本为3.12;
  • project(AsyncServer):项目名称为AsyncServer
  • set(CMAKE_CXX_STANDARD 17):C++标准设置为C++17
  • set(BOOST_ROOT /usr):Boost库的路径为/usr
  • find_package(Boost REQUIRED COMPONENTS system thread):查找 Boost 库所需的组件,比如COMPONENTS ,system ,thread
  • file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer/*.cpp):将所有的cpp文件定义到一个SOURCES 变量中,这里将CMAKE_CURRENT_SOURCE_DIR(当前cmake目录下)下day06-AsyncServer 目录下所有扩展名为 .cpp 的文件添加到 SOURCES 变量中。这一步是为了添加源文件。
  • add_executable(AsyncServer ${SOURCES}):添加可执行文件,使用 ${SOURCES} 中包含的所有源文件来编译并生成一个目标:AsyncServer
  • 定义包含目录:为AsyncServer 目标添加头文件搜索路径,确保当 AsyncServer 编译时,这些路径中的头文件可以被找到并正确引用。PRIVATE是访问级别,它指定这些目录仅在目标 AsyncServer 的编译过程中可见,cmake支持以下三种访问级别:
    • PRIVATE:仅当前目标可以访问这些目录(其他依赖于这个目标的项目无法访问)。
    • PUBLIC:当前目标和依赖于这个目标的其他目标都可以访问这些目录。
    • INTERFACE:仅依赖于当前目标的其他目标可以访问这些目录,但当前目标本身不能访问。
  • 包含 Boost 头文件路径:为 AsyncServer 目标添加 Boost 库的头文件目录,以便在编译时能够找到并使用 Boost 库的头文件,${Boost_INCLUDE_DIRS}包含了 Boost 库头文件的路径,通常在找到 Boost 库后,CMake 会将头文件路径存储在这个变量中
  • 链接 Boost 库:将 Boost 库链接到 AsyncServer 目标,使其在编译过程中能够找到并链接到 Boost 的库文件。${Boost_LIBRARIES}:这个变量包含了 CMake 找到的 Boost 库的链接路径,这个变量通常在调用 find_package(Boost REQUIRED COMPONENTS system thread) 后被定义

最后,新建目录build, 进入build目录,执行cmake ..

mkdir build
cd ./build/cmake ..

执行‘make’即可编译该项目

make

生成了‘AsyncServer’可执行文件,执行该文件即可启动服务器

./AsyncServer

我顺便学习了如何将生成的容器生成镜像并打包成压缩文件,并在其他机器上下载使用;以及如何将容器内部的端口映射至宿主机。总结如下:

1. 如何打包容器生成tar?

为了避免在其他平台使用该代码需要重复配置容器环境,这里学习如何将配置好的docker容器打包生成压缩文件tar。

a. 生成容器镜像

首先,将容器生成镜像,如果创建了并启动一个容器后,必须将其保存为新的镜像,不然该容器不会显示在镜像列表中,输入“sudo docker images”不会看见该镜像,只有输入“sudo docker ps”才能看见正在运行的容器。所以如果想将配置好的容器生成为镜像,必须输入下面的内容:

 sudo docker commit cppubuntu cppubuntu:1.0

b. 将镜像压缩成tar

sudo docker save -o cppubuntu.tar cppubuntu:1.0
sudo docker save -o /path/to/your/directory/cppubuntu.tar cppubuntu:1.0

将cppubuntu.tar保存下来,该文件可以传输到其他机器或系统中使用。

在其他机器上使用 docker load 命令来加载这个镜像:

sudo docker load -i cppubuntu.tar

加载后,可以使用 docker images 查看是否成功导入镜像,然后像平常一样通过 docker run 命令启动容器。

sudo docker images

然后输入以下命令即可运行该容器:

sudo docker run -itd --name testubuntu cppubuntu:1.0

如果想进入这个容器,输入以下内容:

sudo docker ps
sudo docker exec -it testubuntu /bin/bash

第一行命令将列出所有正在运行的容器及其信息

第二行命令进入指定容器,-it 参数用于交互式终端,/bin/bash 表示想要使用的 shell, testubuntu 是在运行该容器时为其指定的名称“sudo docker run -itd --name testubuntu cppubuntu:1.0”

最后,可以使用exit命令退出容器

exit

2. 如何将容器内部的端口映射至宿主机?

因为容器的ip和宿主机的ip不同,容器的ip随时都可能会发生变变化,在这种情况下需要将容器内部的一个断开抛出去,这样启动容器的时候将该端口带上,就会映射成宿主机的一个端口,那么外部的客户端访问宿主机的该端口就会进入至容器内部访问到AsyncServer。比如:

a. 使用 -p 选项启动容器并映射端口

当启动容器时,使用 -p 参数来映射宿主机和容器的端口。假设 AsyncServer 在容器内监听 8080 端口,可以这样启动容器:

docker run -d -p 8080:8080 cppubuntu
  • -d:以后台模式启动容器
  • -p 8080:8080:将宿主机的 8080 端口映射到容器内的 8080 端口。这样外部客户端访问宿主机的 8080 端口时,会被转发到容器内部的 8080 端口

b. 验证端口映射

启动容器后,可以通过 docker ps 查看运行中的容器及其端口映射情况:

docker ps

输出示例:

CONTAINER ID   IMAGE        COMMAND             CREATED        STATUS       PORTS                    NAMES
abc123def456   cppubuntu    "/bin/sh -c ..."    5 seconds ago  Up 5 seconds 0.0.0.0:8080->8080/tcp   cppcontainer

这里可以看到宿主机的 8080 端口已经成功映射到容器的 8080 端口。

c. 在外部客户端访问服务

现在外部的客户端可以通过访问宿主机的 IP 地址和端口号 8080 来访问容器内部的 AsyncServer 服务。例如:

http://宿主机IP:8080

这样,无论容器的 IP 如何变化,外部都可以通过宿主机的端口来稳定地访问容器内部的服务。

相关文章:

如何使用docker在linux中配置C++环境

目录 1. 安装docker 2. 配置C环境 1&#xff09;启动ubuntu:22.04容器 2&#xff09;配置编译环境G 3&#xff09;安装软件 4&#xff09;测试 1. 如何打包容器生成tar&#xff1f; a. 生成容器镜像 b. 将镜像压缩成tar 2. 如何将容器内部的端口映射至宿主机&#xf…...

darknet_ros 使用教程

首先是git clone可能会因为到没有权限的问题&#xff08;SSH&#xff09;&#xff0c;此时输入 git clone --recursive https://github.com/leggedrobotics/darknet_ros.git 下载成功之后 catkin_make -DCMAKE_BUILD_TYPERelease catkin失败原因&#xff08;在CMakefile中&…...

第九课 Vue中的v-bind指令拓展

Vue中的v-bind指令 示例拓展 1&#xff09;切换样式 <style>.test{width: 100px;height: 100px;border: 3px solid #000;}.bg{background: red;}</style><div id"app"><input type"button" value"点击切换样式" click&qu…...

DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息

DOIP&#xff08;Diagnostic communication over Internet Protocol&#xff09;是基于以太网的通讯协议&#xff0c;用于对UDS协议的数据进行传输&#xff0c;规范于ISO13400标准。DOIP的Type&#xff1a;Diagnostic power mode information request&#xff08;0x4003&#x…...

Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包

目录 一、配置 JDBC &#xff08;一&#xff09;作用 &#xff08;二&#xff09;官网下载 1. 下载链接 2. 下载 3. 补充&#xff1a;压缩包分类与用途 &#xff08;三&#xff09;eclipse 导入 JDBC 的 jar 包 &#xff08;四&#xff09;加载数据库驱动 &#xff08;五…...

二叉树中的最长交错路径

题目链接 二叉树中的最长交错路径 题目描述 注意点 每棵树最多有 50000 个节点每个节点的值在 [1, 100] 之间起点无需是根节点 解答思路 要找到最长交错路径&#xff0c;首先想到的是深度优先遍历因为起点无需是根节点&#xff0c;所以对于任意一个节点&#xff0c;其可以…...

高校企业数据可视化平台功能介绍/特色功能

数据可视化平台是一款适用于高校教学和各领域企业的零门槛可视化工具&#xff0c;能够解决高校数据分析与可视化类课程教学、实训问题。平台采用B/S结构&#xff0c;用户不需要下载客户端&#xff0c;可通过浏览器进行访问。 数据可视化平台提供多种指标设计&#xff0c;学…...

RHCE第三次笔记SSH

第三章 远程连接服务器 1、远程连接服务器简介 &#xff08;1&#xff09;什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录 linux 主机以取得可操作主机接口&#xff08;shell &#xff09;&#xff0c;而登录后…...

JAVA基础-包装类

文章目录 包装类1 概述2 Integer类2.1 Integer类构造方法2.2 Integer类成员方法 3 基本类型与字符串之间的转换3.1 基本类型转换为String3.2 String转换成基本类型 4 底层原理 第六章&#xff1a;算法小题练习一&#xff1a;练习二&#xff1a;练习三&#xff1a;练习四&#x…...

复合逻辑运算与复合逻辑门

或非门&#xff08;NOR gate&#xff09; 是一种基本的逻辑门&#xff0c;它结合了“或”&#xff08;OR&#xff09;和“非”&#xff08;NOT&#xff09;操作。或非门的输出是输入信号的否定&#xff0c;只有在所有输入都为零时&#xff0c;输出才为一。 与非运算&#xff0…...

工厂模式~

现实世界中的例子 考虑一个招聘经理的情况。一个人不可能为每一个职位都进行面试。根据职位空缺&#xff0c;她必须决定并将面试步骤委托给不同的人。 用简单的话来说 它提供了一种将实例化逻辑委托给子类的方法。 维基百科的解释 在基于类的编程中&#xff0c;工厂方法模式是…...

Elasticsearch基本使用及介绍

Elasticsearch 1. 关于各种数据库的使用 关于MySQL&#xff1a;是关系型数据库&#xff0c;能清楚的表示数据之间的关系&#xff0c;并且&#xff0c;是基于磁盘存储的&#xff0c;可以使用相对较低的成本存储大量的数据 关于Redis&#xff1a;是基于K-V结构的在内存中读写数…...

10. PH47代码框架文件组织

通过之前章节对PH47体系的介绍&#xff0c;读者对PH47能建立起了初步的概念及掌握各主要构成部分的使用开发方法。从本章节开始&#xff0c;就将对PH47代码的二次开发内容进行具体讲述。 本部分就将对PH47框架当中代码文件的组织方式及功能作用进行介绍&#xff0c;对于将来熟…...

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中&#xff0c;继承和重载是面向对象编程&#xff08;OOP&#xff09;中的重要概念。通过合理运用继承与重载&#xff0c;不仅能提高代码的复用性和灵活性&#xff0c;还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载&#xff0c;并…...

4.8 大数据发展趋势

文章目录 今天&#xff0c;我想与大家探讨一个充满潜力和变革的主题——大数据的发展趋势。大数据不仅正在改变我们的工作和生活方式&#xff0c;更是推动社会进步和经济发展的关键因素。 首先&#xff0c;让我们看看国内的大数据发展趋势。中国政府高度重视大数据产业&#x…...

【无标题】react组件封装

子组件制作 import { useState,useRef, useEffect} from "react"const Table (data)> {const {value ,option} dataconsole.log(value)const [stata,setValue] useState()const useRefs useRef(value)useEffect(()> {useRefs.current.value value })c…...

git+cmake将Open3D配置到visual studio

这里假设你已经安装好了上述内容&#xff0c;我们直接开始安装&#xff1a; 第一步&#xff1a;以管理员身份打开powershell&#xff0c;执行 git clone https://github.com/isl-org/Open3D.git然后依次执行 cd Open3D mkdir build cd build开启你的梯子&#xff0c;并设置你…...

ArcGIS-CityEngine 2024-新手小白也能试用+入门可视化vga编程--第一篇

目录 下载CityEngine并创建空项目 场景双击 _Tour &#xff08;Navigator面板)的就行了&#xff0c;&#xff08;不用额外下载&#xff09; 生成街道 基本操作 多个图层Group 区分 Editor 多个区域&#xff08;插件模式&#xff0c;浮空窗口&#xff0c; 官方的例子&…...

IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)

以下是 IntelliJ IDEA 的常用功能快捷键大全&#xff0c;适用于 Windows/Linux 系统&#xff08;Mac 用户可将 Ctrl 替换为 Cmd&#xff0c;Alt 替换为 Option&#xff09;&#xff1a; 功能分类功能描述快捷键 (Windows/Linux)基本操作显示所有快捷键Ctrl J显示主菜单Alt H…...

基于SSM高校普法系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;律师管理&#xff0c;法律知识管理&#xff0c;新闻类型管理&#xff0c;法律新闻&#xff0c;律师推荐管理 律师账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…...

CDN加速流程分享

我们有IP,我们需要用CDN的阿里云进行加速&#xff0c;让网站的视频显示的更加流畅 首先&#xff0c;我们面对的第一个问题就是把ip解析成域名的形式&#xff0c;我们这里的域名是 edu.senhacore.xyz 解释一下为什么要变成域名才行&#xff0c;因为国内要使用cdn就必须把ip转…...

全网爆火的排队免单模式究竟是如何运作?

在私域平台的探索过程中&#xff0c;许多企业主尝试了链动21、推三返一等裂变模式。虽然这些模式在某些情况下取得了显著成效&#xff0c;但也有不少企业反映难以推广。问题的核心在于客户的购买意愿不足&#xff0c;市场动力缺乏。仅仅依靠推广团队的积极裂变是不够的&#xf…...

Excel:vba实现批量修改文件名

原文件名&#xff1a;修改后的文件名&#xff1a; Sub test() 我这里只定义了一个cell,其余的我没有定义 Dim cell As Range清空 A 列中所有的内容,确保之前的数据不会影响到后续的操作 [a:a].Clear获取文件加的名字&#xff0c;这里的dir函数只返回一个文件名,即该文件下的第…...

【数据分享】中国历史学年鉴(1979-2001)

数据介绍 目录如下&#xff1a; 特稿 2000年国际历史科学大会 史学研究 史学理论 西周春秋战国史 秦汉史 魏晋南北朝史 隋唐五代史 宋史 辽西夏金史 蒙元史 明史 清史 晚清政治史 近代文化史 中外关系史 近代经济史 近代社会史 近代思想史 民国政治史 世…...

ubuntu系统启动wmplayer提示vmware unable to install all modules的处理方法

1. 终端中输入下面的命令查看vmplayer版本 vmplayer -v 2. git clone https://github.com/mkubecek/vmware-host-modules.git 3. cd vmware-host-modules 4. make 5. sudo make install...

数据库原理与应用(基于MySQL):实验六数据查询

实验6.1 对学生实验数据库(stuexpm)的学生信息表(StudentInfo)和成绩信息表(Scorelnfo)进行信息查询,编写和调试查询语句的代码,完成以下操作 (1)使用两种方式查询Studentlnfo表的所有记录 ①使用列名表。 ② 使用*. use stuexpm;select StudentID,Name,Sex,Birthday,Specia…...

【java面经thinking】二

目录 redis了解 使用原因 应用场景 数据类型 redis事务 数据持久化 RDB(快照)&#xff1a; AOF(即时更新)&#xff1a; 选择方式&#xff1a; redis快速的原因 redis单线程 单机瓶颈 经典3问 参考博客 redis了解 缓存中间件 使用原因 缓解高并发、提升高可用。…...

正规方程推导,详细版

推导正规方程&#xff08;Normal Equation&#xff09;通常是在线性回归的上下文中进行的。线性回归的目标是找到一个线性模型 h θ ( x ) θ T x h_\theta(x) \theta^T x hθ​(x)θTx&#xff0c;使得模型的预测值与实际值之间的差异&#xff08;通常是均方误差&#xff0…...

【原创】java+ssm+mysql在线文件管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…...

cocos Creator + fairyGUI 快速入门

版本 Creator 3.8.x&#xff0c;FairyGUI 2022 大部分内容来自 https://en.fairygui.com/docs/sdk/creator 1.新建cocos项目&#xff0c;根目录运行 npm install --save fairygui-cc 引入 fairyGUI库 2.assets目录之外新建fairyGUI项目 3.fairyGUI中编辑UI 完成后发布到Creato…...