摘要:解決的辦法在處理計算密集型任務時,使用多進程協程,發(fā)揮計算機多核的威力,而處理密集型,則可以使用多線程。至此,有關知識點的面試題就已告一段落,下次更新數據庫,方面面試題。
閱讀本文大約需要 5 分鐘。15.說一說 GIL
前面有提到由于 Python 基于 C 語言編寫的解釋器中設置了一個 GIL 全局變量鎖,該鎖使得 Python 的多線程在處理 CPU 計算密集型任務時,同一時刻只能有一個線程在運行,這也是為什么說 Python 的多線程是一個「假性多線程」的原因。
解決 GIL 的辦法在處理 CPU 計算密集型任務時,使用多進程 + 協程,發(fā)揮計算機多核的威力,而處理 I/O 密集型,則可以使用多線程。
16.說一說 Python 中的垃圾回收機制(GC)引用計數清零
標記-清除
隔代回收
這里有一篇文章可以參考一下。垃圾回收機制
lambda
lambda 匿名函數,使用匿名函數可以幫助我們簡化代碼,且節(jié)省程序由于顯示創(chuàng)建函數的消耗。
示例:
# 冒號左邊是參數, 右邊是表達式,lambda 返回的是右邊表達式的結果 L2 = lambda x : x * x print(L2(5)) # 結果為 25
map
map(func,*Iterable),map 函數通過將可迭代對象傳入 func 函數,全部執(zhí)行。
示例:
# 相當于 [1*1, 2*2, 3*3, 4*4] L2 = list(map(lambda x: x * x, range(1, 4))) print(L2) # 結果為 [1, 4, 9, 16]
reduce
reduce(func, *sequence),reduce 函數可以將函數 func 迭代調用。
示例:
from functools import reduce # 相當于 ((1*2)*3) L2 = reduce(lambda x, y: x * y, range(1, 4)) print(L2) # 結果為 6
filter
filter(func,*Iterable),filter 函數通過將可迭代對象當做參數傳遞給 func 函數,并返回 func 函數中返回結果為 True 的值。
示例:
# 相當于 g = [x for x in range(10) if x < 3] L2 = list(filter(lambda x: x < 3, range(10))) print(L2) # 結果為 [0, 1, 2]18.is 和 == 的區(qū)別
a is b 比較的是 a 和 b 的「id」是否相同
a == b 比較的是 a 和 b 的「值」是否相同
19.range 和 xrange 的區(qū)別對于現如今的 Python 3.x,這個問題其實已經沒有什么意義了,由于其在各大面經中都出現過,這里簡單解釋下。在 Python 2.x 中,range和xrange最大的區(qū)別就是xrange生成的不是一個list,而是一個生成器,這兩者的區(qū)別在問題 13 已經講過,這里不在贅述。
Python 3.x 中已經移除了range()方法,并將xrange()方法更名為range()。
20.新式類和舊式類的區(qū)別新式類和舊式類的變化主要講的是 Python 中類的「繼承」問題。
舊式類中,類的繼承按照「從左往右,深度優(yōu)先遍歷」的原則。
新式類中,類的繼承按照「C3 算法」的原則:如果子類在繼承來自不同父類的方法是不一樣的時候,會從下而上,先左后右的合并繼承方法。如果有一樣的方法,則會繼承第一個方法然后舍棄另一個相同的方法,接著合并其他不同的方法。解決了舊式類繼承中存在的二義性和單調性。
示例:
# 新式類 class B: def __init__(self,name): self.name = name def get_name(self): return "B" class C: def __init__(self,name): self.name = name def get_name(self): return "C" class BC(B, C): pass b = B("B") c = C("C") bc = BC("C") print(bc.name) name = bc.get_name() print(name) # 查看 c 在搜索方法時的先后順序 print(bc.__mro__) # 結果為 C B (, , , )
另外,新式類相對于舊式類還多了這么些變化。
__slot__:限制實例屬性的設置范圍。
__getattrbute__:獲取實例屬性值。
type與__class__:返回類型統一。
至此,有關 Python 知識點的面試題就已告一段落,下次更新數據庫(MySQL,Redis)方面面試題。
所有內容均已上傳至「GitHub」倉庫,歡迎大家點擊原文查閱。
歡迎大家關注個人微信公眾號「PythonDeveloper」,所有內容第一時間更新于公眾號。
所有內容均為本人一點一點敲出來的,難免會有錯字、語句不通順的地方,歡迎大家指正。
所有示例均已在 Python 3.5 環(huán)境下測試通過,如有出錯地方,還請檢查自身 Python 版本。
因本人水平有限,文章內容難免會有出錯,歡迎大家評論指出,一起進步。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45143.html
摘要:第三次握手客戶端收到報文之后,會回應一個報文。因此,需要三次握手才能確認雙方的接收與發(fā)送能力是否正常。三次握手的作用三次握手的作用也是有好多的,多記住幾個,保證不虧。也就是說,第一次第二次握手不可以攜帶數據,而第三次握手是可以攜帶數據的。在面試中,三次握手和四次揮手可以說是問的最頻繁的一個知識點了,我相信大家也都看過很多關于三次握手與四次揮手的文章,今天的這篇文章,重點是圍繞著面試,我們應該...
摘要:下面具體說一說四次面試經歷,已經問到的問題,現在就做一次總結。第四次面試第四家公司真的就是高大上了,在騰訊的旁邊,先不說面試,先說騰訊,真的就是當時內心挺害怕的。有點不好意思的說就是當時站在騰訊大樓面前腿是有些瑟瑟發(fā)抖的。 前言 做一個自我介紹,本人男,愛好女。曾以為自己可以改變世界,沒想到被世界無情的摧殘。來深圳之前那種找工作少于 1W 少跟我談,變成了收到 offer 了 4000...
閱讀 3434·2021-11-08 13:20
閱讀 3359·2021-09-30 09:48
閱讀 2559·2021-09-29 09:41
閱讀 589·2021-09-22 15:04
閱讀 2458·2021-08-23 09:44
閱讀 3663·2020-12-03 17:26
閱讀 1007·2019-08-30 14:10
閱讀 1561·2019-08-29 18:34