文章目錄
-
- 1、LVS、Nginx、HAproxy有什麼差別?工作中你怎麼選擇?
- 2、講述一下Tomcat8005、8009、8080三個端口的含義?
- 3、什麼叫CDN?
- 4、講一下Keepalived的工作原理?
-
- 4.1keepalived心跳包機制,如果master不再發心跳包怎麼辦?
- 5、講述一下LVS三種模式的工作過程?
- 6、你常用的Nginx子產品,用來做什麼
- 7、以下Python2和Python3的說法正确的有()
- 8、某cpu32線程的伺服器異常卡頓,top指令輸出如下,可能反映出的問題是?
- 9、關于Linux系統的負載(Load),以下表述正确的是?()
- 10、請簡述作業系統分頁式記憶體管理機制,并介紹下程序fork時對記憶體的copy on write實作原理。
- 11、計算出從你生日之日起到今天一共過了多少天?(python、go、shell均可)
- 12、講述你如何做系統優化,提高系統性能,充分利用資源?
- 13、ddos攻擊是什麼?怎麼防禦?
- 14、了解raid0 raid1 raid5不
- 15、python都用過什麼子產品?
- 16、如何檢視一個端口被那個程式占用
- 17、iptable指令如何實作拒絕一個ip和端口的通路,drop和reject有何差別
- 18、了解排序麼?哪些是穩定型,哪些是不穩定的?
- 19、了解編譯型語言和非編譯型語言的差別麼?
- 20、檢視一個端口被占用,然後如何拒絕
- 21、kill 和kill -9差別
- 22、cpu負載較高,用什麼指令,什麼方法
-
- 22.1 ``CPU負載較高,有什麼方法可以解決?``
- 22.2 cpu 負載比例怎麼算的
- 23、ping和traceroute用了什麼協定
-
- 23.1 兩台主機A和B, A能ping通B而B不能Ping通A是什麼原因?
- 24、python深淺拷貝,python的淺copy和深copy。a=[1,2,[3,4]] b=a b[-1]=2 a 會變嗎? 【會變】
- 25、反向代理和負載均衡差別?
- 26、Mysql主從架構實作過程
- 27、知道什麼linux指令,如何檢視incode節點資訊,滿了怎麼辦
- 28、Linux 開機步驟,如果想在開機時更改為單使用者模式怎麼辦?
- 29、TCP第二次握手失敗兩邊伺服器會做什麼操作,如何防止SYN攻擊?
- 30、Python 中類函數和靜态函數有什麼差別,清單元組的差別,分别用在什麼場景下,哪個占用資源更少
- 31、Python中字元串反轉的方法有哪些.
- 32、shell 如何判斷一個檔案是否存在
1、LVS、Nginx、HAproxy有什麼差別?工作中你怎麼選擇?
LVS: 是基于四層的轉發
HAproxy: 是基于四層和七層的轉發,是專業的代理伺服器
Nginx: 是WEB伺服器,緩存伺服器,又是反向代理伺服器,可以做七層的轉發
差別: LVS由于是基于四層的轉發是以隻能做端口的轉發;而基于URL的、基于目錄的這種轉發LVS就做不了,就需要HAproxy
工作選擇:
1.HAproxy和Nginx由于可以做七層的轉發,是以URL和目錄的轉發都可以做
2.在很大并發量的時候我們就要選擇LVS
3.中小型公司的話并發量沒那麼大,選擇HAproxy或者Nginx足已,由于HAproxy由是專業的代理伺服器配置簡單,是以中小型企業推薦使用HAproxy
2、講述一下Tomcat8005、8009、8080三個端口的含義?
8005==> 關閉時使用
8009==> 為AJP端口,即容器使用,如Apache能通過AJP協定通路Tomcat的8009端口
8080==> 一般應用使用
3、什麼叫CDN?
CND即内容分發網絡,其目的是通過在現有的Internet中增加一層新的網絡架構,将網站的内容釋出到最接近使用者的網絡邊緣,使使用者可就近取得所需的内容,提高使用者通路網站的速度
4、講一下Keepalived的工作原理?
keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛拟路由備援協定。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主要路由,其他的則成了備份路由。當主要路由失效後,備份路由中會重新選舉出一個主要路由,來繼 續工作,來保障不間斷服務。
在VRRP中有兩組重要的概念:VRRP路由器和虛拟路由器,主要路由器和備份路由器。
VRRP 路由器是指運作VRRP的路由器,是實體實體,虛拟路由器是指VRRP協定建立的,是邏輯概念。一組VRRP路由器協同工作,共同構成一台虛拟路由器。
4.1keepalived心跳包機制,如果master不再發心跳包怎麼辦?
keepalived的主節點會定期往備節點發送心跳包,當備節點沒有接收到心跳包的時候,會認為主節點挂了,那麼他就會接過主節點的責任對外提供服務,表現形式就是備節點上出現了虛拟IP。這時有可能發生keepalived腦裂情況。
檢測思路:正常情況下keepalived的VIP位址是在主節點上的,如果在從節點發現了VIP,就設定報警資訊。
5、講述一下LVS三種模式的工作過程?
LVS 有三種負載均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
5.1 NAT模式(VS-NAT)
原理:就是把用戶端發來的資料包的IP頭的目的位址,在負載均衡器上換成其中一台RS的IP位址并發至此RS來處理,RS處理完後把資料交給負載均衡器,負載均衡器再把資料包原IP位址改為自己的IP将目的位址改為用戶端IP位址即可期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器
優點:叢集中的實體伺服器可以使用任何支援TCP/IP作業系統,隻有負載均衡器需要一個合法的IP位址
缺點:擴充性有限。當伺服器節點(普通PC伺服器)增長過多時,負載均衡器将成為整個系統的瓶頸.因為所有的請求包和應答包的流向都經過負載均衡器。當伺服器節點過多時大量的資料包都交彙在負載均衡器那,速度就會變慢!
5.2 IP隧道模式(VS-TUN)
原理:首先要知道,網際網路上的大多Internet服務的請求包很短小,而應答包通常很大那麼隧道模式就是,把用戶端發來的資料包,封裝一個新的IP頭标記(僅目的IP)發給RS,RS收到後,先把資料包的頭解開,還原資料包,處理後,直接傳回給用戶端,不需要再經過負載均衡器。注意,由于RS需要對負載均衡器發過來的資料包進行還原,是以說必須支援IPTUNNEL協定,是以,在RS的核心中,必須編譯支援IPTUNNEL這個選項
優點:負載均衡器隻負責将請求包分發給後端節點伺服器,而RS将應答包直接發給使用者是以,減少了負載均衡器的大量資料流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一台負載均衡器能夠為很多RS進行分發。而且跑在公網上就能進行不同地域的分發。
缺點:隧道模式的RS節點需要合法IP,這種方式需要所有的伺服器支援”IP Tunneling”(IP Encapsulation)協定,伺服器可能隻局限在部分Linux系統上
5.3 直接路由模式(VS-DR)
原理:負載均衡器和RS都使用同一個IP對外服務但隻有DR對ARP請求進行響應所有RS對本身這個IP的ARP請求保持靜默也就是說,網關會把對這個服務IP的請求全部定向給DR而DR收到資料包後根據排程算法,找出對應的RS,把目的MAC位址改為RS的MAC(因為IP一緻)并将請求分發給這台RS這時RS收到這個資料包,處理完成之後,由于IP一緻,可以直接将資料返給客戶,則等于直接從用戶端收到這個資料包無異,處理後直接傳回給用戶端,由于負載均衡器要對二層標頭進行改換,是以負載均衡器和RS之間必須在一個廣播域也可以簡單的了解為在同一台交換機上
優點:和TUN(隧道模式)一樣,負載均衡器也隻是分發請求,應答包通過單獨的路由方法傳回給用戶端與VS-TUN相比,VS-DR這種實作方式不需要隧道結構,是以可以使用大多數作業系統做為實體伺服器。
缺點:(不能說缺點,隻能說是不足)要求負載均衡器的網卡必須與實體網卡在一個實體段上。
6、你常用的Nginx子產品,用來做什麼
rewrite子產品,實作重寫功能
access子產品:來源控制
ssl子產品:安全加密
ngx_http_gzip_module:網絡傳輸壓縮子產品
ngx_http_proxy_module 子產品實作代理
ngx_http_upstream_module子產品實作定義後端伺服器清單
ngx_cache_purge實作緩存清除功能
7、以下Python2和Python3的說法正确的有()
正确答案: A B C D
A、Python3使用 print 必須要以小括号包裹列印内容
B、Python2中使用ascii編碼,Python3中使用utf-8編碼
C、 Python2中是raw_input()函數,Python3中是input()函數
D、Python2中range(1,10)傳回清單,Python3中傳回疊代器
8、某cpu32線程的伺服器異常卡頓,top指令輸出如下,可能反映出的問題是?
[[email protected] ~]# top
top - 10:38:52 up 288 days, 23:42, 2 users, load average: 32.50, 31.25, 31.71
Tasks: 407 total, 1 running, 405 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13191774+total, 13625808 free, 3012256 used, 11527968+buff/cache
KiB Swap: 12582908 total, 12582908 free, 0 used. 12415273+avail Mem
A.系統程序消耗的CPU 時間比較多
B.cpu使用率過低
C.cpu使用率過高
D.程式異常,上下文切換頻繁
1分鐘Load>5,5分鐘Load>5,15分鐘Load>5:短中長期都繁忙,系統“正在擁塞
”
9、關于Linux系統的負載(Load),以下表述正确的是?()
A.表示處于就緒狀态,等待CPU執行的程序數
B.可以通過top指令檢視
C.可以通過uptime檢視
D.Load:2.5,1.3,1.1表示系統的負載壓力在逐漸減少(不能判斷)
10、請簡述作業系統分頁式記憶體管理機制,并介紹下程序fork時對記憶體的copy on write實作原理。
(1)邏輯位址和實體位址分離的記憶體配置設定管理方案,程式的邏輯位址劃分為固定大小的頁,實體位址劃分為同樣大小的幀,通過頁表對應邏輯位址和實體位址
(2)核心fork()(建立一個子程序)時并不複制整個程序位址空間,而是讓父子程序共享一個位址空間—》隻有在需要寫入時,資料才會被複制,進而使各個程序擁有各自的拷貝資料。也就是說,隻有在需要寫入的時候才複制資源,在此之前,以隻讀方式共享
11、計算出從你生日之日起到今天一共過了多少天?(python、go、shell均可)
#!/bin/bash
brith_day=$(date -d "1997-06-25" +%s)
now_day=$(date -d "2020-09-17" +%s)
s=$[now_day-brith_day]
my_days=$[s/86400]
echo $my_days
12、講述你如何做系統優化,提高系統性能,充分利用資源?
(1)優化記憶體,把不需要的服務關掉
(2)定期清理備份檔案,加大磁盤使用空間
(3)/etc/sysctl.conf檔案做核心優化
(4)檔案句柄數(打開最大檔案數)調到65535(直接把ulimit -SHn 65535指令加入/etc/rc.d/rc.local)
echo " ulimit -HSn 65535" >>/etc/rc.d/rc.local
echo " ulimit -s 65535" >>/etc/rc.d/rc.local
(5)通過修改應用軟體的配置檔案,對服務進行優化,提高記憶體、CPU的使用率
13、ddos攻擊是什麼?怎麼防禦?
14、了解raid0 raid1 raid5不
raid0:由2或2的n次方個磁盤組成,安全性最差,成本最低且讀寫能力高、沒有備援。
raid1:由大于等于2個盤組成,安全性最高,成本最高且讀寫能力低、提供備援。
raid5:由大于等于3個盤組成,安全性在raid0和raid1之間,成本折中且讀寫能力低。
15、python都用過什麼子產品?
os os.path re sys time string math
16、如何檢視一個端口被那個程式占用
lsof -i:端口号
17、iptable指令如何實作拒絕一個ip和端口的通路,drop和reject有何差別
iptables -I INPUT -s ip位址 -p TCP --dport 端口 -j DROP
REJECT動作:會傳回一個拒絕(終止)資料包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒絕對方的連接配接動作。
DROP動作:隻是簡單的直接丢棄資料,并不回報任何回應。需要Client等待逾時,Client容易發現自己被防火牆所阻擋。
18、了解排序麼?哪些是穩定型,哪些是不穩定的?
19、了解編譯型語言和非編譯型語言的差別麼?
20、檢視一個端口被占用,然後如何拒絕
netstat -lnutp | grep 端口 #檢視端口是否被占用
lsof -i:端口 #檢視端口的Pid
kill -9 pid #殺掉該端口的pid
21、kill 和kill -9差別
kill發送SIGTERM(15)信号給程序,告訴程序你需要關閉。
kill -9表示強制殺死程序,發送的是SIGKILL信号給程序。
22、cpu負載較高,用什麼指令,什麼方法
平均負載(load average)是一段時間内系統的平均負載,1分鐘、5分鐘、15分鐘
可以通過top或者uptime指令檢視系統的平均負載
[[email protected] ~]# uptime
11:20:17 up 16 min, 2 users, load average: 0.00, 0.03, 0.09
22.1 CPU負載較高,有什麼方法可以解決?
CPU負載較高,有什麼方法可以解決?
情況一:top指令檢視對cpu消耗大的程序,直接輸入"k",然後輸入相應程序的PID号即可終止該程序
情況二:cpu很空閑,但是負載比較高的情況
可能是由于僵死程序導緻的。可以通過指令 ps -axjf 檢視是否存在 D 狀态程序。 D 狀态是指不可中斷的睡眠狀态。該狀态的程序無法被 kill,也無法自行退出。隻能通過恢複其依賴的資源或者重新開機系統來解決。
22.2 cpu 負載比例怎麼算的
每個程式占用的cpu時間和除以總的cpu時間
23、ping和traceroute用了什麼協定
ICMP 協定(網際網路控制封包協定)工作于傳輸層和網絡層之間,但由于需要網絡層的封裝,是以認為是 網絡層的協定。
ping 是
查詢封包的應用
,主動查詢類型為8,主動查詢類型的應答為0。
tracerout 是
差錯封包的應用
,細分為兩個功能,一個是追蹤路由(到終點:端口不可達;未到終點:逾時),另一個是确定路徑MTU(通過設定不分片完成)
23.1 兩台主機A和B, A能ping通B而B不能Ping通A是什麼原因?
可能是A防火牆的問題。
24、python深淺拷貝,python的淺copy和深copy。a=[1,2,[3,4]] b=a b[-1]=2 a 會變嗎? 【會變】
1.指派:值和位址都複制了
2.拷貝:拷貝對象後,就擁有了一個新的記憶體位址。
淺拷貝:隻拷貝第一層對象,子對象藕斷絲連。
深拷貝:使用遞歸的方式拷貝,兩個對象沒有任何關系
注1:元組和字元串是不可變類型,深淺拷貝之後,隻有一份記憶體
注2:元組裡面有清單子對象時,淺拷貝還是拷貝第一層對象還是個元組是以隻有一份記憶體;深拷貝是遞歸拷貝裡面有清單是以有不同的記憶體空間
問1:a=[1,2,[3,4]] b=a b[-1]=2 a 會變嗎?
答:會變
問2:a=[1,2,[3,4]] b淺拷貝a a[2].append(5) b會變嗎?
答:會變
>>> a=[1,2,[3,4]]
>>> import copy
>>> b=copy.copy(a)
>>> b #淺拷貝,隻拷貝第一層對象,子對象藕斷絲連
[1, 2, [3, 4]]
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5]]
>>> b
[1, 2, [3, 4, 5]]
>>> a is b #拷貝對象,獲得一個新的記憶體位址
False
問3:a=[1,2,[3,4]] b深拷貝a a[2].append(5) b會變嗎?
答:不會變
>>> a=[1,2,[3,4]]
>>> import copy
>>> b=copy.deepcopy(a)
>>> b
[1, 2, [3, 4]]
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5]]
>>> b #深拷貝,遞歸拷貝,兩個對象沒有任何關系
[1, 2, [3, 4]]
>>> a is b #拷貝對象,獲得一個新的記憶體位址
False
25、反向代理和負載均衡差別?
關系:
反向代理,是把一些靜态資源存儲在伺服器上,當使用者有請求的時候,就直接傳回反向代理伺服器上的資源給使用者,而如果反向代理伺服器上沒有的資源,就轉發給後面的負載均衡伺服器,負載均衡伺服器再将請求分發給後端的web伺服器。
差別:
反向代理伺服器是需要存儲資源的,讓使用者更快速的接收到資源。
負載均衡就是,為了保證後端web伺服器的高可用,高并發,是不需要要存儲資源,隻需要轉發使用者的請求。
26、Mysql主從架構實作過程
27、知道什麼linux指令,如何檢視incode節點資訊,滿了怎麼辦
ls -i
df -ih
背景:磁盤無法寫入,檢視df -hT發現空間是足夠的,那麼應該是inode滿了,使用df -ih檢視然後inode使用率100%
解決思路:
1、磁盤inode滿了,應該是小檔案過多導緻的。
2、查找出所有的小檔案,然後删除不需要的小檔案
解決方法:
1、取出磁盤下每個檔案夾下面的檔案數量
for i in ls /;do find /$i -type f | wc -l >> 1.txt && echo $i >> 1.txt;done;
2、找到對應的檔案夾然後手動删除掉即可
28、Linux 開機步驟,如果想在開機時更改為單使用者模式怎麼辦?
如果是關機要開機時:隻要進入啟動畫面之後,敲入“e”,把光标移動到kernel …那一行,再敲入“e”,在kernel 一行的最後加上空格single,回車敲入“b”,啟動系統,即進入單使用者模式。
如果是已經登入系統的話:init 1
29、TCP第二次握手失敗兩邊伺服器會做什麼操作,如何防止SYN攻擊?
過程:syn攻擊是基于TCP連接配接的三次握手的半連接配接,屬于DOS攻擊。攻擊者發送完第一次握手後,伺服器維護一個未連接配接隊列并發送回複,但是攻擊者不發送第三次握手的ack,造成伺服器會等待,浪費CPU和記憶體,在半連接配接存活時間内有大量的半連接配接就會造成伺服器無法服務現象。
防禦:減小逾時時間;SYN網關和SYN代理;增大最大半連接配接數;SYN cookies技術
SYN Cookie是對TCP伺服器端的三次握手協定作一些修改,專門用來防範SYN Flood攻擊的一種手段。它的原理是,在TCP伺服器收到TCP SYN包并傳回TCP SYN+ACK包時,不配置設定一個專門的資料區,而是根據這個SYN包計算出一個cookie值。在收到TCP ACK包時,TCP伺服器在根據那個cookie值檢查這個TCP ACK包的合法性。如果合法,再配置設定專門的資料區進行處理未來的TCP連接配接。
30、Python 中類函數和靜态函數有什麼差別,清單元組的差別,分别用在什麼場景下,哪個占用資源更少
31、Python中字元串反轉的方法有哪些.
reverse()方法
切片[::-1]
32、shell 如何判斷一個檔案是否存在
1.502和204差別?
502是指錯誤網關或無效網關。
504是指網關逾時。 伺服器作為網關或代理,但是沒有及時從上遊伺服器收到請求。
304:伺服器資源未變化
2.ARP攻擊是什麼?
arp攻擊就是arp欺騙。
使用别人的IP位址和自己的MAC位址向目标主機發送ARP包
欺騙成功後,目标發給别人IP位址的資料,都會發到你對應的MAC位址的裝置上。
3.http與https的差別?HTTPS(超文本傳輸安全協定)
http是明文傳輸,https是加密的安全傳輸;3) 連接配接的端口不一樣,http是80,https是443;4)http連接配接很簡單,沒有狀态;https是ssl加密的傳輸,身份認證的網絡協定,相對http傳輸比較安全。
4.什麼情況下會發生死鎖?解決死鎖的政策有哪些?
死鎖産生的原因:①多個程序競争不可剝奪資源②程序推進順序不當。
解決死鎖的方法:①預防死鎖,即破壞死鎖的四個必要條件,不過互斥條件一般不破壞②死鎖避免,采用銀行家算法③死鎖的檢測及解除
5.請你講講http1.1和1.0的差別
HTTP/1.0中預設使用短連接配接。也就是說,用戶端和伺服器每進行一次HTTP操作,就建立一次連接配接,任務結束就中斷連接配接。
HTTP/1.1起,預設使用長連接配接,用以保持連接配接特性。在使用長連接配接的情況下,當一個網頁打開完成後,用戶端和伺服器之間用于傳輸HTTP資料的TCP連接配接不會關閉,用戶端再次通路這個伺服器時,會繼續使用這一條已經建立的連接配接。