FastDFS安装并整合Openresty

FastDFS安装

  • 一、环境--centos7
  • 二、FastDFS--tracker安装
    • 2.1.下载
    • 2.2.FastDFS安装环境
    • 2.3.安装FastDFS依赖libevent库
    • 2.4.安装libfastcommon
    • 2.5.安装 libserverframe 网络框架
    • 2.6.tracker编译安装
    • 2.7.文件安装位置介绍
    • 2.8.错误处理
    • 2.9.配置FastDFS跟踪器(Tracker)
    • 2.10.启动
    • 2.11.将Tracker设置成系统服务
      • 2.11.1.创建Tracker服务文件
      • 2.11.2.重新加载服务配置文件使之生效
      • 2.11.3.服务操作命令
  • 三、FastDFS--storage安装
    • 3.1.安装libevent
    • 3.2.安装libfastcommon
    • 3.3.storage编译安装
    • 3.4.配置 FastDFS 存储 (Storage)
    • 3.5.启动
    • 3.6.将fdfs_storaged设置成系统服务
      • 3.6.1.创建fdfs_storaged服务文件
      • 3.6.2.重新加载服务配置文件使之生效
      • 3.6.3.服务操作命令
    • 3.7.查看Storage和Tracker是否在通信
    • 3.8.Storage 目录
  • 四、上传图片测试:通过fdfs_test程序
  • 五、FastDFS 和nginx整合
    • 5.1.nginx代理
    • 5.2.在Storage上安装openresty
      • 5.2.1.fastdfs-nginx-module
      • 5.2.2.openresty安装
      • 5.2.3.编辑nginx配置文件
    • 5.3.访问测试
    • 5.4.测试上传图片并访问【success】
  • endl

一、环境–centos7

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

二、FastDFS–tracker安装

分别在192.168.229.141和192.168.229.142上安装tracker
注:初次安装可只安装一台tracker方便调试

2.1.下载

tracker和storage使用相同的安装包,下载地址:https://github.com/happyfish100/FastDFS

在这里插入图片描述

2.2.FastDFS安装环境

FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7.9作为安装环境。

安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc

yum install gcc-c++

2.3.安装FastDFS依赖libevent库

yum -y install libevent

2.4.安装libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

下载地址:https://github.com/happyfish100/libfastcommon
在这里插入图片描述

将libfastcommon-1.0.72.tar.gz拷贝至/usr/local/下

cd /usr/localtar -zxvf libfastcommon-1.0.72.tar.gzcd libfastcommon-1.0.72./make.sh./make.sh installcd /usr/lib

在这里插入图片描述

安装完成之后查看相关文件,默认情况下:
头文件安装在/usr/include/fastcommon目录下
动态库安装在/usr/lib64//usr/lib/目录下

2.5.安装 libserverframe 网络框架

安装包下载地址:https://github.com/happyfish100/libserverframe
在这里插入图片描述

cd /usr/localtar -zxvf libserverframe-1.2.2.tar.gzcd libserverframe-1.2.2./make.sh ./make.sh install

2.6.tracker编译安装

将fastdfs-6.11.0.tar.gz拷贝至/usr/local/下

cd /usr/localtar -zxvf fastdfs-6.11.0.tar.gzcd fastdfs-6.11.0./make.sh./make.sh install

在这里插入图片描述

安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下

cp /usr/local/fastdfs-6.11.0/conf/* /etc/fdfs/

在这里插入图片描述

2.7.文件安装位置介绍

安装之后,工具安装在/usr/bin/目录下:fdfs_delete_file:删除文件
fdfs_download_file:下载文件
fdfs_upload_file:上传文件
fdfs_trackerd:启动tracker服务
fdfs_storaged:启动storage服务
fdfs_file_info:用来检查一个文件的信息,参数传递一个FastDFS文件
[root@localhost fastdfs-6.11.0]# ls /usr/bin/fdfs_*
/usr/bin/fdfs_appender_test  	 /usr/bin/fdfs_crc32          /usr/bin/fdfs_file_info            
/usr/bin/fdfs_storaged  		/usr/bin/fdfs_trackerd
/usr/bin/fdfs_appender_test1  	/usr/bin/fdfs_delete_file    /usr/bin/fdfs_monitor              
/usr/bin/fdfs_test      		/usr/bin/fdfs_upload_appender
/usr/bin/fdfs_append_file     	/usr/bin/fdfs_download_file  /usr/bin/fdfs_regenerate_filename  
/usr/bin/fdfs_test1     		/usr/bin/fdfs_upload_file
配置文件默认安装在/etc/fdfs/目录下:
client.conf.sample:客户端默认配置文件
storage.conf.sample:storage服务默认配置文件
storage_ids.conf.sample:
tracker.conf.sample:tracker服务默认配置文件
[root@localhost fastdfs-6.11.0]# ls /etc/fdfs
anti-steal.jpg  client.conf  http.conf  mime.types  storage.conf  storage_ids.conf  tracker.conf

动态库文件分别安装在/usr/lib/目录和/usr/lib64/目录下

在这里插入图片描述

2.8.错误处理

[root@localhost fastdfs-6.11.0]# ./make.sh
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../common -I/usr/local/include
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../common -I../tracker -I/usr/include/fastcommon
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1

在这里插入图片描述

原因:在安装较新版得 fastdfs 时,从github 下载得安装包缺少文件,缺少了 libserverframe 网络框架

解决方法:`安装 libserverframe 网络框架``

安装包下载地址:https://github.com/happyfish100/libserverframe
在这里插入图片描述

cd /usr/localtar -zxvf libserverframe-1.2.2.tar.gzcd libserverframe-1.2.2./make.sh ./make.sh install

安装完成后重新编译 fastdfs

2.9.配置FastDFS跟踪器(Tracker)

FastDFS 配置文件详解:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1

cd /etc/fdfs# 备份tracker配置文件
cp tracker.conf tracker.conf.bakvi tracker.conf

修改文件

# 配置文件是否不生效,false 为生效
disabled=false# 提供服务的端口
port=22122# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
#base_path = /opt/fastdfs
#base_path=/home/fastdfs/Tracker
base_path = /home/fastdfs# HTTP 服务端口 默认8080 ,建议修改 防止冲突
#http.server_port = 8080
http.server_port = 80
# 创建tracker基础数据目录,即base_path对应的目录
mkdir -p /home/fastdfs
# 检查端口号是否被占用
netstat -apn | grep 22122# 防火墙中打开跟踪端口(默认的22122)
firewall-cmd --zone=public --add-port=22122/tcp --permanent# 配置立即生效
firewall-cmd --reload# 查询开放端口
firewall-cmd --list-ports

2.10.启动

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

初次成功启动,会在 /home/fastdfs/ (配置的base_path)下创建 data、logs 两个目录

[root@localhost fdfs]# ls /home/fastdfs/
data  logs
${base_path}
|__data
| |__storage_groups.dat:存储分组信息
| |__storage_servers.dat:存储服务器列表
|__logs
| |__trackerd.log: tracker server 日志文件
# 检查是否启动
ps aux | grep fdfs*

2.11.将Tracker设置成系统服务

2.11.1.创建Tracker服务文件

vim /usr/lib/systemd/system/tracker.service
[Unit]
Description=Tracker Server
After=network.target[Service]
Type=forking
# 配置成自己的路径
ExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
ExecStop=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
Restart=always[Install]
WantedBy=multi-user.target
  • Description:服务描述
  • After:指定服务依赖的其他服务启动之后再启动
  • Type:指定服务的类型,这里设置为forking,表示服务以fork方式启动
  • ExecStart:指定服务的启动命令
  • ExecStop:指定服务的停止命令
  • Restart:指定服务在退出后是否自动重启
  • WantedBy:指定服务的启动级别

2.11.2.重新加载服务配置文件使之生效

# 重新加载服务配置文件
systemctl daemon-reload

2.11.3.服务操作命令

#启动
systemctl start tracker#停止
systemctl stop tracker#重新启动
systemctl restart tracker#查看服务当前状态
systemctl status tracker#设置开机自启动
systemctl enable tracker#停止开机自启动
systemctl disable tracker
# 检查是否启动
ps aux | grep fdfs*

在这里插入图片描述

三、FastDFS–storage安装

分别在192.168.229.143、192.168.229.144、192.168.229.145、192.168.229.146上安装storage

注:初次安装可只安装一台storage方便调试。

3.1.安装libevent

同上

3.2.安装libfastcommon

同上

3.3.storage编译安装

同tracker编译安装

3.4.配置 FastDFS 存储 (Storage)

cd /etc/fdfs# 备份storage配置文件
cp storage.conf storage.conf.bakvi storage.conf
# 配置文件是否不生效,false 为生效
disabled=false # 指定此 storage server 所在 组()
group_name = group1# storage server 服务端口
port=23000# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
#base_path = /opt/fastdfs
#base_path=/home/fastdfs/Storage
base_path = /home/fastdfs# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1# 逐一配置 store_path_count 个路径,索引号基于 0。
#store_path0 = /opt/fastdfs
store_path0 = /home/fastdfs/fdfs_storage
#store_path1 = /opt/fastdfs2
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 
# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256#tracker_server = 192.168.209.121:22122
#tracker_server = 192.168.209.122:22122
#配置tracker服务器:IP
tracker_server = 192.168.229.141:22122
#如果有多个则配置多个tracker
#tracker_server = 192.168.229.142:22122# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59# 访问端口 默认80 建议修改 防止冲突
#http.server_port = 8888
#配置http端口
http.server_port = 80

创建Storage基础数据目录,对应base_path目录

# 对应base_path
mkdir -p /home/fastdfs
# 这是配置的store_path0路径,有多个要创建多个
mkdir -p /home/fastdfs/fdfs_storage
# 检查端口号是否被占用
netstat -apn | grep 23000# 防火墙中打开存储器端口(默认的 23000) 
firewall-cmd --zone=public --add-port=23000/tcp --permanent# 配置立即生效
firewall-cmd --reload# 查询开放端口
firewall-cmd --list-ports

3.5.启动

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
# 检查是否启动
ps aux | grep fdfs*

3.6.将fdfs_storaged设置成系统服务

3.6.1.创建fdfs_storaged服务文件

vim /usr/lib/systemd/system/storage.service
[Unit]
Description=Storage Server
After=network.target[Service]
Type=forking
# 配置成自己的路径
ExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
ExecStop=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
Restart=always[Install]
WantedBy=multi-user.target
  • Description:服务描述
  • After:指定服务依赖的其他服务启动之后再启动
  • Type:指定服务的类型,这里设置为forking,表示服务以fork方式启动
  • ExecStart:指定服务的启动命令
  • ExecStop:指定服务的停止命令
  • Restart:指定服务在退出后是否自动重启
  • WantedBy:指定服务的启动级别

3.6.2.重新加载服务配置文件使之生效

# 重新加载服务配置文件
systemctl daemon-reload

3.6.3.服务操作命令

#启动
systemctl start storage#停止
systemctl stop storage#重新启动
systemctl restart storage#查看服务当前状态
systemctl status storage#设置开机自启动
systemctl enable storage#停止开机自启动
systemctl disable storage
# 检查是否启动
ps aux | grep fdfs*

在这里插入图片描述

3.7.查看Storage和Tracker是否在通信

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

3.8.Storage 目录

同Tracker一样,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息
在 store_path0/data 目录下,创建了N*N个子目录:

[root@localhost fdfs]# ls /home/fastdfs/fdfs_storage/data/
00  07  0E  15  1C  23  2A  31  38  3F  46  4D  54  5B  62  69  70  77  7E  85  8C  93  9A  A1  A8  AF  
B6  BD  C4  CB  D2  D9  E0  E7  EE  F5  FC  01  08  0F  16  1D  24  2B  32  39  40  47  4E  55  5C  63  
6A  71  78  7F  86  8D  94  9B  A2  A9  B0  B7  BE  C5  CC  D3  DA  E1  E8  EF  F6  FD  02  09  10  17  
1E  25  2C  33  3A  41  48  4F  56  5D  64  6B  72  79  80  87  8E  95  9C  A3  AA  B1  B8  BF  C6  CD  
D4  DB  E2  E9  F0  F7  FE  03  0A  11  18  1F  26  2D  34  3B  42  49  50  57  5E  65  6C  73  7A  81  
88  8F  96  9D  A4  AB  B2  B9  C0  C7  CE  D5  DC  E3  EA  F1  F8  FF  04  0B  12  19  20  27  2E  35  
3C  43  4A  51  58  5F  66  6D  74  7B  82  89  90  97  9E  A5  AC  B3  BA  C1  C8  CF  D6  DD  E4  EB  
F2  F9  05  0C  13  1A  21  28  2F  36  3D  44  4B  52  59  60  67  6E  75  7C  83  8A  91  98  9F  A6  
AD  B4  BB  C2  C9  D0  D7  DE  E5  EC  F3  FA  06  0D  14  1B  22  29  30  37  3E  45  4C  53  5A  61  
68  6F  76  7D  84  8B  92  99  A0  A7  AE  B5  BC  C3  CA  D1  D8  DF  E6  ED  F4  FB

四、上传图片测试:通过fdfs_test程序

FastDFS安装成功可通过/usr/bin/fdfs_test测试上传、下载等操作。

修改/etc/fdfs/client.conf

/etc/fdfs/client.conf

tracker_server根据自己部署虚拟机的情况配置

#Client 的数据和日志目录
#base_path=/home/fastdfs/client
base_path=/home/fastdfs
tracker_server=192.168.229.141:22122
#tracker_server=192.168.229.142:22122

使用格式:

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件

比如将/etc/fdfs/anti-steal.jpg下的图片上传到FastDFS中:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg

打印如下日志:

[root@localhost fdfs]# vi client.conf 
[root@localhost fdfs]# 
[root@localhost fdfs]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg
This is FastDFS client test program v6.11.0Copyright (C) 2008, Happy Fish / YuQingFastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/ 
for more detail.[2024-02-09 18:33:56] DEBUG - base_path=/home/fastdfs, connect_timeout=5, network_timeout=60, tracker_server_count=1, 
anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, 
use_storage_id=0, connect_first_by=tracker, storage server id count: 0, multi storage ips: 0tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=192.168.229.141, port=23000group_name=group1, ip_addr=192.168.229.141, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
source ip address: 192.168.229.141
file timestamp=2024-02-09 18:33:57
file size=23981
file crc32=3835630198
example file url: http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg
source ip address: 192.168.229.141
file timestamp=2024-02-09 18:33:57
file size=23981
file crc32=3835630198
example file url: http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg

http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg就是文件的下载路径

对应storage服务器上的

/home/fastdfs/fdfs_storage/data/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg文件

由于现在还没有和nginx整合无法使用http下载

五、FastDFS 和nginx整合

5.1.nginx代理

nginx代理storage上的nginx,并进行负载均衡

nginx的安装细节参考nginx文档,这里使用单机nginx,也可以使用两台nginx组成高可用或者采用lvs+nginx访问Storage上的nginx

创建nginx-fdfs.conf配置文件:

#storage群group1组
upstream storage_server_group1{server 192.168.229.143:80 weight=10;server 192.168.229.144:80 weight=10;}
#storage群group2组
upstream storage_server_group2{server 192.168.229.145:80 weight=10;server 192.168.229.146:80 weight=10;}server {listen 80;server_name location;location /group1{proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://storage_server_group1;}location /group2{proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://storage_server_group2;}
}

5.2.在Storage上安装openresty

5.2.1.fastdfs-nginx-module

下载地址:https://github.com/happyfish100/fastdfs-nginx-module

将fastdfs-nginx-module-1.24.tar.gz传至/openresty/core/moudle/下

cd /openresty/core/moudletar -zxvf fastdfs-nginx-module-1.24.tar.gzmv fastdfs-nginx-module-1.24 fastdfs-nginx-modulecd fastdfs-nginx-module/src
#修改config文件将/usr/local/路径改为/usr/
cd fastdfs-nginx-module/srcvi config

在这里插入图片描述

#将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/

修改mod_fastdfs.conf的内容:

vi /etc/fdfs/mod_fastdfs.confbase_path=/home/fastdfs
tracker_server=192.168.229.141:22122
#tracker_server=192.168.229.142:22122#url中包含group名称
url_have_group_name=true#指定文件存储路径,Storage配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/fastdfs/fdfs_storage
find / -name libfdfsclient.so#将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/

5.2.2.openresty安装

openresty安装:https://blog.csdn.net/qq_45740503/article/details/135887895

添加fastdfs-nginx-module模块

./configure --add-module=/openresty/core/moudle/fastdfs-nginx-module/srcmake && make installnginx -V

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

5.2.3.编辑nginx配置文件

新建nginx配置文件nginx-fdfs.conf
直接编辑nginx.conf

vi /usr/local/openresty/nginx/conf/nginx.conf
server {listen       80;server_name  192.168.229.141;#在80端口下添加fastdfs-nginx-module模块location ~/group([0-9])/M00 {root /home/fastdfs/fdfs_storage/data;ngx_fastdfs_module;}
}

说明:

server_name指定本机iplocation /group1/M00/:group1为nginx 服务fastdfs的分组名称,
M00是fastdfs自动生成编号,对应store_path0=/home/fastdfs/fdfs_storage,
如果fastdfs定义store_path1,这里就是M01

listen 80端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80相对应。
如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

5.3.访问测试

通过java客户端上传文件,使用浏览器http访问文件,这里访问上传图片测试的文件:

访问storage:

http://192.168.229.143/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg
如果配置了多个ip地址改为192.168.229.144也行,因为同一个分组的storage文件互相同步。

访问tracker:

http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
如果配置了多个ip地址改为192.168.229.142也行

使用域名访问 (推荐):

nginx对外由vip提供服务,使用域名访问如下:
比如vip对应的域名为img.test.com:
http://img.test.com/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg

5.4.测试上传图片并访问【success】

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/22.png

在这里插入图片描述

http://192.168.229.141/group1/M00/00/00/wKjljWXGIWKATkMkAAVtZBzi-RU560.png
http://192.168.229.141/group1/M00/00/00/wKjljWXGIWKATkMkAAVtZBzi-RU560_big.png

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

endl

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

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

相关文章

win32编程系统BUG(Win32 API中的WM_SETTEXT消息)

由于频繁使用Win32 API中的WM_SETTEXT消息,导致内存占用直线上升。 暂未找到有效解决方案。

【原创 附源码】Flutter海外登录--Tiktok登录最详细流程

最近接触了几个海外登录的平台,踩了很多坑,也总结了很多东西,决定记录下来给路过的兄弟坐个参考,也留着以后留着回顾。更新时间为2024年2月7日,后续集成方式可能会有变动,所以目前的集成流程仅供参考&#…

排序算法---快速排序

原创不易,转载请注明出处。欢迎点赞收藏~ 快速排序是一种常用的排序算法,采用分治的策略来进行排序。它的基本思想是选取一个元素作为基准(通常是数组中的第一个元素),然后将数组分割成两部分,其中一部分的…

JAVA设计模式之模版方法模式详解

模板方法模式 1 模板方法模式介绍 模板方法模式(template method pattern)原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法中的算法可以理解为广义上的业务逻辑…

了解海外云手机的多种功能

随着社会的高度发展,海外云手机成为商家不可或缺的工具,为企业出海提供了便利的解决方案。然而,谈及海外云手机,很多人仍不了解其强大功能。究竟海外云手机有哪些功能,可以为我们做些什么呢? 由于国内电商竞…

C++类和对象(上)

目录 1.面向对象和面向过程初步认识 2.类的引入 3.类的定义 3.1类的定义方法 3.2成员变量的命名规则 4.类的访问限定符及封装 4.1类的访问限定符 4.2类的声明和定义分离 4.3封装 5.类的实例化 6.类对象模型 6.1计算类的大小 6.2类对象的存储方式猜测 7.this指针 …

Python初学者学习记录——python基础综合案例:数据可视化——动态柱状图

一、案例效果 通过pyecharts可以实现数据的动态显示,直观的感受1960~2019年世界各国GDP的变化趋势 二、通过Bar构建基础柱状图 反转x轴和y轴 标签数值在右侧 from pyecharts.charts import Bar from pyecharts.options import LabelOpts# 构建柱状图对象 bar Bar()…

基于图像掩膜和深度学习的花生豆分拣(附源码)

目录 项目介绍 图像分类网络构建 处理花生豆图片完成预测 项目介绍 这是一个使用图像掩膜技术和深度学习技术实现的一个花生豆分拣系统 我们有大量的花生豆图片,并以及打好了标签,可以看一下目录结构和几张具体的图片 同时我们也有几张大的图片&…

年假作业day2

1.打印字母图形 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) { int i,j; char k; for(i1;i<7;i) { for(j1;j<i;j) { printf("%c",_); } for(j0,…

Javaweb之SpringBootWeb案例之异常处理功能的详细解析

3. 异常处理 3.1 当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部…

ARM PAC/BTI/MTE三剑客精讲与实战

一、PAC指针认证精讲与实战 思考 1、什么是栈溢出攻击&#xff1f;什么是代码重用攻击&#xff1f;区别与联系&#xff1f; 2、栈溢出攻击的软&硬件缓解技术有哪些&#xff1f;在TF-A&OPTEE上的应用&#xff1f; 3、什么是ROP攻击&#xff1f;对ROP攻击的缓解技术&…

idea(2023.3.3 ) spring boot热部署,修改热部署延迟时间

1、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency>载入依赖 2、设置编辑器 设置两个选项 设置热部署更新延迟时…

LabVIEW热电偶自动校准系统

设计并实现一套基于LabVIEW平台的工业热电偶自动校准系统&#xff0c;通过自动化技术提高校准效率和精度&#xff0c;降低人力成本&#xff0c;确保温度测量的准确性和可靠性。 工业生产过程中&#xff0c;温度的准确测量对产品质量控制至关重要。传统的热电偶校准方式依赖人工…

H12-821_73

73.某台路由器Router LSA如图所示&#xff0c;下列说法中错误的是&#xff1f; A.本路由器的Router ID为10.0.12.1 B.本路由器为DR C.本路由器已建立邻接关系 D.本路由器支持外部路由引入 答案&#xff1a;B 注释&#xff1a; LSA中的链路信息Link ID&#xff0c;Data&#xf…

【大数据】Flink 中的 Slot、Task、Subtask、并行度

Flink 中的 Slot、Task、Subtask、并行度 1.并行度2.Task 与线程3.算子链与 slot 共享资源组4.Task slots 与系统资源5.总结 我们在使用 Flink 时&#xff0c;经常会听到 task&#xff0c;slot&#xff0c;线程 以及 并行度 这几个概念&#xff0c;对于初学者来说&#xff0c;这…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法&#xff08;续篇五&#xff09; 1.1 种子词 ​ 种子词&#xff08;seed word&#xff09;通常指的是在对话中使用的初始提示或关键词&#xff0c;用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子&#xff0c;通常与对话的主题…

数据结构——单向链表和双向链表的实现(C语言版)

目录 前言 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 2. 单链表接口实现 2.1 数据结构设计与接口函数声明 2.2 创建结点&#xff0c;打印&#xff0c;查找 2.3 尾插&#xff0c;头插&#xff0c;尾删&#xff0c;头删 2.4 插入或删除 2.4.1在指定位置后 2.4.2在…

LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录 HightLightMac上安装PostgreSQLDBever图形界面管理端创建DB 使用向量检索vector相似度计算近似近邻索引HNSW近似近邻索引示例 HightLight 使用PostgreSQL来存储和检索vector&#xff0c;在数据规模非庞大的情况下&#xff0c;简单高效。 可以和在线业务共用一套DB&#…

jquery写表格,通过后端传值,并合并单元格

<!DOCTYPE html> <html> <head><title>Table Using jQuery</title><style>#tableWrapper {width: 100%;height: 200px; /* 设置表格容器的高度 */overflow: auto; /* 添加滚动条 */margin-top: -10px; /* 负的外边距值&#xff0c;根据实际…

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value &#xff0c;被关联到对象上。 标签的使用让我们能够表示出对象的特点&#xff0c;比如使用在Pod上&#xff0c;能一眼看出这个Pod是干什么的。也可以用…