先來一份完整的爬蟲工程師面試考點:
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比高郵網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式高郵網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋高郵地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。一、 Python 基本功
1、簡述Python 的特點和優(yōu)點
Python 是一門開源的解釋性語言,相比 Java C++ 等語言,Python 具有動態(tài)特性,非常靈活。
2、Python 有哪些數(shù)據(jù)類型?
Python 有 6 種內(nèi)置的數(shù)據(jù)類型,其中不可變數(shù)據(jù)類型是Number(數(shù)字), String(字符串), Tuple(元組),可變數(shù)據(jù)類型是 List(列表),Dict(字典),Set(集合)。
3、列表和元組的區(qū)別
列表和元組都是可迭代對象,能夠?qū)ζ溥M(jìn)行循環(huán)、切片等,但元組 tuple 是不可變的。元組不可變的特性,使得它可以成為字典 Dict 中的鍵。
4、Python 是如何運行的
CPython:
Python 程序運行時,會先進(jìn)行編譯,將 .py 文件中的代碼編譯成字節(jié)碼(byte code),編譯結(jié)果儲存在內(nèi)存的 PyCodeObject 中,然后由 Python 虛擬機(jī)解釋運行。當(dāng)程序運行結(jié)束后,Python 解釋器會將 PyCodeObject 保存到 pyc 文件中。每一次運行時 Python 都會先尋找與文件同名的 pyc 文件,如果 pyc 存在則比對修改記錄,根據(jù)修改記錄決定直接運行或再次編譯后運行,最后生成 pyc 文件 。
5、Python 運行速度慢的原因
a). Python 不是強(qiáng)類型的語言,所以解釋器運行時遇到變量以及數(shù)據(jù)類型轉(zhuǎn)換、比較操作、引用變量時都需要檢查其數(shù)據(jù)類型。
b). Python 的編譯器啟動速度比 JAVA 快,但幾乎每次都要啟動編譯。
c). Python 的對象模型會導(dǎo)致訪問內(nèi)存效率變低。Numpy 的指針指向緩存區(qū)數(shù)據(jù)的值,而 Python 的指針指向緩存對象,再通過緩存對象指向數(shù)據(jù):
6、面對 Python 慢的問題,有什么解決辦法
a). 可以使用其他的解釋器,比如 PyPy 和 Jython 等。
b). 如果對性能要求較高且靜態(tài)類型變量較多的應(yīng)用程序,可以使用 CPython。
c). 對于 IO 操作多的應(yīng)用程序,Python 提供 asyncio 模塊提高異步能力。
7、描述一下全局解釋器鎖 GIL
每個線程在執(zhí)行時候都需要先獲取 GIL,保證同一時刻只有一個線程可以執(zhí)行代碼,即同一時刻只有一個線程使用 CPU,也就是說多線程并不是真正意義上的同時執(zhí)行。但是在 IO 操作時,是可以釋放鎖的(這也是 Python 能夠異步的原因)。而且如果想要利用多核 CPU,那么可以使用多進(jìn)程。
8、深拷貝 淺拷貝
深拷貝是將對象本身復(fù)制給另一個對象,淺拷貝則是將對象的引用復(fù)制給另一個對象。所以當(dāng)復(fù)制后的對象改變時,深拷貝的原對象值不會改變,而淺拷貝原對象的值會被改變。
9、is 和 == 的區(qū)別
is 表示的是對象標(biāo)示符(object identity),而 == 表示的是相等(equality)。
is 的作用是用來檢查對象的標(biāo)示符是否一致,也就是比較兩個對象在內(nèi)存中的地址是否一樣,而 == 是用來檢查兩個對象是否相等。但是為了提高系統(tǒng)性能,對于較小的字符串 Python 會保留其值的一個副本,當(dāng)創(chuàng)建新的字符串的時候直接指向該副本即可。如:
a = 8
b = 8
a is b
10、文件讀寫
簡述文件讀取時 read 、readline、readlines 的區(qū)別和作用
他們的區(qū)別除了讀取內(nèi)容范圍不同外,返回的內(nèi)容類型也不同。
read()會讀取整個文件,將讀取到底的文件內(nèi)容放到一個字符串變量,返回 str 類型。
readline()讀取一行內(nèi)容,放到一個字符串變量,返回 str 類型。
readlines() 讀取文件所有內(nèi)容,按行為單位放到一個列表中,返回 list 類型。
11、請用一行代碼實現(xiàn)
請分別使用匿名函數(shù)和推導(dǎo)式這兩種方式將 [0, 1, 2, 3, 4, 5] 中的元素求乘積,并打印輸出元組。
print(tuple(map(lambda x: x * x, [0, 1, 2, 3, 4, 5]))) print(tuple(i*i for i in [0, 1, 2, 3, 4, 5]))
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。