02.29 史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


1、對ifname == 'main'的理解陳述
name是當前模塊名,當模塊被直接運行時模塊名為main,也就是當前的模塊,當模塊被導入時,模塊名就不是main,即代碼將不會執行。

2、python是如何進行內存管理的?
a、對象的引用計數機制
python內部使用引用計數,來保持追蹤內存中的對象,Python內部記錄了對象有多少個引用,即引用計數,當對象被創建時就創建了一個引用計數,當對象不再需要時,這個對象的引用計數為0時,它被垃圾回收。


b、垃圾回收
1>當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。
2>當兩個對象a和b相互引用時,del語句可以減少a和b的引用計數,並銷燬用於引用底層對象 的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷燬。(從而導致內存洩露)。為解決這一問題,解釋器會定期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。


c、內存池機制
Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
1>Pymalloc機制。為了加速Python的執行效率,Python引入了一個內存池機制,用於管理 對小塊內存的申請和釋放。

2>Python中所有小於256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用 系統的malloc。3>對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。

3、請寫出一段Python代碼實現刪除一個list裡面的重複元素

<code># 1.使用set函數list = [1, 3, 4, 5, 51, 2, 3]set(list)# 2.使用字典函數,/<code>

#1.使用set函數list = [1, 3, 4, 5, 51, 2, 3]set(list)#.使用字典函數,

a = [1, 2, 4, 2, 4, 5, 6, 5, 7, 8, 9, 0]b = {}b = b.fromkeys(a)c = list(b.keys())c

4、Python裡面如何拷貝一個對象?

(賦值,淺拷貝,深拷貝的區別)賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。淺拷貝:創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另外一個也會修改改變){1,完全切片方法;2,工廠函數,如list();3,copy模塊的copy()函數}深拷貝:創建一個新的對象,並且遞歸的複製它所包含的對象(修改其中一個,另外一個不會改變){copy模塊的deep.deepcopy()函數}

5、介紹一下except的用法和作用?try…except…except…else…執行try下的語句,如果引發異常,則執行過程會跳到except語句。對每個except分支順序嘗試執行,如果引發的異常與except中的異常組匹配,執行相應的語句。如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。try下的語句正常執行,則執行else塊代碼。如果發生異常,就不會執行如果存在finally語句,最後總是會執行。

6、Python中newinit方法的區別new:它是創建對象時調用,會返回當前對象的一個實例,可以用_new_來實現單例 init__:它是創建對象後調用,對當前對象的一些實例初始化,無返回值

7、常用的網絡數據爬取方法正則表達式Beautiful SoupLxml

8、遇到過得反爬蟲策略以及解決方法:

1.通過headers反爬蟲

2.基於用戶行為的發爬蟲:(同一IP短時間內訪問的頻率)

3.動態網頁反爬蟲(通過ajax請求數據,或者通過JavaScript生成)

4.對部分數據進行加密處理的(數據是亂碼)解決方法:對於基本網頁的抓取可以自定義headers,添加headers的數據使用多個代理ip進行抓取或者設置抓取的頻率降低一些,動態網頁的可以使用selenium + phantomjs 進行抓取對部分數據進行加密的,可以使用selenium進行截圖,使用python自帶的pytesseract庫進行識別,但是比較慢最直接的方法是找到加密的方法進行逆向推理。

9、urllib 和 urllib2 的區別urllib 和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受一個Request類的實例來設置URL請求的headers,urllib僅可以接受URL。urllib不可以偽裝你的User-Agent字符串。urllib提供urlencode()方法用來GET查詢字符串的產生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。

10、設計一個基於session登錄驗證的爬蟲方案

11、列舉網絡爬蟲所用到的網絡數據包,解析包網絡數據包 urllib、urllib2、requests解析包 re、xpath、beautiful soup、lxml

12、熟悉的爬蟲框架Scrapy框架 根據自己的實際情況回答

13、Python在服務器的部署流程,以及環境隔離

14、Django 和 Flask 的相同點與不同點,如何進行選擇?

15、寫一個Python中的單例模式

<code>class Singleton(object):    _instance = None    def __new__(cls, *args, **kw):        if not cls._instance:            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)          return cls._instance  class MyClass(Singleton):      a = 1one = MyClass()two = MyClass()id(one) = id(two)>>> True/<code> 

16、Linux部署服務腳本命令(包括啟動和停止的shell腳本)

17、你用過多線程和異步嘛?除此之外你還用過什麼方法來提高爬蟲效率?scrapy-redis 分佈式爬取對於定向爬取可以用正則取代xpath

18、POST與 GET的區別GET數據傳輸安全性低,POST傳輸數據安全性高,因為參數不會被保存在瀏覽器歷史或web服務器日誌中;在做數據查詢時,建議用GET方式;而在做數據添加、修改或刪除時,建議用POST方式;GET在url中傳遞數據,數據信息放在請求頭中;而POST請求信息放在請求體中進行傳遞數據;GET傳輸數據的數據量較小,只能在請求頭中發送數據,而POST傳輸數據信息比較大,一般不受限制;在執行效率來說,GET比POST好

19、什麼是lambda函數?它有什麼好處?lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數lambda函數:首要用途是指點短小的回調函數

<code>lambda [arguments]:expression>>> a=lambdax,y:x+y>>> a(3,11)/<code>

最後小編幫助大家整理了一套python教程,下面展示了部分,希望也能幫助對編程感興趣,想做數據分析,人工智能、爬蟲或者希望從事編程開發的小夥伴,畢竟python工資也還可以,如果能幫到你請點贊、點贊、點贊哦~~


史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


史上最全Python-爬蟲工程師-面試題,有這一篇就夠了


分享到:


相關文章: