1. 程式人生 > >100道python面試題

100道python面試題

 

 

1、一行程式碼實現1--100之和

利用sum()函式求和

2、如何在一個函式內部修改全域性變數

利用global 修改全域性變數

3、列出5個python標準庫

os:提供了不少與作業系統相關聯的函式

sys:   通常用於命令列引數

re:   正則匹配

math: 數學運算

datetime:處理日期時間

 

4、字典如何刪除鍵和合並兩個字典

 

del和update方法

5、談下python的GIL

GIL 是python的全域性直譯器鎖,同一程序中假如有多個執行緒執行,一個執行緒在執行python程式的時候會霸佔python直譯器(加了一把鎖即GIL),使該程序內的其他執行緒無法執行,等該執行緒執行完後其他執行緒才能執行。如果執行緒執行過程中遇到耗時操作,則直譯器鎖解開,使其他執行緒執行。所以在多執行緒中,執行緒的執行仍是有先後順序的,並不是同時進行。

多程序中因為每個程序都能被系統分配資源,相當於每個程序有了一個python直譯器,所以多程序可以實現多個程序的同時執行,缺點是程序系統資源開銷大

 

6、python實現列表去重的方法

 

先通過集合去重,在轉列表

7、fun(*args,**kwargs)中的*args,**kwargs什麼意思?

8、python2和python3的range(100)的區別

python2返回列表,python3返回迭代器,節約記憶體

9、一句話解釋什麼樣的語言能夠用裝飾器?

函式可以作為引數傳遞的語言,可以使用裝飾器

10、python內建資料型別有哪些

整型--int

布林型--bool

字串--str

列表--list

元組--tuple

字典--dict

 

11、簡述面向物件中__new__和__init__區別

 

__init__是初始化方法,建立物件後,就立刻被預設呼叫了,可接收引數,如圖

1、__new__至少要有一個引數cls,代表當前類,此引數在例項化時由Python直譯器自動識別

2、__new__必須要有返回值,返回例項化出來的例項,這點在自己實現__new__時要特別注意,可以return父類(通過super(當前類名, cls))__new__出來的例項,或者直接是object的__new__出來的例項

3、__init__有一個引數self,就是這個__new__返回的例項,__init__在__new__的基礎上可以完成一些其它初始化的動作,__init__不需要返回值

4、如果__new__建立的是當前類的例項,會自動呼叫__init__函式,通過return語句裡面呼叫的__new__函式的第一個引數是cls來保證是當前類例項,如果是其他類的類名,;那麼實際建立返回的就是其他類的例項,其實就不會呼叫當前類的__init__函式,也不會呼叫其他類的__init__函式。

12、簡述with方法開啟處理檔案幫我我們做了什麼?

開啟檔案在進行讀寫的時候可能會出現一些異常狀況,如果按照常規的f.open

寫法,我們需要try,except,finally,做異常判斷,並且檔案最終不管遇到什麼情況,都要執行finally f.close()關閉檔案,with方法幫我們實現了finally中f.close

(當然還有其他自定義功能,有興趣可以研究with方法原始碼)

 

13、列表[1,2,3,4,5],請使用map()函式輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25]

 

map()函式第一個引數是fun,第二個引數是一般是list,第三個引數可以寫list,也可以不寫,根據需求

14、python中生成隨機整數、隨機小數、0--1之間小數方法

隨機整數:random.randint(a,b),生成區間內的整數

隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數

0-1隨機小數:random.random(),括號中不傳參

 

15、避免轉義給字串加哪個字母表示原始字串?

 

r , 表示需要原始字串,不轉義特殊字元

16、<div class="nam">中國</div>,用正則匹配出標籤裡面的內容(“中國”),其中class的類名是不確定的

17、python中斷言方法舉例

assert()方法,斷言成功,則程式繼續執行,斷言失敗,則程式報錯

18、資料表student有id,name,score,city欄位,其中name中的名字可有重複,需要消除重複行,請寫sql語句

select  distinct  name  from  student

19、10個Linux常用命令

ls  pwd  cd  touch  rm  mkdir  tree  cp  mv  cat  more  grep  echo 

20、python2和python3區別?列舉5個

1、Python3 使用 print 必須要以小括號包裹列印內容,比如 print('hi')

Python2 既可以使用帶小括號的方式,也可以使用一個空格來分隔列印內容,比如 print 'hi'

2、python2 range(1,10)返回列表,python3中返回迭代器,節約記憶體

3、python2中使用ascii編碼,python中使用utf-8編碼

4、python2中unicode表示字串序列,str表示位元組序列

      python3中str表示字串序列,byte表示位元組序列

5、python2中為正常顯示中文,引入coding宣告,python3中不需要

6、python2中是raw_input()函式,python3中是input()函式

 

21、列出python中可變資料型別和不可變資料型別,並簡述原理

 

不可變資料型別:數值型、字串型string和元組tuple

不允許變數的值發生變化,如果改變了變數的值,相當於是新建了一個物件,而對於相同的值的物件,在記憶體中則只有一個物件(一個地址),如下圖用id()方法可以列印物件的id

可變資料型別:列表list和字典dict;

允許變數的值發生變化,即如果對變數進行append、+=等這種操作後,只是改變了變數的值,而不會新建一個物件,變數引用的物件的地址也不會變化,不過對於相同的值的不同物件,在記憶體中則會存在不同的物件,即每個物件都有自己的地址,相當於記憶體中對於同值的物件儲存了多份,這裡不存在引用計數,是實實在在的物件。

 

22、s = "ajldjlajfdljfddd",去重並從小到大排序輸出"adfjl"

 

可變資料型別:列表list和字典dict;

允許變數的值發生變化,即如果對變數進行append、+=等這種操作後,只是改變了變數的值,而不會新建一個物件,變數引用的物件的地址也不會變化,不過對於相同的值的不同物件,在記憶體中則會存在不同的物件,即每個物件都有自己的地址,相當於記憶體中對於同值的物件儲存了多份,這裡不存在引用計數,是實實在在的物件。

 

23、用lambda函式實現兩個數相乘

 

24、字典根據鍵從小到大排序dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}

25、利用collections庫的Counter方法統計字串每個單詞出現的次數"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

26、字串a = "not 404 found 張三 99 深圳",每個詞中間是空格,用正則過濾掉英文和數字,最終輸出"張三  深圳"

順便貼上匹配小數的程式碼,雖然能匹配,但是健壯性有待進一步確認

27、filter方法求出列表所有奇數並構造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個引數,第一個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表

28、列表推導式求列表所有奇數並構造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

29、正則re.complie作用

re.compile是將正則表示式編譯成一個物件,加快速度,並重復使用

30、a=(1,)b=(1),c=("1") 分別是什麼型別的資料?

 

31、兩個列表[1,5,7,9]和[2,2,6,8]合併為[1,2,2,3,6,7,8,9]
32、用python刪除檔案和用linux命令刪除檔案方法
33、log日誌中,我們需要用時間戳記錄error,warning等的發生時間,請用datetime模組列印當前時間戳 “2018-04-01 11:38:54”
34、資料庫優化查詢方法
35、請列出你會的任意一種統計圖(條形圖、折線圖等)繪製的開源庫,第三方也行
36、寫一段自定義異常程式碼
37、正則表示式匹配中,(.*)和(.*?)匹配區別?
38、簡述Django的orm
39、[[1,2],[3,4],[5,6]]一行程式碼展開該列表,得出[1,2,3,4,5,6]
40、x="abc",y="def",z=["d","e","f"],分別求出x.join(y)和x.join(z)返回的結果
41、舉例說明異常模組中try except else finally的相關意義
42、python中交換兩個數值
43、舉例說明zip()函式用法
44、a="張明 98分",用re.sub,將98替換為100
45、寫5條常用sql語句
46、a="hello"和b="你好"編碼成bytes型別
47、[1,2,3]+[4,5,6]的結果是多少?
48、提高python執行效率的方法
49、簡述mysql和redis區別
50、遇到bug如何處理
51、1、正則匹配,匹配日期2018-03-20
url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
52、list=[2,3,5,4,9,6],從小到大排序,不許用sort,輸出[2,3,4,5,6,9]
53、寫一個單列模式
54、保留兩位小數
題目本身只有a="%.03f"%1.3335,讓計算a的結果,為了擴充保留小數的思路,提供round方法(數值,保留位數)
55、求三個方法列印結果
56、列出常見的狀態碼和意義
57、分別從前端、後端、資料庫闡述web專案的效能優化
58、使用pop和del刪除字典中的"name"欄位,dic={"name":"zs","age":18}
59、列出常見MYSQL資料儲存引擎
60、計算程式碼執行結果,zip函式歷史文章已經說了,得出[("a",1),("b",2),("c",3),("d",4),("e",5)]
61、簡述同源策略
62、簡述cookie和session的區別
63、簡述多執行緒、多程序
64、簡述any()和all()方法
65、IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分別代表什麼異常
66、python中copy和deepcopy區別
67、列出幾種魔法方法並簡要介紹用途
68、C:\Users\ry-wu.junya\Desktop>python 1.py 22 33命令列啟動程式並傳參,print(sys.argv)會輸出什麼資料?
69、請將[i for i in range(3)]改成生成器
70、a = "  hehheh  ",去除收尾空格
71、舉例sort和sorted對列表排序,list=[0,-1,3,-10,5,9]
72、對list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函式從小到大排序
73、使用lambda函式對list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],輸出結果為
[0,2,4,8,8,9,-2,-4,-4,-5,-20],正數從小到大,負數從大到小
74、列表巢狀字典的排序,分別根據年齡和姓名排序
75、列表巢狀元組,分別按字母和數字排序
76、列表巢狀列表排序,年齡數字相同怎麼辦?
77、根據鍵對字典排序(方法一,zip函式)
78、根據鍵對字典排序(方法二,不用zip)
79、列表推導式、字典推導式、生成器
80、最後出一道檢驗題目,根據字串長度排序,看排序是否靈活運用
81、舉例說明SQL注入和解決辦法
82、s="info:xiaoZhang 33 shandong",用正則切分字串輸出['info', 'xiaoZhang', '33', 'shandong']
83、正則匹配以163.com結尾的郵箱
84、遞迴求和
85、python字典和json字串相互轉化方法
86、MyISAM 與 InnoDB 區別:
87、統計字串中某字元出現次數
88、字串轉化大小寫
89、用兩種方法去空格
90、正則匹配不是以4和7結尾的手機號
91、簡述python引用計數機制
92、int("1.4"),int(1.4)輸出結果?
93、列舉3條以上PEP8編碼規範
94、正則表示式匹配第一個URL
95、正則匹配中文
96、簡述樂觀鎖和悲觀鎖
97、r、r+、rb、rb+檔案開啟模式區別
98、Linux命令重定向 > 和 >>
99、正則表示式匹配出<html><h1>www.itcast.cn</h1></html>

 

100、python傳引數是傳值還是傳址?

經驗有限,不足之處歡迎指正!

推薦閱讀