天天看點

Python爬蟲工程師常見面試題彙總

  爬蟲是Python的重要應用方向之一,也是學習Python的學員求職的主要方向。為了幫助學員更快更好的通過企業面試,小編悉心整理了5道Python爬蟲面試題及答案,希望能夠給大家提供幫助!

  1、簡要介紹下scrapy架構及其優勢

  scrapy是一個快速(fast)、高層次(high-level)的基于Python的Web爬蟲構架,用于抓取Web站點并從頁面中提取結構化的資料。scrapy使用了Twisted異步網絡庫來處理網絡通訊。

  scrapy架構的優點:1)更容易建構大規模的抓取項目;2)異步處理請求速度非常快;3)可以使用自動調節機制自動調整爬行速度。

  2、爬蟲使用多線程好?還是多程序好?

  對于IO密集型代碼(檔案處理,網絡爬蟲),多線程能夠有效提升效率(單線程下有IO操作會進行IO等待,會造成不必要的時間等待,而開啟多線程後,A線程等待時,會自動切換到線程B,可以不浪費CPU的資源,進而提升程式執行效率)。在實際的采集過程中,既考慮網速和相應的問題,也需要考慮自身機器硬體的情況,來設定多程序或者多線程。

  3、什麼是棧溢出?怎麼解決?

  因為棧一般預設為1-2m,一旦出現死循環或者是大量的遞歸調用,在不斷的壓棧過程中,造成棧容量超過1m而導緻溢出。

  棧溢出的情況有兩種:1)局部數組過大。當函數内部數組過大時,有可能導緻堆棧溢出。2)遞歸調用層次太多。遞歸函數在運作時會執行壓棧操作,當壓棧次數太多時,也會導緻堆棧溢出。

  解決方法:1)用棧把遞歸轉換成非遞歸。2)增大棧空間。

  4、MySQL的索引在什麼情況下失效?

  1)如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)

  要想使用or,又想讓索引生效,隻能将or條件中的每個列都加上索引。

  2)對于多列索引,不是使用的第一部分,則不會使用索引。

  3)like查詢以%開頭。

  4)如果列類型是字元串,那一定要在條件中将資料使用引号引用起來,否則不使用索引。

  5)如果MySQL估計使用全表掃描要比使用索引快,則不使用索引。

  5、HTTPS是如何實作安全傳輸資料的?

  用戶端(通常是浏覽器)先向伺服器發出加密通信的請求;

  伺服器收到請求,然後響應;

  用戶端收到證書之後會首先會進行驗證;

  伺服器收到使用公鑰加密的内容,在伺服器端使用私鑰解密之後獲得随機數pre-master secret,然後根據radom1、radom2、pre-master secret通過一定的算法得出session Key和MAC算法秘鑰,作為後面互動過程中使用對稱秘鑰。同時用戶端也會使用radom1、radom2、pre-master secret,和同樣的算法生成session Key和MAC算法的秘鑰。

  然後再後續的互動中就使用session Key和MAC算法的秘鑰對傳輸的内容進行加密和解密。