BAT面試題復習
http協(xié)議
http協(xié)議是無狀態(tài)無連接颊咬;
無狀態(tài):指的是http協(xié)議無法保存客戶機的信息抗蠢,比如客戶機瀏覽了什么網(wǎng)頁薛躬,判斷用戶是否由權限訪問等,因此產(chǎn)生了兩種保持狀態(tài)的技術:cookie與session缸血,cookie存在于瀏覽器中蜜氨,session存在于服務器中。
無連接:指的是服務器處理完客戶的的請求捎泻,收到客戶機的應答之后,即斷開連接埋哟。請求時建立連接笆豁,請求完釋放連接,這樣可以盡快釋放資源出來供其他客戶端使用赤赊。但是html頁面變得復雜闯狱,比如有10個圖片,10個css抛计,10個js哄孤,瀏覽器每一次請求就要建立一次連接,那么就要建立30次tcp連接吹截,這樣就顯得低效了瘦陈,為了提高效率,http1.1新設置了keep-alive字段波俄,在Keep-Alive規(guī)定的時間內(nèi)晨逝,都是用同一個tcp連接。http1.1支持長連接懦铺,http1.0規(guī)定瀏覽器與服務器只保持短暫的連接捉貌。
http是應用層協(xié)議,是基于tcp協(xié)議連接的冬念,tcp是面向連接趁窃,但是http協(xié)議是無連接的。有關“TCP是面向連接的急前,HTTP基于TCP卻是無連接的醒陆?”的問題請參考文章
http與https的區(qū)別:
http使用80端口,基于tcp(udp)協(xié)議叔汁,http直接與tcp通信统求;
https使用443端口检碗,http使用了ssl加密,http先與ssl通信码邻,然后再由ssl與tcp通信折剃。
為什么不一直使用https呢?
因為與純文本通信相比像屋,加密通信會消耗更多的CPU與內(nèi)存資源怕犁。如果每次通信都加密,會消耗相當多的資源己莺,所以非敏感信息用http通信奏甫,只有包含個人信息等敏感數(shù)據(jù)才使用https加密通信。
SSL原理:
當瀏覽器向服務器請求一個安全的網(wǎng)頁凌受,服務器會向瀏覽器發(fā)送它的證書和公鑰阵子,瀏覽器檢查證書是不是由可以信賴的機構頒發(fā)的,確認證書有效和此證書是此網(wǎng)站的胜蛉,然后客戶端使用公鑰加密一個隨機對稱密鑰挠进,發(fā)送給服務器,服務器用自己的私鑰解密誊册,得到這個隨機對稱密鑰领突;然后客戶端和服務器就可以在這個對稱密鑰加密的方式下通信了,也就是客戶端用這個鑰匙對請求的url進行加密案怯,服務器用這個鑰匙解密君旦,并用這把鑰匙對將要返回給客戶端的網(wǎng)頁進行加密,發(fā)送給客戶端嘲碱,客戶端再解密金砍。參考文章。
http協(xié)議中為什么post方法比get安全悍汛?
五層模型
應用層 #為應用程序提高網(wǎng)絡服務
傳輸層 #建立和維護端到端的連接
網(wǎng)絡層 #ip尋址與路由選擇
數(shù)據(jù)鏈路層 #控制網(wǎng)絡層與物理層之間的通信捞魁,數(shù)據(jù)幀
物理層 #比特流傳輸
TCP的六個標志位
URG:(Urgent)緊急指針字段有效值
FIN:(Finish)表示關閉連接
ACK:(Acknowledge)表示響應
SYN:(Synchronous)表示建立連接
PSH:(Push)表示傳輸數(shù)據(jù)
RST:(Reset)表示連接重置
ps:四次揮手不是斷開連接的唯一方式,如果主機需要盡快斷開連接离咐,就會發(fā)送RST包谱俭。
TCP三次握手
客戶端與服務端要建立連接首先要進行tcp的三次握手過程;
- 首先客戶端發(fā)送syn包給服務端宵蛀,序列號為a昆著,告訴服務端打開某個端口,我想和你建立某個服務术陶;
- 然后服務端發(fā)送syn和ack給客戶端凑懂,序列號為b,ack=a+1,告訴客戶端同一建立連接梧宫;
- 最后客戶端發(fā)送ack確認接谨,ack=b+1,此時雙方建立連接摆碉,可以進行通信了。
TCP為什么不能兩次握手脓豪?
1.syn
2.syn+ack
tcp是雙向通信協(xié)議巷帝,想要建立一個可靠的單向通道至少需要發(fā)送一次syn和ack。如果是兩次握手扫夜,考慮這樣的情況楞泼,當A與B建立了連接之后,此時由于網(wǎng)絡延遲的原因笤闯,A的syn包剛剛到達B堕阔,B以為A想與它建立新的連接,因此回應syn與ack颗味,B就會一直等待A發(fā)送數(shù)據(jù)超陆,造成B的資源浪費,卻不知道這個syn包是因為網(wǎng)絡原因遲遲未到達B浦马,此時A與B早已建立了連接侥猬,這個syn包是無效的請求。如果有第三次的握手捐韩,A可以發(fā)送ack向B確認是否建立連接。
TCP四次揮手
客戶端和服務器斷開連接要進行TCP的四次揮手過程:
- 首先客戶端發(fā)送FIN包給服務端鹃锈,告訴服務端我要和你斷開連接了荤胁;
- 然后服務端發(fā)送ACK確認斷開連接;
- 接著發(fā)送FIN包給客戶端屎债,告訴客戶端我也要和你斷開連接仅政;
- 最后客戶端發(fā)送ACK給服務端確認斷開連接,這樣雙方連接斷開盆驹。
TCP為什么不能三次揮手呢圆丹?
1.FIN
2.FIN+ACK
3.ACK
因為雙方通信是單向的,客戶端想和服務器斷開連接不代表服務器沒有數(shù)據(jù)傳輸給客戶端了躯喇,有這樣的情況辫封,客戶端發(fā)送FIN包給服務端想要斷開連接,但是此時服務端正在傳輸數(shù)據(jù)給客戶端廉丽,三次揮手的話倦微,服務器發(fā)送FIN+ACK,此時就中斷了正在傳輸?shù)臄?shù)據(jù)正压,這是不合理的欣福,應該等服務端傳輸完數(shù)據(jù)之后再發(fā)送FIN包斷開連接,所以要四次揮手才合理焦履。
四次揮手為什么有timewait
- timewait是出現(xiàn)再四次揮手最后一次客戶端發(fā)送給服務端ACK之后客戶端的狀態(tài)拓劝,等于兩倍的MSL(Maximum Segment Lifetime,報文最大生存時間)在Windows下默認為4分鐘,即240秒雏逾;
- timewait的存在是為了確保服務器能接收到客戶端發(fā)送的最后一個ACK確認報文,如果服務器沒有接收到最后一個ack報文郑临,會在兩倍msl時間內(nèi)重新發(fā)送一次FIN包請求斷開連接栖博,然后客戶端再發(fā)一次ACK報文。
- 另外也是為了使舊的數(shù)據(jù)包在網(wǎng)絡中因過期而消失牧抵,如果沒有timewait的話笛匙,服務器發(fā)送完數(shù)據(jù)之后發(fā)送FIN,客戶端發(fā)送ACK斷開連接犀变,如果此時有新的連接建立妹孙,使用同一個端口服務,那么之前服務器傳輸?shù)臄?shù)據(jù)包就會到達客戶端获枝,從而引起數(shù)據(jù)錯亂蠢正。
TCP與UDP的區(qū)別
- tcp是面向連接,發(fā)送數(shù)據(jù)之前需要建立連接省店;udp是無連接嚣崭,即發(fā)送數(shù)據(jù)之前不需要建立連接;
- tcp保證數(shù)據(jù)的正確性懦傍,提供可靠的服務雹舀,tcp發(fā)送的數(shù)據(jù)保證完整性,無差錯不丟失粗俱,按序達到说榆;udp使用盡最大努力交付,不保證可靠交付寸认,可能丟包签财;
- tcp面向字節(jié)流,udp面向報文偏塞;
- tcp對系統(tǒng)資源要求多唱蒸,udp對系統(tǒng)資源要求更少;
- 傳輸即時信息如視頻灸叼,語音等使用udp神汹,沒有實時傳輸需求則可以考慮使用tcp。
TCP可靠傳輸機制
- 確認機制
- 不丟包情況:ACK(n+1) = Seq(n)+Len(n)
- 數(shù)據(jù)包丟失:ACK(n+1) < Seq(n)+Len(n)
- 重傳機制
[超時重傳]
當發(fā)送方?jīng)]有接收到接收方的ACK確認時怜姿,則認為數(shù)據(jù)丟失慎冤,此時發(fā)送方依據(jù)RTO重傳超時時間來對未確認的數(shù)據(jù)包進行重傳。
1*RTO 重傳第一次
2*RTO 重傳第二次
4*RTO ...
8*RTO 重傳第三次
RTT:(Round Trip Time)往返時間
RTO:(Retransmission Timeout)重傳超時時間
RTO依據(jù)RTT推導而得(經(jīng)典算法RFC793):
更新RTT=αR + (1-α)M #M為當前測量的往返間隔;R為以前測量的往返間隔;α是一個值為0.9的平滑因子
RTO=βRTT #β推薦是2
--> RTO = 2RTT
[經(jīng)典重傳]
從服務端發(fā)送的ack號開始重傳沧卢,若服務器沒收到客戶端的序列號為1及以后的所有數(shù)據(jù)包蚁堤,則發(fā)送ack=1給客戶端,客戶端將序列號為1及之后的所有數(shù)據(jù)打包,重新發(fā)送給服務器披诗。需要重傳從1開始之后的所有數(shù)據(jù)包撬即,效率不高。
[快速選擇性重傳]
1.發(fā)現(xiàn)有數(shù)據(jù)包丟失時呈队,接收方會返回3個重復的ACK(tcp dup-ack)剥槐,告知發(fā)送方某個序列號的數(shù)據(jù)包需要重傳。
2.發(fā)送方只需要發(fā)送丟失序列號的數(shù)據(jù)包宪摧,提高數(shù)據(jù)恢復的效率;通過tcp頭部的SACK字段來告知接收方已經(jīng)接受到了哪些序列號的數(shù)據(jù)包粒竖,請不要重傳這些數(shù)據(jù)包。
TCP擁塞控制-慢啟動几于、擁塞避免蕊苗、快重傳、快啟動
參考文章
參考視頻
擁塞:指的是過多的數(shù)據(jù)注入到網(wǎng)絡中沿彭,路由器或者鏈路過載朽砰。當出現(xiàn)丟包情況,則可以認為是出現(xiàn)了擁塞喉刘。
擁塞窗口:cwnd
慢啟動門限:ssthresh
慢啟動算法:當cwnd < ssthresh時瞧柔,cwnd=1,2睦裳,4造锅,8指數(shù)增長。
擁塞避免:當cwnd = ssthresh時廉邑,cwnd+=1备绽。
參考文章內(nèi)容:
一般原理:發(fā)生擁塞控制的原因:資源(帶寬、交換節(jié)點的緩存鬓催、處理機)的需求>可用資源。
作用:擁塞控制就是為了防止過多的數(shù)據(jù)注入到網(wǎng)絡中恨锚,這樣可以使網(wǎng)絡中的路由器或者鏈路不至于過載宇驾。擁塞控制要做的都有一個前提:就是網(wǎng)絡能夠承受現(xiàn)有的網(wǎng)絡負荷。
對比流量控制:擁塞控制是一個全局的過程猴伶,涉及到所有的主機课舍、路由器、以及降低網(wǎng)絡相關的所有因素他挎。流量控制往往指點對點通信量的控制筝尾。是端對端的問題。
擁塞窗口:發(fā)送方為一個動態(tài)變化的窗口叫做擁塞窗口办桨,擁塞窗口的大小取決于網(wǎng)絡的擁塞程度筹淫。發(fā)送方讓自己的發(fā)送窗口=擁塞窗口,但是發(fā)送窗口不是一直等于擁塞窗口的呢撞,在網(wǎng)絡情況好的時候损姜,擁塞窗口不斷的增加饰剥,發(fā)送方的窗口自然也隨著增加,但是接受方的接受能力有限摧阅,在發(fā)送方的窗口達到某個大小時就不在發(fā)生變化了汰蓉。
發(fā)送方如果知道網(wǎng)絡擁塞了呢?發(fā)送方發(fā)送一些報文段時棒卷,如果發(fā)送方?jīng)]有在時間間隔內(nèi)收到接收方的確認報文段顾孽,則就可以人為網(wǎng)絡出現(xiàn)了擁塞。
慢啟動算法的思路:主機開發(fā)發(fā)送數(shù)據(jù)報時比规,如果立即將大量的數(shù)據(jù)注入到網(wǎng)絡中若厚,可能會出現(xiàn)網(wǎng)絡的擁塞。慢啟動算法就是在主機剛開始發(fā)送數(shù)據(jù)報的時候先探測一下網(wǎng)絡的狀況苞俘,如果網(wǎng)絡狀況良好盹沈,發(fā)送方每發(fā)送一次文段都能正確的接受確認報文段。那么就從小到大的增加擁塞窗口的大小吃谣,即增加發(fā)送窗口的大小乞封。
例子:開始發(fā)送方先設置cwnd(擁塞窗口)=1,發(fā)送第一個報文段M1,接收方接收到M1后岗憋,發(fā)送方接收到接收方的確認后肃晚,把cwnd增加到2,接著發(fā)送方發(fā)送M2仔戈、M3关串,發(fā)送方接收到接收方發(fā)送的確認后cwnd增加到4,慢啟動算法每經(jīng)過一個傳輸輪次(認為發(fā)送方都成功接收接收方的確認)监徘,擁塞窗口cwnd就加倍晋修。
擁塞避免:為了防止cwnd增加過快而導致網(wǎng)絡擁塞,所以需要設置一個慢開始門限ssthresh狀態(tài)變量(我也不知道這個到底是什么凰盔,就認為他是一個擁塞控制的標識),它的用法:
1. 當cwnd < ssthresh,使用慢啟動算法墓卦,
2. 當cwnd > ssthresh,使用擁塞控制算法,停用慢啟動算法户敬。
3. 當cwnd = ssthresh落剪,這兩個算法都可以。
擁塞避免的思路:是讓cwnd緩慢的增加而不是加倍的增長尿庐,每經(jīng)歷過一次往返時間就使cwnd增加1忠怖,而不是加倍,這樣使cwnd緩慢的增長抄瑟,比慢啟動要慢的多凡泣。
無論是慢啟動算法還是擁塞避免算法,只要判斷網(wǎng)絡出現(xiàn)擁塞,就要把慢啟動開始門限(ssthresh)設置為設置為發(fā)送窗口的一半(>=2)问麸,cwnd(擁塞窗口)設置為1往衷,然后在使用慢啟動算法,這樣做的目的能迅速的減少主機向網(wǎng)絡中傳輸數(shù)據(jù)严卖,使發(fā)生擁塞的路由器能夠把隊列中堆積的分組處理完畢席舍。擁塞窗口是按照線性的規(guī)律增長,比慢啟動算法擁塞窗口增長塊的多哮笆。
實例:1.TCP連接進行初始化的時候来颤,cwnd=1,ssthresh=16。
2.在慢啟動算法開始時稠肘,cwnd的初始值是1福铅,每次發(fā)送方收到一個ACK擁塞窗口就增加1,當ssthresh =cwnd時项阴,就啟動擁塞控制算法滑黔,擁塞窗口按照規(guī)律增長,
3.當cwnd=24時环揽,網(wǎng)絡出現(xiàn)超時略荡,發(fā)送方收不到確認ACK,此時設置ssthresh=12,(二分之一cwnd),設置cwnd=1,然后開始慢啟動算法歉胶,當cwnd=ssthresh=12,慢啟動算法變?yōu)閾砣刂扑惴ㄑ炊担琧wnd按照線性的速度進行增長。
AIMD(加法增大乘法減小)
1. 乘法減型ń瘛:無論在慢啟動階段還是在擁塞控制階段粥谬,只要網(wǎng)絡出現(xiàn)超時,就是將cwnd置為1辫塌,ssthresh置為cwnd的一半漏策,然后開始執(zhí)行慢啟動算法(cwnd<ssthresh)。
2. 加法增大:當網(wǎng)絡頻發(fā)出現(xiàn)超時情況時臼氨,ssthresh就下降的很快哟玷,為了減少注入到網(wǎng)絡中的分組數(shù),而加法增大是指執(zhí)行擁塞避免算法后一也,是擁塞窗口緩慢的增大,以防止網(wǎng)絡過早出現(xiàn)擁塞喉脖。
這兩個結合起來就是AIMD算法椰苟,是使用最廣泛的算法。擁塞避免算法不能夠完全的避免網(wǎng)絡擁塞树叽,通過控制擁塞窗口的大小只能使網(wǎng)絡不易出現(xiàn)擁塞舆蝴。
快重傳:
快重傳算法要求首先接收方收到一個失序的報文段后就立刻發(fā)出重復確認,而不要等待自己發(fā)送數(shù)據(jù)時才進行捎帶確認。接收方成功的接受了發(fā)送方發(fā)送來的M1洁仗、M2并且分別給發(fā)送了ACK层皱,現(xiàn)在接收方?jīng)]有收到M3,而接收到了M4赠潦,顯然接收方不能確認M4叫胖,因為M4是失序的報文段。如果根據(jù)可靠性傳輸原理接收方什么都不做她奥,但是按照快速重傳算法瓮增,在收到M4、M5等報文段的時候哩俭,不斷重復的向發(fā)送方發(fā)送M2的ACK,如果接收方一連收到三個重復的ACK,那么發(fā)送方不必等待重傳計時器到期绷跑,由于發(fā)送方盡早重傳未被確認的報文段。
快恢復:
1. 當發(fā)送發(fā)連續(xù)接收到三個確認時凡资,就執(zhí)行乘法減小算法砸捏,把慢啟動開始門限(ssthresh)減半,但是接下來并不執(zhí)行慢開始算法隙赁。
2. 此時不執(zhí)行慢啟動算法垦藏,而是令cwnd = ssthresh = 0.5*當前cwnd, 然后執(zhí)行擁塞避免算法鸳谜,使擁塞窗口緩慢增大膝藕。
路由器和交換機的區(qū)別
1.路由器是三層設備,通過路由表查詢IP咐扭,實現(xiàn)路由芭挽,路由表里包含目的網(wǎng)段,子網(wǎng)掩碼蝗肪,下一跳接口袜爪;路由器是連接不同局域網(wǎng)的設備。
2.交換機是二層設備薛闪,里面存有MAC地址表辛馆,通過查詢MAC地址,找到同一局域網(wǎng)的設備豁延。交換機是同一局域網(wǎng)的設備昙篙。
tcp syn wait
TCP握手丟包咋辦
服務器ACK和SYN包丟了,那重傳時間怎么得來的
死鎖
死鎖指的是兩個或多個進程在執(zhí)行的過程中诱咏,因為爭奪資源而相互等待的現(xiàn)象苔可,此時系統(tǒng)處于死鎖狀態(tài),相互等待的進程成為死鎖進程袋狞。比如:線程A鎖住記錄1而等待記錄2焚辅,線程B鎖住記錄2而等待記錄1映屋,那么AB線程將處于永遠等待的狀態(tài),此時產(chǎn)生了死鎖同蜻。所以一般要用:try-finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼棚点。
try{
/執(zhí)行代碼
}finally{
/把鎖打開
}
操作系統(tǒng)原理
信息通信
進程通信
進程和線程的區(qū)別
- 進程是資源分配和調(diào)度的獨立單元,線程是資源調(diào)度的基本單元湾蔓;
- 同一個進程里可以包含多條線程瘫析,線程共享整個進程的資源;
- 進程結束后它所擁有的所有進程都將銷毀卵蛉,而線程結束不影響同一進程的其他線程颁股;
- 線程是輕量級的進程,它的創(chuàng)建和銷毀所需時間都比進程小很多傻丝。
例子:
打開QQ甘有,開了一個進程;打開迅雷葡缰,開了一個進程亏掀;
使用QQ傳輸文字,開了一個線程泛释;傳輸語音滤愕,開了一個線程。
所以打開一個軟件相等開了一個進程怜校,在軟件運行過程里间影,多個任務支撐著軟件的運行,多個任務指的就是多個線程茄茁。
Mysql語句
select columns from table魂贬; #查詢數(shù)據(jù)
insert into table () values (); #插入數(shù)據(jù)
updata table set 列=?where 列=裙顽?; #修改某一行的某一列的值
delete from talbe where 列=付燥?; #刪除某一行
order by;
group_contat()
contat_ws()
數(shù)據(jù)庫的索引
軟連接和硬連接
鏈接是一種文件復用(共享)的方式:
- 硬鏈接:ln odlfile newfile (hard link)
1.概念:多個文件共用一個inode索引節(jié)點,此inode指向一個data block愈犹,刪除其中一個文件不會對block的數(shù)據(jù)刪除键科。
2.應用:對文件進行拷貝,防止誤刪文件漩怎;如果復制的文件太大勋颖,可以創(chuàng)建硬鏈接的方式,硬鏈接只需要創(chuàng)建entry即文件與inode的對應關系勋锤,而復制則需要申請新的inode和block饭玲,浪費磁盤資源;
- 軟鏈接: ln -s oldfile newfile (符號鏈接)
1.概念:inode指向的block存放的是文件的路徑怪得,如果刪除了源文件咱枉,則出現(xiàn)死鏈接。
2.應用:相當于windows的快捷方式徒恋,起一個方便的名字的文件來對源文件進行管理蚕断,刪除新建的文件不會對源文件造成影響;
Linux的資源查看
useradd #創(chuàng)建用戶
cat /proc/cpuinfo #查看cpu信息
cat /proc/meminfo #查看內(nèi)存信息
如何查看所有用戶的登錄信息
last 命令:
功能說明:列出目前與過去登入系統(tǒng)的用戶相關信息入挣。使用root登陸可查看用戶登陸歷史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10 #查看最近10次用戶歷史操作記錄
root pts/1 :0.0 Wed Dec 18 09:54 still logged in
root pts/4 :0.0 Wed Dec 18 09:43 - 09:48 (00:04)
root pts/1 :0.0 Wed Dec 18 09:43 - 09:48 (00:05)
root pts/3 192.168.103.79 Wed Dec 18 09:41 - 12:40 (02:59)
root pts/4 :0.0 Wed Dec 18 09:28 - 09:30 (00:01)
root pts/3 :0.0 Wed Dec 18 09:27 - 09:30 (00:02)
root pts/2 192.168.103.29 Wed Dec 18 09:27 still logged in
root pts/1 :0.0 Wed Dec 18 09:27 - 09:42 (00:15)
root pts/2 :0.0 Wed Dec 18 09:23 - 09:25 (00:01)
root pts/1 :0.0 Wed Dec 18 09:22 - 09:25 (00:02)
top命令的負載均衡的值怎么算出來的
- top命令是系統(tǒng)性能監(jiān)控工具亿乳,能實時顯示系統(tǒng)中各個進程的資源占用情況。
- 系統(tǒng)負載顯示的是最近1分鐘径筏,5分鐘葛假,15分鐘的系統(tǒng)平均負載;load average是特定時間內(nèi)運行隊列中的平均進程數(shù)滋恬。
- 參考文章_1
- 參考文章_2
windows和linux的差別
- Linux是以開發(fā)者為中心的操作系統(tǒng)聊训,windows是以消費者為中心的操作系統(tǒng);
- Linux里面恢氯,一切皆文件带斑,命令界面為主,圖像界面為輔勋拟,而windows是以圖形界面為主勋磕;
- Linux系統(tǒng)更安全,因為關注度低敢靡,流行性沒有windows廣挂滓,所以攻擊者為了使自己的病毒能廣泛傳播,所以更多的是針對windows系統(tǒng)的病毒啸胧,倘若linux有一天也和windows一樣廣泛使用赶站,那么linux自然也會變得沒那么安全了;
- Linux免費吓揪,可以免費升級版本亲怠,而windows需要付費;
- linux升級到最新版本比舊版本更快柠辞,而windows相反团秽,若xp都卡,裝win10更卡叭首;
- Linux可以多用戶登陸
dns的配置文件是
python編譯過程(預先編譯還是习勤?)
Python裝飾器
寫個快排
快速排序_O(nlogn)
原理:
隨機的在數(shù)組中選一個數(shù),小于等于它的數(shù)焙格,統(tǒng)一地放在這個數(shù)的左邊图毕,大于它的數(shù)放在這個數(shù)的右邊;接下來對左右兩個部分眷唉,分別遞歸調(diào)用快速排序的過程予颤,這樣就使得整個數(shù)組都有序了囤官。
In [26]: def qiucksort(A):
...: if A ==[]:
...: return A
...: else:
...: key=n[0]
...: left=qiucksort([i for i in A[1:] if i <key]) #使用列表推導式,生成的依然是一個list
...: right=qiucksort([i for i in A[1:] if i >=key])
...: return left+[key]+right
In [27]: A=[1, 2, 43, 54, 2, 23, 4, 2]
In [28]: qiucksort(A)
Out[28]: [1, 2, 2, 2, 4, 23, 43, 54]
Python如何復制一個數(shù)組
【場景題】
微信轉賬時數(shù)據(jù)庫的處理過程
問TCP timewait太多是什么原因
現(xiàn)在ping百度失敗了蛤虐,然后怎么做党饮?
【軟問題】
自我介紹
崗位的理解
個人的優(yōu)勢
你是哪里的?(地區(qū))
說一下你的實習情況驳庭,遇到什么問題刑顺,又是如何解決的
騰訊業(yè)務運維崗面經(jīng)
網(wǎng)絡
為什么會出現(xiàn)擁塞和擁塞避免方法(慢啟動和乘法減小)
- 當網(wǎng)絡中有太多數(shù)據(jù)饲常,超過了網(wǎng)絡中的路由器或者鏈路所能存儲的資源大小蹲堂,這時候就出現(xiàn)了擁塞,網(wǎng)絡的傳輸性能就會下降贝淤。
- 擁塞避免方法包括慢啟動和擁塞避免柒竞,快重傳和快恢復。
重要:負載均衡題目霹娄,分層次去解決改進hash算法能犯,五元組計算hash改為六元組計算,把鏈路狀態(tài)考慮進去
五種arp和應用環(huán)境
ARP:(address resolution protocol)地址解析協(xié)議犬耻,用于實現(xiàn)從IP地址到MAC地址的映射
- 正向ARP:廣播出去踩晶,單播回來,加入arp表中枕磁,之后才能通信躲查。通信之前若arp表沒有找到映射热某,則發(fā)送正向arp勾效。ping命令:
success.8鞫帧!B偌拧学密!
,第一個.就是arp請求 - 翻轉ARP:MAC到IP的映射传藏,只要應用于無盤工作站腻暮。
- 代理ARP:局域網(wǎng)內(nèi)部主機發(fā)起跨網(wǎng)段的ARP請求的時候,出口路由器或者網(wǎng)關就會把自身的mac地址回復該請求毯侦,這個過程就叫代理ARP哭靖。
- 免費ARP:檢測局域網(wǎng)內(nèi)IP地址沖突。源目IP都是自己侈离。IP地址修改或者 DHCP剛獲取地址的時候试幽,會發(fā)送免費ARP。
- 逆向ARP:存在于幀中繼網(wǎng)絡(無MAC地址)卦碾,實現(xiàn)IP和DLCI地址的映射
ARP攻擊:假設有主機B請求主機A的mac地址铺坞,攻擊者截獲這個請求起宽,將自己的mac地址回復該請求,這樣主機B發(fā)送給A的數(shù)據(jù)就會發(fā)送到攻擊者济榨。
TCP/UDP區(qū)別
- tcp是面向連接燎含,發(fā)送數(shù)據(jù)之前需要建立連接;udp是無連接腿短,即發(fā)送數(shù)據(jù)之前不需要建立連接;
- tcp保證數(shù)據(jù)的正確性绘梦,提供可靠的服務(確認機制和重傳機制)橘忱,tcp發(fā)送的數(shù)據(jù)保證完整性,無差錯不丟失卸奉,按序達到钝诚;udp使用盡最大努力交付,不保證可靠交付榄棵,可能丟包凝颇;
- tcp面向字節(jié)流,udp面向報文疹鳄;
- tcp對系統(tǒng)資源要求多拧略,udp對系統(tǒng)資源要求更少;
- 傳輸即時信息如視頻瘪弓,語音等使用udp垫蛆,沒有實時傳輸需求則可以考慮使用tcp。
vlan作用
1.在交換機上劃分vlan腺怯,同一vlan內(nèi)的主機可以直接通信袱饭,vlan間的主機不能直接通信
2.隔離廣播域,將廣播域限制在一個vlan內(nèi)呛占,節(jié)省了帶寬虑乖,提高網(wǎng)絡處理能力。
dns域名解析流程:www.qq.com
1.先查看本地host文件是否由域名和ip的映射
2.若沒有向本地dns服務器請求晾虑;
3.本地dns服務器向dns根服務器進行查詢,根dns服務器告訴本地dns服務器可以到相應的域.com服務器上查詢疹味;
4.本地dns服務器向域.com服務器上查詢,.com服務器告訴本地dns服務器可以到域qq.com服務器查詢走贪;
5.本地dns服務器向域qq.com服務器上查詢佛猛,qq.com服務器告訴本地dns服務器www.qq.com主機的地址;
HTTP協(xié)議坠狡,訪問www.qq.com继找,DNS的時候基于什么協(xié)議和端口號,TCP頭部
1.DNS服務器間進行域傳輸?shù)臅r候用TCP 53
2.客戶端查詢DNS服務器時用 UDP 53
抓包逃沿,Linux下用什么軟件什么命令婴渡,如何抓包分析
tcpdump
數(shù)據(jù)包如何封裝幻锁,路由器如何轉發(fā)數(shù)據(jù)包
對https的了解
http+ssl
抓包分析里面的字段,畫IP頭部
數(shù)據(jù)庫
數(shù)據(jù)庫的引擎边臼,MyISAM和InnoDB的區(qū)別哄尔,哪一個硬件使用率最高,分別是行鎖還是表鎖
sql命令(增刪查改柠并,授權)
1. insert into 表(列1,列2,列3) values (?,?,? ) #插入
2. delete from 表 where 列=岭接?; #刪除
3. updata 表 set 列=? where 列=臼予?; #修改
4. select * from 表鸣戴; #查詢
5. grant #授權
Linux系統(tǒng)
掛載,卸載粘拾,加入新用戶
訪問根文件系統(tǒng)外的文件通過掛載來實現(xiàn)窄锅。
mount #掛載
umunt #卸載
useradd #加入新用戶
對Linux發(fā)行版本了解
Debian,F(xiàn)edora缰雇,Kali Linux入偷,Centos,Ubuntu械哟。
文件系統(tǒng)類型與區(qū)別
- NTFS:支持超大單個文件疏之,更好的安全性和穩(wěn)定性。
- FAT32:是分區(qū)格式的一種暇咆,分區(qū)內(nèi)無法存放大于4GB的單個文件
查看系統(tǒng)資源占用情況
top
查看cpu負載情況
1. top命令的load average可以知道cpu的負載情況
2. uptime
針對cpu負載情況設計合適的算法來做監(jiān)控
查看磁盤的IO負載
iostat
查看硬盤使用率的命令
- 外部存儲器(斷電里面的信息還在):磁盤=硬盤+軟盤
- 內(nèi)部存儲器(斷電里面的信息就沒有了):內(nèi)存
- 查看磁盤使用率:df -h
- 查看硬盤分區(qū):fdick -l
查看文件夾大小的命令
du -sh file
查看線程的命令
1.ps
2.top
查看網(wǎng)絡連接數(shù)狀態(tài)的命令体捏,netstat,寫出netstat顯示的每一列內(nèi)容
Active Internet connections (w/o servers)
#協(xié)議 接收隊列 發(fā)送隊列 本地地址 目的地址 狀態(tài)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
Apache的日志里面的格式糯崎,寫腳本抓取耗時長的那一行
安全
數(shù)字簽名與數(shù)字證書
- 數(shù)字簽名=私鑰加密(hash(信件)),保證消息完整性几缭,不可抵賴性,防篡改冒充偽造沃呢。
- 數(shù)字證書=CA私鑰加密(客戶公鑰+其他信息)
對滲透了解
對稱加密與非對稱加密年栓,各自優(yōu)缺點,應用場景
編程
C語言數(shù)組和鏈表的區(qū)別
- 數(shù)組是一組具有相同類型變量的集合薄霜,里面存放的變量稱為數(shù)組的元素某抓。
1.每個元素在內(nèi)存中是連續(xù)存放的,如果需要插入一個元素惰瓜,則需要移動后面的大量元素否副。
2.每個元素都有一個編號,叫做下標崎坊,通過下標可以快速找到某個元素备禀。 - 鏈表在內(nèi)存中不是順序存儲的,鏈表由多個節(jié)點連接而成,每個節(jié)點由數(shù)據(jù)域和指針域曲尸,指針域存放指向下一個節(jié)點的地址赋续。
1.增加或者刪除元素只需要修改指針就可以了。
2.想要尋找某個元素另患,需要從第一個元素開始纽乱,遍歷鏈表。
總結:需要快速訪問數(shù)據(jù)昆箕,很少插入或刪除數(shù)據(jù)鸦列,則使用數(shù)組;若經(jīng)常插入或刪除數(shù)據(jù)鹏倘,則使用鏈表敛熬。