python後端基礎語法面試題

1.如何提升python的運行效率?python

使用生成器;關鍵代碼使用外部功能包,針對循環的優化-儘可能避免在循環中訪問變量的屬性。linux

 

2.常見的linux命令?django

cd,pwd,touch,ls,mkdir,rm,help,sudo,ssh,date,clearflask

 

3.python中yield的用法?數組

yield簡單來講是一個生成器,這樣函數記住上次返回時在函數中的位置,對於生成器第二次或n次調用跳轉至該函數。多線程

 

4.python中如何進行內存管理的?ssh

一.垃圾回收
二.引用技術:當某標籤引用技術爲0的時候,就該對象就會被收回函數

三.內存池機制大數據

 

5.描述數組,鏈表,隊列,堆棧的區別?優化

數組和鏈表是存儲方式的概念,數組在連續的空間中存儲數據,鏈表在非連續的空間中存儲數據;

隊列和堆棧是描述數據存取方法的概念,隊列是先進先出,而堆棧是後進後出,隊列和堆棧能夠用鏈表來實現,也能夠用數組來實現。

 

6.如何一行代碼實現0-100和?

sum(range(0,101))

 

7.列出5個python標準庫?

os:提供很多於操做系統相關聯的函數

sys:一般用於命令行參數

datetime:日期時間

re:正則匹配

math:數學運算

 

8.字典是如何刪除鍵和合並兩個字典?

dict1 = {「name」:「banzhang」,"age":18}

del.dict1["name"]

dict2={"sex":"男"}

dict1.update(dict2)

 

9.談一下python中的GIL?

這裏的GIL鎖主要是針對計算密集型任務。

GIL是python中的全局解釋器鎖,是不可控的,同一個進程中,假若有多個線程在運行,那麼其中一個線程在運行的時候就會霸佔GIL鎖,就使得其餘線程沒法運行,等該線程運行結束之後,其餘線程才能運行。若是線程中遇到耗時操做(I/O密集型任務),則解釋器鎖會解開,使得其餘線程運行,因此說在多線程中,線程的運行還是有前後順序的,並非同時進行.

何時釋放GIL鎖?

1.時間片耗盡(cpu時間)

2..任務遇到I/O等待時

3.執行任務結束

4.執行到字節碼閾值時(,歐仁100條)

如何改善GIL鎖對程序的影響?

1.升級python解釋器(變化較小)

2.更換python解釋器(由於python解釋器的庫比較全面,若是更換就沒有這麼強大的庫使用,因此也沒有什麼實際做用)

3.使用進程+協程的方法(由於子進程會複製一份主進程的資源,包括GIL,因此每一個進程都會有一個GIL,而利用協程是由於只須要一個線程,一個線程就不會產生資源競爭的問題)

 

9.談一下GIL鎖和互斥鎖的區別?

GIL是全局解釋器鎖,是解釋器層面的,不可控的。

互斥鎖是代碼層面的鎖,是可控的。

無論互斥鎖和GIL鎖都是解決共享變量的資源競爭的問題。

 

10.python2和python3的區別?

1.語法區別

1.1 python2輸出  print 「hello word」,python3輸出 print("hello word")

1.2 python2和python3的range(100)的區別,python2返回列表,python3返回一個迭代器節約內存。

2.python2中爲正常顯示中文,引入coding聲明,python3中不須要。

 

11.什麼是裝飾器?應用場景?一句話解釋什麼樣的語言可以使用裝飾器

裝飾器的特色是返回值和參數都是函數

裝飾器的目的就是已封裝函數進行操做,爲其加上新的功能或一系列運算。

在flask中獲取用戶的登陸使用的就是裝飾器

在django中middkeware中間件 其實就是高級的裝飾器用法。

 函數能夠做爲參數傳遞的語言,可使用裝飾器。

 

 

12.生成器、迭代器和可迭代對象區別和應用?

能使用for遍歷的就叫可迭代對象,能使用next方法的就是迭代器,生成器是特殊的迭代器。

 

13.Python中數組有哪些類型?字典能夠是有序的嗎?

字典實際上是個無序的序列,可是咱們能夠按照字典的鍵或值進行排序

 

14.python⾃帶的處理字符串的⽅法,內置函數。⽐如怎麼處理換⾏符。

Python中自帶了換行符,若是想要處理:

好比:

print(「hello word」,end=」」)

print(「hello word」)

顯示效果:hello wordhello word

 

15.Python中的可變類型與不可變類型

什麼是可變、不可變?元組⾥添加字典,會改變id嗎?

可變類型:會在原來的內存地址上修改元素  好比: 列表,字典

不可變類型:不會在原來的內存地址上修改元素,而是指向了新的內存引用  好比:整型,字符串,元組

 

元組中添加字典,會改變id

由於元組是不可變類型,若是修改了元組的元素,就至關於從新建立了一個元組。因此元組的id會改變

 

 

16.breakcontinue的區別(分別說說他們的做⽤和使⽤)

 

breakcontinue都是用於while嵌套循環中

 

Continue是結束內層的while循環,continue語句並無使整個循環終止

 

Break是結束整個while循環

 

 

17.對不定⻓參數的理解?

 

通常分爲兩種:

 

一種是*args 位置參數 在定義函數時,在形參前面加一個*,表明能夠接收任意多個實參,用元組類型保存全部數據。通常寫成def function(*args)

 

一種是**kwargs 命名參數 表明能夠接收任意多個的命名參數,用字典類型保存。

 

 

 

18.對缺省參數的理解?

 

若是調用函數的時候,傳遞了對應位置的實參,那就使用這個傳遞的值,若是沒有傳遞對應的值,那就使用缺省參數的值。

 

 

 

19.什麼是lambda函數?它有什麼好處?寫⼀個匿名函數求兩個數的和。

 

匿名函數,

 

Func = Lambda a,b : a + b

 

Func(10,20)

 

 

 

20.readreadlinereadlines的區別?大數據文件怎麼讀取?

 

Read 是讀取整個文件

 

Read(5) 讀取文件中幾個字節

 

Readline是讀取一行

 

Readlines 按行讀取全部內容,返回的是一個列表,每個元素就是文件中每一行的內容

1.利用生成器generator

2.迭代器進行迭代遍歷:for line in file

 

 

 

21.上下⽂管理器瞭解嗎

 

上下文管理器 with

 

有兩個方法 一個是enter 一個是exit

 

Enter 主要是負責上下文的準備工做,通常是 打開文件,準備環境

 

Exit 主要是負責善後工做 好比關閉文件,一些回收機制

 

 

22.什麼單例模式,其應⽤場景都有哪些?

 

單例模式:不管建立多少個實例對象,始終指向的是第一個實例對象

 

23.Python中有⽇志嗎?怎麼使⽤?

 

 

24.is 和 「==」的區別

Is== 主要針對於可變類型的判斷 由於不可變類型的id都是一致的。因此is==都是True

A=[10]

B=[10]

Print(A == B)  True

Pritn(A is B) Flase

區別:

由於AB的值相等,因此==的結果就是True,可是不判斷ABid地址

is 不僅是會判斷AB的值 還會判斷A Bid是否一致 因此結果就是Flase

相關文章
相關標籤/搜索