Mr.Li--python-面試題集合

想找一份Python開發工作嗎?那你很可能得證明自己知道如何使用Python。下面這些問題涉及了與Python相關的許多技能,問題的關注點主要是語言本身,不是某個特定的包或模塊。每一個問題都可以擴充為一個教程,如果可能的話。某些問題甚至會涉及多個領域。

問題1:什么是python?

Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不同,Python代碼在運行之前不需要編譯。其他解釋型語言還包括PHP和Ruby。

Python是動態類型語言,指的是你在聲明變量時,不需要說明變量的類型。你可以直接編寫類似x=111和x="I'm a string"這樣的代碼,程序不會報錯。

Python非常適合面向對象的編程(OOP),因為它支持通過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,類似C++中的public和private),這么設計的依據是“大家都是成年人了”。

在Python語言中,函數是第一類對象(first-class objects)。這指的是它們可以被指定給變量,函數既能返回函數類型,也可以接受函數作為輸入。類(class)也是第一類對象。

Python代碼編寫快,但是運行速度比編譯語言通常要慢。好在Python允許加入基于C語言編寫的擴展,因此我們能夠優化代碼,消除瓶頸,這點通常是可以實現的。numpy就是一個很好地例子,它的運行速度真的非常快,因為很多算術運算其實并不是通過Python實現的。

Python用途非常廣泛——網絡應用,自動化,科學建模,大數據應用,等等。它也常被用作“膠水語言”,幫助其他語言和組件改善運行狀況。

Python讓困難的事情變得容易,因此程序員可以專注于算法和數據結構的設計,而不用處理底層的細節。

為什么提這個問題

如果你應聘的是一個Python開發崗位,你就應該知道這是門什么樣的語言,以及它為什么這么酷。以及它哪里不好。

簡述函數式編程

在函數式編程中,函數是基本單位,變量只是一個名稱,而不是一個存儲單元。除了匿名函數外,Python還使用fliter(),map(),reduce(),apply()函數來支持函數式編程。

什么是匿名函數,匿名函數有什么局限性

匿名函數,也就是lambda函數,通常用在函數體比較簡單的函數上。匿名函數顧名思義就是函數沒有名字,因此不用擔心函數名沖突。不過Python對匿名函數的支持有限,只有一些簡單的情況下可以使用匿名函數。

如何捕獲異常,常用的異常機制有哪些?

如果我們沒有對異常進行任何預防,那么在程序執行的過程中發生異常,就會中斷程序,調用python默認的異常處理器,并在終端輸出異常信息。

try...except...finally語句:當try語句執行時發生異常,回到try語句層,尋找后面是否有except語句。找到except語句后,會調用這個自定義的異常處理器。except將異常處理完畢后,程序繼續往下執行。finally語句表示,無論異常發生與否,finally中的語句都要執行。

assert語句:判斷assert后面緊跟的語句是True還是False,如果是True則繼續執行print,如果是False則中斷程序,調用默認的異常處理器,同時輸出assert語句逗號后面的提示信息。

with語句:如果with語句或語句塊中發生異常,會調用默認的異常處理器處理,但文件還是會正常關閉。

copy()與deepcopy()的區別

copy是淺拷貝,只拷貝可變對象的父級元素。 deepcopy是深拷貝,遞歸拷貝可變對象的所有元素。

函數裝飾器有什么作用(常考)

裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。它經常用于有切面需求的場景,比如:插入日志、性能測試、事務處理、緩存、權限校驗等場景。有了裝飾器,就可以抽離出大量與函數功能本身無關的雷同代碼并繼續重用。

簡述Python的作用域以及Python搜索變量的順序

Python作用域簡單說就是一個變量的命名空間。代碼中變量被賦值的位置,就決定了哪些范圍的對象可以訪問這個變量,這個范圍就是變量的作用域。在Python中,只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域。Python的變量名解析機制也稱為 LEGB 法則:本地作用域(Local)→當前作用域被嵌入的本地作用域(Enclosing locals)→全局/模塊作用域(Global)→內置作用域(Built-in)

新式類和舊式類的區別,如何確保使用的類是新式類

為了統一類(class)和類型(type),python在2.2版本引進來新式類。在2.1版本中,類和類型是不同的。

為了確保使用的是新式類,有以下方法:

放在類模塊代碼的最前面 __metaclass__ = type

從內建類object直接或者間接地繼承

在python3版本中,默認所有的類都是新式類。

簡述__new__和__init__的區別

創建一個新實例時調用__new__,初始化一個實例時用__init__,這是它們最本質的區別。

new方法會返回所構造的對象,init則不會.

new函數必須以cls作為第一個參數,而init則以self作為其第一個參數.

Python垃圾回收機制(常考)

Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,通過“標記-清除”(mark and sweep)解決容器對象可能產生的循環引用問題,通過“分代回收”(generation collection)以空間換時間的方法提高垃圾回收效率。

1 引用計數

PyObject是每個對象必有的內容,其中ob_refcnt就是做為引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少.引用計數為0時,該對象生命就結束了。

優點:

簡單 實時性 缺點:

維護引用計數消耗資源 循環引用

2 標記-清除機制

基本思路是先按需分配,等到沒有空閑內存的時候從寄存器和程序棧上的引用出發,遍歷以對象為節點、以引用為邊構成的圖,把所有可以訪問到的對象打上標記,然后清掃一遍內存空間,把所有沒標記的對象釋放。

3 分代技術

分代回收的整體思想是:將系統中的所有內存塊根據其存活時間劃分為不同的集合,每個集合就成為一個“代”,垃圾收集頻率隨著“代”的存活時間的增大而減小,存活時間通常利用經過幾次垃圾回收來度量。

Python默認定義了三代對象集合,索引數越大,對象存活時間越長。

Python中的@property有什么作用?如何實現成員變量的只讀屬性?

@property裝飾器就是負責把一個方法變成屬性調用,通常用在屬性的get方法和set方法,通過設置@property可以實現實例成員變量的直接訪問,又保留了參數的檢查。另外通過設置get方法而不定義set方法可以實現成員變量的只讀屬性。

*args and **kwargs

*args代表位置參數,它會接收任意多個參數并把這些參數作為元組傳遞給函數。**kwargs代表的關鍵字參數,允許你使用沒有事先定義的參數名,另外,位置參數一定要放在關鍵字參數的前面。

有用過with statement嗎?它的好處是什么?具體如何實現?

with語句適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等。

what will be the output of the code below? explain your answer

defextend_list(val, list=[]):list.append(val)returnlistlist1 = extend_list(10)list2 = extend_list(123, [])list3 = extend_list('a')print(list1)# list1 = [10, 'a']print(list2)# list2 = [123, []]print(list3)# list3 = [10, 'a']classParent(object):x =1classChild1(Parent):passclassChild2(Parent):passprint(Parent.x, Child1.x, Child2.x)# [1,1,1]Child1.x =2print(Parent.x, Child1.x, Child2.x)# [1,2,1]Partent.x =3print(Parent.x, Child1.x, Child2.x)# [3,2,3]


在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

arr= [[1,4,7,10,15], [2,5,8,12,19], [3,6,9,16,22], [10,13,14,17,24], [18,21,23,26,30]]defgetNum(num,data=None):whiledata:ifnum >data[0][-1]:deldata[0]print(data)getNum(num,data=None)elif num


獲取最大公約數、最小公倍數

a =36b =21defmaxCommon(a, b):whileb: a,b = b, a%breturnadefminCommon(a, b):c = a*bwhileb: a,b = b, a%breturnc//aif__name__ =='__main__':? ? print(maxCommon(a,b))? ? print(minCommon(a,b))


獲取中位數

defmedian(data):data.sort()? ? half = len(data) //2return(data[half] + data[~half])/2l = [1,3,4,53,2,46,8,42,82]if__name__ =='__main__':? ? print(median(l))


輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。

defgetOneCount(num):ifnum >0:? ? ? ? count = b_num.count('1')? ? ? ? print(b_num)returncountelifnum <0:? ? ? ? b_num = bin(~num)? ? ? ? count =8- b_num.count('1')returncountelse:return8if__name__ =='__main__':? ? print(getOneCount(5))? ? print(getOneCount(-5))? ? print(getOneCount(0))


本文只做拋磚引玉之用,有些見解還不是特別成熟,希望可以為學習Python找工作的伙伴們提供一些幫助,面試過程當中最重要的一點是放平心態,求職過程是雙方的,不需要太過緊張,把自己掌握的知識充分表達出來就好。只要你是匹千里馬,遲早會被伯樂牽出來遛一遛的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容

  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,605評論 1 118
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,731評論 18 399
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,264評論 3 25
  • 前幾天,晚上下班,去市場買菜,然后回家。進屋后,打開音樂。默認播放的列表,有很多歌,現在都不喜歡聽了,但有幾個人我...
    魚小哆閱讀 2,042評論 0 12
  • 我好像已經忘卻了最初的自己 也忘卻了那個最初的夢想 我想把他們找回 可,他們能還會憐憫我這個可憐蟲嗎? 不知道在什...
    不懂wz閱讀 165評論 0 1