想要備戰(zhàn) Python 面試,這兩個(gè)項(xiàng)目有千道 Python 問(wèn)題與實(shí)現(xiàn)。
昨天機(jī)器之心介紹了 PHD 大牛的求職之路,很多讀者感覺(jué)這位大牛太厲害了,他的經(jīng)歷對(duì)我們幫助不大。對(duì)于一般的機(jī)器學(xué)習(xí)求職者而言,最基礎(chǔ)的就是掌握 Python 編程技巧,隨后才是相關(guān)算法或知識(shí)點(diǎn)的掌握。在這篇文章中,我們將介紹一個(gè) Python 練習(xí)題項(xiàng)目,它從算法練習(xí)題到機(jī)試實(shí)戰(zhàn)題提供了眾多問(wèn)題與解決代碼。
在春招之前,我們就曾介紹過(guò) GitHub 萬(wàn)星的 ML 算法工程師面試指南,它提供了完整的面試知識(shí)點(diǎn)、編程題及題解、各科技公司的面試題錦等內(nèi)容。讀者可查閱該項(xiàng)目了解機(jī)器學(xué)習(xí)面試需要準(zhǔn)備哪些知識(shí)。
項(xiàng)目地址:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese
在這個(gè) 2W+ 收藏量的 GitHub 項(xiàng)目中,作者前一部分主要介紹了機(jī)器學(xué)習(xí)及各子領(lǐng)域的知識(shí)點(diǎn)。其中每一個(gè)知識(shí)點(diǎn)都只提供最核心的概念,如果讀者遇到不熟悉的算法或者遇到知識(shí)漏洞,可以進(jìn)一步閱讀相關(guān)文獻(xiàn)。后一部分則重點(diǎn)介紹了怎樣搞定編程面試題,包括各種數(shù)據(jù)結(jié)構(gòu)和排列組合相關(guān)的題目。
一般而言,第一部分的基礎(chǔ)知識(shí)是長(zhǎng)期積累的結(jié)果,但對(duì)于后面的 Python 面試題,我們可以通過(guò)刷題快速提升解題水平。這篇文章重點(diǎn)在于介紹兩個(gè) Python 面試題項(xiàng)目,它們提供了大量 Python 問(wèn)題與解題代碼。
面試怎么做
在進(jìn)入 Python 題海之前,我們還是先要了解了解面試流程。面試形式和過(guò)程大致如下:
電話篩選(隱形的現(xiàn)場(chǎng)面試):這個(gè)過(guò)程一般由 HR 完成,如果是技術(shù)人員負(fù)責(zé),這個(gè)過(guò)程一般都很短。
技術(shù)面試:你將和實(shí)際開(kāi)發(fā)人員進(jìn)行這一輪面試,在這期間他們會(huì)深入了解你的知識(shí)背景。
技術(shù)評(píng)估/homework 編程/結(jié)對(duì)編程:一般而言,如果一家公司的面試有結(jié)對(duì)編程環(huán)節(jié),那絕對(duì)是加分的。homework 編程也能理解,但絕大多數(shù)情況下這都是在浪費(fèi)每個(gè)人的時(shí)間,也無(wú)法正確評(píng)估技術(shù)水平。
最終面試:和團(tuán)隊(duì)其他成員見(jiàn)面,如果這是一家小公司的話,這一輪面試你面對(duì)的可能是創(chuàng)始人(們)。
發(fā)放 offer。
當(dāng)然,每家公司都會(huì)有所不同,這只是你在找工作的過(guò)程中可能經(jīng)歷的大致過(guò)程。一般技術(shù)面試考察的是我們的背景知識(shí),而技術(shù)評(píng)估則需要語(yǔ)言解決實(shí)際問(wèn)題了。本文的這兩個(gè)項(xiàng)目,可以讓你搞定公司的技術(shù)評(píng)估,當(dāng)然其實(shí)目前很多書(shū)籍與網(wǎng)站都在解決這個(gè)問(wèn)題,例如劍指 Offer 和 LeetCode 等等。
Interview-code-practice-python
首先在第一個(gè)項(xiàng)目中,作者給出了 2017 校招真題、劍指 offer、華為機(jī)試、機(jī)試題和直通 BAT 算法題等各種 Python 實(shí)現(xiàn),它們共計(jì) 200 道左右。
項(xiàng)目地址:https://github.com/leeguandong/Interview-code-practice-python
如下展示了劍指 offer 文件夾包含的實(shí)現(xiàn)文檔,每一個(gè)問(wèn)題都是單獨(dú)的 Python 文件:
整個(gè)項(xiàng)目有很多有意思的題目,例如「變態(tài)青蛙跳.py」包含的題目與題解代碼為:
「合唱團(tuán).py」內(nèi)的代碼如下:
The Algorithms - Python
第二個(gè)項(xiàng)目是更流行的一個(gè) Python 代碼庫(kù),它目前有 2.4W+的星。該項(xiàng)目實(shí)現(xiàn)的各種算法都是用純 Python 完成的,它希望更簡(jiǎn)介地展示這些問(wèn)題怎樣解決,因此相比 Python 標(biāo)準(zhǔn)庫(kù)中實(shí)現(xiàn)的方法可能效率不那么高。
項(xiàng)目地址:https://github.com/TheAlgorithms/Python
目前該項(xiàng)目展示的解決方案主要有:
排序
搜索
圖
數(shù)學(xué)
算法分析
二元樹(shù)
數(shù)據(jù)結(jié)構(gòu)
圖像處理
動(dòng)態(tài)規(guī)劃
線性代數(shù)
機(jī)器學(xué)習(xí)
哈希
……
這個(gè)項(xiàng)目的算法實(shí)現(xiàn)非常多,我們可以根據(jù)實(shí)際需要選擇具體的類別,并查看給出的解決方案。如果我們希望了解排序算法,那么選擇排序后我們大概能看到近 30 種不同的排序?qū)崿F(xiàn):
其中,在算法入門第一課「bubble_sort.py」中,該項(xiàng)目給出的冒泡排序解決方案為:
該項(xiàng)目提供的實(shí)現(xiàn)很多都非常底層,在「Math」中,我們可以了解到如何實(shí)現(xiàn)絕對(duì)值求解、求最大最小值等等,當(dāng)然也可以了解到矩陣乘法是如何實(shí)現(xiàn)的。該項(xiàng)目其實(shí)對(duì)面試很有幫助,雖然它并不是直接解決特定的某個(gè)問(wèn)題,但是復(fù)現(xiàn)一般的 Python 函數(shù)或者基本問(wèn)題對(duì)于理解 Python 很有幫助。
綜合以上兩個(gè) Python 實(shí)現(xiàn)項(xiàng)目,不論是解題技巧,還是對(duì) Python 的理解,我們的實(shí)戰(zhàn)能力都會(huì)有很大的提升。就像理解神經(jīng)網(wǎng)絡(luò)最好的方法是用純 NumPy 實(shí)現(xiàn)一遍,理解 Python 的最好方法即過(guò)一遍基本函數(shù)與結(jié)構(gòu)。有了充足的理解,再看看面試真題或在 LeetCode、??途W(wǎng)就比較簡(jiǎn)單了。