1. 程式人生 > >記第一次面試

記第一次面試

服務器 其中 這一 前後端 工程 入職 sta 我會 主動

想著這個大三暑假在合肥本地找個實習,就在實習僧投了好幾家 Java 實習生,可等了三天都沒反應。。然後聽說 Boss 直聘比較好,於是又上 Boss 直聘投了兩家。可信息全部有去無回。。

不過說來運氣也好,周五的時候,Boss 直聘上就有位面試官主動聯系到我,招 Python 爬蟲工程師,真是意外之喜。
然後今天電話裏聊了聊,也沒做啥準備,下午就進行了一次簡單的面試。感覺答的還挺好的,面試官問的也簡單,(遠沒網上各 BAT 面經那麽恐怖)下面我簡單地回顧一下,就只寫我還記得的了:

  1. 什麽是 OOP?
    這個我答得很菜,不知道怎麽解釋。。就大概說了 OOP 是把數據和方法綁到一起,然後又說了繼承的一些東西。。但是感覺自己解釋地很不清楚。

  2. Java 中的 Over Load 是什麽?
    方法重載,同名的方法,也能通過傳入參數的不同(方法簽名),調用不同的方法。

  3. 你現在 Java 學到了什麽程度?
    我回答說目前正在學框架,應該是能花一個星期把框架學好,到能做簡單的後臺的程度。

  4. 你說你 Python 是看英文文檔學的,為什麽會想看英文文檔?
    我當時就回答了英文資料最前沿。
    但是現在看應該能說得更清楚:Python 官方文檔沒有中文的,而要學好 Python,官方文檔是不可避免的。日常寫代碼,我都會習慣到 Github 上找找是不是已經有相關的項目了,而這些開源項目也大部分只有英文說明。
    因此或早或晚都是要接觸英文的,所以就選擇提早接觸了。

  5. 什麽叫關系數據庫?和非關系數據庫有何差別?
    關系數據庫,也就是以關系為核心來組織數據的數據庫。它的理念是把數據盡可能拆分成多個表,然後不同的表之間通過某種關系來連接起來。這樣的好處是如果數據的某一部分需要變動,只需要變動該數據所處的表就行,而不會需要重新設計整個數據庫。
    非關系型數據庫,好像基本都是指 鍵值數據庫。以鍵為索引來存取數據。鍵值數據庫的好處是簡單,沒有關系數據庫那樣復雜的約束。因此速度快,性能更優。

  6. LEFT JOIN 和 RIGHT JOIN 有什麽區別?
    LEFT 或是 RIGHT,是由來指示以哪個表為主表的。被作為主表的,表內的所有行都會出現在結果集內,而對應的另一表若沒有對應的參數,值就為空。

  7. http 是不是有狀態的協議?
    http 是無狀態的協議,當客戶端發起請求,服務端處理信息後響應該請求,然後一次 http 連接就結束了,下一次的請求和上一次從協議層面上看,是沒有任何關系的。
    而且 http 連接只能由客戶端發起,如果服務端需要向客戶端推送消息,一般做法是由 客戶端 http 發起一個長連接不中斷,等到 服務端有消息需要推送時,才發回相應。
    可這種做法會對服務器而言,開銷太大。因此最近出現了 websocket 協議。(面試時回答地沒這麽條理清晰,不過說的內容差不多是這樣。其實還應該引申一下 cookie 的)

  8. udp 是不是有連接的協議?
    不是,udp 是無連接的,發送方甚至無法知道發出的包是送達了還是丟失了。

  9. Python 的 GC
    這個我沒了解過。

  10. Python 的多線程多進程有沒有用過?
    用過 threading 和 multiprocessing,不過只是在個人的項目中,因此沒遇到過大並發的情況。
    另外 multiprocessing 有一個多線程子模塊:multiprocessing.dummy,該模塊的 API 和 multiprocessing 完全一致,但是實現的是多線程。因此如果不確定多線程多進程哪個合適的話,可以先用 multiprocessing.dummy 實現,然後和用多進程比較一下,哪個好就用哪個。

  11. Python Web 開發了解多少?
    因為之前一直在學 Java Web,Python 還是用來玩居多,所以沒特別了解過。

  12. Python 爬蟲有沒有學過?
    只是玩過使用 requests 模擬登錄知乎 和 下載 bilibili 視頻。

  13. 下載 b站 視頻的話,視頻鏈接應該是動態的吧。你是怎麽抓到視頻鏈接的?
    我並沒有直接解析 b站 的網頁,而是參考了 Gtihub 上已有的 youtube-dl 和 you-get 的代碼,發現它們使用的是 b站提供的內部 api,然後就照搬了過來。

  14. 有沒有了解過 selenium?
    用 selenium 模擬瀏覽器開銷也很大,一般來說能不用就不用。而且之前主要還是學 Java,沒考慮過爬蟲,就沒怎麽了解過這個。

  15. http 和 https 有何差別?
    http 是明文通信,假設我在我寢室的路由器上安裝了嗅探工具,那通過該路由器的所有 http 信息,都能被該嗅探工具抓到,而且訊息內容都是明文。
    而 https 呢,是在 http 上添加了一個安全層協議,請求開始時,會先通過 http 傳送一個公鑰,然後才開始真正的通信,訊息是加密的,中間人只能看到密文,而得不到明文。

  16. 你既然說了 websocket,那你對它了解多少?
    我只知道 websocket 是先通過 http 協議建立連接,然後再切換到 websocket 協議層的,具體的用法,還沒有了解過。

  17. 冒泡排序是怎麽排的?
    這個這麽簡單的問題,我卻發現我不太會表述,總之很笨拙地回答了。內容應該不需要說了。。復雜度是 n 的平方

  18. 二分查找是怎麽查找的?
    每查一次,查詢範圍就減少一半。復雜度是log N

  19. 為啥報了聲學專業?
    這個好像是開始的時候問的,我說選聲學是高中的時候看科幻小說,小說裏描繪地很好,腦子一熱就填了。
    專業課學得很差。。
    後面面試官提到他做 .net 八九年了,以前學的是化學專業哈哈。

  20. 工作問題
    面試官提到公司裏主要用的是 .net 平臺,前後端分離。而我需要負責的,是爬取報表,然後上傳報表。

  21. 工作中遇到困難怎麽辦?
    面試官說幹軟件這一行的,大部分都內向,其中有些人,有問題了也只會憋著,自己胡亂想方法,或者到最後出問題了才說出來。
    我說我有問題的話,一般會先搜索,看看 stackoverflow 或者 知乎、或者博客 上是不是已經有現成的比較好的解決方法。如果沒有,自己又想不出來好辦法的話,會向有經驗的同事請教。

然後就是工作制是早8點半到晚5點半,中午休息一小時(八小時),休息日是單雙周輪休。實習期是三個月,福利需要等到我拿到畢業證。

再然後,就是對很急的大量工作的態度,我這個回答了沒體驗過不清楚,然後被追問,我想工作再多那也只有強上了啊,不然咋辦?

還有性格問題,團隊協作問題,稍微聊了聊。

問到以後的打算,是否會在這邊長期工作時。我回答開始的想法是先做三年 Java Web 再考慮其他,可現在收到了你的面試,我想如果我入職了,暫時會以 Python 爬蟲為主,同時考慮轉向 .net。長期工作好像後面沒說清,但是我覺得福利好,能學到東西,工資也能達到我的心理預期的話,我會很願意長期工作。

最後面試官問我有啥想問的,我說我第一次面試,不知道有啥可問的。。
然後想到他在招聘上寫的是招有一年以上經驗的 Python 工程師,而我啥經驗都沒,就問了一下。他說我底子不錯學起來快,而且工作其實也不難,就是爬個數據再上傳個數據。

寫得有點亂。。最後面試官說過兩天給答復。

第一次面試,感覺答得還算可以。希望能面上。

記第一次面試