Java Web部署

今天小編來分享下如何將本地寫的Java Web程序部署到Linux上。

小編介紹兩種方式:

部署基于Linux Systemd服務、基于Docker容器化部署

首先部署基于Linux Systemd服務

那么部署之前,要對下載所需的環境

軟件下載

Linux(以ubuntu)

以下命令,為了方便,均以root用戶操作

下載jdk

 

Shell
//查找下倉庫中jdk
apt list | grep "jdk"
//下載openjdk17,這個版本根據你idea中選定的jdk即可
apt install -y openjdk-17-jdk

如何不小心下載錯了,可以自行卸載

 

Shell
apt-get purge openjdk-17-jdk

下載MySQL

 

Shell
//查看MySQL安裝包
apt list | grep "mysql-server"

apt install -y mysql-server

查看MySQL狀態

 

Shell
systemctl status mysql

執行MySQL安全腳本

執行此命令,會讓MySQL運行安全性進一步提高

 

Shell
mysql_secure_installation

后面的內容篇幅過長,就不截圖了

內容大致如下:

  1. 設置密碼驗證插件:可以配置密碼強度策略,確保用戶設置強密碼。

  2. 更改 root 用戶密碼:如果你沒有在初始化時設置 root 密碼,或者想要修改現有的 root 密碼,可以通過此步驟完成。

  3. 移除匿名用戶:默認情況下,MySQL 可能包含一個或多個匿名用戶賬戶,這些賬戶允許任何人登錄到 MySQL 服務器。移除這些賬戶可以增加安全性。

  4. 禁止 root 遠程登錄:確保 root 用戶只能從本地機器登錄 MySQL,減少被遠程攻擊的風險。

  5. 移除測試數據庫:MySQL 默認提供了一個名為 test 的數據庫,任何人都可以訪問。刪除這個數據庫可以避免潛在的安全風險。

  6. 重新加載權限表:確保所有的更改都立即生效

卸載MySQL(出意外)

 

Shell
//停止服務
systemctl stop mysql

//卸載MySQL
apt-get remove --purge mysql-server mysql-client mysql-common

//刪除MySQL配置文件及其數據

rm -rf /etc/mysql /var/lib/mysql

//清理殘留文件和目錄
apt-get autoremove
apt-get autoclean

//驗證結果
MySQL -version

登錄數據庫

 

SQL
//首次安裝,默認是免密登錄
mysql -u root


//如若不想對root用戶不想進行免密登錄、通過以下方式

//1.查看用戶信息(在默認情況下,MySQL 8.0 使用 auth_socket?插件處理 root 用戶的認證。)
SELECT User, Host, plugin FROM mysql.user WHERE User='root';
//2.更改roo用戶的身份驗證方法
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密碼';
//刷新權限
FLUSH PRIVILEGES;
//退出
exit;

//重啟MySQL服務(非root用戶需+sudo)
systemctl restart mysql

//驗證
mysql -u root -p

導出sql文件

如若你的數據庫創建在本地,比如windows,那么這里提供兩種方式

命令行方式

 

SQL
//導出整個數據庫
mysqldump -u 用戶名 -p 數據庫名 > 數據庫名.sql

//導出某張表
mysqldump -u root -p blog_system comment > comment.sql

//只導結構,不包含數據
mysqldump -u root -p -d blog_system > blog_schema.sql

//導出多個數據庫
mysqldump -u root -p --databases db1 db2 > backup.sql

//導出所有數據庫
mysqldump -u root -p --all-databases > all.sql

//使用rz命令把本地的sql文件上傳到Linux服務器(sz為下載文件到本地)
rz
//如若沒有該命令,則通過以下命令進行安裝
apt-get install -y lrzsz


//上傳后的sql文件,執行以下命令即可恢復sql里面的數據,注意:得先創建對應的數據庫
//示例
mysql -u root -p blog_system < blog_system.sql

圖形化界面(navicat)

連接數據庫

右鍵其中一個表

然后選擇是否是僅結構或是結構和數據

點擊后,會讓你保存到自定義目錄,然后等待導出即可

導出的sql文件,依舊通過rz命令上傳或是拖拽上傳,然后通過命令行方式恢復文件即可

 

SQL
//示例
mysql -u root -p blog_system < blog_system.sql

數據準備好后,接下來還有端口開放。

端口開放

如若在騰訊云、華為云、京東云等廠商購買服務器,還需官網上開啟端口

進入官網頁面:

進入控制臺頁面,點擊輕量應用服務器

進入詳情頁面

點擊防火墻

點擊添加規則

配置參數

如若本地Java程序端口開放是9091,那么這里應用類型選自定義,來源選全部ipv4地址,端口填寫9091,點擊確定即可

查看防火墻

 

SQL
ufw status

如若是inactive,則可以不用管,直接跳到后面即可

如若是active,那么可以通過以下命令進行關閉防火墻

 

SQL
ufw disable

如若是想更加安全措施,參考以下命令

 

SQL
//windows win+R,cmd 查出本機ip
curl ifconfig.me

//添加防火墻規則
ufw allow from 本機IP 地址to any port 22

//如若想刪除規則
ufw delete allow from 本機IP 地址to any port 22

本地文件編寫

先介紹幾個環境

? 開發環境: 開發?員寫代碼?的機器.

? 測試環境: 測試?員測試程序使?的機器.

? ?產環境(線上環境): 最終項?發布時所使?的機器. 對穩定性要求很?.

多環境配置

打開你的spring boot項目

打開application.yml文件

然后將此文件復制兩份文件,命名如下

application-dev.yml(開發環境文件)、application-prod(生產環境文件).yml

為什么?

這是因為,復制兩份文件,是為了不頻繁改動applicaiton.yml文件內容,比如數據庫密碼

然后application.yml文件內容如下:

 

SQL
spring:
??profiles:
????active: @profile.name@

pom.xml修改

與<dependencies>標簽同級下,新建以下標簽及其內容

 

XML
<profiles>
????<profile>
????????<id>dev</id>
????????<properties>
????????????<profile.name>dev</profile.name>
????????????<mysql.password>****</mysql.password>
????????</properties>
????????<activation>
????????????<activeByDefault>true</activeByDefault>
????????</activation>
????</profile>
????<profile>
????????<id>prod</id>
????????<properties>
????????????<profile.name>prod</profile.name>
????????????<mysql.password>****</mysql.password>
????????</properties>
????</profile>
</profiles>

一個環境文件,就寫一個<profile>標簽,添加<activeByDefault>可以使得打包的時候,默認選中的是dev環境

重要一步!!!不要忘記刷新maven

刷新后,內容如下:

此時,你勾選prod,那就以生成環境配置為主,否則就是默認的dev。

點擊Lifecycle下的package,打出jar包。

注意,如若想跳過測試,則點擊圖片中,長方形標出的按鈕。

回到Linux服務器,使用rz命令把jar包上傳到你選定的目錄

動態獲取不同環境的配置文件,這是Spring Boot 與 Maven 構建系統結合使用時的一種 “配置參數占位替換機制”

核心機制:Maven 構建時資源過濾 + profile 替換變量

選擇prod時

Maven 會:

  • 激活 <id>prod</id> 的配置

  • <properties> 中的變量值(如 profile.name=prod)注入

  • 然后自動替換 application.yml 中的 @profile.name@prod

如若發現不生效,可以使用該設置,進行開啟掃描過濾

XML
<build>
??<resources>
????<resource>
??????<directory>src/main/resources</directory>
??????<filtering>true</filtering> <!--開啟過濾 -->
????</resource>
??</resources>
</build>

Linux文件配置

創建文件

 

Shell
vim /etc/systemd/system/xxxx.service

添加文件內容

 

Bash
[Unit]
Description=Blog Manager Java Service
After=network.target

[Service]
# 運行用戶,推薦非 root,開發測試可用 root
User=root

# 工作目錄(jar 所在目錄)
WorkingDirectory=/home/user/blog

# 啟動命令(使用完整路徑)
ExecStart=/usr/bin/java -jar /home/user/blog/blog_manager.jar

# 正常退出狀態碼
SuccessExitStatus=143

# 自動重啟策略
Restart=on-failure
RestartSec=3

# 防止無限重啟(60 秒最多重啟 3 次)
StartLimitIntervalSec=60
StartLimitBurst=3

# 日志輸出
StandardOutput=append:/var/log/blog_manager.log
StandardError=append:/var/log/blog_manager.err

# Kill 方式(強制終止)
KillMode=process
KillSignal=SIGTERM

[Install]
WantedBy=multi-user.target

重新加載配置

 

Shell
systemctl daemon-reload

啟動服務

 

Shell
systemctl start xxxx

查看狀態

 

Shell
systemctl status xxxx

然后可以通過http://你的公網ip地址:配置的端口/首頁html文件 進行網站訪問

其工作原理大致如下:

  • systemctl daemon-reload 讓 systemd 重新加載配置

  • systemctl start xxxx 時,systemd 會:

    • 檢查網絡是否就緒(After=network.target)

    • 切換到指定工作目錄

    • 以 root 用戶執行 Java 命令

    • 監控進程狀態,按策略處理異常

    • 記錄標準輸出和錯誤到日志文件

即.service文件中規定了如何做,那么systemd就執行什么。

快速測試jar包

 

Shell
nohup java -jar xxxxxx.jar >/logger/xxx.log &

這個nohup指令,全稱是no hang up 用于在系統后臺不掛斷的運行命令,退出終端不受影響

Docker部署

那么接著,接下來小編介紹,基于Docker容器化部署

進入Linux命令行、小編以root用戶進行操作,非root用戶,建議命令加上sudo

一:準備工作

1.更新軟件包:

 

Java
//檢查更新軟件包列表
apt-get update
//升級所有可升級的軟件
apt-get upgrade
//清理無用的舊依賴(這一步可選可不選)
apt autoremove

2.安裝docker前置依賴:

 

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

安裝組件說明:

包名作用
apt-transport-https支持通過 HTTPS 下載軟件源
ca-certificates驗證網站安全證書(防釣魚)
curl命令行下載工具,用于獲取密鑰和配置
software-properties-common提供 add-apt-repository 命令

3.添加docker官方的GPG密鑰(信任源)

 

Java
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

注意:使用阿里云鏡像站點的GPG密鑰,速度快且穩定

命令意思是:

從阿里云鏡像站點下載GPG公鑰

用 GPG 工具把它處理成 apt 能識別的格式

保存在 /etc/apt/keyrings/docker.gpg

-fsSL參數解釋:

  • -f:表示在服務器錯誤時阻止返回錯誤頁面,直接返回錯誤碼 22。

  • -s:啟用安靜模式,不顯示進度條或錯誤信息。 13

  • -S:啟用 SSL 加密協議,確保數據傳輸安全

4.添加docker軟件源:

 

Java
echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list

參數解釋: deb:表示這是一個Ubuntu的二進制軟件源(非源碼包)

[arch=amd64]:指定該源適合于64位x86架構

$(lsb_release -cs):獲取當前Ubuntu系統發行版代號

stable:使用docker的穩定版本,(非測試版edge或nightly)

tee:寫入文件(tee 既能輸出到屏幕又能寫入文件)。

5.再次更新軟件包列表

讓系統再次添加剛剛的docker的源:

 

Java
apt-get update

如若發生NO_PUBKEY,返回第三步重新導入密鑰

6.安裝docker引擎

 

Java
apt-get install -y docker-ce docker-ce-cli containerd.io

軟件包功能如下:

1. docker-ce(Docker Community Edition)

  • 作用:Docker 的核心引擎(主程序),負責容器的創建、運行和管理。

  • 包含的主要功能:

    • dockerd:Docker 守護進程(后臺服務)。

    • Docker 的 REST API(供客戶端如 docker 命令行工具調用)。

    • 容器生命周期管理(create/start/stop/rm 等)。

2. docker-ce-cli(Docker 命令行工具)

  • 作用:Docker 的官方命令行客戶端(docker 命令)。

  • 關鍵功能:

    • 提供 docker 命令(如 docker rundocker ps 等)。

    • dockerd 守護進程通信(通過 /var/run/docker.sock)。

3. containerd.io(容器運行時)

  • 作用:Docker 依賴的底層容器運行時(由 Docker 剝離出的核心組件)。

  • 功能:

    • 管理容器的底層操作(如鏡像拉取、容器啟動、存儲管理)。

    • dockerd 調用,負責與 Linux 內核交互(通過 runc 等工具)。

7.驗證docker是否安裝成功

 

Java
docker --version

類似信息如下:

Docker version 28.3.3, build 980b856

還可以查看docker詳細信息

 

Java
docker info

8.配置鏡像加速器

配置鏡像加速器,后續進行docker pull操作的時候,可以解決拉取緩慢/失敗問題

值得注意的是:2024年底起,阿里云已經停用公共鏡像加速器

詳情如下:配置鏡像加速器_容器鏡像服務(ACR)-阿里云幫助中心

1.創建docker配置文件:

小編使用的是騰訊云服務器,所以使用了騰訊云的鏡像加速器

 

Bash
sudo mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
??"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

值得注意的是,該網址,不可直接在瀏覽器訪問,

原因:

  • 該地址是一個 Docker Registry 鏡像服務,遵循 Docker 的 API 協議(如 v2),僅響應 Docker 客戶端的請求(如 docker pull)。

  • 瀏覽器訪問會返回 404401 Unauthorized,因為它期望的是 Docker 客戶端的特定 HTTP 請求。

你可以通過以下命令進行測試:

 

Java
curl -I https://mirror.ccs.tencentyun.com

常見的鏡像加速器:

方案推薦度說明
騰訊云加速器 mirror.ccs.tencentyun.com?????推薦!內網加速,穩定免費
中科大鏡像 docker.mirrors.ustc.edu.cn????社區維護,較穩定
網易云 hub-mirror.c.163.com???可用,偶爾不穩定

2.重啟docker使配置生效

 

Java
systemctl restart docker

3.驗證加速器是否生效

 

Java
docker info | grep -A 3 "Registry Mirrors"

4.運行第一個容器,測試

 

Java
docker run hello-world

注意,首次運行,會沒有該容器,然后會從hub中,拉取hello-world

二:構建容器,并運行

1.修改application-prod.yml文件

URL替換:

 

Java
url: jdbc:mysql://172.17.0.1:3306/blog_manger?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true

//值得注意的是,url還可以寫成這樣
????url: jdbc:mysql://host.docker.internal:3306/blog_manager?useSSL=false&allowPublicKeyRetrieval=true

原因: docker容器的網絡隔離性,每個容器有獨立的網絡命名空間,127.0.0.1僅指向容器內部,不是主機的數據庫

為什么是 172.17.0.1

  • Docker 默認創建網橋 docker0,子網通常是 172.17.0.0/16

  • 宿主機在該網絡中的 IP 固定為 172.17.0.1(類似路由器角色)。

  • 容器內訪問 172.17.0.1 即訪問宿主機。

前提是MySQL得監聽:0.0.0.0.

那么小編使用的時MySQL監聽:0.0.0.0,修改MySQL配置文件的操作,文章末尾會介紹另一種方案

2.修改MySQL配置文件以及權限

 

Java
cd /etc/mysql/mysql.conf.d/mysqld.cnf

//修改配置文件,找到bind-address,改成以下內容
bind-address= 0.0.0.0

重啟防火墻:

 

Java
systemctl restart mysql

修改MySQL權限

 

Java
//登錄MySQL
mysql -u root -p
//查看當前的 root 用戶及其允許連接的 host
SELECT user, host FROM mysql.user WHERE user = 'root';

// 修改現有 root@localhost 用戶的 host,或創建新的 root@'172.17.0.%' 用戶
// 如果您想讓現有的 root 用戶可以從任何地方連接 (不推薦生產環境):
ALTER USER 'root'@'localhost' IDENTIFIED BY '*****'; -- 確保密碼正確
ALTER USER 'root'@'localhost' RENAME TO 'root'@'%';
// 或者,更推薦的是,創建一個新的 root 用戶,允許從 Docker 網段連接
CREATE USER 'root'@'172.17.0.%' IDENTIFIED BY '***';
//允許該網段對其數據庫有讀寫操作
GRANT ALL PRIVILEGES ON blog_manger.* TO 'root'@'172.17.0.%' WITH GRANT OPTION;

//刷新客戶端
flush privileges;

如若防火墻關閉了,那么可以到下一步了,沒有,那么推薦使用以下操作

 

Java
防火墻:
# 允許 SSH (22 端口)
sudo ufw allow ssh

# 允許您的博客應用外部訪問端口 (9091)
# 假設您希望從外部訪問您的博客系統前端,需要開放這個端口
sudo ufw allow 9091/tcp

# 允許 Docker 宿主機內部網絡(172.17.0.0/16)訪問 MySQL 端口 (3306)
# 這是讓您的 Docker 容器能夠連接 MySQL 的關鍵
sudo ufw allow from 172.17.0.0/16 to any port 3306 proto tcp

# 設置默認策略:拒絕所有傳入連接,允許所有傳出連接
# 這表示除了您明確允許的規則,其他所有外部嘗試連接都會被拒絕
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 啟用 UFW 防火墻
sudo ufw enable

# 檢查 UFW 狀態,確認規則已生效
sudo ufw status verbose

3.首先創建一個目錄,用來存放jar包和Dockerfile文件

 

Java
mkdir blog_dokcer

然后把jar包進行復制到該目錄,或者直接傳輸到該目錄

小編這里重命名為blog-docker.jar

4.編寫Dockerfile文件

 

Bash
# 使用官方 Java 鏡像作為基礎鏡像
FROM openjdk:17-jdk

# 設置工作目錄
WORKDIR /blog_docker_work

# 拷貝 jar 包到容器中
COPY blog-docker.jar blog-docker.jar

# 暴露端口(假設 Spring Boot 配置了 9091)
EXPOSE 9091

# 啟動命令
ENTRYPOINT ["java", "-jar", "blog-docker.jar"]

5.構建鏡像

 

Shell
docker build blog-docker:latest .

注意 .表示,你需要在當前創建的Dockerfile目錄進行該操作

查看該鏡像是否存在

 

Shell
docker images

6.運行容器

 

Shell

docker run -d --name blog-docker-container -p 9091:9091 blog-docker:latest

//如若yml文件中寫了host.docker.internal:3306,那么運行容器就是這個命令:
docker run -d \
??--name blog-docker-container \
??-p 9091:9091 \
??--add-host host.docker.internal:host-gateway \ ?# 關鍵:映射宿主機 IP
??blog-docker:latest

接下來通過http://你的公網ip地址:配置的端口/首頁html文件 進行網站訪問

刪除容器和鏡像

 

Shell
//找到容器ID,或者容器名
docker ps

//刪除容器ID,或者容器名
docker rm 容器名/容器ID

//找到鏡像ID
//方式一
docker inspect --format='{{.Image}}' 容器ID

//方式二
docker images
//刪除鏡像
docker rmi 鏡像ID

7.查看日志

如若發現網站有訪問接口報錯,或者,想查看后端日志

可通過以下命令:

 

Shell

docker logs -ft blog-docker-container ?| grep -i "error\|exception"

那么剛剛一種部署方式是docker連接宿主機的數據庫的,那么接下來分享另一種方法

獨立使用MySQL容器

1.創建docker網絡

 

Shell
docker network create blog-network

2.拉取MySQL鏡像

 

Shell
docker pull mysql:8.0 ?# 可顯式拉取,或讓 run 自動拉取

3.啟動Mysql容器并導入數據

如需本地Windows電腦數據庫中的數據,可參考導出本文sql文件導出方式Java Web部署

導出的文件,要上傳到Linux指定的目錄下

運行MySQL容器:

 

Shell
docker run -d \
??--name mysql-container \
??--network blog-network \ ?????????# 加入網絡
??-e MYSQL_ROOT_PASSWORD=123456 \ ?# 設置 root 密碼
??-e MYSQL_DATABASE=blog_manger \ ?????# 創建默認數據庫
??-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql \ ?# 導入 SQL
??-v mysql_data:/var/lib/mysql \ ??# 持久化數據(自動創建卷)
??-p 3306:3306 \ ?????????????????# 可選:暴露端口給宿主機
??mysql:8.0 ??????????????????????# 使用 MySQL 8.0

注意,如若之前沒有拉取鏡像,這一步,docker也會拉取MySQL鏡像

參數說明:

參數作用
-v init.sql:/docker-entrypoint-initdb.d/init.sql自動執行 SQL 文件初始化數據庫
-v mysql_data:/var/lib/mysql數據持久化(重啟容器不丟失)
--network blog-network允許其他容器通過容器名訪問

3.驗證數據是否導入

 

Shell
docker exec -it mysql-container mysql -uroot -p123456

通過此命令,可進入MySQL命令行交互

docker exec 是 Docker 命令行工具中用于在運行中的容器內執行命令的一個非常有用的命令。

常用選項

  • -d--detach:在后臺運行指定的命令。

  • -i--interactive:即使沒有附加也保持 STDIN 開放。通常與 -t 一起使用。

  • -t--tty:分配一個偽終端。這對于交互式命令(如 bash shell)非常有用。

  • --privileged:給予執行命令的容器額外的權限。

  • -u--user:以指定的用戶身份(格式為 UID:GID)運行命令。

4.修改yml文件

 

Shell
spring:
??datasource:
????url: jdbc:mysql://mysql-container:3306/blog_db?useSSL=false
????username: root
????password: 123456

5.構建鏡像

 

Shell
docker build -t blog-docker:latest .

6.運行容器

 

Shell
docker run -d --name blog-docker-container --network blog-network -p 9091:9091 \
blog-docker

最后,訪問url,進行驗證即可

最后小編分享下,對于docker中的build 、run命令常見選項

構建

命令格式:

 

docker build [OPTIONS] PATH | URL | -

選項作用示例說明
-f指定 Dockerfile 文件路徑-f Dockerfile.prod默認找 ./Dockerfile,你也可以自定義
-t指定鏡像名和標簽-t blog:1.0常用寫法:鏡像名:標簽
--no-cache構建時不使用緩存--no-cache確保每一步都重新執行
--build-arg傳構建參數(配合 Dockerfile 中 ARG 使用)--build-arg version=1.2.3給 Dockerfile 傳入動態變量
--progress設置構建日志樣式--progress=plain可設為 auto, plain, tty
.指定構建上下文目錄.COPY 指令只能訪問此目錄下的文件

常用示例:

 

Shell
docker build -f Dockerfile -t blog-manager:latest .
docker build -t nginx-custom:dev --no-cache .
docker build -t myapp --build-arg VERSION=1.0 .

運行

命令格式:

 

Shell
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

選項作用示例說明
-d后臺運行容器-d不阻塞當前終端
--name指定容器名稱--name blog否則會隨機生成名稱
-p端口映射-p 8080:8080宿主機:容器
-v掛載卷(目錄或文件)-v /mydata:/app/data持久化數據
--rm容器退出時自動刪除--rm不保留痕跡(臨時測試用)
-e設置環境變量-e SPRING_PROFILES_ACTIVE=prod相當于傳遞配置參數
--network使用指定網絡--network mynet用于容器間通信
--restart設置自動重啟策略--restart=always推薦生產使用
--entrypoint覆蓋 Dockerfile 中的 ENTRYPOINT--entrypoint /bin/sh啟動一個命令行環境

常用示例:

 

Shell
docker run -d --name blog -p 8080:8080 blog-manager:latest
docker run -e SPRING_PROFILES_ACTIVE=prod blog-manager:latest
docker run --restart=always -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0

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

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

相關文章

告別AI“煉丹術”:“策略懸崖”理論如何為大模型對齊指明科學路徑

摘要&#xff1a;當前&#xff0c;我們訓練大模型的方式&#xff0c;尤其是RLHF&#xff0c;充滿了不確定性&#xff0c;時常產生“諂媚”、“欺騙”等怪異行為&#xff0c;被戲稱為“煉丹”。一篇來自上海AI Lab的重磅論文提出的“策略懸崖”理論&#xff0c;首次為這個混沌的…

深入理解C#特性:從應用到自定義

——解鎖元數據標記的高級玩法&#x1f4a1; 核心認知&#xff1a;特性本質揭秘 public sealed class ReviewCommentAttribute : System.Attribute { ... }特性即特殊類&#xff1a;所有自定義特性必須繼承 System.Attribute&#xff08;基礎規則&#xff09;命名規范&#xff…

機器學習-集成學習(EnsembleLearning)

0 結果展示 0.1 鳶尾花分類 import pandas as pd import numpy as npfrom sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, recall_score, f1_score, classification_repo…

Golang database/sql 包深度解析(一)

database/sql 是 Go 語言標準庫中用于與 SQL&#xff08;或類 SQL&#xff09;數據庫交互的核心包&#xff0c;提供了一套輕量級、通用的接口&#xff0c;使得開發者可以用統一的方式操作各種不同的數據庫&#xff0c;而無需關心底層數據庫驅動的具體實現。 核心設計理念 datab…

文章自然潤色 API 數據接口

文章自然潤色 API 數據接口 ai / 文本處理 基于 AI 的文章潤色 專有模型 / 智能糾錯。 1. 產品功能 基于自有專業模型進行 AI 智能潤色對原始內容進行智能糾錯高效的文本潤色性能全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 / v1.3&#xff09;&#xff1b;全面兼容…

【狀壓DP】3276. 選擇矩陣中單元格的最大得分|2403

本文涉及知識點 C動態規劃 3276. 選擇矩陣中單元格的最大得分 給你一個由正整數構成的二維矩陣 grid。 你需要從矩陣中選擇 一個或多個 單元格&#xff0c;選中的單元格應滿足以下條件&#xff1a; 所選單元格中的任意兩個單元格都不會處于矩陣的 同一行。 所選單元格的值 互…

IDEA 清除 ctrl+shift+r 全局搜索記錄

定位文件&#xff1a;在Windows系統中&#xff0c;文件通常位于C:Users/用戶名/AppData/Roaming/JetBrains/IntelliJIdea(idea版本)/workspace目錄下&#xff0c;文件名為一小串隨機字符&#xff1b;在Mac系統中&#xff0c;文件位于/Users/用戶名/Library/Application /Suppor…

解鎖AI大模型:Prompt工程全面解析

解鎖AI大模型&#xff1a;Prompt工程全面解析 本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型開發 學習視頻/籽料/面試題 都在這>>Github<< 從新手到高手&#xff0c;Prompt 工程究竟是什么&#xff1f; 在當今數字化時代&#xff0c;AI …

HTTP0.9/1.0/1.1/2.0

在HTTP0.9中&#xff0c;只有GET方法&#xff0c;沒有請求頭headers&#xff0c;沒有狀態碼&#xff0c;只能用于傳輸HTML文件。到了HTTP1.0(1996)&#xff0c;HTTP1.0傳輸請求頭&#xff0c;有狀態碼&#xff0c;并且新增了POST和HEAD方法。HTTP1.0中&#xff0c;使用短連接&a…

gitee 流水線+docker-compose部署 nodejs服務+mysql+redis

文章中的方法是自己琢磨出來的&#xff0c;或許有更優解&#xff0c;共同學習&#xff0c;共同進步&#xff01; docker-compose.yml 文件配置&#xff1a; 說明&#xff1a;【配置中有個別字段冗余&#xff0c;但不影響使用】該文件推薦放在nodejs項目的根目錄中&#xff0c…

【算法】模擬專題

什么是模擬&#xff1f; 是一種通過模仿現實世界或問題場景的運行過程來求解問題的算法思想。它不依賴復雜的數學推導或邏輯優化&#xff0c;而是按照問題的實際規則、步驟或流程&#xff0c;一步步地 “復現” 過程&#xff0c;最終得到結果。 使用場景&#xff1a;當問題的邏…

【FreeRTOS】刨根問底6: 應該如何防止任務棧溢出?

【加關注&#xff0c;不迷路】一、棧溢出&#xff1a;程序世界的“越界洪水”就象一個裝水的玻璃杯&#xff08;棧空間&#xff09;&#xff0c;每次調用函數就像向水杯中倒水&#xff08;壓入保護需要恢復的數據&#xff09;。當函數嵌套調用過深&#xff08;如遞歸失控&#…

牛客周賽 Round 105

A.小苯的xor構造題目描述小紅喜歡整數 k&#xff0c;他想讓小苯構造兩個不相等的非負整數&#xff0c;使得兩數的異或和等于 k。請你幫幫小苯。#include <bits/stdc.h> using namespace std; using ll long long; void solve() {int k;cin>>k;cout<<0<&l…

《R for Data Science (2e)》免費中文翻譯 (第4章) --- Workflow: code style

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

11-verilog的RTC驅動代碼

verilog的RTC驅動代碼 1.例化parameter SLAVE_ADDR 7h51 ; // 器件地址 parameter BIT_CTRL 1b0 ; // 字地址位控制參數(16b/8b) parameter CLK_FREQ 26d50_000_000; // i2c_dri模塊的驅動時鐘頻率(CLK_FREQ) parameter I2C_FR…

【k8s、docker】Headless Service(無頭服務)

文章目錄問題背景1、什么是Headless Service1.2 為什么 Zookeeper 使用 Headless Service&#xff1f;1.2 Headless Service 的 DNS 行為1.3 驗證示例1.4 如何創建 Headless Service&#xff1f;2. zk-0.zookeeper.default.svc.cluster.local 域名是如何創建出來的&#xff1f;…

scikit-learn/sklearn學習|套索回歸Lasso解讀

【1】引言 前序學習進程中&#xff0c;對用scikit-learn表達線性回歸進行了初步解讀。 線性回歸能夠將因變量yyy表達成由自變量xxx、線性系數矩陣www和截距bbb組成的線性函數式&#xff1a; y∑i1nwi?xibwTxby\sum_{i1}^{n}w_{i}\cdot x_{i}bw^T{x}byi1∑n?wi??xi?bwTxb實…

暴雨服務器:以定制化滿足算力需求多樣化

在數字經濟與實體經濟深度融合的浪潮下&#xff0c;互聯網行業正經歷著前所未有的技術變革。大數據分析、云計算服務、人工智能算法等技術的快速演進&#xff0c;推動著企業對于高性能計算基礎設施的需求呈現指數級增長。據IDC數據顯示&#xff0c;互聯網行業已成為全球服務器采…

JavaScript字符串詳解

創建字符串&#xff1a; 1.使用字面量(推薦)&#xff1a; 這是最常用、最直接的方式。你可以用單引號 ()、雙引號 (") 或反引號 () 把文本包起來 let singleQuote 單引號; let doubleQuote "雙引號"; let templateLiteral 反引號;2.使用String 構造函數&…

Kiro Preview 應用評測

Kiro應用評測 Kiro 是一個由亞馬遜推出的 AI 驅動的智能開發環境&#xff0c;從原型到生產全程陪伴您的開發過程。它將"靈感編程"的流暢性與規范的清晰性相結合&#xff0c;幫助您更快地構建更好的軟件。 昨天收到了Kiro的試用郵件&#xff0c;收到郵件后第一時間下載…