tft每日頭條

 > 職場

 > 面試的十個經驗之談

面試的十個經驗之談

職場 更新时间:2024-08-10 12:14:13

前言

面經我們也看過分享過,但反向面經真的不多見,來看看大佬是怎麼反套路的!

對了,文末還有為大家準備的彩蛋✨,建議「戴上耳機」品鑒~

當你在面試中手撕算法時,會不會有這樣的情況:

  • 審題比周賽還快,面試官話音剛落,你就迫不及待敲起了代碼。
  • 人狠話不多,寫代碼的時候靜悄悄,全世界隻能聽見清脆的鍵盤聲。
  • 一旦思路走不通,表面強裝淡定,但暗自着急,内心獨自枯萎。

如果上述的情形戳中了你,那麼恭喜你即将探索面試中的新的隐藏技能

——利用好你的面試官!簡稱“反向面試”!

學會這點,讓你無痛提升面試水平,用嶄新的視角來看待技術面。

本文分成兩個部分:

心法篇:

  • 分析技術面試的底層邏輯,講清“反向面試”的動機和意義

實戰篇:

  • 保姆級教學面試方法論,對于面試中的各個環節逐步拆解!

面試的十個經驗之談(絕了反向面試經曆)1

面試心法

心法一:技術面試不僅是考察技術

不少朋友把全部的注意力都放在刷題上,一心争取面試中全部ace。

這樣的努力當然是值得誇誇的,但是遺憾的是,在實際的面試中,“做出題目”和“面試通過”并不能直接畫等号。

面試更像是一場全方位的考量:

  • 代碼寫的正不正确、優不優美,體現的是技術能力;
  • 清晰地闡述解題思路,分析複雜度,體現的是解決問題的能力;
  • 跟面試官保持良好的互動,體現的是溝通能力和團隊協作精神……

面試的底層邏輯是尋找高匹配、高潛力的優秀人才。

在校招場景中,大家經驗相對都薄弱,而企業也願意培養新人,所以展現出自己的潛力就更加重要。

也許你并沒有寫出完美的代碼,但是如果你展現出嚴謹的邏輯思維,訓練有素的解題思路,從容自信的态度,對技術深深的熱愛(熱情不夠,演技來湊!),跟面試官保持順暢溝通…說不定也會深深打動 ta!

心法二:面試是一場雙向奔赴

說完了技術面試的選人标準,那我們該如何展現出這些能力呢?這就要提到我們的工具人——面試官!跟獨自刷題不同,面試是一場兩個人的電影,充滿了互動性和主觀性。

面試官是一把雙刃劍(面試官:是誰物化我),利用的好就是你的 offer 小助手,利用不好就是感謝信問候。

  • 普通碼農眼裡的面試官:考驗我、為難我、威懾我的敵軍!
  • 高端碼農眼裡的面試官:一起完成精彩面試的隊友!

大家就想象面試官是輔助你通關的角色,在面試的全過程都要注重跟 ta 的交流互動,讓他感知到你的優秀!具體的做法在後面第二部分展開講。

心法三:熟能生巧 Practice Makes Perfect

無論對于任何崗位,短期提升面試水平的最有效的方法,就是模拟面試。

技術崗也不例外,尤其是對于刷題還不錯,但一到面試就緊張做不出來的同學,那請您務必模拟面試走起!

對于模拟面試,大家可能有些疑問。

Q1:自己一個人可以模拟面試嗎?

A1:當然可以!就像學英語一樣,如果沒有小夥伴陪你練習,那麼自己建立全英的環境也是不錯的選擇。假裝面試官 is watching you,你每次做題前就開啟自言自語模式,确認自己的思路,寫代碼時也邊寫邊講解(劃重點!這點是關鍵!),寫完代碼再講一遍思路、分析複雜度。也許一開始有點奇怪,練習多了就适應這種方式了!

Q2:模拟面試需要注意什麼呢?

A2:越貼近實際面試場景越好。不是做道某公司的真題就算模面了,而應該重視起來真實面試遇到的時間限制、follow-up questions、雙向溝通 這些元素。再強調一下雙向溝通的重要性,因為對于大多數人來說,寫代碼時講話難免會影響思路,所以模面一定要刻意練習。

另一點就是注意複盤總結。你可以對面試/模面進行錄音、錄屏,事後來給自己各方面的能力表現進行打分,不斷臻于完美。

Q3:模面好無聊,還有比模面更簡單的方法嗎?

A3:那就看别人的模拟面試吧~ 油管有許多資源的,就當刷劇一樣看。以他人為鏡,總結别人面試的亮點和問題,也是很好的學習和反思的方法。

我記得我兩年前看到過 william(某計算機天才帥哥 qwq)的模面視頻,真的被震撼了,他不僅是世界頂級的競賽選手,而且他把自己的思路講得非常清晰(這道題蠻難的,但他竟然教會了我 orz)。我也是從此把 william 當做榜樣,練習這樣的面試風格。

面試的十個經驗之談(絕了反向面試經曆)2

實踐教學

我們正式進入實戰篇,跟大家分享面試的全流程中,那些心機的溝通小技巧。

我們以一道經典的面試題 15. 三數之和 為例。

題目如下:

給你一個包含 n 個整數的數組 nums。判斷 nums 中是否存在三個元素 a,b,c ,使得 a b c = 0 ?請你找出所有和為 0 且不重複的三元組。

互動一:問清題目 Ask Clarifying Questions

不要着急直接做題哦,推薦按照以下幾個步驟進行。

Step 1:确定自己讀懂題目。

這點非常關鍵,盡管面試題一般不會很難懂,但萬一真理解錯題意,寫到一半兒才發現,不僅浪費時間,而且在面試官心中也超級減分。

如果你需要面試官的幫助,你可以大膽發問:

  • “題目中的 xxx 我有些不理解,您可以具體解釋一下嗎”
  • “請問能不能舉個簡單的例子呢,我想确認一下我是不是理解正确^ ^”
  • “我大概明白題目了,我确認一下,假如輸入是 xxxx,經過 blablabla,輸出應該是 yyyy 對嗎”

總之,不用擔心會顯得很笨哦(當然,問問題的前提是自己思考過)。

Step 2:确認輸入輸出格式、邊界條件等細節。

我們平時做題的時候,題面都是很清楚全面的,而在面試中可能是簡化版。我們需要挖掘題目中被忽略的地方,跟面試官确認。

可以問哪些問題呢?以 T15 為例,我們可以詢問:

  • 我們是返回三元組的個數,還是返回三元組本身呢?
  • 這些三元組以什麼形式返回呢?二維數組可以嘛?
  • 如果不存在這樣的三元組,是返回一個空數組嗎?
  • 返回的三元組順序有要求嗎?
  • a,b,c可以為同一索引的值嗎?

根據實際情況,向面試官适度問些這樣的問題。意義:

  • 進一步幫助自己理解題目
  • 稍後寫代碼時會更注意細節
  • 向面試官體現自己的嚴謹和專業度

互動二:确認思路 Explain Your Thoughts

讀懂題之後就開始寫代碼了嗎?大寫的 NO!

最穩妥的做法是:先确定解題思路,了然于心再動手敲代碼。而不是走一步看一步,幻想山重水複疑無路

Step 1:先分析暴力法等其他明顯非最優解法。

依然是 T15,在我開始想思路之前,我會先跟面試官說:

  • “這道題最容易想到的方法是暴力法,遍曆所有的 a、b、c 組合,判斷每個組合下是否相加為零。因為是三重循環,時間複雜度是 O(n^3),空間複雜度是 O(1)。”

然後過渡一下:

  • “暴力法做了一些冗餘的比較,比如 blablabla(舉個例子),所以應該有更優的解法(也可以直接點明有 O(n^2) 的解法)。”

隻是一個小示例。如果是有 3 種解法的題目,也可以把每種解法和相應的複雜度都簡述一遍,最後實現最優的,或者是面試官指定實現某個解法。

可能你會疑惑,講這些非最佳方法真的有用嗎?

  • 對自己而言,能幫助自己确定複雜度的上界。同時,發現暴力解法中的弱點,有助于提供思路。
  • 對面試官而言,讓他一開始就看到你的解決問題的能力、表達能力和複雜度分析能力!成功引起他的注意,讓他後面認真聽你講話,不會走神!

Step 2:思考更優思路

情況 1:如果題目非常陌生,一時半會兒沒有想法,需要冷靜思考,那麼千萬别直接沉默,否則會寂靜的尴尬。

記住,我們可是要引領面試官的,時刻展現我們愛溝通愛協作的個人魅力。

你可以說:

  • “我可以先自己想一下嗎?梳理好思路後再跟您溝通。”
  • “我有個大概的思路,但需要再思考一下,您稍等我一下可以嗎?”

然後你就禮貌地赢得了短暫的沉默權!

情況 2:已經有初步的想法思路了,無論是自己是否确定,都可以跟面試官先交流着。

繼續 T15,假如我已經想到用雙指針了,盡管我還沒思考“重複”怎麼處理,但是沒關系,先在整體思路上跟面試達成共識。

我會說:

  • “我覺得這道題可以用雙指針來解決。首先對數組排序,這是對本題使用雙指針的前提。遍曆元素 a,其他兩個 b、c 元素使用相向雙指針來确定。初始化b在a的後一位,c 在數組最後一位,比較 a b c 與 0 的關系,如果小于 0,那麼 b 右移,如果大于 0,那麼 c 左移,直到 b、c 重合。”

還記得嗎?面試官是我們的隊友,不是對手。現在就是 ta 發揮價值的地方啦。

跟面試官對齊方法,可以引導面試官進入我們的思考過程,跟着我們的節奏走。隻有充分明白我們的思路,才能更好地幫助我們。

具體有哪些幫助呢?

  1. 如果我們有沒考慮周全的地方,面試官會提醒我們,比如這道題,面試官可能會問“那你怎麼保證三元組不重複呢”。
  2. 如果我們整個思路就是錯誤的,面試官會及時把我們拉回來的,有可能直接指出來,有可能給你個用例讓你自己發現方法行不通。
  3. 如果我的思路不是他想要的,他可能會說“我明白你的方法了,不過還有更優的解法,你可以再想想”。這樣也很好,實時了解面試官的想法,不會浪費時間。
  4. 如果我們思路無敵正确,面試官一般會給出比較正面的回複,也可能比較委婉,比如“聽起來沒有什麼問題”,“那你代碼實現一下吧”。

Step 3:舉個用例,用自己的解法走一遍

盡管我們已經描述思路了,但是大部分題目單講思路會很抽象。為了确保面試官明白我的思路,我再會找簡單的例子,用我的解法來給 ta 過一遍。

你認為跑測試用例是代碼就位後的環節?不是的,真正心機的人還沒寫代碼就過用例了!

我一般是邊講邊在 IDE 裡寫注釋,親測非常專業。遇到樹圖的問題,最好也提前準備好畫圖工具,邊畫邊舉例。

繼續 T15 的例子,講述完雙指針的思路後,我會說:

  • “我舉個例子吧,假設我們有個數組,數組元素是 -1, -1, 0, 1, 2…”,

邊說邊在 IDE 裡敲下(python):

# nums = [-1,-1,0,1,2]

“初始化 a 是第 0 個元素,為 -1;b 是 -1;c 是 2。此時相加正好是 0”,我加了一行表頭 a,b,c,例子呢就跟表頭對齊。

# nums = [-1,-1,0,1,2] # a, b, c # -1, -1, 2 = 0

“這時候移 b 移 c 都行,那我就把 b 右移一位吧,得到 -1,0,2,相加是 1,大于 0。”邊說我又加了一行。

# nums = [-1,-1,0,1,2] # a, b, c # -1, -1, 2 = 0, so b -> # -1, 0, 2 > 0, so c <-

後面不再展開分析了,總之是借助 IDE 來清晰地展現出自己的解題思路。注意控制時間,例子中體現思路就可以,不一定解出答案。

這時候面試官不僅徹底懂你思路了,還可能對你印象很深刻呢。

如果舉例這一步也沒什麼問題,那就開始寫!代!碼!

互動三:邊寫邊說 Talk While You Code

到了寫代碼的環節,如果你靜悄悄地一言不發,面試官也不曉得你在寫什麼,ta 可能很快就開小差了…不!我們要讓他全神貫注,一整個拿捏住!

平時練習的“邊說邊寫”就派上用場了對不對。假設你就是編程老師,面試官就是你的學生,你要實時地跟他講解代碼,帶動他一起思考。

繼續 T15,我開始敲代碼了,我邊打字邊解釋:

  • “我們先定義一個函數,不妨叫做 threeSum 吧,輸入是一個數組,輸出是二維數組…”,

此時 IDE 中已經敲下了↓

def threeSum(nums: List[int]) -> List[List[int]]:

我們繼續:

  • “首先,我們将數組排個序,這步是 O(nlogn) 的複雜度…”

我習慣每個模塊都階段性總結一下複雜度,順帶就标在注釋裡了。也可以先不提複雜度,最後統一分析。

def threeSum(nums: List[int]) -> List[List[int]]: # step1: sort,O(nlogn) nums = sorted(nums)

當我定義變量的時候,向面試官解釋一下變量的含義。比如:

“我們建立 res 數組,用來存放結果”“下面開始遍曆 a,指針 i 指向的位置就是 a”

def threeSum(nums: List[int]) -> List[List[int]]: # step1: sort,O(nlogn) nums = sorted(nums) # step2: two pointers res = [] for i in range(len(nums)):

我們寫 if、while 這樣的語塊前,也宏觀地預告一下我們要做什麼。比如:

  • “接下來我會比較三數之和與 0 的關系,可能是大于 0,小于 0,等于 0 這三種情況”。

說着邊敲下這樣的 if-else 分支,給面試官一種大局觀的 feel。

j, k = i 1, len(nums)-1 while j < k: if nums[i] nums[j] nums[k] > 0: ... elif nums[i] nums[j] nums[k] < 0: ... else: ...

以上的舉例是想展示一下該如何邊寫代碼邊講解思路,大家也可以根據自己的風格調整措詞表達。

  • 朋友們,邊說邊寫真的是神仙面試方法
  • 面試官能跟着你的思路走,了解我們的思考過程。
  • 當我們思路卡頓的時候,因為面試官跟上我們了,ta 可以給予适當的提示(因為他知道這道題的解法呀!)。這也就是我們強調的“利用”面試官。
  • 當我們沉浸寫代碼的時候,可能會有一些自己沒留意的簡單語法錯誤和邏輯錯誤,面試官作為旁觀者,會及時提醒糾正。這樣的話,不至于等到最後跑用例 error 時再找 bug 在哪裡。另外,即使最後運行的時候報錯,面試官都不好意思給你減分,因為他全程跟着你的思路而他也沒看出來!

從此寫代碼時養成自言自語的好習慣 OK?

互動四:總結分析 Summarize and Analyze

代碼寫完之後,記得做兩件事:

  • 有始有終,整體再簡述一遍代碼思路。用鼠标引導着面試官視線,簡單介紹寫的每個模塊做了什麼事情。
  • 分析複雜度。分析每個步驟的時間複雜度是多少,最終整個方法的時間複雜度。還有空間複雜度是多少。

如果在總結環節,你突然意識到自己思路繞彎了,或者代碼寫的不簡潔,也請主動跟面試官分享:

  • “我發現 xx 部分想複雜了,我覺得 xxx 這樣做可能更清楚”。

面試官心裡也是加分的,他會覺得你很愛思考,可能是面試緊張,你原本的實力會更高。

最後,面試官可能要求跑幾個他指定的用例,順利的話就結束這場撕題,或者進入到 follow-up questions 了。即使測試結果不對,也不用着急,因為按照上述的方法走下來,代碼應該沒有太大問題,而且我們的表現一直很好,可能有些細節沒注意到。耐心地順着自己思路,尋找出錯的原因就好了。

寫在結尾

以上就是一些個人的小經驗。本文的初衷是我發現不少同學不太重視面試中的溝通交流,所以來分享我的 tips。當然,我們不能舍本逐末,過于追求這些軟實力,而忽視了技術實力的打磨。

如果有不同的想法,也歡迎在評論區理性讨論~

BY /

本文作者:coldme

聲明:本文歸“力扣”版權所有,如需轉載請聯系。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关職場资讯推荐

热门職場资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved