Python開發面試必備

2021-09-28 11:59:14 字數 2147 閱讀 5315

1在cpython中,列表被實現為長度可變的陣列

2.在python2中,dict的底層是依靠雜湊表(hash table)進行實現的,使用開放位址法解決衝突.

3手撕iou**

def compute_iou(rec1, rec2):

# computing area of each rectangles

s_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])

s_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])

# computing the sum_area

sum_area = s_rec1 + s_rec2

# find the each edge of intersect rectangle

left_line = max(rec1[1], rec2[1])

right_line = min(rec1[3], rec2[3])

top_line = max(rec1[0], rec2[0])

bottom_line = min(rec1[2], rec2[2])

# judge if there is an intersect

if left_line >= right_line or top_line >= bottom_line:

return 0

else:

intersect = (right_line - left_line) * (bottom_line - top_line)

return (intersect / (sum_area - intersect))*1.0

if __name__=='__main__':

rect1 = (661, 27, 679, 47)

# (top, left, bottom, right)

rect2 = (662, 27, 682, 47)

iou = compute_iou(rect1, rect2)

print(iou)

4.python下多執行緒的限制以及多程序中傳遞引數的方式

python多執行緒有個全域性直譯器鎖(global interpreter lock),這個鎖的意思是任一時間只能有乙個執行緒使用直譯器,跟單cpu跑多個程式乙個意思,大家都是輪著用的,這叫「併發」,不是「並行」。

多程序間共享資料,可以使用 multiprocessing.value 和 multiprocessing.array

5.python是如何進行記憶體管理的?

python引用了乙個記憶體池(memory pool)機制,即pymalloc機制(malloc:n.分配記憶體),用於管理對小塊記憶體的申請和釋放

記憶體池(memory pool)的概念:

當 建立大量消耗小記憶體的物件時,頻繁呼叫new/malloc會導致大量的記憶體碎片,致使效率降低。記憶體池的概念就是預先在記憶體中申請一定數量的,大小相等 的記憶體塊留作備用,當有新的記憶體需求時,就先從記憶體池中分配記憶體給這個需求,不夠了之後再申請新的記憶體。這樣做最顯著的優勢就是能夠減少記憶體碎片,提公升效率。

記憶體池的實現方式有很多,效能和適用範圍也不一樣。

python中的記憶體管理機制——pymalloc:

python中的記憶體管理機制都有兩套實現,一套是針對小物件,就是大小小於256bits時,pymalloc會在記憶體池中申請記憶體空間;當大於256bits,則會直接執行new/malloc的行為來申請記憶體空間。

關於釋放記憶體方面,當乙個物件的引用計數變為0時,python就會呼叫它的析構函式。在析構時,也採用了記憶體池機制,從記憶體池來的記憶體會被歸還到記憶體池中,以避免頻繁地釋放動作。

6.深拷貝和淺拷貝需要注意的地方就是可變元素的拷貝:

在淺拷貝時,拷貝出來的新物件的位址和原物件是不一樣的,但是新物件裡面的可變元素(如列表)的位址和原物件裡的可變元素的位址是相同的,也就是說淺拷貝它拷貝的是淺層次的資料結構(不可變元素),物件裡的可變元素作為深層次的資料結構並沒有被拷貝到新位址裡面去,而是和原物件裡的可變元素指向同乙個位址,所以在新物件或原物件裡對這個可變元素做修改時,兩個物件是同時改變的,但是深拷貝不會這樣,這個是淺拷貝相對於深拷貝最根本的區別。

後續持續更新!!!

c開發面試

1.程式設計驗證大端還是小端 方法一 void isbigendian else 方法二 void isbigendian temp temp.a 0x1234 if temp.b 0x12 低位元組存的是資料的高位元組資料 else 2.int a 10 int a 10 區別,sizeof a ...

iOS開發 面試

今天一大清早去面試,公司距離我家還挺近的,花了乙個小時走著去,也順路印下簡歷,理理思路,到了公司面試官什麼的都不錯,還給我講了很多知識,收穫也是滿滿的,總結下今天都遇到了哪些問題,調整調整狀態.1,當需要自定義tabbar的item的數量可變時怎麼做的 這裡原本是想說自定義tabbar的,不過估計考...

測試開發面試基礎(python)

1使用列表推導式輸出1 100的列表 print i for i in range 100 2使用列表推導式輸出1 100內的奇數 print i for i in range 100 if i 2 1 print i for i in range 1,100,2 print i for i in ...