【WSL/WSL2-Ubuntu】突破界限:不使用服务器在一台Windows搭建Nginx+FastDFS

打造超级开发环境:Nginx和FastDFS在WSL中的完美结合

前言

随着软件开发领域的快速发展,跨平台的开发环境变得日益重要。Windows Subsystem for Linux(WSL)和WSL 2为开发者提供了在Windows操作系统上体验Linux环境的便捷途径。本文将引导读者深入探索WSL/WSL 2,并教授如何在其中搭建Nginx和FastDFS,为开发和测试提供更加灵活、高效的工作环境。

文章目录

  • 打造超级开发环境:Nginx和FastDFS在WSL中的完美结合
  • 前言
  • 1. 安装和配置WSL/WSL 2
    • 1.1 启用WSL和WSL 2功能
      • 1.1.1 打开 PowerShell 作为管理员,启用WSL功能
      • 1.1.2 安装Ubuntu
      • 1.1.2 设置用户名密码
  • 2. 更新系统和安装必要软件
    • 2.1 更新系统
      • 2.1.1 打开终端
      • 2.1.2 运行系统更新
    • 2.2 安装必要软件
      • 2.2.1 libfastcommon 安装
      • 2.2.2 创建软链接
      • 2.2.3 检查软链接
  • 3. 安装和配置FastDFS
      • 3.1 下载并解压 FastDFS
      • 3.2 修改安装路径
      • 3.3 Tracker-server配置
      • 3.4 Storage -server配置
      • 3.5 Client -server配置
  • 4. fastdfs-nginx-module 安装
    • 4.1fastdfs-nginx-module 下载和解压
    • 4.2 修改 config 文件
  • 5.Nginx 安装
    • 5.1 安装依赖项
    • 5.2 下载并解压 Nginx
    • 5.3 创建nginx 一些模块的存储目录
    • 5.4 编译安装nginx
    • 5.5 snprintf()报错
    • 5.6 拷贝 编辑 fastdfs-nginx-module的配置文件到/etc/fdfs/
    • 5.7 复制其他配置文件,创建软链接
    • 5.8 修改 Nginx 配置
    • 5.9 启动 Nginx
    • 5.10 再次启动Nginx
    • 5.10 测试访问
  • 6. 模块间关系:
  • 7. 各个模块用法:
  • 8. 各个模块存在的意义:
  • 总结

1. 安装和配置WSL/WSL 2

【WSL/WSL 2-Redis】解决Windows无法安装WSL Ubuntu子系统与Redis安装

1.1 启用WSL和WSL 2功能

1.1.1 打开 PowerShell 作为管理员,启用WSL功能

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

1.1.2 安装Ubuntu

Ubuntu:

  • 默认发行版:Ubuntu默认发行版
  • Ubuntu 22.04 LTS:Ubuntu 22.04 LTS
  • Ubuntu 20.04:Ubuntu 20.04
    这里我使用Ubuntu 22.04 LTS
    在这里插入图片描述

1.1.2 设置用户名密码

在这里插入图片描述

2. 更新系统和安装必要软件

2.1 更新系统

2.1.1 打开终端

在这里插入图片描述

2.1.2 运行系统更新

sudo apt update

2.2 安装必要软件

2.2.1 libfastcommon 安装

# 安装必要的依赖项
sudo apt-get install -y gcc make libevent-dev libevent-2.1-7 cmake
# 创建目录并下载 libfastcommon
sudo mkdir -p /usr/local/fastdfs
wget https://gitee.com/mirrors/libfastcommon/repository/archive/V1.0.43.tar.gz
sudo tar -xzvf V1.0.43.tar.gz -C /usr/local/fastdfs/
cd /usr/local/fastdfs/libfastcommon-V1.0.43/
sudo ./make.sh
sudo ./make.sh install

在这里插入图片描述

2.2.2 创建软链接

sudo ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
sudo ln -s /usr/local/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
sudo ln -s /usr/local/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

2.2.3 检查软链接


ls -l /usr/local/lib/libfastcommon.so
ls -l /usr/local/lib/libfdfsclient.so
ls -l /usr/lib/libfdfsclient.so

在这里插入图片描述

回到根目录

cd ~

3. 安装和配置FastDFS

查看子系统ip

ip addr

在这里插入图片描述

这里的eth0就是我们要使用到的地址,即192.168.14.131

3.1 下载并解压 FastDFS

wget https://gitee.com/mirrors/fastdfs/repository/archive/V6.06.tar.gz
sudo tar -zxvf V6.06.tar.gz -C /usr/local/fastdfs/

3.2 修改安装路径

cd /usr/local/fastdfs/fastdfs-V6.06/
sudo vim make.sh

在这里插入图片描述
修改为

TARGET_PREFIX=$DESTDIR/usr/local
sudo ./make.sh
sudo ./make.sh install

在这里插入图片描述
安装后,FastDFS主程序所在的位置是:

  • /usr/local/bin可执行文件所在位置。默认安装在/usr/bin中。
  • /etc/fdfs配置文件所在位置。就是默认位置。
  • /usr/local/lib64主程序代码所在位置。默认在/usr/bin中。
  • /usr/local/include/fastdfs包含的一些插件组所在位置。默认在/usrlinclude/fastdfs 中。

3.3 Tracker-server配置

!!!!!回到根目录

cd ~

创建数据目录

sudo mkdir -p /data/fastdfs/tracker

从sample获取conf配置文件

sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

修改配置文件

sudo vim /etc/fdfs/tracker.conf

在这里插入图片描述

# 修改 base_path,就是刚才创建的文件夹
base_path = /data/fastdfs/tracker

同步一下启动脚本,同步安装目录在/usr/local/bin下;

sudo vim /etc/init.d/fdfs_trackerd

在这里插入图片描述

# 修改 PRG
PRG=/usr/local/bin/fdfs_storaged
# 启动服务
sudo /etc/init.d/fdfs_trackerd start
# 查看运行情况
ps aux | grep fdfs_trackerd

在这里插入图片描述

3.4 Storage -server配置

# 复制配置文件
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

# 创建存储路径
sudo mkdir -p /data/fastdfs/storage/base
sudo mkdir -p /data/fastdfs/storage/store

# 修改 storage.conf
sudo vim  /etc/fdfs/storage.conf  
# 修改 base_path 和 tracker_server
base_path = /data/fastdfs/storage/base
tracker_server = 192.168.14.131:22122
store_path0 = /data/fastdfs/storage/store

在这里插入图片描述

sudo vim /etc/init.d/fdfs_storaged
# 修改 PRG
PRG=/usr/local/bin/fdfs_storaged
sudo /etc/init.d/fdfs_storaged start
ps aux | grep fdfs_storage

在这里插入图片描述

3.5 Client -server配置

# 复制配置文件
sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

# 创建客户端路径
sudo mkdir -p /data/fastdfs/client

# 修改 client.conf
sudo vim  /etc/fdfs/client.conf
# 修改 tracker_server 和 base_path
tracker_server = 192.168.14.131:22122
base_path = /data/fastdfs/client
# 上传测试文件
echo "This is a test file." > /tmp/test.log
sudo /usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf /tmp/test.log

在这里插入图片描述

4. fastdfs-nginx-module 安装

4.1fastdfs-nginx-module 下载和解压

!!!!!回到根目录

cd ~
# 下载并解压 fastdfs-nginx-module
wget https://gitee.com/fastdfs100/fastdfs-nginx-module/repository/archive/V1.22.tar.gz
sudo tar -xzvf V1.22.tar.gz -C /usr/local/fastdfs/

4.2 修改 config 文件

cd /usr/local/fastdfs/fastdfs-nginx-module-V1.22/src/
sudo vim config

在这里插入图片描述

# 修改 config 文件
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/include/fastcommon/"   

5.Nginx 安装

5.1 安装依赖项

# 安装依赖项
sudo apt-get install -y build-essential libtool
sudo apt-get update
sudo apt-get install -y libpcre3 libpcre3-dev zlib1g-dev openssl

!!!!!回到根目录

cd ~

5.2 下载并解压 Nginx

# 下载并解压 Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
sudo tar -xzvf nginx-1.16.1.tar.gz -C /usr/local/fastdfs/

5.3 创建nginx 一些模块的存储目录

可能由于权限不足,导致我们需要手动创建一些目录,后面还会讲到

sudo mkdir -p  /var/temp/nginx
sudo mkdir -p  /var/run/nginx
sudo mkdir -p  /var/log/nginx

5.4 编译安装nginx

cd /usr/local/fastdfs/nginx-1.16.1/
# 配置 Nginx
sudo  ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --add-module=/usr/local/fastdfs/fastdfs-nginx-module-V1.22/src

上述命令用于配置、编译和安装 Nginx Web 服务器以及额外模块的命令,特别是 FastDFS Nginx 模块。下面是您使用的选项的解释:

  • --prefix=/usr/local/nginx:指定 Nginx 的安装目录。
  • --pid-path=/var/run/nginx/nginx.pid:指定 Nginx 主进程的 PID 文件路径。
  • --lock-path=/var/lock/nginx.lock:指定锁文件的路径。
  • --error-log-path=/var/log/nginx/error.log:指定错误日志文件的路径。
  • --http-log-path=/var/log/nginx/access.log:指定 HTTP 访问日志文件的路径。
  • --with-http_gzip_static_module:启用 HTTP gzip 静态模块,用于提供预压缩的文件。
  • --http-client-body-temp-path=/var/temp/nginx/client:指定用于存储客户端请求主体的临时文件的路径。
  • --http-proxy-temp-path=/var/temp/nginx/proxy:指定用于存储代理模块的临时文件的路径。
  • --http-fastcgi-temp-path=/var/temp/nginx/fastcgi:指定用于存储 FastCGI 模块的临时文件的路径。
  • --http-uwsgi-temp-path=/var/temp/nginx/uwsgi:指定用于存储 uWSGI 模块的临时文件的路径。
  • --http-scgi-temp-path=/var/temp/nginx/scgi:指定用于存储 SCGI 模块的临时文件的路径。
  • --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src:添加 FastDFS Nginx 模块到编译过程中。

这个命令配置了 Nginx,包括各种模块的支持,并设置了日志文件和临时存储的路径。配置完成后,通常会运行 makemake install 命令来编译和安装 Nginx,以及配置的模块。

在继续编译之前,请检查 ./configure 命令的输出,确保没有错误或缺少的依赖项。此外,请确保您对指定路径有写权限,并且系统上已安装所需的依赖项。
在这里插入图片描述

sudo make
sudo make install

5.5 snprintf()报错

在这里插入图片描述

cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:1214: objs/addon/src/ngx_http_fastdfs_module.o] Error 1
make[1]: Leaving directory ‘/usr/local/fastdfs/nginx-1.16.1’
make: *** [Makefile:8: build] Error 2

snprintf()函数不是标准C/C++库函数,在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf()。
Makefile文件中,设置的编译等级比较高,使用-werror选项,导致如果出现任何警告都将视为错误,所以就会导致编译失败。
禁用警告当作错误处理:
如果您只是想先绕过这个问题,您可以在编译时禁用将警告当作错误处理。这可能并不是最佳做法,但可以让您继续编译。在 configure 或 Makefile 中寻找类似 -Werror 的标志,并将其删除或注释掉。

cd objs
sudo vim Makefile

在这里插入图片描述

CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"'

删掉-Werror即可编译成功
在编译过程中使用 -Werror 标志会将所有警告视为错误,这意味着如果有任何警告,编译过程会失败。这样的做法有其优点,因为它强制开发者解决潜在的问题,确保代码的质量。然而,有时候这也可能导致编译失败,尤其是在一些旧版本的代码或编译器中,可能存在一些不同程度的警告。

当你删除 -Werror 标志后,编译过程将不再把警告当作错误对待,从而允许编译器继续进行,即使有一些警告。这样做的目的是让编译能够在存在一些轻微问题或非常规范的代码时继续进行。

请注意,尽管删除 -Werror 可能会让编译通过,但在实际生产环境中,最好是在有警告的情况下尽量解决这些警告,以确保代码的健壮性和可维护性。有时,特定的警告可能指示潜在的 bug 或安全问题,因此忽略这些警告可能会引入潜在的风险。

cd ..
sudo make
sudo make install

在这里插入图片描述
在这里插入图片描述

5.6 拷贝 编辑 fastdfs-nginx-module的配置文件到/etc/fdfs/

!!!!!回到根目录

cd ~
# 复制模块配置文件
sudo cp  /usr/local/fastdfs/fastdfs-nginx-module-V1.22/src/mod_fastdfs.conf  /etc/fdfs/
sudo vim  /etc/fdfs/mod_fastdfs.conf

在这里插入图片描述

# 修改 tracker_server 和 store_path0
tracker_server = 192.168.14.131:22122
store_path0 = /data/fastdfs/storage/store
url_have_group_name = true

5.7 复制其他配置文件,创建软链接

# 复制其他配置文件
sudo cp /usr/local/fastdfs/fastdfs-V6.06/conf/http.conf /etc/fdfs
sudo cp /usr/local/fastdfs/fastdfs-V6.06/conf/mime.types /etc/fdfs

# 创建软链接
sudo ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so

# 创建网络访问存储服务的软链接
sudo ln -s /data/fastdfs/storage/store/data /data/fastdfs/storage/store/data/M00

5.8 修改 Nginx 配置

# 修改 Nginx 配置
cd /usr/local/nginx/conf
sudo vim nginx.conf
# 修改配置文件
user  nobody;
worker_processes  4;
# 增加 events 部分
events {
    worker_connections  1024;
}

# 配置 http 部分
http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    keepalive_timeout  65;

    # 配置服务器
    server {
        listen       8888;
        server_name  localhost;

        # 配置 FastDFS 模块
        location ~/group[0-9]/M00  {
            ngx_fastdfs_module;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

在这里插入图片描述

5.9 启动 Nginx

# 启动 Nginx
cd /usr/local/nginx
sudo ./sbin/nginx -t
sudo ./sbin/nginx

在这里插入图片描述

由于安装时权限不足,有可能会出问题,你可以打开目录或根据提示看看缺哪个,创建后重新安装,也可以使用命令创建
这里提示我缺少

/usr/local/nginx/logs/test.log

sudo mkdir -p /usr/local/nginx/logs
echo "This is a test file." | sudo tee /usr/local/nginx/logs/access.log

什么是tee
tee 是一个在 Linux 和类 Unix 操作系统上常用的命令行工具。tee 命令的主要功能是从标准输入读取数据,将其复制到标准输出,并写入一个或多个文件。它通常用于在不中断数据流的情况下将输出保存到文件中,同时在终端上显示。

tee 命令的基本语法如下:

command | tee [OPTION]... [FILE]...
  • command: 要从标准输入读取的命令或数据。
  • tee: 命令本身。
  • [OPTION]: 可选参数,用于调整 tee 命令的行为。
  • [FILE]: 要写入的文件名。如果省略文件名,tee 将向标准输出复制数据。

一些常用的 tee 选项包括:

  • -a:追加到文件而不是覆盖文件。
  • -i:忽略写入时的错误。

例如,要将命令的输出保存到文件并在终端上显示,可以使用如下命令:

ls -l | tee output.txt

这将列出当前目录的文件,并将输出保存到 output.txt 文件中,并在终端上显示相同的输出。

,使用 echo "This is a test file." | sudo tee /usr/local/nginx/logs/access.log 就是将文本写入文件同时保持在终端上显示的一个例子。

5.10 再次启动Nginx

sudo ./sbin/nginx

在这里插入图片描述

此时我们可以在8888端口发现配置成功了
在这里插入图片描述

5.10 测试访问

上传一张图片
在这里插入图片描述
我们当前在usr\local\nginx路径下,我们可以拖一张图片进来

# 上传测试文件
sudo /usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf b.jpg

在这里插入图片描述

# 查看文件信息
/usr/local/bin/fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgOg2VZzrSAXZyIAADwwTe7XM4453.jpg

在这里插入图片描述

# 查看存储路径下的文件
sudo find /data/fastdfs/storage -type f -exec ls -l {} +

在这里插入图片描述

Nginx上也可以访问

http://192.168.14.131:8888/group1/M00/00/00/wKgOg2VZzrSAXZyIAADwwTe7XM4453.jpg
在这里插入图片描述

# 查看 Nginx 运行状态
sudo /usr/local/nginx/sbin/nginx -t
# 重新启动 Storage
sudo /etc/init.d/fdfs_storaged restart
# 启动 Nginx
sudo /usr/local/nginx/sbin/nginx

6. 模块间关系:

  1. libfastcommon: 这是一个 FastDFS 系统的底层库,提供了一些基础的功能和工具,如事件处理、日志、内存池等。FastDFS 系统的其他组件,如 Tracker 和 Storage,都依赖于 libfastcommon。

  2. Tracker: Tracker 是 FastDFS 的一个核心组件,用于跟踪存储服务器的状态和文件信息。它负责协调 Storage 节点,并提供文件上传、下载的元数据查询服务。

  3. Storage: Storage 是 FastDFS 的存储节点,负责文件的实际存储和提供文件的读写服务。多个 Storage 节点可以通过 Tracker 进行协调,形成一个分布式的存储系统。

  4. Client: 客户端是与 FastDFS 系统交互的用户端,用于上传、下载文件等操作。它通过配置文件与 Tracker 和 Storage 进行通信。

  5. fastdfs-nginx-module: 这是一个 Nginx 模块,用于在 Nginx 服务器上实现 FastDFS 文件服务的 HTTP 访问接口。它允许 Nginx 直接通过 HTTP 访问 FastDFS 存储的文件。

  6. Nginx: Nginx 是一个高性能的开源反向代理服务器,用于处理 HTTP 请求。在这里,Nginx 与 fastdfs-nginx-module 配合使用,使 Nginx 具备了直接访问 FastDFS 存储的文件的能力。

7. 各个模块用法:

  1. libfastcommon: 安装 libfastcommon 库并创建软链接,为 FastDFS 的其他组件提供基础支持。

  2. Tracker: 安装 Tracker,配置并启动 Tracker 服务。Tracker 负责协调存储服务器,并提供元数据查询服务。

  3. Storage: 安装 Storage,配置并启动 Storage 服务。Storage 负责实际的文件存储和提供读写服务。

  4. Client: 安装客户端,配置客户端参数,可以通过客户端上传、下载文件等操作。

  5. fastdfs-nginx-module: 安装该模块,配置 Nginx,使其能够通过 HTTP 访问 FastDFS 存储的文件。

  6. Nginx: 配置 Nginx,加载 fastdfs-nginx-module 模块,实现对 FastDFS 存储文件的直接访问。

8. 各个模块存在的意义:

  1. 分布式存储: FastDFS 采用分布式存储架构,允许横向扩展,提高了存储容量和性能。

  2. 高可用性: 多个 Storage 节点之间通过 Tracker 协调,当一个节点发生故障时,系统依然可以提供服务。

  3. 元数据查询: Tracker 提供了文件的元数据查询服务,客户端可以通过 Tracker 查询文件信息,如文件路径、大小等。

  4. HTTP 访问接口: 通过 fastdfs-nginx-module,Nginx 可以直接通过 HTTP 访问 FastDFS 存储的文件,提高了文件的访问效率。

  5. 灵活性: FastDFS 提供了客户端 API,允许开发者通过编程接口与 FastDFS 系统进行交互,实现更多自定义的操作。

综合而言,FastDFS 提供了一个高性能、可扩展、分布式的文件存储解决方案,适用于需要大规模文件存储和访问的场景,如图片、视频等多媒体文件的存储与分发。

总结

通过按照以上步骤,你已经在WSL/WSL 2上成功搭建了Nginx和FastDFS。这使得你可以在Windows系统中方便地运行和测试这些服务。
这只是一个基本的配置,根据实际需要,你可能需要进一步调整和优化配置,以满足特定的项目要求。
这不仅仅是搭建服务的过程,更是对跨平台开发和操作的一次探索。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javaspringbootmysql学生社团管理系统26281-计算机毕业设计项目选题推荐(附源码)

目录 摘要 Abstract 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析…

用户增长模型:3A3R策略模型

一、概述 A - A - A - R - R - R 增长模型,即3A3R策略模型,由海盗模型演变而来,是目前使用最多、适用范围最广的增长策略模型。原始的海盗模型由 Acquisition (获客)、 Activation (活跃)、 Re…

【选题推荐】软件工程毕设选题可以选什么

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

C语言选择结构 if 语句

if语句 程序运行结构if语句常见三种形式单行格式if语句多行格式if语句多条件的if语句 嵌套if语句if语句案例三只鸡那只重 if语句注意事项 程序运行结构 C语言支持最基本的三种程序运行结构:顺序结构、选择结构(分支结构)、循环结构 顺序结构&#xff1…

2023年高压电工证考试题库及高压电工试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年高压电工证考试题库及高压电工试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的高压…

《洛谷深入浅出基础篇》 P5250 木材仓库————集合应用实例

上链接: P5250 【深基17.例5】木材仓库 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5250上题干: 题目描述 博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是…

Java面向对象(高级)-- 类的成员之四:代码块

文章目录 一、回顾(1)三条主线(2)类中可以声明的结构及作用1.结构2.作用 二、代码块(1)代码块的修饰与分类1. 代码块的修饰2. 代码块的分类3. 举例 (2) 静态代码块1. 语法格式2. 静态…

两栏布局:左侧固定,右侧自适应

左侧宽度固定&#xff0c;右侧宽度自适应剩余空间 方法一&#xff1a;float margin 方法二&#xff1a;flex布局 相关HTML代码 <div class"container"><div class"left"></div><div class"main"></div> </d…

BGP基本配置

配置逻辑 完成所有路由器的IGP配置使用直连接口建立EBGP对等体关系使用环回接口建立IBGP对等体关系使用connect-interface命令修改IBGP建邻源IP地址使用next-hop-local命令修改路由传递时的下一跳属性若存在使用环回接口建立EBGP对等体关系&#xff0c;则需要建立通讯条件&…

CentOS 7 安装CMake指定版本3.21.2

背景&#xff1a;今天在CentOS 7 电脑上安装C 日志框架SpdLog-1.12.0&#xff0c;提示如下错误信息&#xff1a; [rootlocalhost build]# cmake .. && make -j CMake Error at CMakeLists.txt:3 (cmake_minimum_required):CMake 3.10...3.21 or higher is required. …

Mysql-索引

1.介绍 索引是数据库管理系统中用于提高查询速度的一种数据结构。在MySQL中&#xff0c;索引可以看作是一种特殊的表&#xff0c;其中包含了对数据表中特定列的值及其在数据表中的位置信息。通过使用索引&#xff0c;MySQL可以在不需要扫描整个表的情况下快速找到与查询条件匹…

三栏布局,中间自适应

方法一&#xff1a;两边使用float 中间使用margin 方法二&#xff1a;两边使用absolute 中间使用margin 方法三&#xff1a;flex 布局 方法四&#xff1a;grid 布局 方法一&#xff1a;相关HTML代码【两边使用float 中间使用margin】 <div class"container"…

类和对象(8):explicit,static成员,友元,内部类

一、explicit class Date { public:Date(int year 2023, int month 1, int day 1):_year(year),_month(month),_day(day){}private:int _year;int _month;int _day; };int main() {// Date d1(1); // 这是正常初始化Date d1 1;return 0; }不妨猜测一下&#xff0c;d1的初始…

2023年【安全员-A证】报名考试及安全员-A证新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证报名考试是安全生产模拟考试一点通总题库中生成的一套安全员-A证新版试题&#xff0c;安全生产模拟考试一点通上安全员-A证作业手机同步练习。2023年【安全员-A证】报名考试及安全员-A证新版试题 1、【多选…

LeetCode(29)三数之和【双指针】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 三数之和 1.题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复…

SpringBoot-AOP学习案例

4. AOP案例 SpringAOP的相关知识我们就已经全部学习完毕了。最后我们要通过一个案例来对AOP进行一个综合的应用。 4.1 需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0…

单线程的JS中Vue导致的“线程安全”问题

目录 现象分析原因 浏览器中Js是单线程的&#xff0c;当然不可能出现线程安全问题。只是遇到的问题的现象与多线程的情况十分相似&#xff0c;导致对不了解Vue实现的我怀疑起了人生… 现象 项目中用到了element-plus中的加载组件&#xff0c;简单封装了一下&#xff0c;用来保…

100.相同的树(LeetCode)

关于树的递归问题&#xff0c;永远考虑两方面&#xff1a;返回条件和子问题 先考虑返回条件&#xff0c;如果当前的根节点不相同&#xff0c;那就返回false&#xff08;注意&#xff0c;不要判断相等时返回什么&#xff0c;因为当前相等并不能说明后面节点相等&#xff0c;所以…

【每日一题】689. 三个无重叠子数组的最大和-2023.11.19

题目&#xff1a; 689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k &#xff0c;找出三个长度为 k 、互不重叠、且全部数字和&#xff08;3 * k 项&#xff09;最大的子数组&#xff0c;并返回这三个子数组。 以下标的数组形式返回结果&#xff0c;数组中…

a标签下载文件与解决浏览器默认打开某些格式文件的问题

前言 在实际项目中&#xff0c;我们通常会遇到这么一个需求&#xff1a;后端给前端返回一个任意文件类型的完整的url路径&#xff0c;前端拿到这个路径直接通过浏览器下载文件到本地。我想大家应该都会首先想到使用HTML中的<a>标签&#xff0c;&#xff0c;因为<a>…