Linux下防御DDOS攻擊的操作梳理

?

DDOS的全稱是Distributed Denial of Service,即"分布式拒絕服務攻擊",是指擊者利用大量“肉雞”對攻擊目標發動大量的正常或非正常請求、耗盡目標主機資源或網絡資源,從而使被攻擊的主機不能為合法用戶提供服務。

DDOS攻擊的本質是:
利用木桶原理,尋找利用系統應用的瓶頸;阻塞和耗盡;當前問題:用戶的帶寬小于攻擊的規模,噪聲訪問帶寬成為木桶的短板。

可以參考下面的例子理解下DDOS攻擊。
1)某飯店可以容納100人同時就餐,某日有個商家惡意競爭,雇傭了200人來這個飯店坐著不吃不喝,導致飯店滿滿當當無法正常營業。(DDOS攻擊成功)
2)老板當即大怒,派人把不吃不喝影響正常營業的人全都轟了出去,且不再讓他們進來搗亂,飯店恢復了正常營業。(添加規則和黑名單進行DDOS防御,防御成功)
3)主動攻擊的商家心存不滿,這次請了五千人逐批次來搗亂,導致該飯店再次無法正常營業。(增加DDOS流量,改變攻擊方式)
4)飯店把那些搗亂的人轟出去只后,另一批接踵而來。此時老板將飯店營業規模擴大,該飯店可同時容納1萬人就餐,5000人同時來搗亂飯店營業也不會受到影響。(增加硬防與其抗衡)

DDOS攻擊只不過是一個概稱,其下有各種攻擊方式,比如:"CC攻擊、SYN攻擊、NTP攻擊、TCP攻擊、DNS攻擊等等",現在DDOS發展變得越來越可怕,NTP服務放大攻擊漸漸成為主流了,這意味著可以將每秒的攻擊流量放大幾百倍,比如每秒1G的SYN碎片攻擊換成NTP放大攻擊,就成為了200G或者更多。
--------------------------------------------------順便介紹下NTP服務放大攻擊--------------------------------------------------------

什么事NTP服務?
網絡時間協議NTP(Network Time Protocol)是用于互聯網中時間同步的標準互聯網協議。NTP服務器通過NTP服務向網絡上的計算機或其他設備提供標準的授時服務,以保證這些服務系統的時鐘能夠同步。通常NTP服務使用UDP 123端口提供標準服務。什么是NTP服務放大攻擊?
標準NTP 服務提供了一個 monlist查詢功能,也被稱為MON_GETLIST,該功能主要用于監控 NTP 服務器的服務狀況,當用戶端向NTP服務提交monlist查詢時,NTP 服務器會向查詢端返回與NTP 服務器進行過時間同步的最后 600 個客戶端的 IP,響應包按照每 6 個 IP 進行分割,最多有 100 個響應包。由于NTP服務使用UDP協議,攻擊者可以偽造源發地址向NTP服務進行monlist查詢,這將導致NTP服務器向被偽造的目標發送大量的UDP數據包,理論上這種惡意導向的攻擊流量可以放大到偽造查詢流量的100倍。NTP是用UDP傳輸的,所以可以偽造源地址。NTP協議中有一類查詢指令,用短小的指令即可令服務器返回很長的信息,放大攻擊就是基于這類指令的。
比如:
小明以吳一帆的名義問李雷"我們班有哪些人?" ,李雷就回答吳一帆說"有誰誰誰和誰誰誰……"”"(幾百字),那么小明就以8個字的成本,令吳一帆收到了幾百字的信息,所以叫做放大攻擊。
(也就是說:對方服務器是個話嘮,你以小明的身份問他一個問題,他回答小明一千句,結果小明崩潰了)網絡上一般NTP服務器都有很大的帶寬,攻擊者可能只需要1Mbps的上傳帶寬欺騙NTP服務器,即可給目標服務器帶來幾百上千Mbps的攻擊流量,達到借刀殺人的效果。
所以現在新的ntpd已經可以通過配置文件,關掉除時間同步以外的查詢功能。而時間同步的查詢和返回大小相同(沒記錯的話),所以沒辦法用作放大攻擊。如何查看是否遭受NTP放大攻擊?
如果網絡上檢測到大流量的UDP 123端口的數據,就可以確認正在遭受此類攻擊。如何防范NTP放大攻擊?
1)升級服務程序版本
將系統中的NTP服務升級到 ntpd 4.2.7p26 或之后的版本,因為 ntpd 4.2.7p26 版本后,服務默認是關閉monlist查詢功能的。2)關閉服務的monlist查詢功能:
首先查詢問題主機的REQ_MON_GETLIST和REQ_MON_GETLIST_1請求是否可用。具體操作方法:# ntpq -c rv<localhost/remotehost># ntpdc -c sysinfo<localhost/remotehost># ntpdc -n -c monlist<localhost/remotehost>如果上述功能可用,可嘗試通過修改ntp.conf文件解決問題,具體操作建議是在上述配置文件中增加下面的配置:IPV4: restrict default kod nomodify notrap nopeer noqueryIPv6: restrict -6 default kod nomodify notrap nopeer noquery允許發起時間同步的IP,與本服務器進行時間同步,但是不允許修改ntp服務信息,也不允許查詢服務器的狀態信息(如monlist)*/另外,還可以配置限制訪問命令,如:restrict default noquery    #允許普通的請求者進行時間同步,但是不允許查詢ntp服務信息*/修改并保存配置文件之后,請重啟ntpd服務。

-----------------------------------------------------------------------------------------------------------------------------------
近年來,一些重大的DDOS攻擊案例:

1)2000年2月,包括雅虎、CNN、亞馬遜、eBay、http://Buy.com、ZDNet,以及E*Trade和Datek等網站均遭受到了DDOS攻擊,并致使部分網站癱瘓。
2)2007年5月,愛沙尼亞三周內遭遇三輪DDOS攻擊,總統府、議會、幾乎全部政府部門、主要政黨、主要媒體和2家大銀行和通訊公司的網站均陷入癱瘓,為此北約頂級反網絡恐怖主義專家前往該國救援。
3)2009年519斷網事件導致南方六省運營商服務器全部崩潰,電信在南方六省的網絡基本癱瘓。2009年7月,韓國主要網站三天內遭遇三輪猛烈的DDOS攻擊,韓國宣布提前成立網絡司令部。
4)比較著名的案例還有有:全球三大游戲平臺:暴雪戰網、Valve Steam和EA Origin遭到大規模DDoS攻擊,致使大批玩家無法登錄與進行游戲。隨后名為DERP的黑客組織聲稱對此次大規模的DDoS攻擊行動負責。

對于DDOS攻擊的簡單防護措施: ?

1)關閉不必要的服務和端口;
2)限制同一時間內打開的syn半連接數目;
3)縮短syn半連接的超時時間;
4)及時安裝系統補丁;
5)禁止對主機非開放服務的訪問;
6)啟用防火墻防DDOS屬性。硬件防火墻價格比較昂貴,可以考慮利用Linux系統本身提供的防火墻功能來防御。
7)另外也可以安裝相應的防護軟件,這里強烈建議安裝安全狗軟件,防護性能不錯,并且免費。
8)購買DDOS防御產品,比如阿里云盾的DDOS防御中的高防IP,這個使用起來,效果也很給力。

接下來說下Linux系統下預防DDOS攻擊的操作:

Linux服務器在運行過程中可能會受到黑客攻擊,常見的攻擊方式有SYN,DDOS等。
通過更換IP,查找被攻擊的站點可能避開攻擊,但是中斷服務的時間比較長。比較徹底的解決方法是添置硬件防火墻,但是硬件防火墻價格比較昂貴。可以考慮利用Linux系統本身提供的防火墻功能來防御。
SYN攻擊是利用TCP/IP協議3次握手的原理,發送大量的建立連接的網絡包,但不實際建立連接,最終導致被攻擊服務器的網絡隊列被占滿,無法被正常用戶訪問。
Linux內核提供了若干SYN相關的配置,加大SYN隊列長度可以容納更多等待連接的網絡連接數,打開SYN Cookie功能可以阻止部分SYN攻擊,降低重試次數也有一定效果。
而DDOS則是通過使網絡過載來干擾甚至阻斷正常的網絡通訊,通過向服務器提交大量請求,使服務器超負荷,阻斷某一用戶訪問服務器阻斷某服務與特定系統或個人的通訊。可以通過配置防火墻或者使用腳本工具來防范DDOS攻擊;

1)優化幾個sysctl內核參數:

[root@test3-237 ~]# vim /etc/sysctl.conf 
......
net.ipv4.tcp_max_syn_backlog = 4096      #表示SYN隊列的長度,加大隊列長度可以容納更多等待連接的網絡連接數
net.ipv4.tcp_syncookies = 1              #表示開啟SYN Cookies功能。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉,1表示打開;
net.ipv4.tcp_synack_retries = 2          #下面這兩行表示定義SYN重試次數
net.ipv4.tcp_syn_retries = 2       #提高TCP連接能力 
net.ipv4.tcp_rmem = 32768
net.ipv4.tcp_wmem = 32768 
net.ipv4.tcp_sack = 0     #打開tcp_sack功能,1表示"關閉",0表示"打開"......[root@test3-237 ~]# sysctl -p    #使上面配置生效

2)利用linux系統自帶iptables防火墻進行預防:

先查看服務器上連接web端口(比如80端口)的哪個ip是最多的,如果發現可疑ip,就果斷將其斷開與服務器連接查看80端口的連接情況
[root@test3-237 ~]# netstat -an | grep ":80" | grep ESTABLISHED 下面的命令表示獲取服務器上ESTABLISHED連接數最多的前10個ip,排除了內部ip段192.168|127.0開頭的。
[root@test3-237 ~]# /bin/netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -10|grep -v -E '192.168|127.0'4001 140.205.140.2052388 124.65.197.1541807 111.205.224.1518 10.51.58.16.......將上面140.205.140.205、124.65.197.154、111.205.224.15的這三個ip的包丟棄
[root@test3-237 ~]# iptables -A INPUT -s 140.205.140.205 -p tcp -j DROP 
[root@test3-237 ~]# iptables -A INPUT -s 124.65.197.154 -p tcp -j DROP 
[root@test3-237 ~]# iptables -A INPUT -s 111.205.224.15 -p tcp -j DROP 
[root@test3-237 ~]# service iptables save
[root@test3-237 ~]# service iptables restart不過上面的方法對于偽造源IP地址的SYN FLOOD攻擊就無效了!-------------------------------------其他預防攻擊的設置-------------------------------------
防止同步包洪水(Sync Flood),縮短SYN-Timeout時間:
[root@test3-237 ~]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
[root@test3-237 ~]# iptables -A INPUT -i eth0 -m limit --limit 1/sec --limit-burst 5 -j ACCEPT其中:
--limit 1/s 限制syn并發數每秒1次,可以根據自己的需要修改防止各種端口掃描
[root@test3-237 ~]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Ping洪水攻擊(Ping of Death)
[root@test3-237 ~]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT 控制單個IP的最大并發連接數。
如下設置表示:允許單個IP的最大連接數為 30
[root@test3-237 ~]# iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT控制單個IP在一定的時間(比如60秒)內允許新建立的連接數。
如下設置表示:單個IP在60秒內只允許最多新建30個連接
[root@test3-237 ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
[root@test3-237 ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
---------------------------------------------------------------------------------------------------
如果出現報錯:
iptables: Invalid argument. Run `dmesg' for more information.解決辦法:
增加 xt_recent模塊的參數值即可,默認是20
[root@test3-237 ~]# cat /sys/module/xt_recent/parameters/ip_pkt_list_tot
20
[root@test3-237 ~]# echo 50 > /sys/module/xt_recent/parameters/ip_pkt_list_tot
[root@test3-237 ~]# cat /sys/module/xt_recent/parameters/ip_pkt_list_tot
50
---------------------------------------------------------------------------------------------------禁止ping(即禁止從外部ping這臺服務器):
[root@test3-237 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all用iptables屏蔽IP(如下禁止213.8.166.237連接本機的80端口)
[root@test3-237 ~]# iptables -A INPUT -s 213.8.166.227 -p tcp -m tcp -m state --state NEW --dport 80 --syn -j REJECT 允許某ip連接(如下允許13.78.66.27連接本機的80端口)
[root@test3-237 ~]# iptables -A INPUT -s 13.78.66.27 -p tcp -m tcp -m state --state NEW --dport 80 --syn -j ACCEPT 

3)使用DDoS deflate腳本自動屏蔽攻擊ip?

DDoS deflate是一款免費的用來防御和減輕DDoS攻擊的腳本。它通過netstat監測跟蹤創建大量網絡連接的IP地址,在檢測到某個結點超過預設的限制時,該程序會通過APF或IPTABLES禁止或阻擋這些IP.
DDoS deflate其實是一個Shell腳本,使用netstat和iptables工具,對那些鏈接數過多的IP進行封鎖,能有效防止通用的惡意掃描器,但它并不是真正有效的DDoS防御工具。DDoS deflate工作過程描述:
同一個IP鏈接到服務器的連接數到達設置的伐值后,所有超過伐值的IP將被屏蔽,同時把屏蔽的IP寫入ignore.ip.list文件中,與此同時會在tmp中生成一個腳本文件,這個腳本文件馬上被執行,但是一
運行就遇到sleep預設的秒,當睡眠了這么多的時間后,解除被屏蔽的IP,同時把之前寫入ignore.ip.list文件中的這個被封鎖的IP刪除,然后刪除臨時生成的文件。
一個事實:如果被屏蔽的IP手工解屏蔽,那么如果這個IP繼續產生攻擊,那么腳本將不會再次屏蔽它(因為加入到了ignore.ip.list),直到在預設的時間之后才能起作用,加入到了ignore.ip.list中的
IP是檢測的時候忽略的IP。可以把IP寫入到這個文件以避免這些IP被堵塞,已經堵塞了的IP也會加入到ignore.ip.list中,但堵塞了預定時間后會從它之中刪除。如何確認是否受到DDOS攻擊? 
[root@test3-237 ~]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n1 Address1 servers)2 103.10.86.54 117.36.231.2534 19.62.46.246 29.140.22.188 220.181.161.131    2911 167.215.42.88每個IP幾個、十幾個或幾十個連接數都還算比較正常,如果像上面成百上千肯定就不正常了。比如上面的167.215.42.88,這個ip的連接有2911個!這個看起來就很像是被攻擊了!下面就說下通過DDoS deflate腳本來自動屏蔽DDOS攻擊的ip 
1)下載DDoS deflate安裝腳本,并執行安裝。
[root@test3-237 ~]# wget http://www.inetbase.com/scripts/ddos/install.sh
[root@test3-237 ~]# chmod 0700 install.sh
[root@test3-237 ~]# ./install.sh--------------------------------------------------------------------------
卸載DDos default的操作如下:
# wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
# chmod 0700 uninstall.ddos
# ./uninstall.ddos
--------------------------------------------------------------------------2)配置DDoS deflate下面是DDoS deflate的默認配置位于/usr/local/ddos/ddos.conf ,內容如下:
[root@test3-237 ~]# cat /usr/local/ddos/ddos.conf
##### Paths of the script and other files
PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"         //IP地址白名單 
CRON="/etc/cron.d/ddos.cron"                            //定時執行程序 
APF="/etc/apf/apf"
IPT="/sbin/iptables"##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with --cron
#####          option so that the new frequency takes effect
FREQ=1                        //檢查時間間隔,默認1分鐘。設置檢測時間間隔,默認是分鐘,由于系統使用crontab功能,最小單位是分鐘##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150             //最大連接數,超過這個數IP就會被屏蔽,一般默認即可。默認是150,這是一個經驗值,如果服務器性能比較高,可以設置200以上,以避免誤殺##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=0                      //使用APF還是iptables屏蔽IP。推薦使用iptables,將APF_BAN的值改為0即可。設置為1表示使用APF,如果使用APF則需要先安裝,centos中默認就沒有安裝##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1                        //是否屏蔽IP,默認即可 ##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"              //當IP被屏蔽時給指定郵箱發送郵件,推薦使用,換成自己的郵箱即可。如果不希望發送郵件,設置為空,即EMAIL_TO=""##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600              //禁用IP時間(鎖定ip的時間),默認600秒,可根據情況調整 需要注意的是:
DDos default安裝完成后在/usr/local/ddos目錄下產生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE這四個文件,其中:
ddos.conf是配置文件,ddos.sh是一個Shell文件,ignore.ip.list是存放忽略IP的文件,LICENSE是版權聲明文件,安裝完成后還在/etc/cron.d/下生產了ddos.cron文件,內容如下:[root@test3-237 ~]# cat /etc/cron.d/ddos.cron 
SHELL=/bin/sh
0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1意思是每隔一分鐘執行一下/usr/local/ddos/ddos.sh,這個腳本是關鍵!
這個cron任務是依賴ddos.conf文件中的NO_OF_CONNECTIONS變量產生的,如果修改了此值,可以通過運行如下命令更新(實際也是在安裝是運行了如下命令):
[root@test3-237 ~]# /usr/local/ddos/ddos.sh -c 
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]或者
[root@test3-237 ~]# /usr/local/ddos/ddos.sh --cron
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]3)DDos default選項 
# /usr/local/ddos/ddos.sh -h       #查看選項 
# /usr/local/ddos/ddos.sh -k n     #殺掉連接數大于n的連接。n默認為配置文件的NO_OF_CONNECTIONS 比如:[root@test3-237 ~]# /usr/local/ddos/ddos.sh -k 1502 103.110.186.751 servers)1 Address
# /usr/local/ddos/ddos.sh -c       #按照配置文件創建一個執行計劃。使得ddos.conf文件配置后生效

4)分享一個防御DDOS攻擊的shell腳本

Linux服務器中一旦受到DDOS的攻擊(比如IDC機房服務器被攻擊了,關機,拔網線,降流量),目前只能通過封IP來源來暫時解決。
然而IP來源變化多端,光靠手工來添加簡直是惡夢,所以還是想辦法寫個shell腳本來定時處理,這才是比較靠譜的辦法。[root@test3-237 ~]# mkdir /root/bin
[root@test1-237 ~]# cat /root/bin/dropip.sh    //此腳本自動提取攻擊ip,然后自動屏蔽
#!/bin/bash
/bin/netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -10|grep -v -E '192.168|127.0'|awk '{if ($2!=null && $1>4) {print $2}}'>/tmp/dropip
for i in $(cat /tmp/dropip)
do
/sbin/iptables -A INPUT -s $i -j DROP
echo “$i kill at `date`”>>/var/log/ddos
done以上腳本中最重要的是第二行,即:
獲取ESTABLISHED連接數最多的前10個ip并寫入臨時文件/tmp/dropip,排除了內部ip段192.168|127.0開頭的.通過for循環將dropip里面的ip通過iptables全部drop掉,然后寫到日志文件/var/log/ddos。給腳本添加執行權限
[root@test1-237 ~]# chmod +x /root/bin/dropip.sh添加到計劃任務,每分鐘執行一次
[root@test1-237 ~]#crontab -e
*/1 * * * * /root/bin/dropip.sh----------------------------------------------------------------------------------------
下面是針對連接數屏蔽IP
#!/bin/sh  
/bin/netstat -ant |grep 80 |awk '{print $5}' |awk -F":" '{print $1}' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50)}' > /root/drop_ip.txt  
for i in `cat /root/drop_ip.txt`  
do  
/sbin/iptables -I INPUT -s $i -j DROP;  
done  

5)Linux下使用safedog(安全狗)軟件防御DDOS攻擊:

[root@test3-237 ~]# setenforce 0     //關閉selinux,否則不能安裝成功
[root@test3-237 ~]# getenforce       //永久關閉selinux需要配置/etc/sysconfig/selinux文件,并重啟機器生效!!
Permissive安裝(nginx版)安全狗(safedog)
[root@test3-237 ~]# wget http://safedog.cn/safedogwz_linux_Nginx64.tar.gz
[root@test3-237 ~]# tar -zvxf safedogwz_linux_Nginx64.tar.gz 
[root@test3-237 ~]# cd safedogwz_linux_Nginx64
[root@test3-237 safedogwz_linux_Nginx64]# chmod 755 install.py 
[root@bastion-IDC safedogwz_linux_Nginx64]# ls
install_files  install.py  uninstall.py
[root@test3-237 safedogwz_linux_Nginx64]# ./install.py -A          //卸載安全狗就用uninstall.py
.......step 3.5, start service...                                                                      [ok] step 3.6, save safedog install info...                                                          [ok] Tips: (1)Run the command to setup Server Defense Module: sdui(2)Explore more features by tapping the command to join Cloud Management Center (fuyun.safedog.cn) with your account:  sdcloud -h If you need any help about installation,please tap the command: ./install.py -h
Install Completely!溫馨提示:
1)安裝完成后,記得一定要重新啟動Nginx服務,網站安全狗軟件即可生效。
2)運行時,安裝腳本默認將自動獲取Nginx服務的安裝路徑;若自動獲取失敗則將提示輸入Nginx服務的安裝路徑(絕對路徑),需要根據所安裝的Nginx的目錄,填寫真實的安裝路徑。
3)當出現提示:Are you sure to uninstall?[y/n]時,輸入y

轉載于:https://www.cnblogs.com/kevingrace/p/6756515.html

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

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

相關文章

為什么信息化 ≠ 數字化?終于有人講明白了

作者&#xff1a;石秀峰 來源&#xff1a;談數據&#xff08;ID&#xff1a;learning-bigdata&#xff09; 近期&#xff0c;我一做數字化咨詢的朋友&#xff08;化名老王&#xff09;遇到了一個頭痛的問題&#xff1a;話說老王的團隊近期接了一個大單——一大型制造業的數字化…

JAVA代碼—算法基礎:數獨問題(Sodoku Puzzles)

JAVA代碼—算法基礎&#xff1a;數獨問題&#xff08;Sodoku Puzzles&#xff09; 數獨問題&#xff08;Sodoku Puzzles&#xff09; 數獨游戲&#xff08;日語&#xff1a;數獨 すうどく&#xff09;是一種源自18世紀末的瑞士的游戲&#xff0c;后在美國發展、并在日本得以發揚…

Linux系統恢復

實驗目的&#xff1a;熟悉了前面的啟動流程&#xff0c;系統的一個大致的啟動流程是怎樣的&#xff0c;而其中牽扯到了些許文件&#xff0c;這些文件在系統啟動時用于銜接各個步驟&#xff0c;如果這些文件損壞或缺失&#xff0c;系統將不能正常啟動&#xff0c;這次寫的內容就…

PerfView專題 (第二篇):如何尋找 C# 中的 Heap堆內存泄漏

一&#xff1a;背景 上一篇我們聊到了如何去找 熱點函數&#xff0c;這一篇我們來看下當你的程序出現了 非托管內存泄漏 時如何去尋找可疑的代碼源頭&#xff0c;其實思路很簡單&#xff0c;就是在 HeapAlloc 或者 VirtualAlloc 時做 Hook 攔截&#xff0c;記錄它的調用棧以及分…

關于 extern C的說明

在用C的項目源碼中&#xff0c;經常會不可避免的會看到下面的代碼 1 #ifdef __cplusplus 2 extern "C" { 3 #endif 4 5 /*...*/ 6 7 #ifdef __cplusplus 8 } 9 #endif 它到底有什么用呢&#xff0c;你知道嗎&#xff1f;而且這樣的問題經常會出現在面試or筆試…

Nginx 面試 40 問

Nginx是一款輕量級的Web服務器、反向代理服務器&#xff0c;由于它的內存占用少&#xff0c;啟動極快&#xff0c;高并發能力強&#xff0c;在互聯網項目中廣泛應用。 那么關于 Nginx 的核心技術點有哪些呢&#xff1f; 什么是Nginx&#xff1f; Nginx是一個 輕量級/高性能的…

用Cocos2dx開發棋牌游戲的觀點解析

眾所周知&#xff0c;目前棋牌游戲特別的火。很多游戲公司都想在這一塊賺錢&#xff0c;可是卻不知用什么軟件比較好的去開發棋牌游戲&#xff0c;對此&#xff0c;我列出了兩款比較靠譜的軟件去開發棋牌游戲&#xff0c;希望對大家有幫助&#xff01; 第一款軟件是cocos2dx,它…

JavaWEB中讀取配置信息

第一種方法是使用java.io和java.util包&#xff0c;缺點是路徑的概念要清晰&#xff0c;例子&#xff1a; Properties prop new Properties();InputStream in getClass().getResourceAsStream("/common.properties");try {prop.load(in);pool new JedisPool(config…

我把《系統設計》系列整理成了 PDF

大家好&#xff0c;我是等天黑。相信很多朋友應該注意到了&#xff0c;我最近發了很多系統設計的文章。是的&#xff0c;到目前為止&#xff0c;已經發了有 7 篇文章。這些內容主要翻譯自 Alex Xu 的 《System Design Interview》&#xff0c;有卷一和卷二兩本。System Design …

高性能IO模型淺析

服務器端編程經常需要構造高性能的IO模型&#xff0c;常見的IO模型有四種&#xff1a; &#xff08;1&#xff09;同步阻塞IO&#xff08;Blocking IO&#xff09;&#xff1a;即傳統的IO模型。 &#xff08;2&#xff09;同步非阻塞IO&#xff08;Non-blocking IO&#xff09;…

Java線程通信的幾種方式

一、問題 有兩個線程&#xff0c;A 線程向一個集合里面依次添加元素“abc”字符串&#xff0c;一共添加十次&#xff0c;當添加到第五次的時候&#xff0c;希望 B 線程能夠收到 A 線程的通知&#xff0c;然后 B 線程執行相關的業務操作。線程間通信的模型有兩種&#xff1a;共享…

PHP個人博客項目------切切歆語博客

2019獨角獸企業重金招聘Python工程師標準>>> phpmysqlapache, ThinkPHP3.2框架開發 我的個人博客項目 適合新手練習 源碼地址下載&#xff1a;https://github.com/DickyQie/php-myblog 轉載于:https://my.oschina.net/zhangqie/blog/1785867

收發郵件之 MAILKIT

背景利用代碼發送郵件在工作中還是比較常見的&#xff0c;相信大家都用過SmtpClient來處理發送郵件的操作&#xff0c;不過這個類以及被標記已過時&#xff0c;所以介紹一個微軟推薦的庫MailKit來處理。MailKit開源地址&#xff1a;https://github.com/jstedfast/MailKit需要郵…

IOS_SearchBar搜索欄及關鍵字高亮

搜索框的效果演示: 這個就是所謂的搜索框了,那么接下來我們看看如何使用代碼來實現這個功能. 我所使用的數據是英雄聯盟的英雄名單,是一個JSON數據的txt文件, JSON數據的處理代碼如下所示: ?123456//獲取文件的路徑pathNSString *path [[NSBundle mainBundle] pathForResourc…

Java設計模式之(工廠模式)--簡單工廠模式--工廠方法模式--抽象工廠模式

工廠模式&#xff1a; 工廠模式可以分為三類&#xff1a; 1&#xff09;簡單工廠模式&#xff08;Simple Factory&#xff09; 2&#xff09;工廠方法模式&#xff08;Factory Method&#xff09; 3&#xff09;抽象工廠模式&#xff08;Abstract Factory&#xff09; 簡單工…

今天很多 CTO 都是被干掉的,因為他沒有成就業務

作者&#xff5c;喬新亮 編輯&#xff5c;鄧艷琴 我可以絲毫不開玩笑地說&#xff0c;今天&#xff0c;很多傳統企業里的研發都只是“工人”&#xff0c;哪怕是 CTO&#xff0c;充其量也只是“高級工人”&#xff0c;如果不轉換思維去成就業務&#xff0c;就只能停留在工人級…

中航工業集團金網絡(北京)電子商務有限公司副總經理劉正珩:航空“智”造的供應鏈支撐平臺...

編者按 “十三五”時期是我國貿易發展的重要戰略機遇期&#xff0c;物流產業發展迅速&#xff0c;智慧供應鏈已經成為推動流通大國向流通強國過程中的重要行動。6月2日&#xff0c;由上海市國有資產監督管理委員會、上海市郵政管理局、上海市商務委員會指導&#xff0c;上海市國…

創建、檢查和反編譯世界上(幾乎)最短的 C# 程序

創建、檢查和反編譯世界上&#xff08;幾乎&#xff09;最短的 C# 程序原文來自https://www.stevejgordon.co.uk/creating-inspecting-decompiling-the-worlds-smallest-csharp-program在這篇文章中&#xff0c;我認為創建世界上&#xff08;幾乎&#xff09;最短的 C# 程序然后…

Linux下畫原理圖和PCB

Linux下畫原理圖和PCBWindows下大名鼎鼎的Allegro和經典的Protel 99SE都是不支持Linux操作系統的。做Linux驅動開發免不了要看一下原理圖和PCB。一般的做法有三種&#xff1a; 1.主機使用Windows系統&#xff0c;將Linux裝在VMWARE之類的虛擬機中這樣能夠使用Windows下的軟件看…

配置中心 App Configuration (二):Feature Flag 功能開關特性

寫在前面Web服務開發過程中我們經常有這樣的需求&#xff1a;某些功能我必須我修改了配置才啟用&#xff0c;比如新用戶注冊送券等&#xff1b;某個功能需到特定的時間才啟用&#xff0c;過后就失效&#xff0c;比如春節活動等&#xff1b;某些功能&#xff0c;我想先對10%的用…