Python 爬蟲面試題 170 道
最近在刷面試題,看了網絡上大量的 Python 相關面試題后,我發現了這幾個問題:
-
有些還是 Python2 的代碼
-
回答的很簡單,關鍵的題目沒有點出為什么
-
一些復制粘貼的代碼根本就跑不通
這幾個問題相信大家深有體會吧,所以我決定針對市面上大多的 Python 題目做一個分析,同時也希望大家盡可能的做到舉一反三,而不是局限于題目本身。
通過本場我分享的這篇文章,你將獲得如下知識點:
-
掌握 Python 的基礎語法
-
語法常見的 Python 應用場景
-
掌握 Python 閉包的使用以及裝飾器的使用
-
生成器和迭代器的使用
-
常見的設計模式的使用
-
深淺拷貝的區別
-
線程、進程、協程的使用
-
了解 Python 中的元編程和反射
-
常考的數據結構和算法
-
爬蟲相關知識,網絡編程基本知識等
限于篇幅,答案不能全部展示
獲取 170 道 Python 爬蟲面試題答案
https://gitbook.cn/gitchat/activity/5cf8ca61da0c2c41ee4697ff?utm_source=chat190705
01
所有題目
語言特性
-
談談對 Python 和其他語言的區別
-
簡述解釋型和編譯型編程語言
-
Python 的解釋器種類以及相關特點?
-
說說你知道的Python3 和 Python2 之間的區別?
-
Python3 和 Python2 中 int 和 long 區別?
-
xrange 和 range 的區別?
編碼規范
-
什么是 PEP8?
-
了解 Python 之禪么?
-
了解 docstring 么?
-
了解類型注解么?
-
例舉你知道 Python 對象的命名規范,例如方法或者類等
-
Python 中的注釋有幾種?
-
如何優雅的給一個函數加注釋?
-
如何給變量加注釋?
-
Python 代碼縮進中是否支持 Tab 鍵和空格混用。
-
是否可以在一句 import 中導入多個庫?
-
在給 Py 文件命名的時候需要注意什么?
-
例舉幾個規范 Python 代碼風格的工具
02
數據類型
字符串
-
列舉 Python 中的基本數據類型?
-
如何區別可變數據類型和不可變數據類型
-
將"hello world"轉換為首字母大寫"Hello World"
-
如何檢測字符串中只含有數字?
-
將字符串"ilovechina"進行反轉
-
Python 中的字符串格式化方式你知道哪些?
-
有一個字符串開頭和末尾都有空格,比如“ adabdw ”,要求寫一個函數把這個字符串的前后空格都去掉。
-
獲取字符串”123456“最后的兩個字符。
-
一個編碼為 GBK 的字符串 S,要將其轉成 UTF-8 編碼的字符串,應如何操作?
-
(1)s=“info:xiaoZhang 33 shandong”,用正則切分字符串輸出’info’, ‘xiaoZhang’, ‘33’, ‘shandong’ a = "你好 中國 ",去除多余空格只留一個空格。
-
(1)怎樣將字符串轉換為小寫 (2)單引號、雙引號、三引號的區別?
列表
-
已知 AList = [1,2,3,1,2],對 AList 列表元素去重,寫出具體過程。
-
如何實現 “1,2,3” 變成 [“1”,“2”,“3”]
-
給定兩個 list,A 和 B,找出相同元素和不同元素
-
[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
-
合并列表[1,5,7,9]和[2,2,6,8]
-
如何打亂一個列表的元素?
字典
-
字典操作中 del 和 pop 有什么區別
-
按照字典的內的年齡排序
-
請合并下面兩個字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}
-
如何使用生成式的方式生成一個字典,寫一段功能代碼。
-
如何把元組(“a”,“b”)和元組(1,2),變為字典{“a”:1,“b”:2}
綜合
-
Python 常用的數據結構的類型及其特性?
-
如何交換字典 {“A”:1,“B”:2}的鍵和值?
-
Python 里面如何實現 tuple 和 list 的轉換?
-
我們知道對于列表可以使用切片操作進行部分元素的選擇,那么如何對生成器類型的對象實現相同的功能呢?
-
請將[i for i in range(3)]改成生成器
-
a="hello"和 b="你好"編碼成 bytes 類型
-
下面的代碼輸出結果是什么?
-
下面的代碼輸出的結果是什么?
03
操作類題目
-
Python 交換兩個變量的值
-
在讀文件操作的時候會使用 read、readline 或者 readlines,簡述它們各自的作用
-
json 序列化時,可以處理的數據類型有哪些?如何定制支持 datetime 類型?
-
json 序列化時,默認遇到中文會轉換成 unicode,如果想要保留中文怎么辦?
-
有兩個磁盤文件 A 和 B,各存放一行字母,要求把這兩個文件中的信息合并(按字母順序排列),輸出到一個新文件 C 中。
-
如果當前的日期為 20190530,要求寫一個函數輸出 N 天后的日期,(比如 N 為 2,則輸出 20190601)。
-
寫一個函數,接收整數參數 n,返回一個函數,函數的功能是把函數的參數和 n 相乘并把結果返回。
-
下面代碼會存在什么問題,如何改進?
-
一行代碼輸出 1-100 之間的所有偶數。
-
with 語句的作用,寫一段代碼?
-
python 字典和 json 字符串相互轉化方法
-
請寫一個 Python 邏輯,計算一個文件中的大寫字母數量
-
請寫一段 Python連接 Mongo 數據庫,然后的查詢代碼。
-
說一說 Redis 的基本類型。
-
請寫一段 Python連接 Redis 數據庫的代碼。
-
請寫一段 Python 連接 MySQL 數據庫的代碼。
-
了解 Redis 的事務么?
-
了解數據庫的三范式么?
-
了解分布式鎖么?
-
用 Python 實現一個 Reids 的分布式鎖的功能。
-
寫一段 Python 使用 Mongo 數據庫創建索引的代碼。
高級特性
-
函數裝飾器有什么作用?請列舉說明?
-
Python 垃圾回收機制?
-
魔法函數 __call__怎么使用?
-
如何判斷一個對象是函數還是方法?
-
@classmethod 和@staticmethod 用法和區別
-
Python 中的接口如何實現?
-
Python 中的反射了解么?
-
metaclass 作用?以及應用場景?
-
hasattr() getattr() setattr()的用法
-
請列舉你知道的 Python 的魔法方法及用途。
-
如何知道一個 Python 對象的類型?
-
Python 的傳參是傳值還是傳址?
-
Python 中的元類(metaclass)使用舉例
-
簡述 any()和 all()方法
-
filter 方法求出列表所有奇數并構造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-
什么是猴子補丁?
-
在 Python 中是如何管理內存的?
-
當退出 Python 時是否釋放所有內存分配?
正則表達式
- 使用正則表達式匹配出www.baidu.com中的地址
a=“張明 98 分”,用 re.sub,將 98 替換為 100
-
正則表達式匹配中(. )和(. ?)匹配區別?
-
寫一段匹配郵箱的正則表達式
其他內容
-
解釋一下 python 中 pass 語句的作用?
-
簡述你對 input()函數的理解
-
python 中的 is 和==
-
Python 中的作用域
-
三元運算寫法和應用場景?
-
了解 enumerate 么?
-
列舉 5 個 Python 中的標準模塊
-
如何在函數中設置一個全局變量
-
pathlib 的用法舉例
-
Python 中的異常處理,寫一個簡單的應用場景
-
Python 中遞歸的最大次數,那如何突破呢?
-
什么是面向對象的 mro
-
isinstance 作用以及應用場景?
-
什么是斷言?應用場景?
-
lambda 表達式格式以及應用場景?
-
新式類和舊式類的區別
-
dir()是干什么用的?
-
一個包里有三個模塊,demo1.py, demo2.py, demo3.py,但使用 from tools import *導入模塊時,如何保證只有 demo1、demo3 被導入了。
-
列舉 5 個 Python 中的異常類型以及其含義
-
copy 和 deepcopy 的區別是什么?
-
代碼中經常遇到的*args, **kwargs 含義及用法。
-
Python 中會有函數或成員變量包含單下劃線前綴和結尾,和雙下劃線前綴結尾,區別是什么?
-
w、a+、wb 文件寫入模式的區別
-
舉例 sort 和 sorted 的區別
-
什么是負索引?
-
pprint 模塊是干什么的?
-
解釋一下 Python 中的賦值運算符
-
解釋一下 Python 中的邏輯運算符
-
講講 Python 中的位運算符
-
在 Python 中如何使用多進制數字?
-
怎樣聲明多個變量并賦值?
04
算法和數據結構
- 已知:
(1) 從 AList 和 BSet 中 查找 4,最壞時間復雜度那個大?
(2) 從 AList 和 BSet 中 插入 4,最壞時間復雜度那個大?
-
用 Python 實現一個二分查找的函數
-
python 單例模式的實現方法
-
使用 Python 實現一個斐波那契數列
-
找出列表中的重復數字
-
找出列表中的單個數字
-
寫一個冒泡排序
-
寫一個快速排序
-
寫一個拓撲排序
-
python 實現一個二進制計算
-
有一組“+”和“-”符號,要求將“+”排到左邊,“-”排到右邊,寫出具體的實現方法。
-
單鏈表反轉
-
交叉鏈表求交點
-
用隊列實現棧
-
找出數據流的中位數
-
二叉搜索樹中第 K 小的元素
爬蟲相關
-
在 requests 模塊中,requests.content 和 requests.text 什么區別
-
簡要寫一下 lxml 模塊的使用方法框架
-
說一說 scrapy 的工作流程
-
scrapy 的去重原理
-
scrapy 中間件有幾種類,你用過哪些中間件
-
你寫爬蟲的時候都遇到過什么?反爬蟲措施,你是怎么解決的?
-
為什么會用到代理?
-
代理失效了怎么處理?
-
列出你知道 header 的內容以及信息
-
說一說打開瀏覽器訪問 www.baidu.com 獲取到結果,整個流程。
-
爬取速度過快出現了驗證碼怎么處理
-
scrapy 和 scrapy-redis 有什么區別?為什么選擇 redis 數據庫?
-
分布式爬蟲主要解決什么問題
-
寫爬蟲是用多進程好?還是多線程好?為什么?
-
解析網頁的解析器使用最多的是哪幾個
-
需要登錄的網頁,如何解決同時限制 ip,cookie,session(其中有一些是動態生成的)在不使用動態爬取的情況下?
-
驗證碼的解決(簡單的:對圖像做處理后可以得到的,困難的:驗證碼是點擊,拖動等動態進行的?)
-
使用最多的數據庫(mysql,mongodb,redis 等),對他的理解?
網絡編程
-
TCP 和 UDP 的區別?
-
簡要介紹三次握手和四次揮手
-
什么是粘包?socket 中造成粘包的原因是什么?哪些情況會發生粘包現象?
并發
-
舉例說明 conccurent.future 的中線程池的用法
-
說一說多線程,多進程和協程的區別。
-
簡述 GIL
-
進程之間如何通信
-
IO 多路復用的作用?
-
select、poll、epoll 模型的區別?
-
什么是并發和并行?
-
一個線程 1 讓線程 2 去調用一個函數怎么實現?
-
解釋什么是異步非阻塞?
-
threading.local 的作用?
Git 面試題
-
說說你知道的 git 命令
-
git 如何查看某次提交修改的內容
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
