Python面試 大牛教給你經驗
今天聊了很多關於Python面試方面的一些問題.發現問的比較多的和Python相關的問題有那麼幾個
python面試最常用的面試題有哪些?
某個面試題感覺回答的不好, 問怎麼回答比較好.
有什麼面試經驗可以分享.
現在和大家分享一下總結的一些大牛的經驗
1.python下多線程的限制以及多進程中傳遞參數的方式?
python多線程有個全局解釋器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個線程使用解釋器,跟單cpu跑多個程序一個意思,大家都是輪著用的,這叫「並發」,不是「並行」。
多進程間共享數據,可以使用 multiprocessing.Value 和 multiprocessing.Array
2.Python是如何進行內存管理的?
Python引用了一個內存池(memory pool)機制,即Pymalloc機制(malloc:n.分配內存),用於管理對小塊內存的申請和釋放
內存池(memory pool)的概念:
當 創建大量消耗小內存的對象時,頻繁調用new/malloc會導致大量的內存碎片,致使效率降低。內存池的概念就是預先在內存中申請一定數量的,大小相等 的內存塊留作備用,當有新的內存需求時,就先從內存池中分配內存給這個需求,不夠了之後再申請新的內存。這樣做最顯著的優勢就是能夠減少內存碎片,提升效率。
內存池的實現方式有很多,性能和適用範圍也不一樣。
python中的內存管理機制——Pymalloc:
python中的內存管理機制都有兩套實現,一套是針對小對象,就是大小小於256bits時,pymalloc會在內存池中申請內存空間;當大於256bits,則會直接執行new/malloc的行為來申請內存空間。 關於釋放內存方面,當一個對象的引用計數變為0時,python就會調用它的析構函數。在析構時,也採用了內存池機制,從內存池來的內存會被歸還到內存池中,以避免頻繁地釋放動作。
3.什麼是lambda函數?它有什麼好處?
lambda 函數是一個可以接收任意多個參數(包括可選參數)並且返回單個表達式值的函數。 lambda 函數不能包含命令,它們所包含的表達式不能超過一個。不要試圖向lambda 函數中塞入太多的東西;如果你需要更複雜的東西,應該定義一個普通函數,然後想讓它多長就多長。
4.如何用Python輸出一個Fibonacci數列?
1 a,b = 0, 1
2 while b
3 print (b),
4 a, b = b, a+b
5.介紹一下Python中webbrowser的用法?
webbrowser模塊提供了一個高級介面來顯示基於Web的文檔,大部分情況下只需要簡單的調用open()方法。
webbrowser定義了如下的異常:
exception webbrowser.Error, 當瀏覽器控制項發生錯誤是會拋出這個異常
webbrowser有以下方法:
webbrowser.open(url[, new=0[, autoraise=1]])
這個方法是在默認的瀏覽器中顯示url, 如果new = 0, 那麼url會在同一個瀏覽器窗口下打開,如果new = 1, 會打開一個新的窗口,如果new = 2, 會打開一個新的tab, 如果autoraise = true, 窗口會自動增長。
webbrowser.open_new(url)
在默認瀏覽器中打開一個新的窗口來顯示url, 否則,在僅有的瀏覽器窗口中打開url
webbrowser.open_new_tab(url)
在默認瀏覽器中當開一個新的tab來顯示url, 否則跟open_new()一樣
webbrowser.get([name]) 根據name返回一個瀏覽器對象,如果name為空,則返回默認的瀏覽器
webbrowser.register(name, construtor[, instance])
註冊一個名字為name的瀏覽器,如果這個瀏覽器類型被註冊就可以用get()方法來獲取。
6.解釋一下python的and-or語法
與C表達式 bool ? a : b類似,但是bool and a or b,當 a 為假時,不會象C表達式 bool ? a : b 一樣工作
應該將 and-or 技巧封裝成一個函數:
def choose(bool, a, b):
因為 [a] 是一個非空列表,它永遠不會為假。甚至 a 是 0 或 "" 或其它假值,列表[a]為真,因為它有一個元素。
7.how do I iterate over a sequence in reverse order?
for x in reversed(sequence):
如果不是list, 最通用但是稍慢的解決方案是:
for i in range(len(sequence)-1, -1, -1): x = sequence[i]
8.Python是如何進行類型轉換的?
9.Python裡面如何實現tuple和list的轉換?
10.請寫出一段Python代碼實現刪除一個list裡面的重複元素?
11.Python如何實現單例模式?其他23種設計模式python如何實現?
12.Python裡面如何拷貝一個對象?
標準庫中的copy模塊提供了兩個方法來實現拷貝.一個方法是copy,它返回和參數包含內容一樣的對象.
使用deepcopy方法,對象中的屬性也被複制
13.如何用Python來進行查詢和替換一個文本字元串?
可以使用sub()方法來進行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])
replacement是被替換成的文本
string是需要被替換的文本
count是一個可選參數,指最大被替換的數量
14.Python裡面search()和match()的區別?
match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none 。
15.有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序?
要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
1. 將兩序列合併為一個序列,並排序,為序列Source
2. 拿出最大元素Big,次大的元素Small
3. 在餘下的序列S[:-2]進行平分,得到序列max,min
4. 將Small加到max序列,將Big加大min序列,重新計算新序列和,和大的為max,小的為min。
16.python程序中文輸出問題怎麼解決?
用encode和decode
如:
方法二:
在文件開頭加上
17.python如何捕獲異常?
(1)使用try和except語句來捕獲異常
捕獲到的IOError錯誤的詳細原因會被放置在對象e中,然後運行該python 異常處理的except代碼塊捕獲所有的異常
(2)用raise語句手工引發一個異常:
(3)採用sys模塊回溯最後的異常
18.python代碼得到列表list的交集與差集?
交集
差集
19.如何用Python來發送郵件?
可以使用smtplib標準庫。
以下代碼可以在支持SMTP監聽器的伺服器上執行。
20.介紹一下except的用法和作用?
Python的except用來捕獲所有異常,因為Python裡面的每次錯誤都會拋出一個異常,所以每個程序的錯誤都被當作一個運行時錯誤。
※敲黑板!Python與人工智慧到底是什麼關係?
※Python 2與Python 3 的區別
TAG:Python |