Python工程師求職指南 | 秋招徵文
Python語言現在非常熱門,在學術界和產業界的影響力都在不斷提高,Python工程師的相關崗位也越來越多。Python作為「膠水語言」很方便與其他語言銜接,簡單易學,實現方便的優點也使它很適合作為新手入門的第一個程式語言,但也有著運行效率低等缺點。本文將主要針對產業界,說明要具備哪些能力才能獲得一個滿意的Python相關崗位的Offer。
一.Python編程基礎
首先,要熟練掌握循環,條件等結構,各種數據類型,運算符的優先順序,函數和類的調用和文件讀寫等等,這些基礎知識就不多贅述了。稍微複雜一點的,要理解常見容器,如列表,集合,元組和字典。常見考點:為什麼判斷容器是否包含某元素,用集合比列表的效率高很多?什麼情況該用列表,什麼情況該用元組?
再進階一步,因為程式運行過程中可能出現意料之外的情況,要掌握異常處理機制。除了常見的容器,還會使用collection模組下的容器,例我常用的defaultdict和Counter,這會使得程式碼更為簡潔高效。深度拷貝和淺拷貝的用途。
下面我提出幾個易錯點來供大家評估自己的水平,如果大家覺得自己不會出現這樣的錯誤,那說明Python的基本功是比較紮實的。
- 查找單詞在句子中的首字母
sentence = "Hello, are you Jack?"
print(sentence[sentence.find("Jack")]) #結果為「J」,正確
print(sentence[sentence.find("jack")]) #結果為「?」,錯誤。
因為sentence.find("jack")等於-1。字元串的方法find和index分別適合什麼情況,當前問題應該怎麼實現呢? - 刪除列表中的數字零
number = [1, 2, 1, 2, -1, 0, 0]
for n in number:
if n == 0:
number.remove(n)
print("final:", number)
輸出結果為「number:
[1, 2, 1, 2, -1, 0]為什麼最後一個「0」成為漏網之魚?
二. 收到面試邀約
掌握常見技能,包括正則表達式,數據結構,資料庫,API服務。
- 數據結構
會分析演算法的時間和空間複雜度,還包括但不限於鏈表,隊列,哈希表,各種樹的結構和使用,和排序,貪心,遞歸,分治以及動態規劃等演算法。 - MySql資料庫的常見操作
如連接,創建表,增刪改等等。至少對資料庫基礎部分系統學習一下,雖然面試中一般不要求現場實現程式碼,但可能會問到資料庫的設計規範和原則。 - API服務
由於微服務方案的廣泛使用,很多功能子模組都是一個獨立的API服務,不同API服務之間互相通訊從而配合完成整個功能。所以,要求能搭建和調用一個API服務,常用Post,Get的請求方式,如果掌握gRPC和REST請求方式更好。大家不要覺得這個難度很大,其實藉助有一些成熟的模組,例如Django或Flask框架,可以很方便地搭建一個API服務,並不比動態規劃題目更複雜。 - 正則表達式
許多數據處理和網頁相關的工作都離不開通過正則表達式來高效地匹配和處理數據。
三.offer收割機
上一個階段可以讓你接到面試通知,要想拿到滿意的Offer是避不開「刷題」的。建議大家刷一下LeetCode (//leetcode-cn.com/problemset/algorithms/),按照題目難度分為簡單,中等和困難,主要是評測對數據結構的掌握程度和分析能力。如果你的目標不是BAT,京東和今日頭條等大廠,對於簡單和中等難度的題目都沒有問題,困難題目(如動態規劃)至少能讀懂示例程式碼就足夠了。
線上考試當然是機考,這是大家比較習慣的方式。但現場面試時大多數會採用手寫程式碼的方式。手寫程式碼,就不能通過編譯和運行來檢驗自己的程式碼,而且反覆修改也不美觀,所以一定要先確定思路再下筆。建議大家多和面試官溝通,先明確題目的要求(比如是否區分大小寫,函數的輸入和輸出形式,這其實也是考察工程師在明確需求方面的能力),然後可以說出自己的思路,或許遇上心地善良的會直接幫你指出潛在的問題,避免走彎路。最後,即使是手寫程式碼也要自測,關注易出錯的邊界條件。不要覺得自測顯得沒自信,會自測的碼農才能讓領導放心。
Tip1:LeetCode上面的題目太多了,做不完怎麼辦?
和你人生中的無數次考試一樣,以歷史原題為主,以你不熟練,易錯的題目為主。
Tip2:是不是把這些題目都記下來就萬事大吉?
很多公司都是會準備新題的,只是題型接近。所以僅僅記下來是不行的,還需要理解消化,才能舉一反三。
Tip3:面試時發現題目肯定可以用動態規劃實現,但寫不出來,心態崩了啊!
有些題目你沒有把握能用最低的複雜度實現,也以放寬一些,但最好不要用窮舉法。
四.講價的資本
在待遇問題上取得更多談資的前提是具備足夠的競爭力。新人的最大弱點是缺乏經驗,那麼如何快速漲經驗呢?
- 參加比賽
現在有很多的比賽,如果能完整地參加下來對自己的能力和資訊都是一個不小的提高。但是想要在大型比賽中名列前茅也並非易事,如果比賽名次不佳又不好寫在簡歷上。
2.實習或參加項目
如果能夠完整地參加一個項目周期(提出需求,需求評審和排期,進度追蹤,測試和優化迭代和發布上線),會使得大家受益匪淺。一般面試官會圍繞你的論文或項目深入地去討論一些細節,所以盡量圍繞項目做好充分的準備。
五.尾語
工作中常用的資料庫和API服務在面試中出現的比例並不高,而面試常客的演算法編程題卻在工作中不常見,即使遇到也可以先問問度娘再照搬。因為面試官要通過這種靈活性大的演算法編程題來綜合考察知識體系,思維和溝通能力。一方面,工作多年的老手和成績優異的應屆生在這方面的優勢並不明顯,仍然需要用心準備;另一方面,也給了想轉行電腦的門外漢更多的機會,只要付出一定有回報。
面試階段可以先找幾個自己不在乎的企業練練手,每次面試後不斷總結,熱身後再向自己心儀的Offer發起衝刺。還可以通過學長學姐,牛客網等資源尋找內推的途徑,但也要與自身實力相當才行。歡迎轉發給需要的人。
