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.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