百度python面試經歷記錄

前言:

筆者是一名雙非本科生,經過了百度北京互聯網數據研發部的最後一輪面試。第一次寫博客,寫的很詳細(實際上是羅裏吧嗦),給本身記錄一段面試經歷,同時也但願此次的面試給須要的同窗提供一點經驗幫助吧。java

背景:

  大三暑假末期,當時在一家B輪融資的金融互聯網企業裏面擔任python爬蟲實習生,可是實習期將滿,想去大一些的平臺學習,遂開始着手下一份工做的尋找。打開拉勾網,看到百度正好在那天發佈了百度大搜——python實習生的招聘,看了招聘要求,瞭解到工做職責和百度的BaiduSpider和海量數據系統的處理和研發有關係,雖然在搜索引擎和系統架構這一塊沒有相關實習工做經歷,可是對於職責要求裏技術和能力都掌握的還能夠,因而激動且擔心的投了簡歷。python

機會獲取:

  投了簡歷以後實際上是比較擔憂的,在我參加實習以前,投的第一家是京東的爬蟲實習生崗位,可是在簡歷投遞出去就被無情的淘汰掉了,緣由我猜應該是學歷和實習經歷都不夠,雖然此次再戰百度有了不錯的實習經歷,但依舊擔憂重蹈覆轍。簡歷投遞了四天,拉勾頁面上纔出現了一個‘簡歷被查看’的狀態,又過了三天時間依舊沒有反應,去上網看到,不少人在論壇裏說拉勾上投的簡歷被查看後就沒下文了,估計本身也是涼了,可是仍是但願爭取下機會,去拉勾裏給查看我簡歷的hr主動發了個消息,說了句:‘您好,能給個面試機會嗎?’ ,沒想到就是這最後的主動的一句話換來了百度的一個面試機會,次日上班的時候,接到一個北京的電話,正是百度hr。linux

hr面:

先是確認了下雙方的身份,瞭解個人一些基本狀況,而後和我聊了一些話後,告訴我說將個人簡歷給部門裏看了,個人簡歷挺合適。接着她提了一下百度的實習安排和制度要求,獲得個人贊成回答後,開始和我約面試時間,告知我面試事項。掛了電話後壓抑着興奮的心情開始了緊張的準備工做。面試

面試準備

  在面試前的幾天時間裏,白天快速把公司安排的任務作完,晚上一下班就馬上回寢室準備面試的東西,而後一直搞到深夜。準備的知識包括數據結構,計算機網絡,算法,linux,數據庫,各種工具,以及python的各個易考知識點可是時間畢竟太少,不少東西都是大體過一遍。。同時,那幾天髮量以肉眼可見的速度減小。。。ajax

一輪技術面試:

  聽hr和我講,通常一面面試個人人就是我來到公司後帶個人工程師,在面試那天向公司請了假,擔憂室友活動影響到面試,提早在外面找了個安靜的地方,令我印象深入的是,hr和我說的13:00面試,沒想到面試官12:59打來了電話,我原本覺得百度這種大公司,面試官都很繁忙,時間可能會有比較大的誤差。 面試總時長54分鐘,值得一提的是,面試過程當中,面試官彷佛對個人項目經歷很感興趣,在這部分至少詢問了25分鐘,根據我簡歷上寫的項目經驗,一步步深刻的往下面問,細節,用到的技術,爲何用這個技術,碰到了什麼問題,怎麼解決。算法

   1.首先讓作一個自我介紹。

   2.   項目部分:

問:看你項目裏用到了Redis、MongoDB、MySQL,講一下爲何一下用Redis,一下用MongoDB和MySQL,有什麼講究嗎?  數據庫

答:主要從這三個數據庫的性能,在項目中怎麼發揮做用的,還有結合公司的業務需求作了回答服務器

問:這個抓取招聘信息的項目是怎麼開始實施的,講一下網絡

答:公司給了幾張包括500強,上市公司,創投公司等幾十萬家公司名字的數據表,抓取他們這些公司的招聘信息。首先是選型,公司裏數據分析師給了我智聯招聘,boss直聘,中華英才網,前程無憂這四個網站,讓我選取其中一個進行招聘信息的數據抓取。而後花了兩三天時間,對這四個網站進行抓取難度,數據質量,每日可能抓取的最大數據量進行了研究和測試,最後綜合對比出了前程無憂是最合適的。另外也給面試官說了下另外三網站的特色。數據結構

問:前面的智聯招聘,boss直聘這些須要登陸的,驗證碼處理的網站你抓取不了嗎?

答:公司給的這個項目是有時間週期的,不是不會,是爲了儘可能減小經濟和時間成本。爲了證 明本身會,而後吧啦吧啦的講了幾個須要驗證碼和登陸處理的網站的處理方式,以及一些動態頁面的抓取方法。

問:你這個項目裏數據的清洗是怎麼作的?

答:首先說了一下爬蟲的去重問題,在coding的時候就編寫好了一些防止出現重複和錯誤數據的代碼,而後說了下抓取過程當中數據出現了哪些問題,如何找到問題,如何優化抓取策略,使得最後的爬蟲系統趨於穩定,幾乎沒有再出現紕漏或者錯誤的數據。進一步的清洗是數據分析師在處理,接着說了一下,若是我是公司數據分析師,我會怎麼處理。

問:你這個爬蟲中用到的反爬策略有哪些

答:更改user-agent,動態ip,根據時間段設置訪問頻率,白天低速率低頻率抓取,晚上高頻 率抓取。而後另外提了幾種不一樣反爬頁面的處理方法,好比js渲染或ajax加載。

問:你在作項目過程當中,碰到了哪些問題,怎麼解決

答:吧啦吧啦。。。

  3.  基礎知識部分

問:你知道*%¥#嗎?

答:(沒聽懂是個什麼東西,總之好像是個英文單詞),委婉的說了句這個不會(不過面試官也笑着說了下,這個是個概念性的東西,不會也正常)

問:對linux掌握程度怎麼樣(百度人好像都是在linux上面進行開發的)

答:我在公司主要是在Windows上面開發,而後代碼遷移到linux執行,會些經常使用linux命令

問:說一下python的 多線程

答:這個能夠用併發和並行來講明,不少人認爲python的多線程是雞肋,它不像java,c等語言多個線程能夠同時執行任務,python因爲全局解釋器鎖(gil)的存在,使得python多線程沒法同時執行任務,頂多就是一個線程執行完畢,另一個線程當即接着執行。java、c的多線程比如多我的使用多把鐵鍬同時工做,可是python多線程就是多我的用一把鐵鍬輪流工做。不過python多線程也不能徹底說是雞肋,在python的計算行操做裏,好比我在前面的招聘網站的頁面抓取過程當中,若是使用python多線程進行抓取網頁,數據解析這些計算型操做,速度不會明顯增長。可是在I/O操做裏,速度能夠明顯提高,好比在文件讀寫,數據庫操做這些方面都是能夠明顯提升速度的,好比在前面的招聘信息的操做裏,數據入庫操做是十分耗費時間的,所以在這個項目最後的數據插入數據庫部分,我用了8個線程,數據入庫速度在單條線程的基礎上提高了6倍(不過這裏值得一提的是,python多線程會改變數據讀寫順序,雖然加鎖能夠防止這一現象,可是加鎖也大大下降了多線程速度,因此要用多線程進行數據操做,前提是對數據的順序沒什麼要求。)

問:嗯,對多線程的理解還蠻透徹,說一下python線程變量注意事項

答:(當時傻了吧唧的沒反應過來,我一直覺得是要我說多線程函數裏變量的傳遞問題,強行解釋了一波多線程的變量傳遞用法,他說不是這個,後來才知道他是想問局部變量,所有變量的問題)

  4.  業務思路問題

問:咱們部門正好有個業務(就是全站抓取某個app,什麼app就不說了,怕引發沒必要要的事情,),若是這個任務給你,你會怎麼作。

答:聽到這個一瞬間有點懵,沒仔細研究過這個app。。。硬着頭皮,憑着本身對那個app的一絲絲印象,給了一個比較常見可靠的思路(面試官還蠻高興,說這個思路很好,可是面試官讓在想幾個思路,想了一會,由於對那個app沒怎麼了解過,因此一時半會的也找不到新的騷操做,而後給了個我都不知道行不行的方法,他想了一下,說這個思路通常,讓我繼續想,後來實在想不到,我就說我想不到了。。。)

  5.  大學經歷

我簡歷裏面寫了大學在學校實驗室裏作過的項目和大學裏拿的獎學金等榮譽,可是面試官就對其中一個國家級的比賽提了一下,對別的獎學金,成績啥的彷佛沒太大興趣,不過這些可能在hr那裏加了分。

   6.算法和coding能力

最後環節面試官給我出了道算法題,給我了一個連接,讓我在連接指向的頁面的裏寫代碼實現這個算法,面試官那邊能夠在線看到我寫代碼的實時狀況,可是出了點意外,頁面顯示連接所在服務器出了問題,我怎麼也進不去,最後就手寫代碼,而後把代碼讀給面試官聽了。。。尷尬。

一面總結:

   整個面試過程,兩個問題沒有答好,其餘都還能夠,面試差很少一個小時(hr也和我說過,百度的面試每輪通常都是一個小時),面試官說我項目經驗很豐富。說去組裏討論一下,而後hr會給通知。(次日hr告知我面試過了)

  本覺得百度面試將會是煎熬的時光,相反感受過的還算輕鬆,沒有太大的壓力,面試官對項目經驗很在乎,大部分時間主要都是根據我簡歷上寫的項目經驗來展開詢問。特別是細節問得比較多,讓我講我作的項目,我講着講着讓我停一下,而後從我剛剛講到的這個細節又開始展開詢問。

一面知識關鍵詞:python基礎知識,計算機網絡,linux,算法,項目經驗,數據庫,業務思路,coding能力

二面技術面試(終面)

  hr講,這最後一面面試官是部門的leader。

  通話前,真的賊緊張,雙非學生第一次和這樣的大佬通話,通了後,一個聲音渾厚的聲音傳了過來,第一句是:‘***同窗嗎?’,給人很平和的感受,緊張感消失大半。。。

1.自我介紹 

2.狀況確認,

    問我大幾,能夠實習多久等之類的

3.直入項目

  這一面也問了項目,大概問了十幾分鐘的項目問題吧,有些問題和一面面試官相同,基本都挺不錯的回答了出來,這裏就不重複了。不過另外問了些業務問題。

好比:

  大家公司代理哪來的,大家公司抓這些數據用來幹嗎呢,有什麼用呢 , 公司是作什麼的之類的

最後出了兩道數學題(當時是有些慌的,講真,我歷來沒想過會考數學。)

第一道:

   有9顆珠子,其中8顆重量相同,1顆比較輕,再給你一個左右平衡的秤,怎麼最快找出最輕的一顆珠子。

我回答的是,先441 ,隨意拿出一顆珠子,而後在秤的兩邊各方4個,若是兩端平衡,那麼拿出的這顆就是最輕的,此時一次性就能夠找到最輕的;若是其中一端升起來,那麼將升起的這端4顆珠子再拿出來,二二放在秤上,若是一端升起,再從升起的這端拿出兩顆珠子再放秤兩邊,這個時候就能夠獲得最輕的。

面試官:這個方法還行,可是不是我想要的答案,有指望值更低的作法,你先算一下你這種作法,的指望值是多少。

我:指望值?(是啥,感受很熟悉,好像是高中學的機率裏的東西,可是一時半會真的懵逼)

面試官:看來忘了吧,機率論裏的東西

接着現場指點我指望值怎麼算。。。想起來後,我說我這個作法的指望值是2.78,面試官說還有指望值更低的作法。而後讓我繼續想

想的過程當中,想到了333分配,可是以爲跟441相比差了點,441有可能一次就找出結果。333至少要兩次,指望值應該沒有441的低,就沒繼續往下想。

而後後來面試官給我解答:就是333的作法,你剛剛嘴裏念出來的可是沒有繼續往下算了。秤兩邊各方3個,手裏3個,秤平衡,較輕的就在手裏3顆中,若是不平衡,最輕的就在升起的3顆中,而後繼續從肯定的3顆裏,取兩顆,秤兩邊各方一個。這個時候看秤平衡狀態就能夠知道哪顆最輕了。 

聽完後,以爲這個方法絕了,讓我再算指望值,這個作法的指望值是2。

第二道:

  有一個文本文件,裏面有十幾億個電話號碼,都是11位數的電話號碼,可是電話號碼的順序是錯亂的。如今須要將這十幾個電話號碼,從小到大排序,你怎麼作。

講真,那時候沒有這樣量級的數據處理經驗和理論知識,面試前把各大排序算法回顧了一遍,可是十幾億條數據,用排序算法,那內存得卡爆。 

見過的數據量最大的是當時在公司裏接觸的一張工商信息的表,兩億多條數據,打開都得十幾分鍾。

當時回答的時候,一種是分而治之的思想,這表這麼大,先拆分紅多個小的文本再處理,可是也僅此而已了,接下來不知道怎麼操做。

這類海量數據處理的算法真不太會,最後回答了一種利用數據庫自動索引排序的法子。

建十張數據表,寫個多線程或者更高效率的文本讀寫和數據庫插入程序,裏面寫10個判斷條件,10數字開頭號碼插入一張表,11數字開頭號碼存一張表,12數字開頭號碼存一張表....一次,19開頭號碼插入一張表。而後數據插入完畢後,對這十張表利用數據表自帶的排序功能進行排序,而後再合併到一個文本里。 

見過的最大的表有2億多條數據,並且一條數據裏包含了十幾個字段,每一個有些字段裏數據是字符串,或者很長的中文。如今一個表裏數據量不超過1億條,並且每條數據只存儲一個電話號碼,因此在內存上應該是可行的。雖然這個法子勉強可行,可是效率卻很低下,面試官但願我用算法搞定。

這個問題也歡迎各位大佬留下本身的解決方法!願意學習

最後時間快差很少到了一個小時,我問了下面試官個人表現(雖然前面部分回答的還行,可是後面兩道數學題回答的都不是面試官很滿意的答案,有點慫)。

面試官:看得出來你是個幹實事的人,從前面你講的的多線程操做,數據庫操做,你應該是作過很多東西。可是基礎知識比較薄弱,好比算法,計算機網絡,數據結構,數學這些知識都要增強。如今大幾?

我: 大三暑假

面試官:如今還來得及,趕忙補!

而後後面聊了幾句就結束了,讓我等通知!

一面面的很好,二面前面還能夠,就是後面兩道數學題,雖然給出了一些答案,可是都不是最好。面完後以爲此次面試估計有危險!

可是次日hr打電話來,說我技術二面(也是最後一面)過了。可是後來也由於一些其餘的緣由,就沒有順利去北京入職。

不過最終仍是留下一次十分深入的面試經歷,雖然沒去百度工做,可是第一次感受到雙非學生距離頂尖大廠並非那麼遙遠,給我之後的工做和學習中增長了很多信心。也看到了本身的缺點,後來在慢慢的補習數學,數據結構,算法這些知識。

相關文章
相關標籤/搜索