WYHL 2018.11.12 後端工程師面試總結
過程:
BOSS上投遞了簡歷,後來hr聯絡後簡短了解後。技術官電話面瞭解了下
一個周後,hr聯絡到公司面試。時間2018.11.12 早上10:00 (因為公交遲到了幾分鐘) 以後注意出發時間
第一個面試官大概是海歸吧!形象氣質風度感覺非常好,感覺比較 有深度
問的問題也全都是演算法的
總結問到的演算法:快排、歸併、堆排、以及他們的時間複雜度。
說出時間複雜度o(1)的資料結構:雜湊表,實際複雜度-->遍歷生成hash表n+1一次定位
給出一個數組arr,和一個引數b,要求設計演算法找出數組裡面唯一的兩個數相加得b。返回這兩個數。
這個問題本身我自己比較熟悉,領釦上也刷到過,平時也看到過,當時突然就不會了,所以設計了一個n*n的演算法
我的答案:遍歷arr,使用引數b減去這個數,然後判斷哪個值是否在arr中
面試官讓給出一個時間複雜度為n演算法:我當時的想法是。。。。不說了,比較複雜
然後面試官說如果給出的是個排好序的arr,那麼設計一個複雜度為n的演算法:
提示是:兩個指標 i , j 一個指向索引0,一個指向-1,然後讓兩個數相加和b比較
答案很明顯了:大就 j 往左移動,小就 i 往右移動
接著還是演算法:一個二維陣列mxn,
[
[1, 3, 2],
[4, 2, 5],
[3,6, 1],
]
從0,0位置走到到-1,-1,把走過的路上的數全部加起來,結果最小的一條路徑
這個比較難:我第一反應是深度優先的遍歷方式,每個節點往左往右都計算比較大小,找到比較小的一條路徑,最後演算法只寫了一半面試官給我換了一個題。
這個題最後問面試官答案為:兩種
最後一個演算法題:一個數組,裡面有負數如:[-2, 1, 4, -1, 1, 2, -2, -1, 1, 2, -2, 1]。然後找出連續加起來最大的幾個數
面試官給出的提示,我是一直存疑的,現在也是,等下去搞清楚。
提示:從第一個數開始往後累加,如果小於0就放棄,並把結果儲存到一個數組中。最後比較陣列中的結果大小
(我個人疑問就如同我給出的列子,最後兩個數,加-2大於0不捨棄,但是再加1,就比原來小了1,所以演算法需要優化下)
最後通過提示實現的演算法:先定義一個數組存每次相加的答案,從索引0開始,小於0放棄,從新賦值為下一個陣列元素。最後比較返回陣列中最大的數
第二個面試官是個靦腆的大男孩感覺。
主要問題有:restframework 模組,資料庫操作- restful本來我知道很多很多,可惜當時被第一個演算法面試搞懵逼了,這一面我就回答了原始碼,和一個django請求到restframework的流程,裡面的一些原始碼方法等
資料庫操作,面試官問了一兩個orm應用操作函式,這個嗎!太簡單了。
我個人更希望問資料庫底層,原理。資料結構b+數,引擎、索引、事務、redo、undo、mvcc等。所以我不應該等著面試官問。應該自己找機會表現自己知道的
總之個人很不滿意,會的很多東西沒能展現
後面就是說了些公司情況,環境,然後讓我等ceo開會完,見一見聊一聊。最後因為ceo比較忙沒時間就讓我走了。
整個過程比較輕鬆吧!就是自己沒發揮好比較懊惱