1. 程式人生 > >史上最全 python常見面試題

史上最全 python常見面試題

大資料的檔案讀取

  ① 利用生成器generator

  ②迭代器進行迭代遍歷:for line in file

迭代器和生成器的區別

1)迭代器是一個更抽象的概念,任何物件,如果它的類有next方法和iter方法返回自己本身。對於string、list、dict、tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後臺for語句對容器物件呼叫iter()函式,iter()是python的內建函式。iter()會返回一個定義了next()方法的迭代器物件,它在容器中逐個訪問容器內元素,next()也是python的內建函式。在沒有後續元素時,next()會丟擲一個StopIteration異常

2)生成器(Generator)是建立迭代器的簡單而強大的工具。它們寫起來就像是正規的函式,只是在需要返回資料的時候使用yield語句。每次next()被呼叫時,生成器會返回它脫離的位置(它記憶語句最後一次執行的位置和所有的資料值)

區別:生成器能做到迭代器能做的所有事,而且因為自動建立了__iter__()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表示式取代列表解析可以同時節省記憶體。除了建立和儲存程式狀態的自動方法,當發生器終結時,還會自動丟擲StopIteration異常

裝飾器的作用和功能

引入日誌

函式執行時間統計

執行函式前預備處理

執行函式後的清理功能

許可權校驗等場景

快取

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 的位元組碼被執行,所以不會做執行緒切換)。

find和grep

grep命令是一種強大的文字搜尋工具,grep搜尋內容串可以是正則表示式,允許對文字檔案進行模式查詢。如果找到匹配模式,grep列印包含模式的所有行。

find通常用來再特定的目錄下搜尋符合條件的檔案,也可以用來搜尋特定使用者屬主的檔案。

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

linux下的後臺程序管理利器 supervisor

每次檔案修改後再linux執行 service supervisord restart

如何提高python的執行效率

使用生成器;關鍵程式碼使用外部功能包(Cython,pylnlne,pypy,pyrex);針對迴圈的優化--儘量避免在迴圈中訪問變數的屬性

常用Linux命令

ls,help,cd,more,clear,mkdir,pwd,rm,grep,find,mv,su,date

Python中的yield用法

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

描述陣列、連結串列、佇列、堆疊的區別?

陣列與連結串列是資料儲存方式的概念,陣列在連續的空間中儲存資料,而連結串列可以在非連續的空間中儲存資料;

佇列和堆疊是描述資料存取方式的概念,佇列是先進先出,而堆疊是後進先出;佇列和堆疊可以用陣列來實現,也可以用連結串列實現。

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

Python是如何進行記憶體管理的

一、垃圾回收:

python不像C++,Java等語言一樣,他們可以不用事先宣告變數型別而直接對變數進行賦值。對Python語言來講,物件的型別和記憶體都是在執行時確定的。這也是為什麼我們稱Python語言為動態型別的原因(這裡我們把動態型別可以簡單的歸結為對變數記憶體地址的分配是在執行時自動判斷變數型別並對變數進行賦值)。

二、引用計數:

Python採用了類似Windows核心物件一樣的方式來對記憶體進行管理。每一個物件,都維護這一個對指向該對物件的引用的計數。當變數被繫結在一個物件上的時候,該變數的引用計數就是1,(還有另外一些情況也會導致變數引用計數的增加),系統會自動維護這些標籤,並定時掃描,當某標籤的引用計數變為0的時候,該對就會被回收。

三、記憶體池機制Python的記憶體機制以金字塔行,-1,-2層主要有作業系統進行操作,

      第0層是C中的malloc,free等記憶體分配和釋放函式進行操作;

      第1層和第2層是記憶體池,有Python的介面函式PyMem_Malloc函式實現,當物件小於256K時有該層直接分配記憶體;

      第3層是最上層,也就是我們對Python物件的直接操作;

在 C 中如果頻繁的呼叫 malloc 與 free 時,是會產生效能問題的.再加上頻繁的分配與釋放小塊的記憶體會產生記憶體碎片. Python 在這裡主要乾的工作有:

如果請求分配的記憶體在1~256位元組之間就使用自己的記憶體管理系統,否則直接使用 malloc.

這裡還是會呼叫 malloc 分配記憶體,但每次會分配一塊大小為256k的大塊記憶體.

經由記憶體池登記的記憶體到最後還是會回收到記憶體池,並不會呼叫 C 的 free 釋放掉.以便下次使用.對於簡單的Python物件,例如數值、字串,元組(tuple不允許被更改)採用的是複製的方式(深拷貝?),也就是說當將另一個變數B賦值給變數A時,雖然A和B的記憶體空間仍然相同,但當A的值發生變化時,會重新給A分配空間,A和B的地址變得不再相同

web框架部分 

1.django 中當一個使用者登入 A 應用伺服器(進入登入狀態),然後下次請求被 nginx 代理到 B 應用伺服器會出現什麼影響?

如果使用者在A應用伺服器登陸的session資料沒有共享到B應用伺服器,納米之前的登入狀態就沒有了。

2.跨域請求問題django怎麼解決的(原理)

啟用中介軟體

post請求

驗證碼

表單中新增{%csrf_token%}標籤

3.請解釋或描述一下Django的架構

對於Django框架遵循MVC設計,並且有一個專有名詞:MVT

M全拼為Model,與MVC中的M功能相同,負責資料處理,內嵌了ORM框架

V全拼為View,與MVC中的C功能相同,接收HttpRequest,業務處理,返回HttpResponse

T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html,內嵌了模板引擎

4.django對資料查詢結果排序怎麼做,降序怎麼做,查詢大於某個欄位怎麼做

排序使用order_by()

降序需要在排序欄位名前加-

查詢欄位大於某個值:使用filter(欄位名_gt=值)

5.說一下Django,MIDDLEWARES中介軟體的作用?

答:中介軟體是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。

你對Django的認識?

 Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只需要使用起ORM,做簡單的物件定義,它就能自動生成資料庫結構、以及全功能的管理後臺。

Django內建的ORM跟框架內的其他模組耦合程度高。

應用程式必須使用Django內建的ORM,否則就不能享受到框架內提供的種種基於其ORM的便利;理論上可以切換掉其ORM模組,但這就相當於要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。

Django的賣點是超高的開發效率,其效能擴充套件有限;採用Django的專案,在流量達到一定規模後,都需要對其進行重構,才能滿足效能的要求。

Django適用的是中小型的網站,或者是作為大型網站快速實現產品雛形的工具。

Django模板的設計哲學是徹底的將程式碼、樣式分離; Django從根本上杜絕在模板中進行編碼、處理資料的可能。

Django重定向你是如何實現的?用的什麼狀態碼?

使用HttpResponseRedirect

redirect和reverse

狀態碼:302,301

ngnix的正向代理與反向代理?

正向代理 是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。

反向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。

Tornado 的核是什麼?

Tornado 的核心是 ioloop 和 iostream 這兩個模組,前者提供了一個高效的 I/O 事件迴圈,後者則封裝了 一個無阻塞的 socket 。通過向 ioloop 中新增網路 I/O 事件,利用無阻塞的 socket ,再搭配相應的回撥 函式,便可達到夢寐以求的高效非同步執行。

Django 本身提供了 runserver,為什麼不能用來部署?

runserver 方法是除錯 Django 時經常用到的執行方式,它使用 Django 自帶的

WSGI Server 執行,主要在測試和開發中使用,並且 runserver 開啟的方式也是單程序 。

 uWSGI 是一個 Web 伺服器,它實現了 WSGI 協議、uwsgi、http 等協議。注意 uwsgi 是一種通訊協議,而 uWSGI 是實現 uwsgi 協議和 WSGI 協議的 Web 伺服器。uWSGI 具有超快的效能、低記憶體佔用和多 app 管理等優點,並且搭配著 Nginx

就是一個生產環境了,能夠將使用者訪問請求與應用 app 隔離開,實現真正的部署 。相比來講,支援的併發量更高,方便管理多程序,發揮多核的優勢,提升效能。

相關推薦

python見面試題

大資料的檔案讀取   ① 利用生成器generator   ②迭代器進行迭代遍歷:for line in file 迭代器和生成器的區別 1)迭代器是一個更抽象的概念,任何物件,如果它的類有next方法和iter方法返回自己本身。對於string、list、dic

整理的 python見面試題(基本必考)

1、大資料的檔案讀取  ① 利用生成器generator  ②迭代器進行迭代遍歷:for line in file2、迭代器和生成器的區別1)迭代器是一個更抽象的概念,任何物件,如果它的類有next方法和iter方法返回自己本身。對於string、list、dict、tupl

整理的 python見面試題(基本必考)① ②③④⑤⑥⑦⑧⑨⑩

1.大資料的檔案讀取:  ① 利用生成器generator;  ②迭代器進行迭代遍歷:for line in file;2.迭代器和生成器的區別:答:(1)迭代器是一個更抽象的概念,任何物件,如果它的類有next方法和iter方法返回自己本身。對於string、list、di

python試題詳解 (二)(附帶詳細答案(關注、持續更新))

23、re的match和search區別? re.match()從開頭開始匹配string。 re.search()從anywhere 來匹配string。 # 多行模式>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No ma

python試題詳解(三)(附帶詳細答案(關注、持續更新))

38、面向物件深度優先和廣度優先是什麼?     39、面向物件中super的作用? 40、是否使用過functools中的函式?其作用是什麼? 1 Python自帶的 functools 模組提供了一些常用的高階函式,也就是用於處理其它函式的特殊函式。

Python從入門到資深書籍資料分享!

暢銷書 jpeg 集成 mar sha 鞏固 技能 ima 能力 今天我來為大家分享十本不可錯過的Python好書,分別適合入門、進階到精深三個不同階段的人來閱讀。 Python高性能編程 Amazon 五星暢銷書。 Python 入門進階必讀。 Python代碼僅僅能夠

Python資料型別詳解

資料型別是每個程式語言必不可少的基礎知識,也是必須要掌握的技能,很多人知識簡單的進行理解,並沒有很系統的進行知識的梳理,以下是對python語言的全部資料型別詳細彙總: Python中可以自定義資料型別,可以具有無限種資料型別。 系統預設提供6個標準資料型別: 1.Num

Python資料分析學習路徑圖

Python是一種面向物件、直譯式計算機程式設計語言,由Guido van Rossum於1989年底發明。由於他簡單、易學、免費開源、可移植性、可擴充套件性等特點,Python又被稱之為膠水語言。下圖為主要程式語言近年來的流行趨勢,Python受歡迎程度扶搖直上。 圖

阿里 Java 面試題總結

以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關試題。 JAVA基礎 JAVA中的幾種基本資料型別是什麼,各自佔用多少位元組。 String類能被繼承嗎,為什麼。 String,Stringbuffer

的資料庫面試題,不看絕對後悔

資料庫面試知識點彙總 一、基本概念 1.主鍵、外來鍵、超鍵、候選鍵 超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。 候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。 主鍵:資料庫表中對儲存資料物件予以唯一和完

的iOS面試題及答案

最近在做iOS面試,總結一些實用的面試題以及參考答案,供博友們交流溝通。 可用一些不明確的技術要點引起話題,如: Multithreading:什麼時候處理多執行緒,幾種方式,優缺點。 Delegate, Notification,KVO, other 優

BAT 大廠面試題整理

主要分為以下幾部分:(1)java面試題(2)Android面試題(3)高階技術面試題(4)非技術性問題&HR問題彙總1java面試題熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有

Python基礎合集!集合用法、檔案操作字元轉換、函式

    list = {1, 3, 6, 5, 7, 9, 11, 3, 7} # 定義集合方式一 list1 = set([1, 3, 6, 5, 7, 9, 11, 3, 7]) # 定義集合方式二 list2 = set() # 定義一個空集合 p

的Unity面試題(含答案)

一.什麼是渲染管道? 是指在顯示器上為了顯示出影象而經過的一系列必要操作。 渲染管道中的很多步驟,都要將幾何物體從一個座標系中變換到另一個座標系中去。 主要步驟有: 本地座標->檢視座標->背面裁剪->光照->裁剪->投影->檢視變換->光柵化。

的 struts2 面試題

1 Struts2與Struts1的聯絡與區別 為什麼要用Struts2struts1與struts2都是mvc框架的經典實現模式。Struts2不是從Struts1升級而來,而是有WebWork改名而來,而WebWork只是Xwork加了很多WEB攔截器而已.區別: 1.

| 前端工程師面試題彙總

A、B兩人分別在兩座島上。B生病了,A有B所需要的藥。C有一艘小船和一個可以上鎖的箱子。C願意在A和B之間運東西,但東西只能放在箱子裡。只要箱子沒被上鎖,C都會偷走箱子裡的東西,不管箱子裡有什麼。如果A和B各自有一把鎖和只能開自己那把鎖的鑰匙,A應該如何把東西安全遞交給B? 答案:A把藥放進箱子,用自

Python面向物件程式設計

開發十年,就只剩下這套架構體系了! >>>   

Spring Boot面試題(含答案)看完就是Spring Boot專家!

  一.Spring Boot、Spring MVC 和 Spring 有什麼區別? SpringFrame

Java多線程面試題及答案

blog 上下文 exec 線程 單例 通信 流轉 排查 創建 多線程有什麽用? 線程和進程的區別是什麽? Java實現線程有哪幾種方式? 啟動線程方法start()和run()有什麽區別? 怎麽終止一個線程?如何優雅地終止線程? 一個線程的生命周期

可能是的機器學習和Python(包括數學)速查表

最好 pytorch 資料 sub mat 出了 statistic 遇到 FQ 新手學習機器學習很難,就是收集資料也很費勁。所幸Robbie Allen從不同來源收集了目前最全的有關機器學習、Python和相關數學知識的速查表大全。強烈建議收藏! 機器學習有很多方面