Python基礎面試題。很基礎也特別容易被面試到。
1.HTTP和Session的區別
http是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。基於TCP/IP通訊協議來傳送資料,主要特點:【1、簡單快速,請求方法:get,head,post,因為協議簡單,使的HTTP伺服器的程式規模小,通訊速度快。2、靈活,HTTP允許傳輸任意型別的資料物件。3、無連線,限制每次連線只處理一個請求,伺服器處理完請求,並受到客戶的應答後,即斷開連線,這種方式可以節省傳輸時間。4、無狀態,指協議對事務處理能力沒有記憶能力,如果後續處理需要前面的資訊,他必須重傳,導致每次連線傳送的資料量增大。5、支援b/s,c/s模式】
客戶端傳送一個HTTP請求到伺服器的請求訊息包括:請求行(用來說明請求型別POST,GET,要訪問的資源以及所使用的http版本),請求頭(User-Agent),空行,請求資料四個部分。
HTTP響應由四個部分組成:狀態行(http版本 ,狀態碼,狀態訊息),訊息報頭(客戶端要使用的一些附加資訊),空行,響應正文(伺服器返回給客戶端的文字資訊)。
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //伺服器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
GET 請求指定的頁面資訊,並返回實體主體。
HEAD 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
PUT 從客戶端向伺服器傳送的資料取代指定的文件的內容。
DELETE 請求伺服器刪除指定的頁面。
CONNECT HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
OPTIONS 允許客戶端檢視伺服器的效能。
TRACE 回顯伺服器收到的請求,主要用於測試或診斷。
2、Session:session是一種會話機制,用來儲存特定使用者會話所需的資訊。當用戶是第一次訪問一個伺服器的時候,如果該伺服器啟用session,伺服器就要給該使用者建立一個session並生成一個sessionID,session儲存在伺服器端,sessionId儲存在客戶端,sessionID 是唯一的。當用戶下次再訪問該伺服器的時候,伺服器首先檢查發來的請求是否包含一個sessionID ,如果包含,就在伺服器中查詢與sessionID匹配的session,找到之後,給客戶端返回響應。
Cookie:因為http是一種無狀態協議,所以有了cookie的產生。cookie由伺服器產生,然後傳送給客戶端,然後儲存在客戶端的記憶體或硬碟中。儲存在記憶體的話,瀏覽器關閉就消失了,時間短暫,儲存在硬碟的話,可以設定過期時間,除非手動刪除或者時間過期才會消失。當用戶向伺服器傳送請求的時候,伺服器會給此使用者生成一個唯一的識別碼(Session ID ,即cookie),建立一個cookie物件,傳送給客戶端,然後客戶端儲存起來。當再次請求該網站伺服器的時候,客戶端會在記憶體中查詢是否有此cookie,如果有則把cookie附在請求資源的http請求頭上傳送給伺服器,cookie的根本作用是在客戶端儲存使用者訪問網站的一些資訊,典型應用有:記住密碼,下次自動登入,購物車功能,記錄使用者瀏覽的資料。cookie的大小限制在4kb左右。
3、URL與URI的區別
URI是統一資源識別符號,用來唯一的標識一個資源(HTML文件,影象,視訊片段)。URI一般有三部分組成:訪問資源的命名機制,存放資源的主機名,資源自身的名稱。
URL:統一資源定位器,是一種具體的URI,URL可以用來標識一個資源。由三部分組成:協議/主機IP地址,埠號/主機資源的具體地址,如目錄檔名。
4.在視訊電話通訊中往往使用UDP協議,為什麼?
UDP是一個無連線的傳輸層協議,傳輸資料之前不需要在客戶端與伺服器之間建立連線,傳輸速度快。可靠性不高,資料可能會丟失。適用於傳輸量小的場景。
5、TCP滑動視窗機制:
1:首先是AB之間三次握手建立TCP連線。在報文的互動過程中,A將自己的緩衝區大小(視窗大小)3傳送給B,B同理,這樣雙方就知道了對端的視窗大小。
2:A開始傳送資料,A連續傳送3個單位的資料,因為他知道B的緩衝區大小。在這一波資料傳送完後,A就不能再發了,需等待B的確認。
3:A傳送過來的資料逐漸將緩衝區填滿。
4:這時候緩衝區中的一個報文被程序讀取,緩衝區有了一個空位,於是B向A傳送一個ACK,這個報文中指示視窗大小為1。A收到B發過來的ACK訊息,並且知道B將視窗大小調整為1,因此他只發送了一個單位的資料並且等待B的下一個確認報文。
5:如此反覆。
6、TCP/IP協議
總的來說分為:應用層,運輸層,網路層,鏈路層。再往下的話就是硬體層了。TCP/IP不是一個協議,而是一個協議族,裡面包含了太多的協議,如IP協議,IMCP協議,TCP協議等。然後這個TCP/IP的作用的主要是給不同的作業系統建立連線,可以達到不同作業系統能進行資訊交流。更加方便的為人類服務。(好像聖經中上帝打亂了各地人的口音,讓他們無法合作一樣。計算機使用者意識到,計算機只是單兵作戰並不會發揮太大的作用。只有把它們聯合起來,電腦才會發揮出它最大的潛力。於是人們就想方設法的用電線把電腦連線到了一起)
7、分別闡述程序、執行緒、協程的區別和聯絡。
程序是系統進行資源分配和排程的基本單位 。在早期面向程序設計的計算機結構中,程序是程 序的基本執行實體,在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。
執行緒:有時被稱為輕量級程序,是程式執行流的最小單元,另外執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位。
協程:協程的概念很抽象,沒有做出自己的定義,協程就想是程序中的執行緒一個,一個執行緒裡裡面也可以開闢多個協程,協程又與執行緒類似,每個協程表示一個執行單元。
8、scrapy中的Spider和CrawlSpider有什麼區別?
9.scrapy中pipleline的主要作用?
一個是查重並丟棄,第二是將爬取的資料儲存在檔案或者資料庫中。
10.描述scrapy進行網頁爬取的主要流程?
1、爬蟲引擎獲得初始請求開始抓取。
2、爬蟲引擎開始請求排程程式,並準備對下一次的請求進行抓取。
3、爬蟲排程器返回下一個請求給爬蟲引擎。
4、引擎請求傳送到下載器,通過下載中介軟體下載網路資料。
5、一旦下載器完成頁面下載,將下載結果返回給爬蟲引擎。
6、引擎將下載器的響應通過中介軟體返回給爬蟲進行處理。
7、爬蟲處理響應,並通過中介軟體返回處理後的items,以及新的請求給引擎。
8、引擎傳送處理後的items到專案管道,然後把處理結果返回給排程器,排程器計劃處理下一個請求抓取。
9、重複該過程(繼續步驟1),直到爬取完所有的url請求。
11、寫出使用正則表示式匹配中國運營商手機號的正則表示式(不含港澳臺地區)
^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$
12.有25匹馬,速度都不同,但每匹馬的速度都是定值。現在只有5條賽道,無法計時,即每賽一場最多隻能知道5匹馬的相對快慢。問最少賽幾場可以找出25匹馬中速度最快的前3名?(寫出過程即可)
25匹馬。可以分為五組,然後進行五次比賽,假設每一組的第一名分別為:A1,B1,C1,D1,E1。然後A1,B1,C1,D1,E1進行一場比賽,假設比賽成績A1最快,且A1>B1>C1>D1>E1,所以A1為第一名,那A2,A3,B1,B2,C1都有可能為第二名第三名,所以A2,A3,B1,B2,C1進行一場比賽取出前兩名即可得出前三名。
13.有兩柱不均勻的香,每柱香燃燒完需要1個小時,問:怎樣用兩柱香度量出一個15分鐘的時間段?
因為一炷香燒完需要一個小時,那麼一炷香點兩頭,一炷香點一頭,一炷香燒完就是半個小時,然後再將另一根香的另一頭點上,然後燒完就是15分鐘。