11_企業架構web服務器文件及時同步

企業架構web服務器的文件及時同步

學習目標和內容

1、能夠理解為何要服務器間文件同步

2、能夠簡單描述實現文件同步的幾種方式

3、能夠實現服務器文件實時同步的案例

一、同步文件介紹

1、服務器文件同步的必要性

根據業務發展需求,業務網站架構已經發展到以上模式。實現了線上服務的提供,可以給用戶提供穩定的整個的web服務。但是,在最近的操作中,也發現了一些問題。

①當業務代碼發生改變上傳到web服務器時,因為架構已經不是單臺服務器提供服務器,而是由多臺web服務器提供服務,業務代碼需要同時上傳到多臺web服務器,在操作上帶來了很多不便。

故需要解決以上問題, 就需要web服務器中的業務代碼能夠及時同步,保證業務代碼的一致性。

業務集群:

線上 對外提供服務的 10臺 提供給用戶對外服務 存儲(分布式存儲 解決服務器單例硬盤資源不夠的情況)

線下 代碼發布(CI CD git、jenkins、gitlab)灰度發布,監控(主機、服務 zabbix),日志收集分析(ELK elasticsearch(elasticsearch-head) logstash kibana kafka消息隊列)

2、同步文件的幾種方式

server01 web1服務器 /usr/local/nginx/html/tp5shop

server03 web2服務器 /usr/local/nginx/html/tp5shop

①scp

scp是 secure copy的縮寫, scp是linux系統下基于ssh登陸進行安全的遠程文件拷貝命令 ==全量同步==

問題:全部復制過去 比較慢 效率低一些 scp不能夠遠程刪除

②rsync

rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法==只傳送兩個文件的不同部分==,而不是每次都整份傳送,因此速度相當快 ==增量同步==

問題:當文件變動,不能夠實時同步

③rsync+sersync

inotify-tools和sersync屬于同類

sersync是基于inotify+rsync的大量文件的多服務器自動同步程序

使用==Linux 2.6 內核的 inotify 監控 Linux 文件系統事件==,被監聽目錄下如果有文件發生修改,sersync 將通過內核自動捕獲到事件,并將該文件利用 rsync 同步到多臺遠程服務器。sersync 僅僅同步發生增、刪、改事件的單個文件或目錄,不像rsync鏡像同步那樣需要比對雙方服務器整個目錄下數千萬的文件,并且支持多線程同步,因此效率非常高

sersync主要用于服務器同步,web鏡像等功能。基于boost1.43.0,inotify api,rsync command.開發

特點:

1、sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重復的文件操作進行過濾(詳細見附錄,這個過濾腳本程序沒有實現),所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。

相比較上面兩個項目,sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的

2、二進制文件,配合bin目錄下的xml配置文件直接使用即可。

另外本項目相比較其他腳本開源項目,使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器實時保持同步狀態。

3、本項目有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則按設定時長對同步失敗的文件重新同步。

4、本項目自帶crontab功能,只需在xml配置文件中開啟,即可按您的要求,隔一段時間整體同步一次。無需再額外配置crontab功能。

5、本項目socket與http插件擴展,滿足您二次開發的需要。

二、同步文件案例

源服務器 web1 server01 原文件所在服務器 192.168.19.102

目標服務器 web2 server03 需要復制到的服務器 192.168.19.101

1、scp

語法:scp 本地文件路徑 用戶名@遠程IP:遠程存儲路徑

由于需要遠程登錄,故需要輸入密碼不是很方便,添加機器的公鑰到允許列表中

①生成公鑰(源服務器)

shell > ssh-keygen

②添加公鑰到允許文件(源服務器)

web2允許web1登錄,不需要輸入密碼

③測試遠程登錄

④測試修改業務代碼

源服務器操作

⑤通過scp推送同步

源服務器操作

shell > scp -r /usr/local/nginx/html/tp5shop root@192.168.17.102:/usr/local/nginx/html

可以把以上推送命令,寫入到腳本中,業務代碼變化之后,直接執行腳本就可以

2、rsync

①web1文件變動

②在web1執行推送

shell > rsync -av /usr/local/nginx/html/tp5shop root@192.168.17.102:/usr/local/nginx/html

③在web2上查看

--delete

delete extraneous files from destination dirs

從目的地目錄刪除無關文件

以上操作,可以增量同步,刪除已經無關的文件。

問題:不能夠文件變動就同步,想折中的版本通過計劃任務(crontab),crontab默認一分鐘

①添加到腳本中

注意執行權限

②添加計劃任務

③查看計劃任務日志

Tip:更新時間間隔頻繁的方式

①定時腳本實現

②啟動腳本

③查看日志

3、rsync+sersync

實現方式:

源服務器 安裝sersync 監控文件(inotify)的變動 調用rsync傳輸數據給目標服務器

目標服務器 啟動rsync的服務

###3.1、目標服務器配置

####配置rsync服務

1、安裝rsync
yum -y install rsync
2、配置rsync
vim /etc/rsyncd.conf

配置文件內容

uid = root
gid = root
use chroot = no
#設置允許登錄的ip,這里沒有限制IP
hosts allow=*
#設置最大連接數
max connections = 3
#設置啟動rsync服務器的文件
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#同步模塊
[tp5shop]
#需要的文件及其文件夾路徑
path = /usr/local/nginx/html/tp5shop
#備注
comment = tp5shop
#只讀關閉
read only = false
3、以守護進程方式啟動rsync
/usr/bin/rsync --daemon

###3.2、源服務器配置

shell > mv sersync2.5.4_64bit_binary_stable_final.tar.gz /usr/local/
shell > cd /usr/local/
shell > tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
shell > mv GNU-Linux-x86 sersync

配置serync示例文件說明

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host> #保留字段,默認即可
<debug start="false"/> #是否開啟調試模式,默認false即可
<fileSystem xfs="true"/> #是否開啟支持xfs文件系統,Centos7默認都是xfs的了,所以建議true開啟
<filter start="false"> #是否開啟過濾模式,根據需求開啟,例:過濾以.php結尾的文件(.*)\.php
<exclude expression="(.*)\.svn"></exclude> #過濾以.svn結尾的文件
<exclude expression="(.*)\.gz"></exclude> #過濾以.gz結尾的文件
<exclude expression="^info/*"></exclude> #過濾監控目錄下的info路徑
<exclude expression="^static/*"></exclude> #過濾監控目錄下的static路徑
<exclude expression="wwwroot/blogwhsir/*"></exclude> #過濾wwwroot/blogwhsir/目錄下所有文件
</filter>
<inotify> #inotify監控事件
<delete start="true"/> #如果不開啟此項,在刪除監控目錄下的文件時,目標服務器的文件則不會同時刪除,根據需求開啟
<createFolder start="true"/> #不開啟不能監控子目錄,建議true
<createFile start="false"/> #關閉提高通訊性能,默認就好
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify><sersync>
<localpath watch="/opt/tongbu"> #指定要監控的本地目錄
<remote ip="127.0.0.1" name="tongbu1"/> #指定要同步的目標服務器的IP地址,及目標服務器rsync的[模塊]
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync> #配置rsync
<commonParams params="-artuz"/> #rsync的參數
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/> #是否開啟rsync的認證模式,需要配置users及passwordfile,根據情況開啟(如果開啟,注意密碼文件權限一定要是600)
<userDefinedPort start="false" port="874"/><!-- port=874 --> #遠程目標服務器的端口不是默認端口時使用
<timeout start="false" time="100"/><!-- timeout=100 --> #是否開啟rsync的超時時間
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> #目標服務器傳輸失敗時會重新傳輸,再次失敗會寫入rsync_fail_log中,每隔一段時間(timeToExecute)執行腳本再次傳輸
<crontab start="false" schedule="600"><!--600mins--> #對監控目錄與目標服務器每隔一段時間進行一次整體同步,默認600分鐘,根據個人情況是否開啟
<crontabfilter start="false"> #如果之前開啟了文件過濾,這里也要設置過濾
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync><plugin name="command"> #下面就是插件的設置(不做過多說明)
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin><plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="https://blog.whsir.com"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>

修改使用配置文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="false"/><filter start="false"><exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="false"/><modify start="false"/></inotify><sersync><!--1、監控本地目錄--><localpath watch="/usr/local/nginx/html/tp5shop"><!--2、目標服務器IP,同步到的服務器 name為目標服務器rsyncd.conf里配置的模塊名稱--><remote ip="192.168.17.101" name="tp5shop"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="false" users="root" passwordfile="/etc/rsync.pas"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync><plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/>	<!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\.php"/><include expression="(.*)\.sh"/></filter></plugin><plugin name="socket"><localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath></plugin><plugin name="refreshCDN"><localpath watch="/data0/htdocs/cms.xoyo.com/site/"><cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/><sendurl base="http://pic.xoyo.com/cms"/><regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/></localpath></plugin>
</head>

啟動sersync服務

/usr/local/sersync/sersync2 -n 10 -d -o /usr/local/sersync/confxml.xml

-n 啟用線程數量 -d daemon方式啟動 -o 指定配置文件

過濾不需要同步的文件

第6行開始
<filter start="true"><exclude expression="(.*)\.cfg"></exclude><!--<exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude>-->
</filter>

三、企業業務架構回顧

1、企業LNMP單點部署

單點服務器滿足基本業務需求,用戶可以通過線上服務訪問網站業務

2、企業數據庫服務器單點部署

①多個業務軟件,同時在一個服務器,會有資源爭搶的現象

②數據庫服務器,數據是最重要的,需要單獨進行管理

數據庫服務器進行嚴格的權限要求:

特定的用戶操作特定庫 一個業務一個用戶

3、企業架構雙點熱備單活HA

HA 高可用 多個(起碼兩個以上)服務器節點,如果單點服務器出現問題,就由其他服務器進行接管服務。整個業務服務,是高度可用的。業務不受影響

VIP 虛擬IP 多臺服務器,同時爭搶一個IP

vrrp 網卡mac地址 => IP 確定VIP是否被綁定

使用keepalived

主master備backup 默認主優先

雙備 優先級 可以設置不爭搶

多備模式 權重

vip切換 腦裂(裂腦) 通信不順暢

①防火墻禁用發包

②禁止發廣播(組播) 可以使用單播 unicast

4、企業架構HA、LB

單點web服務器,已經不能夠滿足業務流量需求,需要增加服務器同時進行提供業務服務

SLB server load blance 把業務流量[平均]分配(分發)到多臺服務器

二層 mac地址

三層 ip地址

四層 ip+port

七層 http url

lvs 四層以下 nat 四層和三層 、二層

NAT 跨網段轉發 CIP192.168.39.72

DS兩個網段(192.168.39.73,192.168.17.104) RS (192.168.17.101 ,103)

DR DS和RS都綁定VIP ,默認訪問時,RS不要響應通過VIP訪問的請求,由DS響應,DS分發到RS上,RS找VIP發現是自己,返回數據給CIP即可。 請求通過DS,返回直接通過RS給CS 。DS和RS在同一個網段 二層修改了mac地址

nginx 七層 proxy_pass轉發 請求 到 upstream 分發

四層

haproxy 四層 model tcp 主動監測后端服務是否可用

七層 model http

瀏覽器(app)=>web服務器=>后端服務(php)=> 數據庫

5、企業架構MySQL數據服務器主從復制

主從類型: M-S M-S-S M S S S M-M

一主多從的使用最多

延時復制 從同步主的延遲時間,作為誤操作的一個備份

半同步 默認主從是異步,為了保證數據實時一致性,主確認從已經寫入relay-log,才完成寫入,返回用戶,有一個等待時間

mysql的安全權限控制

grant 權限 on 數據庫.數據表 to 用戶名@主機 idetified by ‘密碼’;

revoke

日志(錯誤、二進制、中繼、慢查詢[mysql優化] ) 備份

二進制日志開啟: bin-log = 存儲路徑和名稱 server-id 服務器唯一識別標識

備份:tar 打包 mysqldump xtrabackup innobackupex、percona

備份的影響:冷備份 溫備份 熱備份

備份的類型:物理(copy) 邏輯(sql導出再執行)

備份的粒度:全量 增量

主從復制:bin-log

slave 通過讀取master的bin-log 寫入relay-log中,再進行重放操作,復制同步數據。

默認異步線程的

master auto.cnf

①開啟bin-log server-id 1

②授權slave replication slave 權限

③mysql > show master status;

slave

①配server-id 2

②配置slave服務

mysql > stop slave

mysql > change master masterhost ,masteruser · ········

日志文件名稱 logfile 日志記錄位置 position

mysql > start slave;

mysql > show slave status\G;

兩個yes,一個yes就看看下面的報錯信息,解決

6、企業架構讀寫分離

M-S S不能寫

S 用來讀

M 又讀又寫 來回切換模式,效率不高

M寫 S讀 讀寫分離 S down 為了業務可用性 M可以提供讀服務

實現讀寫分離的兩種方式:

①業務代碼分離

②中間件(mycat)

mycat java編寫

jdk jre

jdk :openjdk oraclejdk 授權方式不一樣 java8 之后99.99%

mycat兩種:

雙寫 writeHost writeHost M宕機 S不影響,可以讀 也可以寫 業務上S不讓寫 在S的配置上寫read-only

單寫單讀 writeHost readHost M宕機 S不可用

mycat 客戶端口 8066

管理端口 9066 mysql > show @@heartbeat;

7、企業架構緩存memcached

①LB的業務模式下,session出現不能夠訪問的情況

ip_hash session入庫 memcached

②高速內存緩存軟件 緩存了首頁的category欄目數據

memcached

nosql key=>value

內存存儲數據 要注意數據的備份

memcached redis key=>value store

mongodb doucument store

默認允許在11211端口

./memcached -uroot -d -p 11211 -m 內存大小 -M 禁用LRU機制

存儲緩存機制

①懶惰機制 當key過期后,不會直接刪除 當被使用時,確認過期,才會刪除

節省系統的資源

②LRU 如果一個key存儲的時候,發現存儲空間不足。先刪除已經過期的key,刪了已經過期key還是不能夠存儲。會刪除最近最少使用的key。刪除這個key,存儲新的key。

這個也是緩存的一種理想模式。不用的話,就沒有必須占用內存空間

-M 可以禁用LRU

8、企業架構緩存redis

redis比memcache

①數據類型豐富

string 緩存字符串 計算器 incr

list 可以進行數據的雙向操作

set 交集 并集 差集 sns 好友圈

zset 排序 score 權排序 score從大到小 或者從小到大 控制排序也就是控制score的大小

hash key:(field:value)

②數據持久化 snappshotting 快照 dump.rdb save

save 900 1

save 300 10

save 60 10000

aof append only file 文件追加寫

每次 每秒 根據系統資源情況 閑時

③redis 主從模式

④redis默認存儲string的value 512BM memcached 1M

⑤redis 單核 memcached 多核

redis hash 效果高 壓縮高 返回數據快

memcached 超過100k以上,效果好一些

一般使用,緩存都可以 它們的每秒并發都可以達到幾w級別

商城業務使用redis:

set記錄登錄的用戶數,統計活躍用戶及其數量

master-slave

master bind 127.0.0.1 外網訪問網卡

requirepass 密碼

slave 配置master slave of ~~~~

masterauth ~~~~

9、企業架構nosql之mongodb

mongodb用來進行訪問日志記錄

mongodb特點:

①存儲 PB bson結構 存儲靈活

②效率 讀寫

③結構 collection 集合 document 文檔 field 域

CURD

use devops;

db.student.insert({name:1})

db.student.find({name:1},{age:1,_id:0})

db.student.remove()

db.student.update({查詢條件},{‘$set’:{}})

基礎知識點技術:

ssh、sftp、gcc、make、cmake、nginx(tengine、openresty)

server01-server10

server01 web1 nginx php-fpm keepalived sersync

server02 master MySQL mysql

server03 web2 nginx php-fpm keepalived rsync

server04 LB nginx|haproxy|lvs keepalived

server05 backupLB nginx|haproxy|lvs keepalived

server06 slave MySQL mysql

server07 mycat mycat java

server08 master cache memcached redis

server09 slave cache redis

server10 mongodb

四、模擬壓力測試

1、web測試

ab 是httpd apache內置的一個壓力測試工具,可以通過模擬并發的方式,檢測出請求所用時間,每秒吞吐量。

ab的安裝,可以源碼編譯的httpd中在/usr/local/httpd/bin里

rpm安裝需要yum -y install httpd_tools

ab --help 查看相關參數

常見使用語法:

ab -c 并發次數[同時請求數] -n 總的請求數 訪問URI路徑

靜態頁面(html)

單機測試

負載均衡

動態頁面(php)

單機測試

負載均衡

動態頁面使用負載均衡提供了并發量,實際是有多個PHP-FPM可使用了。

單機優化,cpu和內存資源沒有完全使用到。70%-90%

單機多實例php測試

sysbench mysql壓力測試工具

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

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

相關文章

Linux文件結構與文件權限

基于centos了解Linux文件結構 了解一下文件類型 Linux采用的一切皆文件的思想&#xff0c;將硬件設備、軟件等所有數據信息都以文件的形式呈現在用戶面前&#xff0c;這就使得我們對計算機的管理更加方便。所以本篇文章會對Linux操作系統的文件結構和文件權限進行講解。 首先…

單元測試Nunit的幾種斷言

Nunit提供了一些輔助函數用于確定好某個被測試函數是否正常工作。通常把這些函數稱為斷言 斷言是單元測試最基本的組成部分。因此&#xff0c;NUnit程序庫以Assert類的靜態方法的形式提供了不同形式的多種斷言 1. Assert.AreEqual&#xff1a;比較兩個值是否相等。用于比較數…

Qt生成動態鏈接庫并使用動態鏈接庫

項目結構 整個工程由一個主程序構成和一個模塊構成(dll)。整個工程的結構目錄如下 Define.priMyProject.proMyProject.pro.user ---bin ---MainProgrammain.cppMainProgram.proMainProgram.pro.userwidget.cppwidget.hwidget.ui ---MathDllMathDll.proMathDll.pro.userMyMath.…

Axios 攔截器實戰教程:簡單易懂

Axios 提供了一種稱為 “攔截器&#xff08;interceptors&#xff09;” 的功能&#xff0c;使我們能夠在請求或響應被發送或處理之前對它們進行全局處理。攔截器為我們提供了一種簡潔而強大的方式來轉換請求和響應、進行錯誤處理、添加認證信息等操作。在本文中&#xff0c;我…

Matlab 點云收縮L1中值(Weiszfeld算法)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 對于之前的加權均值收縮方式,它存在一個很大的缺點,即容易受到噪聲的影響,因此這里我們采用另一種統計學方案:L1中值。其形式如下所示: 其中 x i x_i

MongoDB的條件操作符

本文主要介紹MongoDB的條件操作符。 目錄 MongoDB條件操作符1.比較操作符2.邏輯操作符3.元素操作符4.數組操作符5.文本搜索操作符 MongoDB條件操作符 MongoDB的條件操作符主要分為比較操作符、邏輯操作符、元素操作符、數組操作符、文本搜索操作符等幾種類型。 以下是這些操作…

拷貝實體類

文章目錄 方式一 &#xff1a; 方式二&#xff1a;&#xff08;不常用&#xff09; 方式一 &#xff1a; 將左邊的實體拷貝到右邊的實體中 import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(memberAddress, resp);將右邊的實體拷貝到左邊的實體中 imp…

對String類的操作 (超細節+演示)

[本節目標] 1.認識String類 2.了解String類的基本用法 3.熟練掌握String類的常見操作 4.認識字符串常量池 5.認識StringBuffer和StringBuilder 1.String類的重要性 在C語言中已經涉及到字符串了&#xff0c;但是在C語言中要表示字符串只能使用字符數組或者字符指針&…

高速風筒安規方案中的安規測試及安規電路特性介紹--【其利天下技術】

作為家用電子產品&#xff0c;高速吹風筒做安規測試&#xff0c;過安規要求是必須保證的&#xff0c;一般電路要過安規測試&#xff0c;那么安規測試的目的是什么呢&#xff1f; 安規測試字面意思是安全規范測試&#xff0c;主要強調對使用人員的安全保護&#xff0c;也就是我…

P7 Linux C三種終止進程的方法

前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《C_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《Linux C應用編程&#xff08;概念類&#xff09;_ChenPi的博客-CSDN博客》??? &#x1f6f8;推薦專欄3: ??????《 鏈表_Chen…

什么是MyBatis、什么是MyBatis-Plus、簡單詳細上手案例

什么是MyBatis MyBatis是一個開源的Java持久層框架&#xff0c;用于簡化與關系型數據庫的交互。它通過將SQL語句與Java代碼進行分離&#xff0c;提供了一種優雅的方式來處理數據庫操作。 MyBatis的核心思想是將SQL語句與Java方法進行映射&#xff0c;使得開發人員可以通過配置…

【工具類】Word 轉 PDF

商業版權問題 使用破解版-aspose-words-19.5jdk.jar https://blog.csdn.net/aley/article/details/127914145 Document wordDoc new Document(wordFileInputStream); wordDoc.save(pdfFile, new PdfSaveOptions());中文亂碼問題 在linux中使用會造成中文亂碼問題 解決方案…

C語言數據結構-基于單鏈表實現通訊錄

文章目錄 1 基礎要求2 通訊錄功能2.1 引入單鏈表的文件2.2 定義聯系人數據結構2.3 打開通訊錄2.4 保存數據后銷毀通訊錄2.5 添加聯系人2.6 刪除聯系人2.7 修改聯系人2.8 查找聯系人2.9 查看通訊錄 3 通訊錄代碼展示3.1 SeqList_copy.h3.2 SeqList_copy.c3.3 Contact.h3.4 Conta…

模塊化機房在大數據時代的角色:高效、可擴展的數據存儲和處理平臺

隨著大數據時代的到來&#xff0c;數據已經成為企業競爭的核心資源。然而&#xff0c;傳統的數據中心已經無法滿足現代業務的需求&#xff0c;尤其是在數據存儲和處理方面。模塊化機房作為一種新型的數據中心建設模式&#xff0c;具有高效、可擴展等優勢&#xff0c;逐漸成為大…

PyCharm編輯器結合Black插件,輕松實現Python代碼格式化

大家好&#xff0c;使用Black對Python代碼進行格式化&#xff0c;可使代碼看起來更美觀。但是&#xff0c;隨著項目規模不斷變大&#xff0c;對每個文件運行Black變得很繁瑣。本文就來介紹在PyCharm中實現這一目標的方法。 1.安裝Black 首先&#xff0c;在虛擬環境中安裝Blac…

二叉樹的鋸齒形層序遍歷[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你二叉樹的根節點 root &#xff0c;返回其節點值的 鋸齒形層序遍歷 。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 示例 1&#xff1a; 輸…

認識線程和創建線程

目錄 1.認識多線程 1.1線程的概念 1.2進程和線程 1.2.1進程和線程用圖描述關系 1.2.2進程和線程的區別 1.3Java 的線程和操作系統線程的關系 2.創建線程 2.1繼承 Thread 類 2.2實現 Runnable 接口 2.3匿名內部類創建 Thread 子類對象 2.4匿名內部類創建 Runnable 子類對…

使用貝葉斯網絡檢測因果關系,提升模型效果更科學(附Python代碼)

雖然機器學習技術可以實現良好的性能&#xff0c;但提取與目標變量的因果關系并不直觀。換句話說&#xff0c;就是&#xff1a;哪些變量對目標變量有直接的因果影響&#xff1f; 機器學習的一個分支是貝葉斯概率圖模型(Bayesian probabilistic graphical models)&#xff0c;也…

【Com通信】Com模塊詳細介紹

目錄 前言 1. Com模塊功能介紹 2.關鍵概念理解 3.功能詳細設計 3.1 Introduction 3.2 General Functionality 3.2.1 AUTOSAR COM basis 3.2.2 Signal Values 3.2.3 Endianness Conversion and Sign Extension 3.2.4 Filtering 3.2.5 Signal Gateway 3.3 Normal Ope…

2.2 網絡多線程(私聊、群發、發送文件、推送新聞、離線留言)

文章目錄 一、私聊1.1 分析1.2 客戶端1.2.1 MessageClientService 私聊類1.2.2 ClientConnectServerThread 線程類 1.3 服務端1.3.1 ServerConnectClientThread 線程類 1.4功能演示 二、群發消息2.1 分析2.2 客戶端2.2.1 MessageClientService類2.2.2 ClientConnectServerThrea…