本面試題題庫,由公號:非本科程序員 整理發布
第1題:如何理解 Django 被稱為 MTV 模式?
這個題就是面向對象設計和設計模式的開始。
你可能比較熟悉的模式叫做: MVC。說是 Model View Controller,而在 Django 中因為 Template 來處理視圖展現,所以稱為:
MTV。
接下里會問到的就是分層的概念,有句話叫:“沒有什么問題是不能通過增加一層解決的,如果有,那就再加一層。”當然還會有設計模式的一些原則等著你,比如開-閉原則、單一職責原則等。
第2題:解釋下什么是 ORM 以及它的優缺點是什么?
ORM:Object Relational Mapping(對象關系映射),它做的事就是幫我們封裝一下對數據庫的操作,避免我們來寫不太好維護的 SQL 代碼。
- 優點就是讓我們寫的代碼更容易維護,因為里面不用夾雜著各種 SQL 代碼。
- 缺點是失去了 SQL 的靈活,并且越是通用的 ORM 框架,性能損耗會越大。
說到性能損耗,可以接著聊的是 Django 中的 raw sql,也就是說 Model.objects.raw 這個方法的使用,它的作用、原理、性能提升等。還可以繼續聊另外一個老生常談的問題:N+1 的問題。
第3題:Django 系統中如何配置數據庫的長連接?
這涉及到 Django 如何處理數據庫連接細節的問題。默認情況下對于每一個請求 Django 都會建立一個新的數據庫連接。這意味著當請求量過大時就會出現數據庫(MySQL)的 Too many connection 的問題,對于這個問題,在其他的語言框架中有連接池這樣的東西來減少數據庫的連接數,來提升連接的使用效率。而在 Django中,為了處理這一問題,增加了一個配置:
CONN_MAX_AGE
,在 settings 的 DATABASES 配置中。配置了該選項后,Django 會跟數據庫保持鏈接(時長取決于 CONN_MAX_AGE 設定的值 ),不再會針對每個請求都創建新的連接了。
但是需要注意的是,這跟數據庫連接池的概念還不太一樣。
第4題: 請解釋一下python的線程鎖Lock和Rlock的區別,以及你曾經在項目中是如何使用的?
從原理上來說:在同一線程內,對RLock進行多次acquire()操作,程序不會阻塞。
資源總是有限的,程序運行如果對同一個對象進行操作,則有可能造成資源的爭用,甚至導致死鎖 也可能導致讀寫混亂
第5題:字典、列表查詢時的時間復雜度是怎樣的?
列表是序列,可以理解為數據結構中的數組,字典可以理解為數據結構中的
hashmap
,python中list對象的存儲結構采用的是線性表,因此其查詢復雜度為
O(n)
。
而dict對象的存儲結構采用的是散列表(hash表),其在最優情況下查詢復雜度為O(1)。
dict的占用內存稍比list大,會在1.5倍左右。
第6題:關注題,最近在公號更新一個神奇的系列入門文章
更多內容,歡迎關注 https://dwz.cn/r4lCXEuL
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
