引入Minio

前置條件

官網:https://www.minio.org.cn/download.shtml#/kubernetes

命令

# 查看系統上的網絡連接和監聽端口信息
netstat -tpnl
# 檢查系統的指定端口占用情況
sudo netstat -tuln | grep 9000systemctl status firewalld
# 臨時關閉
systemctl stop firewalld
# 永久關閉
systemctl disable firewalld

安裝

官網有不同系統的下載安裝方式

Linux

注意:./是當前目錄

# 下載
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
# 修改權限
chmod +x minio
# 啟動
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
#也可以下面這樣,他會默認用戶名和密碼
./minio server /mnt/data --console-address ":9001"
  • MINIO_ROOT_USER 指定 MinIO 的用戶名;
  • MINIO_ROOT_PASSWORD 指定 MinIO 的密碼;
  • /mnt/data 指定 MinIO 服務器用于存儲數據的目錄;
  • console-address “:9001” 指定 MinIO 控制臺的監聽地址和端口

后臺啟動(&結束):./minio server /mnt/data --console-address “:9001” &

docker

# 安裝前查看系統是否已經安裝了Docker
yum list installed | grep docker
# 卸載Docker  把查出來的都卸載就行了
yum remove docker.x86_64 -y
# 安裝    這種方式安裝的Docker版本比較舊;(查看版本:docker -v)
yum install docker -y
# 安裝最新版的Docker
yum install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

安裝啟動

# 搜索MinIO鏡像
docker search minio
# 拉取MinIO鏡像
docker pull minio/minio
# 啟動MinIO容器  不指定的話默認最新  這個啟動命令官網是 podman 改成docker
docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address :9001

沒有指定用戶名和密碼,默認是 minioadmin

  • p (映射端口) 虛擬機 : 容器
  • minio/minio 鏡像名
  • server 啟動參數
  • /data 數據文件存放的路徑
  • console-address :9001 web 訪問地址和端口

windows

下載 minio:https://dl.min.io/server/minio/release/windows-amd64/minio.exe

進入到 minio.exe 所在的目錄
執行 minio.exe server D:\minio\data 啟動 minio 服務,其中 D:\minio\data 是 MinIO 存儲數據的目錄路徑

在瀏覽器輸入:http://localhost:9000/ ,登錄 MinIO 服務器 web 管理后臺,默認用戶名密碼都是 minioadmin

springboot 集成

Bucket 是存儲 Object 的邏輯空間,每個 Bucket 之間的數據是相互隔離的,對用戶而言,相當于存放文件的頂層文件夾;

Object 是存儲到 MinIO 的基本對象,對用戶而言,相當于文件;

添加依賴

https://min.io/docs/minio/linux/developers/minio-drivers.html#java

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.10</version>
</dependency>

配置類 MinioClientConfig

@Configuration
public class MinioClientConfig {@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint("http://192.168.64.100:9000").credentials("minioadmin", "minioadmin").build();}
}

測試連接

@SpringBootTest
public class TestMain {@Autowiredprivate MinioClient minioClient;@Testpublic void test() {System.out.println(minioClient);}
}

MinioClient 的常用 API:

  • bucketExists():用于檢查指定的存儲桶是否存在,返回布爾值,表示存儲桶是否存在;

  • makeBucket():用于創建一個新的存儲桶(bucket),需要指定存儲桶的名稱;

  • listBuckets():用于列出用戶有權訪問的所有存儲桶,返回存儲桶的列表;

  • removeBucket():用于刪除一個已存在的存儲桶(bucket),刪除失敗會拋出異常;

  • putObject():用于上傳文件到指定的存儲桶;

  • statObject():用于檢查指定的對象(文件)的狀態;

  • getPresignedObjectUrl():用于生成一個對象(文件)的簽名 URL,以便可以通過 HTTP 訪問;

  • getObject():用于從指定的存儲桶中下載文件;

  • listObjects():用于列出指定存儲桶中的所有對象(文件);

  • removeObject():用于刪除指定存儲桶中的對象,需要指定存儲桶名稱和對象鍵;

Buckets 代碼實現

@SpringBootTest
public class TestBucket {@Autowiredprivate MinioClient minioClient;@Testpublic void removeBucket() throws Exception {// 刪除bucketminioClient.removeBucket(RemoveBucketArgs.builder().bucket("test").build());}@Testpublic void listBuckets() throws Exception {// 列出所有有權訪問的 bucketminioClient.listBuckets().forEach(bucket -> {System.out.println(bucket.name()+bucket.creationDate());});}@Testpublic void createBucket() throws Exception {// 創建bucketminioClient.makeBucket(MakeBucketArgs.builder().bucket("test").build());}@Testpublic void bucketExists() throws Exception {boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("test").build());System.out.println("test目錄是否存在:"+bucketExists);}@Testpublic void test() {System.out.println(minioClient);}
}

Object 代碼實現

@SpringBootTest
public class TestObject {@Autowiredprivate MinioClient minioClient;@Testpublic void removeObject() throws Exception {//用于刪除指定存儲桶中的指定對象(文件)minioClient.removeObject(RemoveObjectArgs.builder().bucket("test").object("1.jpg").build());}@Testpublic void listObjects() {//用于列出指定存儲桶中的所有對象(文件)Iterable<Result<Item>> test = minioClient.listObjects(ListObjectsArgs.builder().bucket("test").build());test.forEach(result -> {try {Item item = result.get();System.out.println(item.objectName());} catch (Exception e) {throw new RuntimeException(e);}});}@Testpublic void getObject() throws Exception {//用于從指定的存儲桶中下載文件GetObjectResponse response = minioClient.getObject(GetObjectArgs.builder().bucket("test").object("1.jpg").build());//io.minio.GetObjectResponse@6a5dd083System.out.println(response);System.out.println(response.transferTo(new FileOutputStream("D:\\Desktop\\projects\\springoot3-vues\\minio\\day01\\src\\main\\resources\\static\\1.jpg")));}@Testpublic void getPresignedObjectUrl() throws Exception {//用于生成一個對象(文件)的簽名URL,以便可以通過HTTP訪問String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket("test").expiry(3, TimeUnit.MINUTES)//設置過期時間.object("1.jpg").method(Method.GET).build());System.out.println("url = " + url);}@Testpublic void statObject() throws Exception {StatObjectResponse test = minioClient.statObject(StatObjectArgs.builder().bucket("test").object("1.jpg").build());//用于檢查指定的對象(文件)的狀態;//ObjectStat{bucket=test, object=1.jpg, last-modified=2024-05-10T08:30:35Z, size=1145359}System.out.println(test);}@Testpublic void putObject() throws Exception {File file = new File("D:\\Pictures\\0.jpg");ObjectWriteResponse test = minioClient.putObject(PutObjectArgs.builder().bucket("test").object("1.jpg")//上傳到minio后的文件名.stream(new FileInputStream(file), file.length(), -1).build());//test = io.minio.ObjectWriteResponse@1815577bSystem.out.println("test = " + test);ObjectWriteResponse test1 = minioClient.uploadObject(UploadObjectArgs.builder().bucket("test").object("1.jpg").filename("D:\\Pictures\\0.jpg").build());}
}

集群

糾刪碼模式部署

糾刪碼(Erasure Code)簡稱 EC,是一種數據保護方法,也是一種算法;

MinIO 對糾刪碼模式的算法進行了實現,采用 Reed-Solomon code(簡稱 RScode)糾錯碼將對象拆分成 N/2 數據和 N/2 奇偶校驗塊,Reed Solomon 利用范德蒙矩陣(Vandermonde matrix)、柯西矩陣(Cauchy matrix)的特性來實現;

即將數據拆分為多個數據塊和多個校驗塊,分散存儲在不同的磁盤上,即使在部分磁盤損壞或丟失的情況下,也可以通過剩余的數據塊和校驗塊恢復出原始數據;

舉個例子,現在有 12 塊磁盤,一個對象數據會被分成 6 個數據塊、6 個奇偶校驗塊,你可以損壞或丟失任意 6 塊磁盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的磁盤中恢復數據

linux 啟動糾刪碼模式

wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
# 修改權限
chmod +x minio
# 單機多磁盤的部署   記得執行上行命令 在/usr/local/minio下  /opt/minio/data 數據卷目錄
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password /usr/local/minio/minio server --console-address ":9001" /opt/minio/data/data{1...12}

單機多磁盤的部署,會報錯

執行命令:lsblk
lsblk 是 Linux 中的一個命令,用于列出所有可用的塊設備(數據存儲設備,如硬盤、閃存驅動器)的信息,如設備名稱、大小、掛載點等;
執行命令:lsblk
lsblk 是 Linux 中的一個命令,用于列出所有可用的塊設備(數據存儲設備,如硬盤、閃存驅動器)的信息,如設備名稱、大小、掛載點等;


添加一塊磁盤,上圖是沒加磁盤

# 不重啟,直接刷新磁盤數據總線,獲取新加的磁盤
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done

再次執行 lsblk


啟動糾刪碼

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password /usr/local/minio/minio server --console-address ":9001" /opt/minio/data/data{1...12}

登錄 minio 查看

上傳一個文件查看數據目錄發現每個目錄都存了文件

linux 啟動糾刪碼模式-后臺啟動

# 這樣就不能設置用戶名和密碼了,咱也不知道為啥一會必須設置一會不能設置,默認用戶名密碼 minioadmin   不知道是不是版本原因
nohup /usr/local/minio/minio server --console-address ":9001" /opt/minio/data/data{1...12} > /opt/minio/data/minio.log 2>&1 &
  • nohup: 這是一個 Unix 命令,用于運行另一個命令在后臺,并且忽略掛起(HUP)信號,也就是即使你退出了終端或關閉了會話,該命令也會繼續運行;
  • > /opt/minio/data/minio.log: 這部分是將標準輸出(stdout)重定向到 /opt/minio/data/minio.log 文件,這意味著 MinIO 服務器的所有正常輸出(如啟動信息、狀態更新等)都會被寫入到這個日志文件中;
  • 2>&1: 這部分是將標準錯誤輸出(stderr)重定向到標準輸出(stdout),即輸出到 /opt/minio/data/minio.log 文件,這樣,無論是標準輸出還是錯誤輸出,都會被寫入到同一個日志文件中;
  • &: 這個符號是在命令的末尾,用于將命令放到后臺執行,也就是即使你啟動了 MinIO 服務器,你的終端或 shell 會話也不會被阻塞,你可以繼續執行其他命令;

docker 啟動糾刪碼模式

docker logs minio

# 這里的密碼也不能少于八位 不然容器就會一直處于重啟狀態(查看日志就會說密碼少于八位了)
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name=minio \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=password" \
-v /home/minio/data1:/data1 \
-v /home/minio/data2:/data2 \
-v /home/minio/data3:/data3 \
-v /home/minio/data4:/data4 \
-v /home/minio/data5:/data5 \
-v /home/minio/data6:/data6 \
-v /home/minio/data7:/data7 \
-v /home/minio/data8:/data8 \
--privileged=true \
minio/minio server /data{1...8} \
--console-address ":9000" \
--address ":9001"

上傳個文件并使用 tree 命令查看目錄 /home/minio
安裝 tree:yum install tree

集群部署-Linux

糾刪碼模式是單機多磁盤方式,如果這臺機器宕機了,那么 minio 就不能對外提供服務了
準備 4 臺機器;(根據 MinIO 的架構設計,至少需要 4 個節點來構建集群,這是因為在一個 N 節點的分布式 MinIO 集群中,只要有 N/2 節點在線,數據就是安全的,同時,為了確保能夠創建新的對象,需要至少有 N/2+1 個節點,因此,對于一個 4 節點的集群,即使有兩個節點宕機,集群仍然是可讀的,但需要有 3 個節點才能寫數據;)

準備四臺虛擬機—下面的操作四臺都需要執行

192.168.64.100
192.168.64.102
192.168.64.103
192.168.64.104

minio 集群需要獨占磁盤塊,不能使用 Linux 的 root 磁盤塊
都添加一塊硬盤去目錄看–> linux 啟動糾刪碼模式

# 不重啟,直接刷新磁盤數據總線,獲取新加的磁盤
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done

將添加的磁盤格式化為 xfs 格式:

mkfs.xfs /dev/sdb

將磁盤掛載到 minio 的存儲目錄:

# 遞歸創建文件夾 若文件夾不存在
mkdir -p /opt/minio/data
mount /dev/sdb /opt/minio/data

開機自動掛載-Linux

開機自動掛載,不配置自動掛載的話,重啟之后需要手動進行掛載
一、修改 /etc 下的 fstab 文件

vim /etc/fstab
source /etc/fstab

在最后一行加入以下內容

/dev/sdb                /opt/minio/data         xfs      defaults       0 0
  • /dev/sdb 是設備的路徑。
  • /opt/minio/data 是掛載點。
  • xfs 是文件系統類型。
  • defaults 是一組默認選項。
  • 0 0 是用于文件系統檢查的選項。

在這里插入圖片描述

注意:不要寫錯和少寫,我沒有寫文件系統類型和默認選項,重啟后進入了緊急模式
二、修改 /etc 下的 rc.local 文件或者 /etc/rc.d 下的 rc.local 文件
這個配置文件會在用戶登陸之前讀取,這個文件中寫入了什么命令,在每次系統啟動時都會執行一次。

vim /etc/rc.local
# 加入 mount /dev/sdb /opt/minio/data
# 重新加載 rc.local 文件
source /etc/rc.local

在這里插入圖片描述

每臺機器上安裝好 minio;(安裝在 /usr/local/minio 目錄下,版本統一)

# 下載
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
# 修改權限
chmod +x minio

在四臺虛擬機的 /usr/local/minio 下編寫 minio.sh 啟動腳本

#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password
/usr/local/minio/minio server --config-dir /etc/minio --address :9000 --console-address :9001 \
http://192.168.64.100/opt/minio/data/data1 http://192.168.64.100/opt/minio/data/data2 \
http://192.168.64.100/opt/minio/data/data3 http://192.168.64.100/opt/minio/data/data4 \
http://192.168.64.102/opt/minio/data/data1 http://192.168.64.102/opt/minio/data/data2 \
http://192.168.64.102/opt/minio/data/data3 http://192.168.64.102/opt/minio/data/data4 \
http://192.168.64.103/opt/minio/data/data1 http://192.168.64.103/opt/minio/data/data2 \
http://192.168.64.103/opt/minio/data/data3 http://192.168.64.103/opt/minio/data/data4 \
http://192.168.64.104/opt/minio/data/data1 http://192.168.64.104/opt/minio/data/data2 \
http://192.168.64.104/opt/minio/data/data3 http://192.168.64.104/opt/minio/data/data4 &

給腳本修改權限

 chmod 744 minio.sh

啟動腳本

# 如果在 minio 的安裝目錄下 /usr/local/minio
./minio.sh
# 若不在安裝目錄下,則寫全路徑
/usr/local/minio/minio.sh

啟動可能會報錯


查看防火墻的狀態關閉防火墻

systemctl status firewalld
# 臨時關閉
systemctl stop firewalld
# 永久關閉
systemctl disable firewalld

腳本加入開機啟動-Linux

在 /usr/lib/systemd/system 下編寫服務

vim /usr/lib/systemd/system/minio.service

加入以下內容

#固定寫法,換一下路徑即可
#!/bin/sh
[Unit]
Description=xxx-service
Documentation=https://docs.minio.io/
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
# 腳本的位置
ExecStart=/usr/local/minio/minio.sh
WorkingDirectory=/opt/minio
PrivateTmp=true
[Install]
WantedBy=multi-user.target

添加權限

chmod +x /usr/lib/systemd/system/minio.service

可以一臺一臺的新建腳本,也可以用下列命令把建好的腳本拷貝給其他機器

# 先ssh連一下目標服務器
ssh 192.168.64.102
# 退出 192.168.64.102
exit
scp -r /usr/lib/systemd/system/minio.service 192.168.64.102:/usr/lib/systemd/system/minio.service

如果 ssh 由于秘鑰問題連不上可用下面命令

ssh -o StrictHostKeyChecking=no 192.168.64.100
# 重新連接

啟動

#將服務添加到開機自啟服務中
systemctl enable minio.service
#系統服務刷新
systemctl daemon-reload
#啟動服務
systemctl start minio.service
#查看服務狀態
systemctl status minio
#停止服務
systemctl stop minio
#取消開機自啟
systemctl disable minio

在這里插入圖片描述

集群部署-Docker

看了好多人寫的,都沒成功,放著吧

Nginx 負載均衡

官網:https://nginx.org/en/download.html

Nginx 下載安裝

# 下載 下載到當前目錄
wget https://nginx.org/download/nginx-1.26.0.tar.gz
# 安裝相關庫
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
# 解壓
tar -zxvf nginx-1.26.0.tar.gz
# 切換至解壓后的nginx主目錄
cd nginx-1.26.0/
# 在nginx主目錄nginx-1.26.0下執行命令  --prefix是指定nginx安裝路徑
./configure --prefix=/usr/local/nginx  
# 執行命令進行編譯
make
# 執行命令進行安裝
make install
# 安裝完成建議刪除 nginx-1.26.0  nginx 安裝在了/usr/local
# 這個刪除的是下載解壓的文件
rm -rf nginx-1.26.0

Nginx 啟動

# -c是指定配置文件
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 重啟
/usr/local/nginx/sbin/nginx -s reload

Nginx 關閉

# 會將已經進來的請求處理完后再關閉
# 找出nginx的進程號
ps -ef | grep nginx
# QUIT  必須是大寫
kill -QUIT 主pid
# 快速關閉會直接關閉,已經進來的請求也不會處理
ps -ef | grep nginx
# TERM 必須是大寫
kill -TERM 主pid

Nginx配置檢查

# 當修改Nginx配置文件后,可以使用Nginx命令進行配置文件語法檢查,用于檢查Nginx配置文件是否正確
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t

Nginx 修改配置文件

1、在http模塊配置upstream

upstream api {server  192.168.64.100:9000;server  192.168.64.102:9000;server  192.168.64.103:9000;server  192.168.64.104:9000;
}
upstream webui {server  192.168.64.100:9001;server  192.168.64.102:9001;server  192.168.64.103:9001;server  192.168.64.104:9001;
}

2、在server模塊里配置

		location / {#root   html;#index  index.html index.htm;proxy_pass http://api;proxy_set_header Host $http_host;proxy_set_header Server MinIO;proxy_set_header Accept-Ranges bytes;}

再寫個server 指定 webui

server {listen       50000;server_name  localhost;location / {proxy_pass http://webui;}
}

在這里插入圖片描述
在這里插入圖片描述

測試訪問

在地址欄輸入:http://192.168.64.100:50000/ 可以正常訪問 minio 后臺在這里插入圖片描述

常見問題

服務器時間不同步

The difference between the request time and the server’s time is too large.
解決:

yum install ntpdate -y
ntpdate pool.ntp.org

上傳的文件默認是不能訪問的

http://ip:9000/存儲桶/文件名

一、后臺修改 bucke t 的訪問策略

二、代碼實現

@Testpublic void createBucket() throws Exception {String bucketName = "test1";boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!bucketExists) {// 創建bucketminioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}//創建的時候設置訪問策略  2012-10-17  不能改String policyJsonString = "{\n" +"    \"Version\": \"2012-10-17\",\n" +"    \"Statement\": [\n" +"        {\n" +"            \"Effect\": \"Allow\",\n" +"            \"Principal\": {\"AWS\": [\"*\"]},\n" +"            \"Action\": [\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\n" +"            \"Resource\": [\"arn:aws:s3:::"+bucketName+"\"]\n" +"        },\n" +"        {\n" +"            \"Effect\": \"Allow\",\n" +"            \"Principal\": {\"AWS\": [ \"*\"]},\n" +"            \"Action\": [\"s3:DeleteObject\",\"s3:GetObject\", \"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\n" +"            \"Resource\": [\"arn:aws:s3:::"+bucketName+"/*\"]\n" +"        }\n" +"    ]\n" +"}";minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policyJsonString).build());}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10195.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生信人寫程序1. Perl語言模板及配置

生物信息領域常用語言 個人認為&#xff1a;是否能熟悉使用Shell(項目流程搭建)R(數據統計與可視化)Perl/Python/Java…(膠水語言&#xff0c;數據格式轉換&#xff0c;軟件間銜接)三門語言是一位合格生物信息工程師的標準。 生物信息常用語言非常廣泛&#xff0c;我常用的有…

在macOS中開發的Django項目部署到局域網的Win10服務器上

由于windows10是日常辦公電腦&#xff0c;沒有服務器基本環境&#xff0c;部署工程耗費不少時間&#xff0c;記錄一下。 1、安裝Python 訪問Python官方下載頁面&#xff1a;Python Downloads&#xff0c;下載適用于Windows的安裝程序并按照提示進行安裝。開發環境python版本是…

Python可以自學但是千萬不要亂學,避免“埋頭苦學”的陷阱!

前言 Python可以自學但是千萬不要亂學&#xff01; 歸根結底因為學習是個反人性的過程&#xff01; 復盤沒學下去的網課&#xff0c;都有以下特點&#xff1a; &#x1f605; 臣妾聽不懂啊&#xff01; 初次接觸編程遇到太多抽象高深的概念&#xff0c;不了解老師口中的一個…

基于51單片機的二氧化碳檢測及調節系統仿真

基于51單片機的二氧化碳檢測及調節系統 &#xff08;仿真&#xff0b;程序&#xff09; 功能介紹 具體功能&#xff1a; 1.二氧化碳傳感器測得二氧化碳數據后經過單片機處理。 2.LCD1602實時顯示&#xff0c;第一行顯示測得的濃度值&#xff0c;第二行顯示報警閾值。 3.測…

棱鏡七彩參編《網絡安全技術 軟件供應鏈安全要求》國家標準發布

據全國標準信息公共服務平臺消息顯示&#xff0c;《網絡安全技術 軟件供應鏈安全要求》&#xff08;GB/T 43698-2024&#xff09;國家標準已于2024年4月25日正式發布&#xff0c;并將于2024年11月1日正式實施。棱鏡七彩作為主要編制單位之一參與該國家標準的編制&#xff0c;為…

Taro 快速開始

大家好我是蘇麟 , 今天聊聊Trao. 官網 : Taro 介紹 | Taro 文檔 (jd.com) 點擊快速開始 全局安裝 CLI 初始化一個項目 選擇配置 : 根據自己需求選擇 安裝失敗先不用管 , 用前端工具打開項目 npm install 安裝 , 顯示安裝失敗 怎么解決 ? : 查看報錯信息 百度 , 問 AI 工具 運…

算法練習第六十天|84. 柱狀圖中最大的矩形

84. 柱狀圖中最大的矩形 柱狀圖中最大的矩形 class Solution {public int largestRectangleArea(int[] heights) {int[] newHeight new int[heights.length 2];System.arraycopy(heights, 0, newHeight, 1, heights.length);newHeight[heights.length1] 0;newHeight[0] 0;…

算法學習筆記(最短路——spfa)

前置&#xff1a;bellman-ford s p f a spfa spfa是 B e l l m a n ? F o r d Bellman-Ford Bellman?Ford算法的改進。在 B e l l m a n ? F o r d Bellman-Ford Bellman?Ford中&#xff0c;我們在每一輪中枚舉了每一條邊&#xff0c;但是實際上&#xff0c;在上一輪中沒有…

睿爾曼機械臂ROS控制

下載git工程 git clone https://github.com/RealManRobot/rm_robot.git安裝配置 catkin build rm_msgs source devel/setup.bash catkin build source setup.bash這里注意&#xff0c;如果采用setup.sh多半不會成功&#xff0c;必須要source setup.bash文件&#xff0c;ros才…

train_gpt2_fp32.cu

源程序 llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <assert.h> #include <float.h> #include <string.h> #include…

二叉樹的最小深度和二叉樹的節點數

二叉數的最小深度&#xff1a; 思路&#xff1a;和最大深度一樣需要用到回溯遞歸的方法 代碼大致內容 判斷函數是否為空&#xff0c;如果是空return 0&#xff1b; 定義一個變量接收遞歸函數返回的值&#xff08;左&#xff09; 定義一個變量接收遞歸函數返回的值&#xf…

力扣每日一題-收集垃圾的最少總時間-2024.5.11

力扣題目&#xff1a;收集垃圾的最少總時間 題目鏈接: 2391.收集垃圾的最少總時間 題目描述 代碼純享版 class Solution {public int garbageCollection(String[] garbage, int[] travel) {int sum 0;int last_M -1,last_P -1, last_G -1;for(int i 0; i < garbage.…

以Azure為例的SSO

由于文章的篇幅有限&#xff0c;無法將全部的代碼貼上來&#xff0c;如想要看完整案例&#xff0c;請在公眾號文章中留言(其他平臺很少看…畢竟最近印度同事的UI組件庫搞得我好煩) 1.關于SSO 單點登錄又稱之為SSO,全稱為 Single Sign On &#xff0c;一般在多個應用系統中&…

Github2024-05-10開日報 Top10

根據Github Trendings的統計&#xff0c;今日(2024-05-10統計)共有10個項目上榜。根據開發語言中項目的數量&#xff0c;匯總情況如下&#xff1a; 開發語言項目數量Python項目4TypeScript項目4JavaScript項目1Lua項目1C項目1Rust項目1Dart項目1 RustDesk: 用Rust編寫的開源遠…

U盤文件剪切丟失怎么辦?揭秘原因并給出恢復方法

在日常生活和工作中&#xff0c;U盤已成為我們不可或缺的數據存儲和傳輸工具。但有時候&#xff0c;我們在對U盤中的文件進行剪切操作時&#xff0c;會遇到文件丟失的情況。這種突如其來的數據消失往往會讓人感到驚慌和困惑。那么&#xff0c;為什么U盤剪切時文件會丟失呢&…

運營模型—歸因分析(Attribution Analysis)

運營模型—歸因分析(Attribution Analysis) 隨著互聯網技術和業務的發展,廣告投放相關的業務也隨之興起。那么廣告投放的效果評估也就隨之而來。廣告的投放一般都是收費模式,所以選中的渠道商的好壞直接和自己的利益掛鉤。于是,「歸因分析」便最早應用在了廣告投放行業。(…

IDEA 常見設置問題

OutOfMemoryError IDEA 第一次運行項目時&#xff0c;會報錯誤 - java.lang.OutOfMemoryError: Java heap space / insufficient memory&#xff0c;解決辦法是&#xff1a; 將圖示部分由默認的 700 改為 2048。 import * 工程lint檢查時不允許使用import *&#xff0c;IDE…

Python中如何讀取文件夾及其文件:使用os模塊詳解

路徑os Python中如何讀取文件夾及其文件&#xff1a;使用os模塊詳解引入os模塊讀取文件夾獲取當前工作目錄更改工作目錄列出目錄內容 讀取文件夾下的文件檢查是文件還是目錄使用os.path.join()**重點內容**&#xff1a;**使用os模塊來讀取和管理文件及目錄&#xff0c;特別是os…

使用Selenium自動化操作瀏覽器!

Selenium可以自動化操作瀏覽器&#xff0c;例如&#xff1a;選擇元素&#xff0c;輸入&#xff0c;點擊等&#xff0c;可以用于軟件自動化測試&#xff0c;爬蟲等工作&#xff0c;也可以做你想做的任何事情。 本文環境&#xff1a; Python3.12&#xff0c;Windows10&#xff0…

python實現星號打印出金字塔

#編程實現下列圖形的打印 a input() for i in range(int(a)//21): num * * ((i1)*2-1) print(num.center(int(a), )) 編譯后通過。輸入20后得到下面的星號金字塔