來源:北大青鳥總部 2019年12月17日 09:04
最近,小編在整理python面試基礎知識,看了很多博客、文章和咨詢了一些大廠公司大牛。了解到,在python面試的時候,不僅要求你有項目經(jīng)驗,還要考試代碼呢!今天,小編和大家分享一下python面試基礎知識,希望幫忙大家找到理想的工作!
一、簡述TCP/UDP的區(qū)別?
TCP和UDP是OSI模型中的運輸層中的協(xié)議。
回答這個問題主要從一下幾點來說:
1、是否面向連接
TCP面向連接,UDP面向非連接即發(fā)送數(shù)據(jù)前不需要建立鏈接
2、可靠性
TCP提供可靠的服務(數(shù)據(jù)傳輸),UDP無法保證
3、有序性
TCP有序,UDP無序
4、速度
TCP數(shù)據(jù)傳輸慢,UDP數(shù)據(jù)傳輸快
5、量級
二、能說一下你了解的端口及對應的服務?
21 FTP
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
6379 Redis
三、能說幾個常見HTTP狀態(tài)碼及其含義嗎?
2xx 正常
3xx 重定向
4xx 客戶端出現(xiàn)錯誤
403 權限被拒絕
404 請求資源不存在
5xx 服務器異常
503 服務器暫時處于超負載或正在進行停機維護,無法處理請求
四、簡單說說TCP的三次握手和四次揮手
1、三次握手示意圖
第一次握手:客戶端發(fā)送SYN包(seq=x)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認
第二次握手:服務器受到SYN包,必須確認客戶的SYN(ack=x+1),同時自己也發(fā)送一個SYN包(seq=y),即SYN+ACK包。此時服務器進入SYN_RECV狀態(tài)
第三次握手:客戶端受到SYN+ACK包,向服務器發(fā)送確認包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務器端進入ESTABLISHED狀態(tài),完成三次握手
2、四次揮手示意圖
第一次揮手:Client發(fā)送一個FIN,用來關閉Client到Server的數(shù)據(jù)傳送,Client進入FIN_WAIT_1狀態(tài)
第二次揮手:Server收到FIN后,發(fā)送一個ACK給Client,確認序號為收到序號+1,Server進入CLOSE_WAIT狀態(tài)
第三次揮手:Server發(fā)送一個FIN,用來關閉Server到Client的數(shù)據(jù)傳送,Server進入LAST_ACK狀態(tài)
第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態(tài),完成四次揮手
五、為什么需要三次握手才能建立連接?
為了初始化Sequence Number的初始值
六、為什么需要四次揮手才能斷開連接?
因為服務器與客戶端是全雙工,即發(fā)送方和接收方都需要FIN報文和ACK報文
七、為什么會有TIME_WAIT狀態(tài)(2MSL)?
1、確保有足夠的時間讓對方收到ACK包
2、避免新舊連接混淆
八、TCP如何保證可靠性傳輸?shù)模?/span>
校驗和
序列號
確認應答
超時重傳
連接管理
流量控制
擁塞控制
九、POST和GET請求的區(qū)別
1.GET請求的數(shù)據(jù)會附在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,POST把提交的數(shù)據(jù)則放置在是HTTP包的包體中。
2.GET的長度受限于url的長度,而url的長度限制是特定的瀏覽器和服務器設置的,理論上GET的長度可以無限長。
3.POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力
4.在ASP中,服務端獲取GET請求參數(shù)用Request.QueryString,獲取POST請求參數(shù)用Request.Form。
5.POST的安全性要比GET的安全性高
十、HTTP和HTTPS的區(qū)別
http的中文叫做超文本傳輸協(xié)議,它負責完成客戶端到服務端的一系列操作,是專門用來傳輸注入HTML的超媒體文檔等web內(nèi)容的協(xié)議,
它是基于傳輸層的TCP協(xié)議的應用層協(xié)議
https:https是基于安全套接字的http協(xié)議,也可以理解為是http+ssl/tls(數(shù)字證書)的組合
http和https的區(qū)別:
1、HTTP 的 URL 以 http:// 開頭,而 HTTPS 的 URL 以 https:// 開頭
2、HTTP 是不安全的,而 HTTPS 是安全的
3、HTTP 標準端口是 80 ,而 HTTPS 的標準端口是 443
4、在 OSI 網(wǎng)絡模型中,HTTPS的加密是在傳輸層完成的,因為SSL是位于傳輸層的,TLS的前身是SSL,所以同理
5、HTTP無需認證證書,而https需要認證證書
十一、 為什么HTTPS安全
HTTPS是HTTP和SSL組合而成的,在傳輸層使用了SSL進行加密,保證了只有擁有私鑰的才能看到信息
十二、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么?
1.在瀏覽器端輸入網(wǎng)站的url地址
只有知道了一個網(wǎng)站的url地址才能訪問到這個網(wǎng)站
2.瀏覽器查找緩存
瀏覽器會查找瀏覽器緩存,系統(tǒng)緩存,路由緩存,如果沒有的話 繼續(xù)下一步,如果有的話,直接顯示
注意:瀏覽器會把訪問過得web網(wǎng)站資源(html 圖片)緩存起來,而判斷是否使用緩存的條件有以下幾種:
是否有這個網(wǎng)站的緩存
這個網(wǎng)站的緩存是否過期,具體看Cache-Control 中緩存的有效時間
跟服務器進行協(xié)商是否使用緩存,如果上次緩存的時候有Last-modified 和 Etag 字段,本次請求就會加上If-Modified-Since(上次請求資源的時間)和If-None-Match(上次資源的修改時間)
3.通過DNS獲取url對應的ip地址
現(xiàn)在本機的host文件中查找是否有這個url對應的ip,如果沒有的話,就請求DNS進行ip地址的獲取
4.建立TCP鏈接
http在工作之前,需要客戶端和服務端建立鏈接,這個鏈接的建立是通過tcp(三次握手)來完成的,因為http是比tcp更高層的協(xié)議,在網(wǎng)絡協(xié)議的建立中,不談底層談高層都是在耍流氓,所以想要讓http進行工作,需要tcp首先建立鏈接
5.瀏覽器向web服務器發(fā)送請求
一旦鏈接已經(jīng)建立,瀏覽器就可以給web服務器發(fā)送請求命令,比如 : GET/deom/hello.jsp HTTP/1.1
6.瀏覽器給web服務器發(fā)送請求頭信息
瀏覽器在發(fā)送了請求后,還要給web服務器請求頭信息,比如accept-charset(瀏覽器端指定的字符集),最后發(fā)送一個空的請求頭代表請求發(fā)送完畢,注意:如果是post提交,則會繼續(xù)提交請求體
7.web服務器進行應答
應答的第一部分是http版本號,第二部分是協(xié)議的狀態(tài)碼,比如:HTTP/1.1 200 OK
8.web服務器發(fā)送應答頭消息
web服務器給瀏覽器發(fā)送應答頭消息,也就是關于web服務器自己的信息,最后發(fā)送一個空白行代表應答結束
9.web服務器發(fā)送數(shù)據(jù)
以應答頭里面的content-type所描述的格式發(fā)送數(shù)據(jù)
10.web服務器關閉鏈接
web服務器向瀏覽器發(fā)送了應答數(shù)據(jù)之后,就要關閉tcp鏈接(tcp四次握手關閉鏈接),如果添加了connection:keep-alive,那么就還會保持鏈接狀態(tài)
以上,就是python面試基礎知識,小編還會陸續(xù)更新哦!希望大家都能找到合適的工作!
————————————————
版權聲明:本文為CSDN博主「單車欲問邊」的原創(chuàng)文章。