python后端基礎語法面試題


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

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

 

2.常見的linux命令?

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

 

3.python中yield的用法?

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

 

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

一.垃圾回收
二.引用技術:當某標簽引用技術為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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM