當前位置:首頁 » 網頁前端 » python腳本面試
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

python腳本面試

發布時間: 2023-04-27 11:50:14

① Python後端開發工程師面試

第一步:自我介紹

第二步:公司介紹

第三步:技術基礎

第四步:項目介紹

第五步:待遇

自我介紹,簡單直接,姓名,籍貫,大學,工作經歷

示例如下:

你好,面試官,我叫XX,來自XX,本科畢業於XX,主修XX專業,有X年工作經驗,在上一家公司擔任python後端開發工程師的職位。

公司名稱是XX、公司主要做外包軟體、都有軟體定製/商城定製、前端2個後端2個運維1個

主要是根據你簡歷中填寫的技術,根據我的簡歷中所寫的,總結幾點如下:

字典的查詢流程:

不可變對象可哈希, str , fronzenset , tuple ,自己實現的類,要重載 __hash__ 方法。

dict內存花銷大,但是查詢速度快,自定義的對象或者python內部的對象都是dict包裝的。

dict的存儲順序和元素添加順序有關,添加順序可能改變已有數據的順序。

集合:是一個可以存放任意數據類型的可變無序的映射集合。

set和dict類似,set的核心也是散列表,但是表元只包含值的引用。 由於散列表的特性,set的元素不能重復,且無序。 內部由哈希實現,查找的時間復雜度為O(1),所以性能很高,實現了魔法函數 __contains__ 可以使用in來查找。 set的去重是通過兩個函數 __hash__ 和 __eq__ 實現的。

(1)淺拷貝

定義:淺拷貝只是對另外一個變數的內存地址的拷貝,這兩個變數指向同一個內存地址的變數值。

淺拷貝的特點:

(2)深拷貝:

定義:一個變數對另外一個變數的值拷貝。

深拷貝的特點:

Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,通過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用問題,通過「分代回收」(generation collectio n)以空間換時間的方法提高垃圾回收效率。

GIL全稱 Global Interpreter Lock ,中文解釋為全局解釋器鎖。它並不是Python的特性,而是在實現python的主流Cpython解釋器時所引入的一個概念,GIL本質上就是一把互斥鎖,將並發運行變成串列,以此來控制同一時間內共享數據只能被一個任務所修改,從而保證數據的安全性。

GIL保護的是解釋器級別的數據,但是用戶自己的數據需要自己加鎖處理。

既然有了GIL的存在,一個進程中同一時刻只有一個線程能夠被執行,無法利用cpu的多核機制,導致多線程用於I/O密集型,多進程用於計算密集型,如金融分析等。

死鎖:兩個或兩個以上的進程或者線程在執行過程中,因為爭奪資源而造成的互相等待現象,若無外力的作用,都將一直處於阻塞狀態,這些互相等待的進程或者線程就被稱為死鎖。

解決方法,使用遞歸鎖(RLock)

這個RLock內部有一個Lock和一個counter變數,counter記錄著acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。上面的例子如果使用RLock代替Lock,則不會發生死鎖

可以直接認為是linux,畢竟搞後端的多數是和linux打交道。

那麼如何避免粘包問題呢? 歸根結底就是一句話, 明確兩個包之間的邊界.

UDP不存在粘包問題,是由於UDP發送的時候,沒有經過Negal演算法優化,不會將多個小包合並一次發送出去。另外,在UDP協議的接收端,採用了鏈式結構來記錄每一個到達的UDP包,這樣接收端應用程序一次recv只能從socket接收緩沖區中讀出一個數據包。也就是說,發送端send了幾次,接收端必須recv幾次(無論recv時指定了多大的緩沖區)。

存儲可能包含rdbms,nosql以及緩存等,我以mysql,redis舉例**