寫在之前
如果看過我第一篇文章 (三個月自學(xué)拿到 python 開發(fā) offer!) 的朋友可能知道,我來上海一個多星期,面試了大概十幾家公司,收到了一些 offer,其實(shí)截止到昨天下午我依然還是在面試的路上。我是自學(xué) Python,因?yàn)橹安恢雷约何磥硪獜氖率裁礃拥膷徫?,所以學(xué)的時候爬蟲和后端的知識都有涉及,所以自己投的公司的范圍也比較廣,所以接下來我寫的東西也可能比較多,可以選自己的方向去看。
面試范圍
這么多家公司的面試取個并集的話,基本上所有能問的大類都問了,諸如 Python 基礎(chǔ),web框架,爬蟲,數(shù)據(jù)庫,計算機(jī)網(wǎng)絡(luò),操作系統(tǒng),數(shù)據(jù)結(jié)構(gòu)與算法等。下面我就開始詳細(xì)說一下各個分類我被問到的面試題,我爭取盡量的多記起一些來。
面試題
Python基礎(chǔ)
1.說一說你所知道的 Python 數(shù)據(jù)結(jié)構(gòu)有哪些。
2.Python 中列表和元組的區(qū)別是什么?元組是不是真的不可變?
3.什么是生成器和迭代器?它們之間有什么區(qū)別?
4.什么是閉包?裝飾器又是什么?裝飾器有什么作用?你用過裝飾器嗎?請寫一個裝飾器的例子。
5.說一下什么是匿名函數(shù),用匿名函數(shù)有什么好處?
6.在學(xué)習(xí) Python 的過程中,你有想過如何提高 Python 的運(yùn)行效率嗎?
7.用過類嗎?知道繼承嗎?請寫一個例子,用到繼承。
8.說一下深拷貝和淺拷貝。
還有一些記不太清了,感覺都不是很難,就是正常如果看過任意一本 Python 入門書的都可以回答出來。
Web 框架
1.什么是 Django? 說說你的理解。
2.Django 遵循什么樣的設(shè)計模式?每個字母代表什么意思?各自完成什么樣的功能?它和MVC是怎么對應(yīng)的?
3.Django 中的緩存是怎么用的?
4.用 Django 做過什么項(xiàng)目嗎?大概是怎么樣的思路?現(xiàn)在讓你寫個登陸頁面,你要怎么寫?
5.說一下 session 和 cookie 區(qū)別。為什么 cookie 是不安全的?
6.你在用 Django 做項(xiàng)目的時候碰到過什么問題嗎?你印象最深的是哪個? 你是怎么解決的?
怎么說呢,Django 這部分在面試的時候問的更多的是一些項(xiàng)目方面的問題,具體的細(xì)節(jié)和應(yīng)用其實(shí)很少,頂多就是幾個常見的問題。所以建議投這方面工作的朋友手里要有項(xiàng)目,這樣心里不慌。
爬蟲
1.說一下你寫爬蟲的時候用到過的包。
2.會用正則表達(dá)式嗎?會的話請用正則表達(dá)式寫一下郵箱的地址。
3.說一下 Python 爬蟲的框架,你用過哪個?做過什么樣的爬蟲嗎?
4.你在寫爬蟲的過程中遇到過什么問題?印象最深的是哪個?你是如何解決的?
5.什么是反爬蟲?說一下你知道的反爬蟲,各自是什么特點(diǎn),該如何解決?
6.什么是 Ajax?(因?yàn)槲业捻?xiàng)目上有寫這個,所以問了)
爬蟲這部分同樣也是問了較多簡歷上所寫項(xiàng)目的實(shí)現(xiàn)以及一些細(xì)節(jié),所以投爬蟲的時候也要提前寫點(diǎn)項(xiàng)目,如果用框架更好,如果不會的話,起碼也得知道有什么框架,大概是干什么的。
數(shù)據(jù)庫
1.用過數(shù)據(jù)庫嗎?說一下你熟悉的數(shù)據(jù)庫,這個數(shù)據(jù)庫有什么特點(diǎn)。
2.什么是索引?什么字段適合建立索引?索引的優(yōu)缺點(diǎn)你知道嗎?
3.什么是事務(wù)?
4.知道范式嗎?說一說數(shù)據(jù)庫的第三范式(如果你看到這里的話,建議你將第一,二范式也都看看)
5.會寫 SQL 語句嗎?如何給表中插入數(shù)據(jù)?如何更新數(shù)據(jù)?(看到這,你是不是數(shù)據(jù)庫的增刪改查都得看看)
數(shù)據(jù)庫這些東西我感覺問的并不多,大多數(shù)公司問我的都是第 1 個和第 5 個問題,其中有一個公司某個面試官說要看看我的基礎(chǔ),然后就多問了幾個,然后...幸虧我才看了。
計算機(jī)網(wǎng)絡(luò)
1.說一說什么是 TCP/IP 協(xié)議?
2.知道什么是三次握手和四次揮手嗎?簡單描述一下。
3. Post 和 Get 有什么區(qū)別?
4.知道滑動窗口嗎?
5. TCP 和 UDP 有什么區(qū)別?
6.知道 Socket 網(wǎng)絡(luò)編程嗎?知道怎么用嗎?
好像還有幾個來著,我忘記了。怎么說呢,網(wǎng)絡(luò)這個地方大概是我的弱項(xiàng),做為一個當(dāng)年差點(diǎn)在網(wǎng)絡(luò)上掛了的菜雞,大概只回答了一半的題,剩下的一半就是持續(xù)蒙圈。
操作系統(tǒng)
1.什么是死鎖?如何預(yù)防死鎖?
2.學(xué)過編譯原理嗎?會用嗎?
3.說一下什么是虛擬內(nèi)存技術(shù)。
4.用過 Linux 嗎?會用嗎?在上面搭過環(huán)境嗎?說一下常用的指令。
操作系統(tǒng)這個大多數(shù)問的是用過 Linux 沒,會不會常用的操作指令?我的回答是 No。因?yàn)橹苯訌?Windows 到了 Mac,可以說是相當(dāng) sad 了。
數(shù)據(jù)結(jié)構(gòu)和算法
1.說一說你所知道的排序算法,它們的時間復(fù)雜度和空間復(fù)雜度分別是多少?
2.手寫一下冒泡排序和快速排序。
3.在紙上實(shí)現(xiàn)用兩個隊列模擬棧的操作(所以看到這里你是不是應(yīng)該也去看看如何用兩個棧模擬隊列)。
4.知道什么是動態(tài)規(guī)劃嗎?
5.手寫一下將二叉樹轉(zhuǎn)化成雙向鏈表。
6.手寫一下將兩個有序鏈表合并成一個有序鏈表。
7.手寫一下二叉樹的層次遍歷。
8.手寫如何判斷一棵二叉樹是否為另一棵二叉樹的子樹。
還有幾個題就很難了,涉及到了容斥原理和博弈論的內(nèi)容就不在這說了。數(shù)據(jù)結(jié)構(gòu)和算法一直是面試的一個老大難問題,其實(shí)大多數(shù)公司問的比較基礎(chǔ),我面試了這么多公司,唯一的一次筆試就是七道算法題,兩個小時。基本上的都是 1,2,6 的那種簡單難度,看看書就會了,因?yàn)槲抑霸诖髮W(xué)是做算法競賽的,所以覺得這部分還可以。
寫在最后
不知不覺寫了這么多,這是我面試的總問題的百分之七八十。這些面試的問題大多數(shù)都是基礎(chǔ),其實(shí)如果你在網(wǎng)上看過別人寫的面經(jīng)你就會發(fā)現(xiàn),有些其實(shí)都是重合的,意思就是如果你在去面試之前有針對的看過這些東西,其實(shí)到真正面試的時候會舒服很多。
面試之前看看職位的要求,然后做有針對的學(xué)習(xí),往往會收獲意想不到的驚喜。我每次去面試之前,都會準(zhǔn)備一些時間,然后把可能會問到的問題存到自己的云筆記里面,這樣坐地鐵,做公交的時候可以抽時間看一眼。
其實(shí)說到最后還是回到一個好好準(zhǔn)備上面,祝愿所有努力的人都獲得滿意的 offer,如果你覺得寫的還可以,點(diǎn)個贊呦。
歡迎關(guān)注微信公眾號 -- Python空間。
