天天看點

Python程式員面試技巧

  好程式員Python教育訓練分享Python程式員面試技巧,往年的這個時候,“金三銀四”的招聘熱潮已經撲面而至。今年,因為疫情的影響,各大公司的社招可能跟“2002的第一場雪”一樣,比以往時候來得更晚一些。當然,對于計劃在年後找工作或者跳槽的人來說,相當于多了一段可以用來準備面試的時間,相信有這個計劃的人已經開始各項準備工作了。

  今天,想跟大家聊一聊面試中的一些技巧,因為我自己是一個程式員,目前以Python作為主要的開發語言,我跟大家聊的也是程式員面試的相關技巧。可能我會以Python程式員面試為例,但是這些技巧應該對程式員都有用的。

  我們的履歷上通常會有一個叫做“專業技能”的部分,這個部分通常會羅列6到12項左右的内容來展示你對程式設計語言、開發架構、伺服器産品、開發工具等的了解和掌握情況。這裡的每句話在面試時都可能都會産生一個或多個對應的問題,如果不事先做好準備,隻是憑感覺羅列出若幹項内容,那麼在面試的時候必然是一個填不起的大坑。接下來,我為大家舉例說明這些坑都在什麼地方。

  下面的内容是不是在你的履歷上也有類似的描述呀,那麼看看我提出的問題,你是否能夠給出漂亮的答案。

  技能點1:熟練的使用Python語言進行應用程式開發,有良好的程式設計習慣,對面向對象的設計原則以及常用設計模式有較為深入的了解,熟悉Python開發中常用的标準庫和第三方庫。

  如果我是面試官,針對上面的描述會問你如下幾個問題:

問題1:你所指的良好的程式設計習慣是什麼。

問這個問題其實是想考察你對程式設計規範(如:PEP8)的了解,除此之外還想知道你有沒有使用Lint工具檢查代碼的習慣。

問題2:說一說你知道的面向對象的設計原則有哪些;你在項目中用到過哪些設計模式。

很多面試者都喜歡說自己懂設計原則和設計模式,但是基本上稍微一問就原形畢露了。最簡單的“哪些地方會用到單例模式”,很多面試者都答不上來,而且面試官并不想聽你說出23種設計模式的名字,而是想知道你的項目中哪個場景用到了哪種設計模式。

問題3:說幾個你在平時工作中用得最多的标準庫和三方庫。

  技能點2:熟練的使用Django和Flask架構進行Web應用後端開發,熟悉MVC(MTV)架構模式,有在項目中使用django-redis、django-celery、django-rest-framework、flask-sqlalchemy、flask-restful等第三方庫的經驗,了解過Web.py、Tornado、Twisted等架構。

  如果我是面試官,針對上面的描述會向你提出如下幾個問題。

問題1:說一下你對MVC的了解。

這個問題其實還是很友好的,但是如果你就背書式的把網上找到的所謂的參考答案念出來,面試官肯定是不滿意的。這種問題一定要說自己的了解和看法,最好結合着項目來講。我在面試中還有一個神奇的發現就是很多面試者認為MVC就是三層架構,我隻能說這個行業裡面蹩腳的開發者還真多。

問題2:說一說Django架構中一個請求的生命周期是怎樣的。

問題3:說一說Django、Flask、Tornado架構各自的優缺點。

  技能點3:熟悉關系型資料庫産品MySQL和Oracle,熟練的使用SQL,對MySQL的優化有一定程度的了解,熟悉非關系型資料庫産品MongoDB和Redis,有使用高速緩存服務和消息隊列服務優化項目的經驗。

問題1:你知道哪些和MySQL優化相關知識?

這個問題可能還是比較能夠鑒别開發者的能力和水準,因為MySQL的優化涉及到硬體、軟體、架構各個方面的問題,當然還有程式本身的優化。

問題2:在使用Redis實作高速緩存時,有沒有遇到過緩存雪崩、緩存穿透等問題?

問題3:比較一下你用過的資料庫産品,說一下它們都适合什麼樣的應用場景。

  技能點4:熟悉常用的機器學習算法和模型,包括:KNN、DecisionTree、LR、Naive Bayes、SVM、PCA、AdaBoost、K-Means等。

問題1:K均值算法的優缺點是什麼?如何對算法進行調優?

問題2:歐氏距離和餘弦距離的特點和應用場景分别是什麼?

問題3:決策樹有哪些常用的啟發函數?

  技能點5:熟練使用Linux作業系統,熟悉Linux常用服務的安裝和配置,熟悉Shell程式設計。

問題1:說一些你常用的Linux指令。

這個問題貌似非常友好,但是如果你張嘴就說出pwd、ls、cd這些指令,面試基本就結束了,為什麼自己想想就明白了,想不明白就給我留言吧。

問題2:如何使用find指令根據檔案大小、檔案最後修改時間搜尋檔案,如何删除搜尋到的檔案。

一個指令加上的常用參數深挖一下,也可以甄别出很多對Linux系統并不熟悉的小白。

問題3:Shell腳本中如何定義函數?函數中如何擷取傳入的參數?如何調用函數并傳入參數?

  技能點6:熟練的使用Git實施項目的版本控制,熟悉項目的開發流程。

問題1:說一下之前的公司項目開發使用的過程模型(開發流程)。

問題2:說一下之前的項目中是如何實施缺陷管理(錯誤管理)的。

這個問題還可以繼續深挖到如何提一個缺陷報告、缺陷分為多少個級别等。

問題3:之前公司在使用git進行版本控制時,用的是哪一種分支管理政策?

我經常驚奇的發現,很多面試者說自己能熟練的使用Git,但是居然不知道Git的分支管理政策。

  技能點7:熟悉Nginx、uWSGI、Gunicorn等伺服器的配置和使用,熟Docker、K8S等工具在項目部署中的應用。

  問題1:之前的項目部署一共用了多少台伺服器?有沒有跳闆機?有沒有配置VPC?

問題2:說一下WSGI是什麼?比較一下uWSGI和Gunicorn。

很多面試者對CGI、WSGI這些完全沒有概念,這就是典型的知其然不知其是以然。

問題3:微服務架構有什麼優點?項目中是否使用過微服務架構?

  技能點8:熟悉Web前端開發的語言和架構,對HTML、CSS和JavaScript有較好的了解和掌握,熟悉jQuery、Lodash、Bootstrap、AngularJS、Vue.js等前端庫和架構。

前端的東西我也不太懂,也沒有什麼發言權,但是一般面試的時候我也喜歡問下面幾個問題。

  問題1:你們公司的前端用過哪些庫和架構?

就算你隻負責後端開發,但是前端用的技術肯定也應該是清楚的,沒吃過豬肉也見過豬跑。

問題2:你們移動端是原生開發還是跨平台開發?

這個問題可以繼續追問關于跨平台開發工具的相關問題,道理跟第一個問題一樣。

問題3:你們公司前端跟後端如何對接工作?例如遇到資料格式化之類的問題時,到底是前端來處理還是後端來處理。

  看到這裡,相信你已經比較深刻的體會到了寫履歷是個技術活,一不小心就給自己挖一個在面試的過程中無法填補的大坑。那麼如何提前把這個坑填好了,兩個辦法:

  1. 認真負責的制作履歷,不要把無法把控的内容強加到自己的履歷上。
  2. 對于已經做好了履歷,給它做一版标注稿,把可能遇到的問題提前标注好,并借此思考這些問題應該如何解決,這也算是對之前學習工作的經曆做一個總結和沉澱。

  當然,剛才隻說了“專業技能”的部分,至于”工作經曆“和”項目經驗“的部分也會有類似的問題。行成于思毀于随,凡事預則立不預則廢,制作一份有競争力的優質履歷的關鍵就在于此。面試當然不僅僅是履歷,履歷隻是一個開始,找工作需要的是全面展示自己的綜合實力。但是,我們相信好的開始是成功的一半,首先做好自己的履歷,才能迎來美好的”金三銀四“。