欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于Python爬蟲面試170道題(推薦)

  發(fā)布時間:2019-08-15 16:29:38   作者:葫蘆娃的爺爺   我要評論
這篇文章主要介紹了關于Python爬蟲面試170道題,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

#背景

今天在癡海的公眾號看到了170道爬蟲相關的題目,打算自己在這里先回答能夠回答的部分,等6月23日出正式結果了對比一下看看,自己和大佬之間的天埑有多寬

#答題部分

##語言特性

1.談談對 Python 和其他語言的區(qū)別
答:Python屬于比較“自由”的語言,首先變量使用前不需要聲明類型,其次語句結束不需要使用分號作為結尾,同時不需要大括號進行代碼塊的標注,使用縮進對大括號進行代替。

2.簡述解釋型和編譯型編程語言
答:編譯型語言是將代碼編譯成機器碼,然后執(zhí)行,通過編譯可以使得程序直接以機器碼的形式進行工作。通俗一點就是將整個程序一次性編譯后再執(zhí)行。解釋型語言則是編譯一句執(zhí)行一句,編譯到哪里執(zhí)行到哪里,每次執(zhí)行前都要逐句編譯。通常情況下編譯型語言執(zhí)行速度比解釋型快,但是現在的解釋器經常會針對語言進行優(yōu)化,所以有時候解釋型語言速度反而比編譯型快。

3.Python 的解釋器種類以及相關特點?
答:CPython,官方使用的解釋器,用C語言編寫。IPython,基于CPython開發(fā),增強了交互性。JPython,將Python編譯成Java字節(jié)碼。IronPython,將Python編譯為.Net的字節(jié)碼。

4.說說你知道的Python3 和 Python2 之間的區(qū)別?
答:1、print由關鍵字變?yōu)榱撕瘮怠?、Python3默認使用utf-8,解決了Python2中使用ACSII導致的中文亂碼問題。3、將xrange與range進行合并,在Python3中只存在range一種寫法,本質上是xrange。

5.Python3 和 Python2 中 int 和 long 區(qū)別?
答:Python2中,int型能表示的數字長度取決于系統(tǒng)位數,32位系統(tǒng)長度為32位,64位系統(tǒng)長度為64位,long型則不受長度限制。在Python3中,所有的整型都為長整型。

6.xrange 和 range 的區(qū)別?
答:兩關鍵字都是用于生成指定范圍的列表,在Python3中已經合并為range了。在Python2中,xrange生成結果為迭代器,占用空間小,range生成結果為列表,占據空間較大。

##編碼規(guī)范

7.什么是 PEP8?
答:PEP8是Python編程的一種格式要求,為了提高程序的可讀性和規(guī)范性,在程序員之間互相約定好的一種代碼格式,詳情可見小歪的博客

8.了解 Python 之禪么?
答:在Python的交互模式下輸入 import this 就能看到Python之禪的內容了。

9.了解 dosctring 么?
答:Python推崇代碼即文檔,通常在函數中第一個語句即表明了函數的用法及接受的參數,可以通過functiong.__doc__屬性來獲得。

10.了解類型注解么?
答:類型注解是Python3中引入的新特性,通過def(x:int, y:int) -> int: 這樣的方式,標記參數及返回值的類型,這里要注意,即使添加了了類型注解也不會對代碼產生影響,它的作用更像是注釋,只是方便其他程序員了解參數及返回值類型。

11.例舉你知道 Python 對象的命名規(guī)范,例如方法或者類等
答:

12.Python 中的注釋有幾種?
答:2種,單行的使用#的注釋方式,跨行的使用使用三個雙引號或三個單引號的的注釋方式。

13.如何優(yōu)雅的給一個函數加注釋?
答:函數注釋通常在 def 語句下方,第一行表示函數用法,接下來對函數接受的參數進行解釋,最后對函數的返回值進行注釋,方便他人理解函數的用法。

14.如何給變量加注釋?
15.Python 代碼縮進中是否支持 Tab 鍵和空格混用。
答:不支持,同時盡量使用4個空格代替Tab縮進。

16.是否可以在一句 import 中導入多個庫?
答:可以,但不建議。

17.在給 Py 文件命名的時候需要注意什么?
答:使用全小寫或者下劃線進行命名。

18.例舉幾個規(guī)范 Python 代碼風格的工具
答:YAPF,谷歌開發(fā)的代碼規(guī)范工具。Black,依賴Python3.6+的第三方庫,可以直接將原代碼變?yōu)榉螾EP8標準的代碼

##數據類型

###字符串

19.列舉 Python 中的基本數據類型?
答:字符串string、數字number、字典dictionary、列表list、元組tuple、集合set。

20.如何區(qū)別可變數據類型和不可變數據類型
答:可變的數據類型有 列表、字典、集合,不可變的有字符串、數字、元組。

21.將"hello world"轉換為首字母大寫"Hello World"
答:string.title()將每個單詞首字母大寫。

22.如何檢測字符串中只含有數字?
答:Python的語法糖,字符串類型自帶函數isdigit(),當字符串中只存在數字返回True,反之返回False。

23.將字符串"ilovechina"進行反轉
答:“ilovechina”[::-1]

24.Python 中的字符串格式化方式你知道哪些?
答:format()

25.有一個字符串開頭和末尾都有空格,比如“ adabdw ”,要求寫一個函數把這個字符串的前后空格都去掉。
答:string.replace(’ ’ ,’’)

26.獲取字符串”123456“最后的兩個字符。
答:“123456”[4:6:]或“123456"[-2::]

27.一個編碼為 GBK 的字符串 S,要將其轉成 UTF-8 編碼的字符串,應如何操作?
答:先編碼為Unicode,再解碼為 UTF-8,具體操作為 string.decode(),str.encode(encoding=‘utf-8’)該條存疑,有待驗證

28.s=“info:xiaoZhang 33 shandong”,用正則切分字符串輸出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]
答:re.split(r’[: ]’, s)

27.怎樣將字符串轉換為小寫?
答:string.lower()

28.單引號、雙引號、三引號的區(qū)別?
答:單引號表示的字符串中不能帶有雙引號。雙引號表示的字符串中可以存在單引號。三引號中可以存在單引號和雙引號,并且可以跨行表示字符串,而單雙引號皆不能跨行。

29.a = "你好 中國 ",去除多余空格只留一個空格。
答:re.sub(’ +’,’ ', a)

###列表

30.已知 AList = [1,2,3,1,2],對 AList 列表元素去重,寫出具體過程。
答:list(set(AList)) 可以利用集合中不能存在相同元素的特性,利用類型轉換進行去重。也可使用循環(huán)遍歷進行判斷。

31.如何實現 “1,2,3” 變成 [“1”,“2”,“3”]
答:“1,2,3”.split(’,’)

32.給定兩個 list,A 和 B,找出相同元素和不同元素
答:如果列表內不存在重復元素的話,可以轉化為集合,利用集合的 “&&” 找出相同元素,再利用 “a-b","a^b"找出不同元素。若列表內存在重復元素,暫時只能想到兩個for循環(huán)進行查找。

33.[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
答:sum([[1,2],[3,4],[5,6]], [])

34.合并列表[1,5,7,9]和[2,2,6,8]
答:這題沒理解,字面上合并相加就好了吧。。。。難道暗示要排序?

35.如何打亂一個列表的元素?
答:使用random庫中的random.shuffle(list)函數,該函數無返回值,會將傳入的參數列表隨機排序。

###字典

36.字典操作中 del 和 pop 有什么區(qū)別
答:pop()函數會返回刪除的值,而del()函數直接刪除元素,沒有返回值。

37.按照字典的內的年齡排序

d1 = [
{‘name’:‘alice’, ‘age’:38},
{‘name’:‘bob’, ‘age’:18},
{‘name’:‘Carl’, ‘age’:28},
]

答:d1.sort(key=lambda x: x[‘age’])

38.請合并下面兩個字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}
答:a.update(b)。

39.如何使用生成式的方式生成一個字典,寫一段功能代碼。
答:這道題不能理解題目意思,暫時不答。

40.如何把元組(“a”,“b”)和元組(1,2),變?yōu)樽值鋥“a”:1,“b”:2}
答:zip((“a”,“b”),(1,2))

###綜合

41.Python 常用的數據結構的類型及其特性?
A:{1:0,2:0,3:0}
B:{“a”:0, “b”:0, “c”:0}
C: {(1,2):0, (2,3):0}
D: {[1,2]:0, [2,3]:0}
答:A為字典類型,無序key值不可重復,通過key值來取對應的value值。B也是字典類型,key值為string類型,也是通過dict[‘key’]的方式來取值。C也為字典類型,但key為元組

42.如何將元組(“A”,“B”)和元組(1,2),合并成字典{“A”:1,“B”:2}
答:dict(zip((“A”,“B”), (1,2)))即可。

43.Python 里面如何實現 tuple 和 list 的轉換?
答:使用tuple()和list()函數實現轉換

44.我們知道對于列表可以使用切片操作進行部分元素的選擇,那么如何對生成器類型的對象實現相同的功能呢?
答:使用自帶的itertools庫進行實現,具體實現方式 itertools.islice(生成器對象,起始位置,結束位置),即可實現切片功能。

45.請將[i for i in range(3)]改成生成器
答: iter(range(3))

46.a="hello"和 b="你好"編碼成 bytes 類型
答:a.encode()

47.下面的代碼輸出結果是什么?
a = (1,2,3,[4,5,6,7],8)
a[2] = 2
答:報錯,元組元素不支持修改。

48.下面的代碼輸出的結果是什么?
a = (1,2,3,[4,5,6,7],8)
a[5] = 2
答:報錯,列表看作是一個元素,5已經下標越界。

##操作類題目

49.Python 交換兩個變量的值
答:語法糖 a, b = b, a。

50.在讀文件操作的時候會使用 read、readline 或者 readlines,簡述它們各自的作用
答:read將整個文本都讀取為一個字符串,占用內存大,readline讀取為一個生成器,支持遍歷和迭代,占用空間小。readlines將文本讀取為列表,占用空間大。

51.json 序列化時,可以處理的數據類型有哪些?如何定制支持 datetime 類型?
答:字符串、數字(整數和浮點數)、字典、列表、布爾值、None。使用strftime將datetime格式化為標準字符串類型即可。

52.json 序列化時,默認遇到中文會轉換成 unicode,如果想要保留中文怎么辦?
答:使用json.dumps函數時,添加參數ensure_ascii=False,如果想顯示的更美觀,可以添加indent=2參數,會在每個key值前添加兩個空格。

53.有兩個磁盤文件 A 和 B,各存放一行字母,要求把這兩個文件中的信息合并(按字母順序排列),輸出到一個新文件 C 中。
答:讀取兩個文件,利用split函數將字符串切割成列表,再將兩個列表合并,利用sort函數對合并后的列表進行排序,最后將列表內容拼接成字符串寫入即可。

54.如果當前的日期為 20190530,要求寫一個函數輸出 N 天后的日期,(比如 N 為 2,則輸出 20190601)。
答:利用自帶的datetime庫即可實現,
55.寫一個函數,接收整數參數 n,返回一個函數,函數的功能是把函數的參數和 n 相乘并把結果返回。
答:

56.下面代碼會存在什么問題,如何改進?

def strappend(num):
    str='first'
    for i in range(num):
        str+=str(i)
    return str

答:沒有對num進行校驗,num應該為一整數,添加一個type類型校驗。

57.一行代碼輸出 1-100 之間的所有偶數。
答:print(list(i for i in range(1, 101) if i%2 == 0))

58.with 語句的作用,寫一段代碼?
答:常用于打開文本后的自動關閉,例如:

with open("file_name", 'w') as f:
    dong sth.

59.python 字典和 json 字符串相互轉化方法
答:使用 json庫,字典-> json:json.dumps(dict),json->字典:json.loads(json_file)

60.請寫一個 Python 邏輯,計算一個文件中的大寫字母數量
答:

with open(file_name, 'r') as f:
    count = 0 
    for i in f.read():
        if i.isupper():
            count += 1
    print('大寫字母數量為%d'%count)

##高級特效

70.函數裝飾器有什么作用?請列舉說明?
答:裝飾器可以在不修改函數的情況下,對函數的功能進行補充,例如對函數接受的參數進行檢查更加詳細的內容點此查看極客時間解答

71.Python 垃圾回收機制?
答:最簡單的,Python每個變量上都有一個引用計數器,當引用計數器為0時,自動銷毀變量。復雜一些的,例如存在互相引用的情況,這時Python依靠兩個鏈表(標記-清除算法)進行垃圾回收。點擊這里獲得更詳細的資料

72.魔法函數 __call__怎么使用?
答:__call__是將類創(chuàng)建為一個實例進行調用,多用在類裝飾器中??梢詫⑦壿嫶a寫在__call__下,不需要實例化類也可直接使用其中的代碼。

73.如何判斷一個對象是函數還是方法?
答:可以使用type()函數進行判斷,函數與方法本質上沒有差別,僅僅通過是否與類進行綁定進行區(qū)分。綁定后通過類實例化進行調用則為方法,未綁定直接調用即為函數。

74.@classmethod 和@staticmethod 用法和區(qū)別
答:classmethod必須實例化類以后才能使用,同時第一個參數由self變化為cls,staticmethod稱為靜態(tài)方法類似于全局函數,不需要實例化也能調用。

75.Python 中的接口如何實現?
答:在類中提前設置好方法,利用NotImplementedError錯誤,當子類沒有覆寫方法的時候進行報錯。也可使用@abstractmethod對需要覆寫的方法進行裝飾,任何沒有覆寫該方法的子類都會報錯。

76.Python 中的反射了解么?
答:反射是用于在類中尋找值的一種方式,有以下幾種用法:hasattr(class, key)在實例中尋找是否存在key名的函數或是變量返回布爾值。getattr(class, key, tips)獲得實例中變量或是方法的內存地址,可傳入第三個參數修改報錯提示。setattr(class, name, function)將函數以name為名字傳入類中,通過 class.name(class) 的方式進行調用,setattr(class, name, value)傳入變量及變量值,以class.name的形式調用。delattr(class, name)刪除類中變量,不能刪除函數。

77.metaclass 作用?以及應用場景?
答:該題不會,等正確答案

78.hasattr() getattr() setattr()的用法
答:hasattr(object,name)查詢類中是否存在符合關鍵字的函數或者方法,返回布爾值。getattr(object, name, [default])查詢函數是否存在指定名字的變量或是方法,返回變量的值或者函數內存地址,若不存在報錯或是返回 default 中的自定義內容。

79.請列舉你知道的 Python 的魔法方法及用途。
答:init 初始化類中的部分屬性,new 最先執(zhí)行的部分,可用來實現單例類,功能與78題類似的 __getattr__試圖訪問類中不存在的屬性時會調用該方法,可自定義返回值, setattr 對類的屬性進行新增和賦值,可以進行簡單的條件篩選, __delattr__用于刪除類中的方法或是屬性。

80.如何知道一個 Python 對象的類型?
答:利用type()和isinstance(),前者用于區(qū)分對象的類型,后者主要用于區(qū)分子類與父類是否一致。

81.Python 的傳參是傳值還是傳址?
答:都不是,Python當中所有東西都視作一個對象,每次的綁定都是在對象上增加一個引用,在使用過程中如果改變變量的值其實是將變量綁定到一個新對象上,如果修改對象的值那所有綁定在該對象的變量,在調用時都返回新值。詳情點擊這里查看

82.Python 中的元類(metaclass)使用舉例
答:元類真的是盲區(qū),現在還不是能理解元類的意義。

83.簡述 any()和 all()方法
答:any(object)與all(object)區(qū)別,any主要判斷對象中是否全為空值(0、’’、None、Flase)若對象內全部為空值則返回False否則返回True, all則是判斷對象中是否存在空值,只要存在任一個空值則返回False否則返回True

84.filter 方法求出列表所有奇數并構造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
答:list(filter(lambda x:x if x%2 == 1 else None, a))

85.什么是猴子補?。?/p>

86.在 Python 中是如何管理內存的?

87.當退出 Python 時是否釋放所有內存分配?

##正則表達式

88.使用正則表達式匹配出
www.baidu.com
中的地址
a=“張明 98 分”,用 re.sub,將 98 替換為 100

89.正則表達式匹配中(.)和(.?)匹配區(qū)別?

90.寫一段匹配郵箱的正則表達式

##其他內容

91.解釋一下 python 中 pass 語句的作用?
92.簡述你對 input()函數的理解
93.python 中的 is 和==
94.Python 中的作用域
95.三元運算寫法和應用場景?
96.了解 enumerate 么?
97.列舉 5 個 Python 中的標準模塊
98.如何在函數中設置一個全局變量
99.pathlib 的用法舉例
100.Python 中的異常處理,寫一個簡單的應用場景
101.Python 中遞歸的最大次數,那如何突破呢?
102.什么是面向對象的 mro
103.isinstance 作用以及應用場景?
104.什么是斷言?應用場景?
105.lambda 表達式格式以及應用場景?
106.新式類和舊式類的區(qū)別
107.dir()是干什么用的?
108.一個包里有三個模塊,demo1.py, demo2.py, demo3.py,但使用 from tools import 導入模塊時,如何保證只有 demo1、demo3 被導入了。
109.列舉 5 個 Python 中的異常類型以及其含義
110.copy 和 deepcopy 的區(qū)別是什么?
111.代碼中經常遇到的args, **kwargs 含義及用法。
112.Python 中會有函數或成員變量包含單下劃線前綴和結尾,和雙下劃線前綴結尾,區(qū)別是什么?
113.w、a+、wb 文件寫入模式的區(qū)別
114.舉例 sort 和 sorted 的區(qū)別
115.什么是負索引?
116.pprint 模塊是干什么的?
117.解釋一下 Python 中的賦值運算符
118.解釋一下 Python 中的邏輯運算符
119.講講 Python 中的位運算符
120.在 Python 中如何使用多進制數字?
121.怎樣聲明多個變量并賦值?

##算法和數據結構

122.已知:
AList = [1,2,3]
BSet = {1,2,3}
(1) 從 AList 和 BSet 中 查找 4,最壞時間復雜度那個大?
(2) 從 AList 和 BSet 中 插入 4,最壞時間復雜度那個大?
123.用 Python 實現一個二分查找的函數
124.python 單例模式的實現方法
125.使用 Python 實現一個斐波那契數列
126.找出列表中的重復數字
127.找出列表中的單個數字
128.寫一個冒泡排序
129.寫一個快速排序
130.寫一個拓撲排序
131.python 實現一個二進制計算
132.有一組“+”和“-”符號,要求將“+”排到左邊,“-”排到右邊,寫出具體的實現方法。
133.單鏈表反轉
134.交叉鏈表求交點
135.用隊列實現棧
136.找出數據流的中位數
137.二叉搜索樹中第 K 小的元素
##爬蟲相關
138.在 requests 模塊中,requests.content 和 requests.text 什么區(qū)別
139.簡要寫一下 lxml 模塊的使用方法框架
140.說一說 scrapy 的工作流程
141.scrapy 的去重原理
142.scrapy 中間件有幾種類,你用過哪些中間件
143.你寫爬蟲的時候都遇到過什么?反爬蟲措施,你是怎么解決的?
144.為什么會用到代理?
145.代理失效了怎么處理?
146.列出你知道 header 的內容以及信息
147.說一說打開瀏覽器訪問 www.baidu.com 獲取到結果,整個流程。
148.爬取速度過快出現了驗證碼怎么處理
149.scrapy 和 scrapy-redis 有什么區(qū)別?為什么選擇 redis 數據庫?
150.分布式爬蟲主要解決什么問題
151.寫爬蟲是用多進程好?還是多線程好? 為什么?
152.解析網頁的解析器使用最多的是哪幾個
153.需要登錄的網頁,如何解決同時限制 ip,cookie,session(其中有一些是動態(tài)生成的)在不使用動態(tài)爬取的情況下?
154.驗證碼的解決(簡單的:對圖像做處理后可以得到的,困難的:驗證碼是點擊,拖動等動態(tài)進行的?)
155.使用最多的數據庫(mysql,mongodb,redis 等),對他的理解?

##網絡編程

156.TCP 和 UDP 的區(qū)別?
157.簡要介紹三次握手和四次揮手
158.什么是粘包? socket 中造成粘包的原因是什么? 哪些情況會發(fā)生粘包現象?

##并發(fā)

159.舉例說明 conccurent.future 的中線程池的用法
160.說一說多線程,多進程和協程的區(qū)別。
161.簡述 GIL
162.進程之間如何通信
163.IO 多路復用的作用?
164.select、poll、epoll 模型的區(qū)別?
165.什么是并發(fā)和并行?
167.解釋什么是異步非阻塞?
168.threading.local 的作用?

##Git 面試題

169.說說你知道的 git 命令
170.git 如何查看某次提交修改的內容x

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python經典面試題與參考答案集錦

    這篇文章主要介紹了Python經典面試題與參考答案,總結分析了Python面試中各種常見的概念、數據結構、算法等相關操作技巧,需要的朋友可以參考下
    2019-11-04
  • 兩道阿里python面試題與參考答案解析

    這篇文章主要介紹了兩道阿里python面試題與參考答案,結合具體實例形式分析了Python數組創(chuàng)建、遍歷、拆分及隨機數等相關操作技巧,需要的朋友可以參考下
    2019-09-02
  • 60道硬核Python面試題,論面霸是如何煉成的

    這篇文章主要介紹了60道硬核Python面試題,論面霸是如何煉成的,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-08-28
  • 50個Python面試問題集錦

    Python是目前編程領域最受歡迎的語言。在本文中,我將總結Python面試中最常見的50個問題。每道題都提供參考答案,感興趣的可以了解下
    2019-06-26
  • 2019年最新的Python面試題與答案整理

    這篇文章主要為大家介紹了Python常見的面試題與相應的Python知識點,包括Python變量、函數、對象、數據類型等,需要的朋友可以參考下
    2019-06-25
  • 110道Python面試題(真題小結)

    這篇文章主要介紹了110道Python面試題,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-24
  • Python高頻面試題及其答案(推薦)

    本文給大家分享Python高頻面試題及其答案,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-26

最新評論