python基礎面試理論題

1、大數據的文件讀取

利用生成器generator
迭代器進行迭代遍歷:for line in file

2、迭代器和生成器的區別

迭代器是一個更加抽象的概念,任何對象,如果它的類有next方法和iter方法返回自身。對於string、list、dict、tuple等這類容器對象,使用for循環遍歷是很方便的。在後臺for語句對容器對象調用iter()函數,iter()是Python的內置函數。iter()會返回一個定義了next()方法的迭代器對象,它在容器中逐個訪問容器內元素,next()也是python的內置函數。在沒有後續元素時,next()會拋出一個StopIterration的異常。
生成器(Generator)是創建迭代器的簡單而強大的工具。它們寫起來就像是正規的函數,只是在返回數據的時候需要使用yield語句。每次next()被調用時,生成器會返回它脫離的位置(它記憶語句最後一次執行的位置和所有的數據值)
**區別:**生成器能做到迭代器能做的所有事,而且因爲自動創建了__iter__()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達式取代列表解析可以同時節省內存。除了創建和保持程序狀態的自動生成,當發生器終結時,還會自動跑出StopIterration異常。

3.裝飾器的作用和功能

  • 引入日誌
  • 函數執行時間統計
  • 執行函數前的預備處理
  • 執行函數後的清理功能
  • 權限校驗等場景
  • 緩存

4、簡單談下GIL

Global Interpreter Lock(全局解釋器鎖)
Python代碼的執行由python虛擬機(也叫解釋器主循環,CPython版本)來控制,Python在設計之初就考慮到要在解釋器的主循環中,同時只有一個線程在執行,即任意時刻,只有一個線程在解釋器中運行。對Python虛擬機的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同一時刻只有一個線程在運行。
在多線程環境中,Python虛擬機按以下方式執行:
1.設置GIL----》2.切換到一個線程去運行------》3.運行: a.指定數量的字節碼指令,或者 b.線程主動讓出控制(可以調用time.sleep(0))-------》4.把線程設置爲睡眠狀態-------》5.解鎖GIL-------》6.再次重複以上所有步驟
再調用外部代碼(如C/C++擴展函數)的時候,GIL講會被鎖定,直到這個函數結束爲止(由於在這期間沒有Python的字節碼被運行,所以不會做線程切換)。

5、find和grep

grep命令是一種強大的文本搜索工具,grep所有內容串可以是正則表達式,允許對文本文件進行模式查找。如果找到匹配模式,grep打印包含模式的所有行。
find通常用來在特定的目錄下搜索符合條件的文件,也可以用來搜索特定用戶屬主的文件。

6、線上服務可能因爲種種原因導致掛掉怎麼辦?

Linux下的後臺進程管理利器supervisor
每次文件修改後在linux執行service supervisord restart

7、如何提高python的運行效率

使用生成器;關鍵代碼使用外部功能包(Cython,pylnlne,pypy,pyrex);針對循環的優化–儘量避免在循環中訪問變量的屬性

8、Python中的yield用法

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

9、描述數組、鏈表、隊列、堆棧的區別?

數組和鏈表是數據存儲方式的概念,數組在連續的空間中存儲數據,而鏈表可以在非連續的空間中存儲數據;
隊列和堆棧是描述數據存取方式的概念,隊列是先進先出,而堆棧是後進先出;隊列和堆棧可以用數組來實現,也可以用鏈表實現。

10、你知道幾種排序,講一講你最熟悉的一種?

冒泡排序、選擇排序、插入排序、希爾排序、堆排序、歸併排序、快速排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章