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.break和continue的區別(分別說說他們的作⽤和使⽤)
break和continue都是用於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.read、readline和readlines的區別?大數據文件怎么讀取?
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
區別:
因為A跟B的值相等,所以==的結果就是True,但是不判斷A和B的id地址
而is 不只是會判斷A和B的值 還會判斷A 和B的id是否一致 所以結果就是Flase