亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python程序員的面試題有哪些

發布時間:2021-08-12 14:20:11 來源:億速云 閱讀:115 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“python程序員的面試題有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“python程序員的面試題有哪些”這篇文章吧。

Q1:PEP8是什么?Python之禪(import this)是什么?

這題是考察你對編碼規范的認識,無論是自己寫代碼還是在團隊中寫代碼,了解并遵循代碼規范是很基礎的要求。企業中在提交代碼后都會有對應的工具來對代碼進行檢查,比如 pep8、flake8、pylint 等,但是 PEP 8 是什么一定要了解。

即 Style Guide for Python Code(Python編碼風格指南)。如果面試時不知道什么是 PEP 8 ,那聊起來想必不會很愉快。速戰速決的面試,如果不是你把面試官“秒殺”了,那就是面試官把你“秒殺”了,大部分是后者。 Python 之禪,也就是 import this。這屬于對 Python 文化的了解了。什么意思?你去 Python shell 里執行一下:import this,然后搜索下答案自然就出來了。

Q2:Python常用的容器類型有哪些以及它們之間的差別?

這是一道基礎題。如果被問到了這個問題,說明面試官在探測你對 Python 基礎的掌握。如果不知道,那就會被“秒殺”。當然聊得好了,也可以聊到實現原理層面。

在 Python 中常用的數據類型,有一些是基礎數據類型,比如 int、bool、string,還有容器類型,比如 list、set、dict 等。所有的類型又可以氛分為:可變類型和不可變類型(不知道是什么的可以動手搜索一下)。單說容器類型,每種容器類型都有使用的場景,比如 list 可以存放不同類型的元素,特點是支持索引和切片操作,支持 insert 和 pop 操作,屬于可變類型。由此也可以展開很多面試題中遇到的坑,比如說這個代碼:

python程序員的面試題有哪些

例子

然后再來說到 tuple,也可以當做列表,支持迭代、索引、切片等操作,但因為它是不可變類型,所以不支持 append、insert 等操作,為什么不支持呢?在從應用上來說,在實際編程中經常會用到它,比如:參數傳遞,解包。這一部分可以繼續聊下去的就是namedtuple。再然后就是 set 和 dict,它們跟 list 和 tuple有這么幾個差別:1. 存放的值不是順序的;2. 無法通過索引獲取到數據; 3. 存放的元素不可重復,并且必須是 hashable(可哈希的),針對 key 來說;4. 更快的查找速度,因為是通過哈希表來存儲的。當然還可以繼續深入 set 和 dict 的原理,如何解決哈希碰撞。

Q3:解釋下閉包是什么,以及日常中什么場景會用到?

閉包是指持有了自由變量的函數,那怎么理解呢,用代碼來看一下:

python程序員的面試題有哪些

閉包

日常使用場景是什么呢?最常用會用到的地方就是裝飾器,上面的示例代碼也能看出來,比如我曾寫過 Cache 的演進部分,部分代碼如下:

python程序員的面試題有哪些

這就是個典型的場景。

Q4:GIL 是什么?它的影響和具體原理是什么?

GIL:Global Interpreter Lock(全局解釋器鎖)。具體表現就是:在一個進程中,同一時刻只能有一個線程能到解釋器,為什么只能有一個線程拿到解釋器呢?因為在 CPython 中,內存管理不是線性安全的,所以,為了避免多個線程同時訪問到一個對象,就有了這么一個鎖。順帶著也提到了線程安全的概念,有了 GIL 了,那么 Python 中有哪些類型是線程安全的呢?哪些不是呢?又是一個新的問題。那么 GIL 的影響是什么呢?就是同一時刻只有一個線程在真實執行,對于 CPU 密集型的應用影響比較大,對于 IO 密集型的應用影響沒那么大。當然還可以具體展開來說。

Q5:進程、協程、線程分別是什么,以及區別是什么?

從操作系統角度來講,進程是資源分配單元,線程是執行單元,多個線程可以共享所在進程的資源。而協程是從程序運行角度來叫,是由用戶(程序)控制和調度的一個過程,在 Python 中,協程是一個包含了 yield 的函數,比如下圖:

python程序員的面試題有哪些

協程(包含一個生成器)

在Python 3里面你可以用asyncio.iscoroutine(coro) 來判斷是否為協程。需要了解的是在協程執行時,是通過 event loop 來調度的。如果聊到這,可能會接著聊下 Tornado 的 IOLoop 的事。總體來說,協程可以理解為更輕量級的線程,能夠在單線程中運行多個協程。需要注意的是,在 Python 中協程執行是串行的,這個是由于它的調度機制決定的,這點不同于 Golang。

Q6:如何理解 Django 被稱為 MTV 模式?

如果是我來問這個問題,這個題就是面向對象設計和設計模式的開始。簡單來說大家耳熟能詳的模式叫: MVC。說是 Model View Controller,而在 Django 中因為 Template 來處理視圖展現,所以稱為: MTV。接下里會問到的就是分層的概念,有句話叫:“沒有什么問題是不能通過增加一層解決的,如果有,那就再加一層。”當然還會有設計模式的一些原則等著你,比如開-閉原則、單一職責原則等。

Q7:解釋下什么是 ORM 以及它的優缺點是什么?

ORM:Object Relational Mapping(對象關系映射),它做的事就是幫我們封裝一下對數據庫的操作,避免我們來寫不太好維護的 SQL 代碼。優點就是讓我們寫的代碼更容易維護,因為里面不用夾雜著各種 SQL 代碼。缺點是失去了 SQL 的靈活,并且越是通用的 ORM 框架,性能損耗會越大。

說到性能損耗,可以接著聊的是 Django 中的 raw sql,也就是說Model.objects.raw這個方法的使用,它的作用、原理、性能提升等。還可以繼續聊另外一個老生常談的問題:N+1 的問題。

Q8:如何排查 Django 系統中的性能問題?

對于 Django 這樣一個非常成熟的框架來說,豐富的周邊能夠讓我們快速的找到別人開源出來的優秀插件,比如說 Django-debug-toolbar,或者是 Django-silk 。但是一個基礎問題是:在 Django 的 settings 中,設置DEBUG = True 和 DEBUG = False 的差別是什么?還可以聊的是對于 Django 處理請求到返回響應的具體流程。因為只有熟悉了整體流程,才能在合理的位置進行排查。比方說,當我們判斷可能是數據庫的問題時,那可能需要在 Model 層的某個方法上加上執行時間監測的邏輯。如果是 View 層的其他邏輯導致的,可能會在 Middleware 上增加執行時間監測的邏輯。

Q9:Django 系統中如何配置數據庫的長連接?

這涉及到 Django 如何處理數據庫連接細節的問題。默認情況下對于每一個請求 Django 都會建立一個新的數據庫連接。這意味著當請求量過大時就會出現數據庫(MySQL)的 Too many connection 的問題,對于這個問題,在其他的語言框架中有連接池這樣的東西來減少數據庫的連接數,來提升連接的使用效率。而在 Django 中,為了處理這一問題,增加了一個配置: CONN_MAX_AGE,在 settings 的 DATABASES 配置中。配置了該選項后,Django 會跟數據庫保持鏈接(時長取決于 CONN_MAX_AGE 設定的值 ),不再會針對每個請求都創建新的連接了。但是需要注意的是,這跟數據庫連接池的概念還不太一樣。

Q10:如何部署并監控 Django 系統?

這個就是考察候選人對于真實項目的部署和線上問題排查的了解了。如果沒有真實工作過,可能不太有概念。首先需要理解的是開發的流程,代碼在程序員的電腦(開發機)上開發完成,然后部署到測試環境進行測試,這個過程可能是自動的(由 GitLab CI 觸發或者其他類似邏輯),也可能是需要人工操作的(比如使用 Fabric 或者 ansible)手動執行部署操作。然后測試同學進行測試,沒問題之后,代碼合并到主分支(涉及Git相關的使用流程),再部署上線。

這時系統就可以對外提供服務了,那么問題來了,用戶的訪問是如何到你部署的系統中來的?再來說監控。監控的目的是為了保證程序的正常運行,如果出現問題我們可以及時發現并修復。所以,簡單來說有兩個確定的指標可以觀察,第一個是狀態碼,對于 HTTP 服務來說,監控非 200 的狀態碼的數量是很有必要的;第二個就是應用內的異常監控,這個就是 Sentry 之類的系統來做了,通過它可以收集到具體的異常詳情,完成的 Traceback,可以幫助我們快速地定位問題所在。

雖然說只有十個問題,但是在正式聊的時候,每個問題都是可以層層追問的,其實面試有個原則,就是:要追問到候選人答不出來,或者面試官不知道該問什么為止,因為需要確定候選人的技術掌握的邊界(深度)。

以上是“python程序員的面試題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伽师县| 谷城县| 福鼎市| 东乌| 肃北| 元氏县| 台东市| 九寨沟县| 且末县| 定边县| 华坪县| 江阴市| 长治市| 万盛区| 梨树县| 遂溪县| 澜沧| 光山县| 个旧市| 甘谷县| 镇赉县| 白银市| 桦甸市| 唐河县| 修武县| 平塘县| 波密县| 贡觉县| 蓝田县| 郎溪县| 淳安县| 白山市| 页游| 汉沽区| 玛纳斯县| 比如县| 渭源县| 商南县| 罗源县| 安西县| 铜鼓县|