python面試題----持續更新中
寫在開頭:
學習python已經好幾個月了,從來沒有認認真真寫過一篇部落格,目前正在準備面試,決定將wusir部落格裡關於python的315+面試題來做個python學習的一個總結
附:wusir部落格園地址:https://www.cnblogs.com/wupeiqi/
第一部分 Python基礎篇(80題)
-
為什麼學習Python?
-
通過什麼途徑學習的Python?
-
Python和Java、PHP、C、C#、C++等其他語言的對比?
python 解釋型語言,語法簡潔優雅。 C C++ 編譯型語言,先編譯後執行,偏底層。
-
簡述解釋型和編譯型程式語言?
編譯型: c / c++ 執行速度快,開發效率低,不可跨平臺 解釋型:python / java / php 執行速度低,開發效率高,可跨平臺
-
Python直譯器種類以及特點?
直譯器: 將python語法解釋成二進位制 CPython C語言寫的 IPython 把CPython包裝了一下 PyPy Python寫的 採用JIT技術 一大塊一大塊編譯 顯著提高Python程式碼得執行速度 JPython Java寫的 IronPython .NET寫的
-
位和位元組的關係? 1位元組 = 8位
-
b、B、KB、MB、GB 的關係?
1B = 1Byte(位元組) = 8bit(位元/位) 1GB = 1024MB 1MB = 1024KB 1KB = 1024B
-
請至少列舉5個 PEP8 規範(越多越好)。
PEP8 Python 編碼規範 一 程式碼編排 1 縮排。4個空格的縮排(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。 2 每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在操作符的後邊敲回車。
PEP8規範 - 通過程式碼實現如下轉換:
二進位制轉換成十進位制:v = “0b1111011”
十進位制轉換成二進位制:v = 18
八進位制轉換成十進位制:v = “011”
十進位制轉換成八進位制:v = 30
十六進位制轉換成十進位制:v = “0x12”
十進位制轉換成十六進位制:v = 87v = "0b1111011" >>> int("0b1111011",2) v = 18 >>> bin(18) '0b10010' v = "011" >>> int("011",8) v = 30 >>> oct(30) '0o36' v = "0x12" >>> int("0x12",16) v = 87 >>> hex(87) '0x57'
-
請編寫一個函式實現將IP地址轉換成一個整數。
如 10.3.9.12 轉換規則為:
10 00001010
3 00000011
9 00001001
12 00001100
再將以上二進位制拼接起來計算十進位制結果:00001010 00000011 00001001 00001100 = ?def func(str_ip): arr = str_ip.split(".") temp = [] for i in arr: t = bin(int(i))[2:] s = t.rjust(8,'0') temp.append(s) str_temp = "".join(temp) print(int(str_temp,2)) # 167971084 func("10.3.9.12")
-
python遞迴的最大層數? 1000
>>> import sys >>> sys.getrecursionlimit() 1000
- 求結果:
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1v1 = 1 or 3 # 1 v2 = 1 and 3 # 3 v3 = 0 and 2 and 1 # 0 v4 = 0 and 2 or 1 # 1 v5 = 0 and 2 or 1 or 4 #1 v6 = 0 or Flase and 1 # False
-
ascii、unicode、utf-8、gbk 區別?
utf-8 佔3個位元組 中文 gbk 佔2個位元組 中文 unicode 佔2個位元組 ascii: 佔1個位元組,一套電腦編碼系統,最多隻能只能表示256個字元,主要用於顯示英語字元和其他西歐語言。 顯然ascii無法將世界上的各種文字和符號全部表示,所以就出現了一種可以代替所有字元和符號的編碼,即 unicode Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼,佔2個位元組。 UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存(中文,佔3個自己)
-
位元組碼和機器碼的區別?
C語言,程式碼編譯之後得到機器碼: 機器碼在處理器上直接執行,每一條指令控制cpu工作。 python語言,程式碼編譯得到位元組碼,虛擬機器上執行位元組碼並轉換成機器碼之後再到處理器上執行。 執行Python程式碼時,如果匯入了其他的 .py 檔案,那麼,執行過程中會自動生成一個與其同名的 .pyc 檔案,該檔案就是Python直譯器編譯之後產生的位元組碼。 ps:程式碼經過編譯可以產生位元組碼;位元組碼通過反編譯也可以得到程式碼。
-
三元運算規則以及應用場景?
result = 值1 if 條件 else 值2
-
列舉 Python2和Python3的區別?
主要體現在以下幾個方面: 1.python3中print是一個內建函式,有多個引數,而python2中print是一個語法結構; 2.Python2列印時可以不加括號:print 'hello world', Python3則需要加括號 print("hello world") 3.Python2中,input要求輸入的字串必須要加引號,為了避免讀取非字串型別發生的一些行為,不得不使用raw_input()代替input() 下面通過以下幾點給大家介紹Python2與Python3的不同點,具體內容如下所述: 1、規範性 1)、在大的環境下,Python2含有PHP、Java、C等語言的規範陋習。(Python是一門開源的語言,任何人都可以貢獻程式碼,但是每個人上傳的程式碼規範都不相同。) 2)、Python2裡面重複的程式碼特別多。 3)、Python3編碼規範、清晰、簡單,符合Python的宗旨。 2、編碼 1)、Python2預設編碼是ASCII,只能顯示英文,顯示中文會報錯。想讓Python2顯示中文,就需在首行新增“# -*- encoding:utf-8 -*-”。 2)、Python3的預設編碼就是utf-8,中文和英文都能支援。 3、語法 1)、使用者互動:Python2的語法是“ raw_input”,而Python3的語法是“input”。 4、資料型別 1)、Python2裡既有 int 型別又有 long int 型別,而Python3裡只有 int 型別。 Python2中input的坑 ? 1 2 3 print ("what do you like") a = input("Enter any content:") print ("i like",a) 輸入字串時會報錯,而在python3中很好地解決了這個問題。
python3 & python2的區別 -
用一行程式碼實現數值交換:
a = 1
b = 2a, b = b, a
-
Python3和Python2中 int 和 long的區別?
-
xrange和range的區別?
-
檔案操作時:xreadlines和readlines的區別?
-
列舉布林值為False的常見值?
-
字串、列表、元組、字典每個常用的5個方法?
-
lambda表示式格式以及應用場景?
-
pass的作用?
-
*arg和**kwarg作用
-
is和==的區別
-
簡述Python的深淺拷貝以及應用場景?
-
Python垃圾回收機制?
-
Python的可變型別和不可變型別?
- 求結果:
v = dict.fromkeys(['k1','k2'],[])
v[‘k1’].append(666)
print(v)
v[‘k1’] = 777
print(v) - 求結果:
-
列舉常見的內建函式?
-
filter、map、reduce的作用?
-
一行程式碼實現9*9乘法表
-
如何安裝第三方模組?以及用過哪些第三方模組?
-
至少列舉8個常用模組都有那些?
-
re的match和search區別?
-
什麼是正則的貪婪匹配?
-
求結果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
-
求結果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
-
def func(a,b=[]) 這種寫法有什麼坑?
-
如何實現 “1,2,3” 變成 [‘1’,’2’,’3’] ?
-
如何實現[‘1’,’2’,’3’]變成[1,2,3] ?
-
比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?
-
如何用一行程式碼生成[1,4,9,16,25,36,49,64,81,100] ?
-
一行程式碼實現刪除列表中重複的值 ?
-
如何在函式中設定一個全域性變數 ?
-
logging模組的作用?以及應用場景?
-
請用程式碼簡答實現stack 。
-
常用字串格式化哪幾種?
-
簡述 生成器、迭代器、可迭代物件 以及應用場景?
-
用Python實現一個二分查詢的函式。
-
談談你對閉包的理解?
-
os和sys模組的作用?
-
如何生成一個隨機數?
-
如何使用python刪除一個檔案?
-
談談你對面向物件的理解?
-
Python面向物件中的繼承有什麼特點?
-
面向物件深度優先和廣度優先是什麼?
-
面向物件中super的作用?
-
是否使用過functools中的函式?其作用是什麼?
-
列舉面向物件中帶爽下劃線的特殊方法,如:__new__、__init__
-
如何判斷是函式還是方法?
-
靜態方法和類方法區別?
-
列舉面向物件中的特殊成員以及應用場景
-
1、2、3、4、5 能組成多少個互不相同且無重複的三位數
-
什麼是反射?以及應用場景?
-
metaclass作用?以及應用場景?
-
用盡量多的方法實現單例模式。
-
裝飾器的寫法以及應用場景。
-
異常處理寫法以及如何主動跑出異常(應用場景)
-
什麼是面向物件的mro
-
isinstance作用以及應用場景?
- 寫程式碼並實現:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1] -
json序列化時,可以處理的資料型別有哪些?如何定製支援datetime型別?
-
json序列化時,預設遇到中文會轉換成unicode,如果想要保留中文怎麼辦?
-
什麼是斷言?應用場景?
-
有用過with statement嗎?它的好處是什麼?
-
使用程式碼實現檢視列舉目錄下的所有檔案。
-
簡述 yield和yield from關鍵字。