Google、MS和BAT教给我的面试真谛
大家好呀,我是「小鹿鹿鹿」,我又來啦~~趁大家還有依稀印象趕緊乘熱打鐵~~這次聊一聊關于面試的一些小想法,希望和大家交流交流~~
雖然資歷尚淺,但是也面過不少試,有Google、微軟等外企大佬,也有BAT等國內巨頭,工作的這幾年也有幸當過幾次面試官,小鹿這里呢就結合自己的親身經歷,聊一聊我對面試的一些小想法(*^▽^*)
我們面試是在面什么?
technology?
thinking
communication
這是小鹿自己總(意)結(淫)地面試的主要考核內容。首先呢,毋庸置疑,我們面試肯定是要檢驗候選人是否有過硬的專業技術。算法、項目經歷,不同的公司、不同的職位有不同的側重,但是具體的專業技術的考核肯定是逃不開的。
可是除此之外呢?除了顯式的技術考核以外,還有很多往往被我們忽略的隱形考核。小鹿覺得主要是思維方式和交流能力這兩點。并且這部分反而更需要我們廣大的程序員小哥哥們多多注意。不要讓交流的問題,妨礙面試官發現你的思維之光,阻礙你展示出自己超強的專業素養呢(ノ≧?≦)ノ!
面試實際上是工作的一個簡單模擬。
一場面試,面試官其實只需要得到一個問題的答案,那就是和你一起工作是否開心。關于這個問題,有的外企會直接作為面試記錄。雖然我們國內的企業不會這么直接,但是小鹿覺得這確實是面試中最直擊靈魂的拷問。
面試的正確姿勢
面試實際上是通過提出問題、回答問題,在你來我往中進行交流,模擬實際工作的情形。那么當面試官拋出話碴,提出一個問題之后,我們應該怎么更好的完成我們之間的對話呢?
小鹿以為,不管是具體的算法還是項目問題,面試官向你拋出的問題往往是開放的,沒有灰常灰常清晰的定義、十分確定的唯一解的。針對這種情況,小鹿覺得切忌!!
不要直接給一個確切的回答,即使你的回答大概率是面試官心中想要的答案。
首先,我們可以嘗試著去復述(當然不是一字不變的重復),用自己理解的語言去確認是否清楚的理解了面試官的問題。其次,這個問題可能存在一些沒有定義清楚的模糊地帶,一定要逐個向面試官去確認。當問題已經比較清晰的情況下,我們可以提出一個解決方案,這個方案可以是非常naive但是只要確實可行就ok啦。
大膽說出自己覺得可行的方案,即使這個方法看起來很簡(智)單(障)。
能解決問題的方法就是好方法( ̄▽ ̄)/
當然啦,實際中我們需要精益求精尋求更優的解決方案。但是大家不用太有壓力,我們可以和面試官一起,溝通交流,碰撞思維的火花,共同討論出一個較優的方案。最后實現(寫code),測試,over~~
所以,小鹿劃重點啦,面試的正確姿(步)勢(驟)應該是這個樣子滴~~
step 1:?正確的理解問題并復述?
step 2:?清晰問題
step 3:?提出一個可行的解決方案(不一定是最優的)
step 4:?討論出一個較優方案
step 5:?執行實現
step 6:?測試
實戰
讀到這里是不是覺得小鹿就是一個純理論派(差點意思?????),那么我們就以小鹿最近的一次面試來實操一下吧!
Q1: 尋找三角數組的最大值
滿足先單調遞增再單調下降的array為三角數組,如[1,2,3,2,1].
step 1: 復述 (內心OS...這道題怎么這么簡單,我有沒有正確理解題意呢-O-)
step 2: 數組為空怎么辦吶(╯﹏╰)b?
step 3: 可行方案「遍歷」,時間復雜度為O(n),空間復雜度為O(1)
step 4: 更優方案「二分查找」,時間復雜度為O(logn),空間復雜度為O(1)
step 5: coding
step 6: test
Q2: 判斷一個數組是否是三角數組
step 1: 復述(小鹿此處就省略啦)
step2: 數組為空?長度小于等于2的特殊情況?
????試官明確邊界,只有長度大于等于3的數組才可能是三角數組????
step 3: 可行方案「遍歷」
遍歷數組,如果數組只有一個拐點Xi-1<Xi且Xi > Xi+1,則為三角數組。時間復雜度為O(n),空間復雜度為O(1)。
step 4:?更優方案?
請勇敢的說出沒有更優方案,沒有比O(n)更高效的算法啦?(▼へ▼メ)
Q3:當數組非常大,無法直接放入內存時,如何判斷其是否是三角數組?
考核大家思維能力的關鍵時刻到啦!
首先我們可以提出一個大致的解決思路。小鹿有一個不成熟的小想法,可以用map reduce,把數組進行切分,逐個處理每一小部分數組,再整合判斷整個數組是否是三角數組。
這個時候呢,我們的解決方案并不完整,比如如何分割數組,map和reduce到底怎么定義還不清晰。但是呢沒有關系,我們先拋出自己idea,然后根據面試官的反饋,確定我們的方向是否正確(? ?_?)?
當我們得到面試官的肯定后,就需要進一步細化這個solution啦。
三角數組有且僅有一個拐點。直接切分數組(比如n等分),「map」分別數每個切分數組的拐點數,「reduce」對所有拐點數求和,如果拐點數為1則為三角數組。
? ? ? ? ? ? ?
但是??如果切分的位置正好遇到拐點怎么辦呢?
? ? ? ?
不要害羞,說出自己的思考過程,善良的面試官會給你發(提)糖(示)。
????我們可以有重疊的切分,這樣就能保證萬無一失啦( ̄▽ ̄)/????
請看圖,把數組劃分為紅、黃、藍三個部分,其中重疊部分變成了橙色和綠色。這樣就能保證即使把數組切分,也不損失整個數組的信息。
? ? ? ??
最后的總結
當我們面試大廠的時候,保持平常心,把面試當成和同學、同事的交流,是非常重要的。在自身實力一定的情況下,不同的面試方式可能產生不同的面試結果。大家不妨也回顧總結一下自己的面試心得,有好的面試技巧可以在評論區留言,和大家一起交流學習哦~~~
希望大家面無不勝,逢考必過( ̄︶ ̄)↗
總結
以上是生活随笔為你收集整理的Google、MS和BAT教给我的面试真谛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CV和NLP中的无监督预训练(生成式BE
- 下一篇: 速览EMNLP 2020上录取的知识图谱