高可用性、負載均衡的mysql集群解決方案

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

一、為什么需要mysql集群?

一個龐大的分布式系統的性能瓶頸中,最脆弱的就是連接。連接有兩個,一個是客戶端與后端的連接,另一個是后端與數據庫的連接。簡單如圖下兩個藍色框框

在客戶端與后端中可以利用類似nginx的負載均衡解決(本專題是mysql優化,后面出高并發專題再詳細講解連接1的負載均衡),而數據庫層是最脆弱的一層,一般在應用設計時在上游就需要把請求攔截掉,數據庫層只承擔“能力范圍內”的訪問請求,所以,我們通過在服務層引入隊列和緩存,讓最底層的數據庫高枕無憂。

但是,如果請求激增,還是有大量的查詢壓力到MySQL怎么辦呢?

無所不能的程序員還是要想辦法解決MySQL的瓶頸。這時候,集群出現了。在后端與數據庫中我們可以利用類似mycat的負載均衡實現mysql集群,提高mysql的總體性能。(可用組合很多,如LVS+keepalived組合、haproxy+keepalived組合)

二、基本軟件版本

操作系統:CentOS-6.6-x86_64

JDK版本:jdk1.7.0_72

HAProxy版本:haproxy-1.5.16.tar.gz

MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz

MySQL版本:mysql-5.6.26.tar.gz

三、部署環境規劃:

四、集群部署架構圖如下:

圖解說明:

HAProxy負責將請求分發到MyCat上,起到負載均衡的作用,同時HAProxy也能檢測到MyCat是否存活,HAProxy只會將請求轉發到存活的MyCat上。如果一臺MyCat服務器宕機,HAPorxy轉發請求時不會轉發到宕機的MyCat上,所以MyCat依然可用。

五、MyCat節點2的部署

MyCat主機2(edu-mycat-02,192.168.1.204)

注意:edu-mycat-01(192.168.1.203)和 edu-mycat-02(192.168.1.204) 中都要加上(或更新)主機名映射配置。

# vi /etc/hosts
192.168.1.203 edu-mycat-01
192.168.1.204 edu-mycat-02
192.168.1.205 edu-mysql-01
192.168.1.206 edu-mysql-02

六、配置MyCat狀態檢查服務(在MyCat節點主機上配置)

MyCat服務主機(edu-mycat-01、edu-mycat-02)上需要增加mycat服務的狀態檢測腳本,并開放相應的檢測端口,以提供給HAProxy對MyCat的服務狀態進行檢測判斷。可以使用xinetd來實現,通過xinetd,HAProxy可以用httpchk來檢測MyCat的存活狀態。(xinetd即extended internet daemon,xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器。經常用來管理多種輕量級Internet服務。xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。xinetd為linux系統的基礎服務)

1、如果xinetd還沒有安裝,可使用如下命令安裝:

# yum install xinetd

2、檢查/etc/xinetd.conf的末尾是否有 includedir /etc/xinetd.d ,沒有就加上

# vi /etc/xinetd.conf

3、檢查 /etc/xinetd.d 目錄是否存在,不存在剛創建

# mkdir /etc/xinetd.d/

4、增加MyCat存活狀態檢測服務配置

# touch /etc/xinetd.d/mycat_status
# vi /etc/xinetd.d/mycat_status

增加以下內容:

service mycat_status
{flags = REUSE## 使用該標記的socket_type為stream,需要設置wait為nosocket_type = stream ## 封包處理方式,Stream為TCP數據包port = 48700 ## 服務監聽端口wait = no ## 表示不需等待,即服務將以多線程的方式運行user = root ## 執行此服務進程的用戶server =/usr/local/bin/mycat_status ## 需要啟動的服務腳本log_on_failure += USERID ## 登錄失敗記錄的內容disable = no ## 要啟動服務,將此參數設置為no
}

5、添加 /usr/local/bin/mycat_status 服務腳本

# touch /usr/local/bin/mycat_status
# vi /usr/local/bin/mycat_status

增加以下內容:

#!/bin/bash
#/usr/local/bin/mycat_status.sh
# This script checks if a mycat server is healthy running on localhost.
# It will return:
# "HTTP/1.x 200 OK " (if mycat is running smoothly)
# "HTTP/1.x 503 Internal Server Error " (else)
mycat=`/usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`
if [ "$mycat" = "0" ]; then
/bin/echo -e "HTTP/1.1 200 OK "
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable "
fi

6、給新增腳本賦予可執行權限

# chmod a+x /usr/local/bin/mycat_status

7、在 /etc/services 中加入 mycat_status 服務

# vi /etc/services

在末尾加入:

mycat_status 48700/tcp # mycat_status

保存后,重啟xinetd服務

# service xinetd restart

8、驗證mycat_status服務是否成功啟動

# netstat -antup|grep 48700

能看到上圖這樣的信息,說明服務配置成功。

9、MyCat服務主機的防火墻上打開 48700端口

# vi /etc/sysconfig/iptables

增加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 48700 -j ACCEPT

保存后重啟防火墻

# service iptables restart

腳本測試:

# /usr/local/bin/mycat_status

七、HAProxy介紹(官網:http://www.haproxy.org/)

HAProxy 是一款提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機,它是免費、快速并且可靠的一種解決方案。

HAProxy目前主要有三個版本:1.4、1.5、1.6,CentOS6.6自帶的RPM包為1.5的。

HAProxy1.5版開始,支持SSL、DDoS防護等功能,可看官網說明:

version 1.5 : the most featureful version, supports SSL, IPv6, keep-alive, DDoS protection, etc...

MyCat官方推薦使用HAProxy做MyCat的高可用負載均衡代理。

八、HAProxy的安裝(192.168.1.191)

1、下載(或上傳) haproxy-1.5.16.tar.gz 到 /usr/local/src,解壓安裝

[root@edu-haproxy-01 src]# cd /usr/local/src/
#wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.16.tar.gz
[root@edu-haproxy-01 src]# tar -zxvf haproxy-1.5.16.tar.gz
[root@edu-haproxy-01 src]# cd haproxy-1.5.16

2、如需了解安裝注意點,可查看HAProxy的軟件說明

[root@edu-haproxy-01 haproxy-1.5.16]# less README

3、安裝編譯所需的依賴包

# yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

4、編譯

# make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy

## TARGET是指定內核版本,高于2.6.28的建議設置為linux2628,Linux操作系統內核版本查看命令# uname -r, ARCH指定系統架構,openssl pcre zlib 這三個包需要安裝不然不支持

5、創建安裝目錄 /usr/local/haproxy

# mkdir /usr/local/haproxy

6、執行安裝

[root@edu-haproxy-01 haproxy-1.5.16]# make install PREFIX=/usr/local/haproxy
install -d "/usr/local/haproxy/sbin"
install haproxy "/usr/local/haproxy/sbin"
install -d "/usr/local/haproxy/share/man"/man1
install -m 644 doc/haproxy.1 "/usr/local/haproxy/share/man"/man1
install -d "/usr/local/haproxy/doc/haproxy"
for x in configuration architecture haproxy-en haproxy-fr; do
install -m 644 doc/$x.txt "/usr/local/haproxy/doc/haproxy" ;
done

7、創建配置文件目錄

# mkdir -p /usr/local/haproxy/conf
# mkdir -p /etc/haproxy/

8、從配置文件模版復制配置文件,并添加配置文件軟連接

# cp /usr/local/src/haproxy-1.5.16/examples/haproxy.cfg /usr/local/haproxy/conf/
# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg

9、拷貝錯誤頁面,并添加目錄軟連接(HTTP模式選配)

# cp -r /usr/local/src/haproxy-1.5.16/examples/errorfiles /usr/local/haproxy/
# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles

10、拷貝開機啟動文件,并賦予可執行權限

# cp /usr/local/src/haproxy-1.5.16/examples/haproxy.init /etc/rc.d/init.d/haproxy
# chmod +x /etc/rc.d/init.d/haproxy

11、添加haproxy命令腳本軟連接

# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin

12、設置HAProxy開機啟動

# chkconfig --add haproxy
# chkconfig haproxy on

九、HAProxy配置MyCat負載均衡集群

HAProxy支持TCP(第四層)和HTTP(第七層)應用的代理,本節課程我們使用HAProxy來做MyCat的負載均衡代理使用的是TCP模式。在4層模式下HAProxy僅在客戶端和服務器之間轉發雙向流量。HAProxy配置簡單,擁有非常不錯的服務器健康檢查功能,當其代理的后端服務器出現故障,HAProxy會自動將該服務器摘除,故障恢復后會自動將該服務器加入進來。

1、修改haproxy.cfg 配置文件

具體參數說明可參考官方配置文檔 /usr/local/haproxy/doc/haproxy/configuration.txt

或GitHub連接:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html

# vi /usr/local/haproxy/conf/haproxy.cfg
## global配置中的參數為進程級別的參數,通常與其運行的操作系統有關globallog 127.0.0.1 local0 info ## 定義全局的syslog服務器,最多可以定義2個### local0是日志設備,對應于/etc/rsyslog.conf中的配置,默認回收info的日志級別#log 127.0.0.1 local1 infochroot /usr/share/haproxy ## 修改HAProxy的工作目錄至指定的目錄并在放棄權限之前執行### chroot() 操作,可以提升 haproxy 的安全級別group haproxy ## 同gid,不過這里為指定的用戶組名user haproxy ## 同uid,但這里使用的為用戶名daemon ## 設置haproxy后臺守護進程形式運行nbproc 1 ## 指定啟動的haproxy進程個數,### 只能用于守護進程模式的haproxy;默認為止啟動1個進程,### 一般只在單進程僅能打開少數文件描述符的場中中才使用多進程模式maxconn 4096 ## 設定每個haproxy進程所接受的最大并發連接數,### 其等同于命令行選項"-n","ulimit-n"自動計算的結果正式參照從參數設定的# pidfile /var/run/haproxy.pid ## 進程文件(默認路徑 /var/run/haproxy.pid)node edu-haproxy-01 ## 定義當前節點的名稱,用于HA場景中多haproxy進程共享同一個IP地址時description edu-haproxy-01 ## 當前實例的描述信息## defaults:用于為所有其他配置段提供默認參數,這默認配置參數可由下一個"defaults"所重新設定defaultslog global ## 繼承global中log的定義mode http ## mode:所處理的模式 (tcp:四層 , http:七層 , health:狀態檢查,只會返回OK)### tcp: 實例運行于純tcp模式,在客戶端和服務器端之間將建立一個全雙工的連接,#### 且不會對7層報文做任何類型的檢查,此為默認模式### http:實例運行于http模式,客戶端請求在轉發至后端服務器之前將被深度分析,#### 所有不與RFC模式兼容的請求都會被拒絕### health:實例運行于health模式,其對入站請求僅響應“OK”信息并關閉連接,#### 且不會記錄任何日志信息 ,此模式將用于相應外部組件的監控狀態檢測請求option httplogretries 3option redispatch ## serverId對應的服務器掛掉后,強制定向到其他健康的服務器maxconn 2000 ## 前端的最大并發連接數(默認為2000)### 其不能用于backend區段,對于大型站點來說,可以盡可能提高此值以便讓haproxy管理連接隊列,### 從而避免無法應答用戶請求。當然,此最大值不能超過“global”段中的定義。### 此外,需要留心的是,haproxy會為每個連接維持兩個緩沖,每個緩存的大小為8KB,### 再加上其他的數據,每個連接將大約占用17KB的RAM空間,這意味著經過適當優化后 ,### 有著1GB的可用RAM空間時將維護40000-50000并發連接。### 如果指定了一個過大值,極端場景中,其最終所占據的空間可能會超過當前主機的可用內存,### 這可能會帶來意想不到的結果,因此,將其設定一個可接受值放為明智絕對,其默認為2000timeout connect 5000ms ## 連接超時(默認是毫秒,單位可以設置us,ms,s,m,h,d)timeout client 50000ms ## 客戶端超時timeout server 50000ms ## 服務器超時## HAProxy的狀態信息統計頁面listen admin_statsbind :48800 ## 綁定端口stats uri /admin-status ##統計頁面stats auth admin:admin ## 設置統計頁面認證的用戶和密碼,如果要設置多個,另起一行寫入即可mode httpoption httplog ## 啟用日志記錄HTTP請求## listen: 用于定義通過關聯“前端”和“后端”一個完整的代理,通常只對TCP流量有用listen mycat_serversbind :3306 ## 綁定端口mode tcpoption tcplog ## 記錄TCP請求日志option tcpka ## 是否允許向server和client發送keepaliveoption httpchk OPTIONS * HTTP/1.1 Host: www ## 后端服務狀態檢測### 向后端服務器的48700端口(端口值在后端服務器上通過xinetd配置)發送 OPTIONS 請求### (原理請參考HTTP協議) ,HAProxy會根據返回內容來判斷后端服務是否可用.### 2xx 和 3xx 的響應碼表示健康狀態,其他響應碼或無響應表示服務器故障。balance roundrobin ## 定義負載均衡算法,可用于"defaults"、"listen"和"backend"中,默認為輪詢方式server mycat_01 192.168.1.203:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10server mycat_02 192.168.1.204:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10## 格式:server <name> <address>[:[port]] [param*]### serser 在后端聲明一個server,只能用于listen和backend區段。### <name>為此服務器指定的內部名稱,其將會出現在日志及警告信息中### <address>此服務器的IPv4地址,也支持使用可解析的主機名,但要在啟動時需要解析主機名至響應的IPV4地址### [:[port]]指定將客戶端連接請求發往此服務器時的目標端口,此為可選項### [param*]為此server設定的一系列參數,均為可選項,參數比較多,下面僅說明幾個常用的參數:#### weight:權重,默認為1,最大值為256,0表示不參與負載均衡#### backup:設定為備用服務器,僅在負載均衡場景中的其他server均不可以啟用此server#### check:啟動對此server執行監控狀態檢查,其可以借助于額外的其他參數完成更精細的設定#### inter:設定監控狀態檢查的時間間隔,單位為毫秒,默認為2000,##### 也可以使用fastinter和downinter來根據服務器端專題優化此事件延遲#### rise:設置server從離線狀態轉換至正常狀態需要檢查的次數(不設置的情況下,默認值為2)#### fall:設置server從正常狀態轉換至離線狀態需要檢查的次數(不設置的情況下,默認值為3)#### cookie:為指定server設定cookie值,此處指定的值將會在請求入站時被檢查,##### 第一次為此值挑選的server將會被后續的請求所選中,其目的在于實現持久連接的功能#### maxconn:指定此服務器接受的最大并發連接數,如果發往此服務器的連接數目高于此處指定的值,#####其將被放置于請求隊列,以等待其他連接被釋放

注意:多節點部署時node 、 description的值要做相應調整。

2、根據以上HAProxy配置文件要求做以下配置

(1)添加haproxy用戶組和用戶

# groupadd haproxy
# useradd -g haproxy haproxy

(2)創建chroot運行的路徑

# mkdir /usr/share/haproxy

(3)防火墻中打開3306端口和48800端口

# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 48800 -j ACCEPT

重啟防火墻

# service iptables restart

3、開啟rsyslog的haproxy日志記錄功能

默認情況下 haproxy是不記錄日志的,如果需要記錄日志,還需要配置系統的syslog,在linux系統中是rsyslog服務。syslog服務器可以用作一個網絡中的日志監控中心,rsyslog是一個開源工具,被廣泛用于Linux系統以通過TCP/UDP協議轉發或接收日志消息。安裝配置rsyslog服務:

# yum install rsyslog ## 沒安裝的情況下執行安裝
# vi /etc/rsyslog.conf

把 $ModLoad imudp 和 $UDPServerRun 514前面的 # 去掉

$ModLoad imudp ## 是模塊名,支持UDP協議

$UDPServerRun 514

##允許514端口接收使用UDP和TCP協議轉發過來的日志,

##而rsyslog在默認情況下,正是在514端口監聽UDP

確認 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf沒有則增加上此配置,增加后的效果:

# cd /etc/rsyslog.d/ ## rsyslog服務會來此目錄加載配置
# touch haproxy.conf ## 創建haproxy的日志配置文件
# vi /etc/rsyslog.d/haproxy.conf

增加以下內容:

local0.* /var/log/haproxy.log
&~

##如果不加上面的的"&~"配置則除了在/var/log/haproxy.log中寫入日志外,也會寫入/var/log/message文件中

配置保存后重啟rsyslog服務

# service rsyslog restart

Shutting down system logger: [ OK ]

Starting system logger: [ OK ]

(等到HAProxy服務啟動后,就能在/var/log/haproxy.log中看到日志了)

4、配置系統內核的IP包轉發功能

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

使配置生效

# sysctl -p

5、啟動HAProxy

# service haproxy start
# ps -ef | grep haproxy

haproxy 23921 1 0 23:27 ? 00:00:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid

root 23924 23179 0 23:27 pts/1 00:00:00 grep haproxy

6、使用MySQL客戶端通過HAProxy連接MyCat

E:MySQL-5.6.17-winx64in>mysql -uuser2 -proncoo.2 -h192.168.1.191 -P3306
mysql> show databases;
mysql> use rc_schema2;
mysql> show tables;
mysql> select * from edu_user;

寫數據測試

mysql> insert into edu_user (userName, pwd) values('吳水成', 'roncoo.com');

然后查看MySQL中的數據庫插入及數據同步情況。

7、登錄HAProxy的狀態信息統計頁面

http://192.168.1.191:48800/admin-status

用戶名和密碼都是admin,對應的haproxy.cfg配置片段

轉載于:https://my.oschina.net/liuyuantao/blog/1860806

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

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

相關文章

Django的model查詢操作 與 查詢性能優化

Django的model查詢操作 與 查詢性能優化 1 如何 在做ORM查詢時 查看SQl的執行情況 (1) 最底層的 django.db.connection 在 django shell 中使用 python manage.py shell>>> from django.db import connection >>> Books.objects.all() >>> connect…

887. 雞蛋掉落

887. 雞蛋掉落 給你 k 枚相同的雞蛋&#xff0c;并可以使用一棟從第 1 層到第 n 層共有 n 層樓的建筑。 已知存在樓層 f &#xff0c;滿足 0 < f < n &#xff0c;任何從 高于 f 的樓層落下的雞蛋都會碎&#xff0c;從 f 樓層或比它低的樓層落下的雞蛋都不會破。 每次…

678. 有效的括號字符串

678. 有效的括號字符串 給定一個只包含三種字符的字符串&#xff1a;&#xff08; &#xff0c;&#xff09; 和 *&#xff0c;寫一個函數來檢驗這個字符串是否為有效字符串。有效字符串具有如下規則&#xff1a; 任何左括號 ( 必須有相應的右括號 )。任何右括號 ) 必須有相應…

Faster R-CNN代碼例子

主要參考文章&#xff1a;1&#xff0c;從編程實現角度學習Faster R-CNN&#xff08;附極簡實現&#xff09; 經常是做到一半發現收斂情況不理想&#xff0c;然后又回去看看這篇文章的細節。 另外兩篇&#xff1a; 2&#xff0c;Faster R-CNN學習總結 這個主要是解釋了18,…

剝開比原看代碼09:通過dashboard創建密鑰時,前端的數據是如何傳到后端的?

2019獨角獸企業重金招聘Python工程師標準>>> 作者&#xff1a;freewind 比原項目倉庫&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我們粗略的研究…

面試題 17.24. 最大子矩陣

面試題 17.24. 最大子矩陣 給定一個正整數、負整數和 0 組成的 N M 矩陣&#xff0c;編寫代碼找出元素總和最大的子矩陣。 返回一個數組 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分別代表子矩陣左上角的行號和列號&#xff0c;r2, c2 分別代表右下角的行號和列號。若有多個…

js模擬form表單提交數據, js模擬a標簽點擊跳轉,避開使用window.open引起來的瀏覽器阻止問題...

js模擬form表單提交數據, js模擬a標簽點擊跳轉&#xff0c;避開使用window.open引起來的瀏覽器阻止問題 js模擬form表單提交數據源碼&#xff1a; /** * js模擬form表單提交 * param {object} 參數對象 * url 必填 提交地址 * methond 選填 默認post 提交方…

004. ES6之函數的擴展

2019獨角獸企業重金招聘Python工程師標準>>> 1. 函數參數的默認值 ES6 允許為函數的參數設置默認值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 參數變量…

數據結構 | 鏈表:1097 刪除重復元素

代碼提交之后一直說段錯誤。我以為是數組開的不夠大&#xff0c;但是隨著數組一點一點開大&#xff0c;還是有一個case沒有AC。最終我發現&#xff1a;是有個邊界條件沒有考慮到 void printList(const vector<Node>& a){if(!a.size()) return;FF(i,a.size()-1){print…

算法之美 : 位運算

上一小節我們用三道題了解一下面試過程中棧和隊列的常見面試題。本小節筆者將通過幾個 位運算 的題目來帶大家熟悉下常用的位運算知識。 相比于棧和隊列來講&#xff0c;筆者自身認為位運算需要掌握的知識就要多一些&#xff0c;包括對于數字的二進制表示&#xff0c;二進制的反…

447. 回旋鏢的數量

447. 回旋鏢的數量 給定平面上 n 對 互不相同 的點 points &#xff0c;其中 points[i] [xi, yi] 。回旋鏢 是由點 (i, j, k) 表示的元組 &#xff0c;其中 i 和 j 之間的距離和 i 和 k 之間的距離相等&#xff08;需要考慮元組的順序&#xff09;。 返回平面上所有回旋鏢的…

一名3年工作經驗的程序員應該具備的技能

本文轉自:https://m.imooc.com/article/details?article_id7557 前言 因為和同事有約定再加上LZ自己也喜歡做完一件事之后進行總結&#xff0c;因此有了這篇文章。這篇文章大部分內容都是面向整個程序員群體的&#xff0c;當然因為LZ本身是做Java開發的&#xff0c;因此有一部…

js 排序算法總結

1.冒泡排序 平均時間復雜度O(N2) 最好情況O(N)最壞情況O(N2) 空間復雜度O(1) function bubbleSort(arr){if(arr.length < 1)return arr;var flag 1; // 標識是否進行交換for(var i0; i < arr.length; i){if(i !0 && flag) break;for(var j0; j <…

524. 通過刪除字母匹配到字典里最長單詞

524. 通過刪除字母匹配到字典里最長單詞 給你一個字符串 s 和一個字符串數組 dictionary 作為字典&#xff0c;找出并返回字典中最長的字符串&#xff0c;該字符串可以通過刪除 s 中的某些字符得到。 如果答案不止一個&#xff0c;返回長度最長且字典序最小的字符串。如果答案…

django開發商城(提供初始數據,商城首頁及購物車)

1.爬取數據 2.json數據轉化為sql語句 3.新建輪播圖模型(模型名與sql語句對應表名相同) class Wheel(models.Model):imgmodels.CharField(max_length150)namemodels.CharField(max_length20)trackidmodels.CharField(max_length20) 4.終端打開mysql,執行插入語句 5.在首頁進行展…

多語言版希爾排序

2019獨角獸企業重金招聘Python工程師標準>>> 簡介 希爾排序(Shells Sort)是插入排序的一種又稱“縮小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因D.L…

UML 中extend和include的區別

在UML用例圖中有兩種關系——包含和擴展&#xff0c;容易混淆&#xff0c;下面通過一張表來區別一下這兩種關系。 轉載于:https://www.cnblogs.com/yonyong/p/8555547.html

hdu 6301 Distinct Values(貪心)題解

題意&#xff1a;長為n的串&#xff0c;給你m個區間&#xff0c;這些區間內元素不重復&#xff0c;問這樣的串字典序最小為&#xff1f; 思路&#xff1a;用set保存當前能插入的元素&#xff0c;這樣就能直接插入最小元素了。對操作按l排序&#xff0c;因為排過的不用排&#x…

瀏覽器兼容CSS漸進增強 VS 優雅降級如何選擇

由于低級瀏覽器不支持 CSS3&#xff0c;但是 CSS3 特效太優秀不忍放棄&#xff0c;所以在高級瀏覽器中使用CSS3&#xff0c;而在低級瀏覽器只保證最基本的功能。二者的目的都是關注不同瀏覽器下的不同體驗&#xff0c;但是它們側重點不同&#xff0c;所以導致了工作流程上的不同…

細數sass安裝中遇到的坑

前言&#xff1a; 前兩天打算清理電腦的時候&#xff0c;遇到了一點特殊的問題&#xff0c;打算重裝一些東西&#xff0c;其中就有我一直用的順手的SASS預編譯工具。 但是在重裝的時候&#xff0c;我發現我居然不會用了&#xff1f;&#xff1f;&#xff1f; 靠&#xff0c;要不…