真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python程序員的面試題有哪些-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)服務(wù)項目包括瓊中黎族網(wǎng)站建設(shè)、瓊中黎族網(wǎng)站制作、瓊中黎族網(wǎng)頁制作以及瓊中黎族網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,瓊中黎族網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到瓊中黎族省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

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

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

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

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

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

python程序員的面試題有哪些

例子

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

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

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

python程序員的面試題有哪些

閉包

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

python程序員的面試題有哪些

這就是個典型的場景。

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

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

Q5:進(jìn)程、協(xié)程、線程分別是什么,以及區(qū)別是什么?

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

python程序員的面試題有哪些

協(xié)程(包含一個生成器)

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

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

如果是我來問這個問題,這個題就是面向?qū)ο笤O(shè)計和設(shè)計模式的開始。簡單來說大家耳熟能詳?shù)哪J浇? MVC。說是 Model View Controller,而在 Django 中因為 Template 來處理視圖展現(xiàn),所以稱為: MTV。接下里會問到的就是分層的概念,有句話叫:“沒有什么問題是不能通過增加一層解決的,如果有,那就再加一層?!碑?dāng)然還會有設(shè)計模式的一些原則等著你,比如開-閉原則、單一職責(zé)原則等。

Q7:解釋下什么是 ORM 以及它的優(yōu)缺點是什么?

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

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

Q8:如何排查 Django 系統(tǒng)中的性能問題?

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

Q9:Django 系統(tǒng)中如何配置數(shù)據(jù)庫的長連接?

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

Q10:如何部署并監(jiān)控 Django 系統(tǒng)?

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

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

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

以上是“python程序員的面試題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


新聞標(biāo)題:python程序員的面試題有哪些-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/ceipsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部