前言
面經我們也看過分享過,但反向面經真的不多見,來看看大佬是怎麼反套路的!
對了,文末還有為大家準備的彩蛋✨,建議「戴上耳機」品鑒~
當你在面試中手撕算法時,會不會有這樣的情況:
如果上述的情形戳中了你,那麼恭喜你即将探索面試中的新的隐藏技能
——利用好你的面試官!簡稱“反向面試”!
學會這點,讓你無痛提升面試水平,用嶄新的視角來看待技術面。
本文分成兩個部分:
心法篇:
實戰篇:
面試心法
心法一:技術面試不僅是考察技術
不少朋友把全部的注意力都放在刷題上,一心争取面試中全部ace。
這樣的努力當然是值得誇誇的,但是遺憾的是,在實際的面試中,“做出題目”和“面試通過”并不能直接畫等号。
面試更像是一場全方位的考量:
面試的底層邏輯是尋找高匹配、高潛力的優秀人才。
在校招場景中,大家經驗相對都薄弱,而企業也願意培養新人,所以展現出自己的潛力就更加重要。
也許你并沒有寫出完美的代碼,但是如果你展現出嚴謹的邏輯思維,訓練有素的解題思路,從容自信的态度,對技術深深的熱愛(熱情不夠,演技來湊!),跟面試官保持順暢溝通…說不定也會深深打動 ta!
心法二:面試是一場雙向奔赴
說完了技術面試的選人标準,那我們該如何展現出這些能力呢?這就要提到我們的工具人——面試官!跟獨自刷題不同,面試是一場兩個人的電影,充滿了互動性和主觀性。
面試官是一把雙刃劍(面試官:是誰物化我),利用的好就是你的 offer 小助手,利用不好就是感謝信問候。
大家就想象面試官是輔助你通關的角色,在面試的全過程都要注重跟 ta 的交流互動,讓他感知到你的優秀!具體的做法在後面第二部分展開講。
心法三:熟能生巧 Practice Makes Perfect
無論對于任何崗位,短期提升面試水平的最有效的方法,就是模拟面試。
技術崗也不例外,尤其是對于刷題還不錯,但一到面試就緊張做不出來的同學,那請您務必模拟面試走起!
對于模拟面試,大家可能有些疑問。
Q1:自己一個人可以模拟面試嗎?
A1:當然可以!就像學英語一樣,如果沒有小夥伴陪你練習,那麼自己建立全英的環境也是不錯的選擇。假裝面試官 is watching you,你每次做題前就開啟自言自語模式,确認自己的思路,寫代碼時也邊寫邊講解(劃重點!這點是關鍵!),寫完代碼再講一遍思路、分析複雜度。也許一開始有點奇怪,練習多了就适應這種方式了!
Q2:模拟面試需要注意什麼呢?
A2:越貼近實際面試場景越好。不是做道某公司的真題就算模面了,而應該重視起來真實面試遇到的時間限制、follow-up questions、雙向溝通 這些元素。再強調一下雙向溝通的重要性,因為對于大多數人來說,寫代碼時講話難免會影響思路,所以模面一定要刻意練習。
另一點就是注意複盤總結。你可以對面試/模面進行錄音、錄屏,事後來給自己各方面的能力表現進行打分,不斷臻于完美。
Q3:模面好無聊,還有比模面更簡單的方法嗎?
A3:那就看别人的模拟面試吧~ 油管有許多資源的,就當刷劇一樣看。以他人為鏡,總結别人面試的亮點和問題,也是很好的學習和反思的方法。
我記得我兩年前看到過 william(某計算機天才帥哥 qwq)的模面視頻,真的被震撼了,他不僅是世界頂級的競賽選手,而且他把自己的思路講得非常清晰(這道題蠻難的,但他竟然教會了我 orz)。我也是從此把 william 當做榜樣,練習這樣的面試風格。
實踐教學
我們正式進入實戰篇,跟大家分享面試的全流程中,那些心機的溝通小技巧。
我們以一道經典的面試題 15. 三數之和 為例。
題目如下:
給你一個包含 n 個整數的數組 nums。判斷 nums 中是否存在三個元素 a,b,c ,使得 a b c = 0 ?請你找出所有和為 0 且不重複的三元組。
互動一:問清題目 Ask Clarifying Questions
不要着急直接做題哦,推薦按照以下幾個步驟進行。
Step 1:确定自己讀懂題目。
這點非常關鍵,盡管面試題一般不會很難懂,但萬一真理解錯題意,寫到一半兒才發現,不僅浪費時間,而且在面試官心中也超級減分。
如果你需要面試官的幫助,你可以大膽發問:
總之,不用擔心會顯得很笨哦(當然,問問題的前提是自己思考過)。
Step 2:确認輸入輸出格式、邊界條件等細節。
我們平時做題的時候,題面都是很清楚全面的,而在面試中可能是簡化版。我們需要挖掘題目中被忽略的地方,跟面試官确認。
可以問哪些問題呢?以 T15 為例,我們可以詢問:
根據實際情況,向面試官适度問些這樣的問題。意義:
互動二:确認思路 Explain Your Thoughts
讀懂題之後就開始寫代碼了嗎?大寫的 NO!
最穩妥的做法是:先确定解題思路,了然于心再動手敲代碼。而不是走一步看一步,幻想山重水複疑無路
Step 1:先分析暴力法等其他明顯非最優解法。
依然是 T15,在我開始想思路之前,我會先跟面試官說:
然後過渡一下:
隻是一個小示例。如果是有 3 種解法的題目,也可以把每種解法和相應的複雜度都簡述一遍,最後實現最優的,或者是面試官指定實現某個解法。
可能你會疑惑,講這些非最佳方法真的有用嗎?
Step 2:思考更優思路
情況 1:如果題目非常陌生,一時半會兒沒有想法,需要冷靜思考,那麼千萬别直接沉默,否則會寂靜的尴尬。
記住,我們可是要引領面試官的,時刻展現我們愛溝通愛協作的個人魅力。
你可以說:
然後你就禮貌地赢得了短暫的沉默權!
情況 2:已經有初步的想法思路了,無論是自己是否确定,都可以跟面試官先交流着。
繼續 T15,假如我已經想到用雙指針了,盡管我還沒思考“重複”怎麼處理,但是沒關系,先在整體思路上跟面試達成共識。
我會說:
還記得嗎?面試官是我們的隊友,不是對手。現在就是 ta 發揮價值的地方啦。
跟面試官對齊方法,可以引導面試官進入我們的思考過程,跟着我們的節奏走。隻有充分明白我們的思路,才能更好地幫助我們。
具體有哪些幫助呢?
Step 3:舉個用例,用自己的解法走一遍
盡管我們已經描述思路了,但是大部分題目單講思路會很抽象。為了确保面試官明白我的思路,我再會找簡單的例子,用我的解法來給 ta 過一遍。
你認為跑測試用例是代碼就位後的環節?不是的,真正心機的人還沒寫代碼就過用例了!
我一般是邊講邊在 IDE 裡寫注釋,親測非常專業。遇到樹圖的問題,最好也提前準備好畫圖工具,邊畫邊舉例。
繼續 T15 的例子,講述完雙指針的思路後,我會說:
邊說邊在 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,我開始敲代碼了,我邊打字邊解釋:
此時 IDE 中已經敲下了↓
def threeSum(nums: List[int]) -> List[List[int]]:
我們繼續:
我習慣每個模塊都階段性總結一下複雜度,順帶就标在注釋裡了。也可以先不提複雜度,最後統一分析。
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 這樣的語塊前,也宏觀地預告一下我們要做什麼。比如:
說着邊敲下這樣的 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:
...
以上的舉例是想展示一下該如何邊寫代碼邊講解思路,大家也可以根據自己的風格調整措詞表達。
從此寫代碼時養成自言自語的好習慣 OK?
互動四:總結分析 Summarize and Analyze
代碼寫完之後,記得做兩件事:
如果在總結環節,你突然意識到自己思路繞彎了,或者代碼寫的不簡潔,也請主動跟面試官分享:
面試官心裡也是加分的,他會覺得你很愛思考,可能是面試緊張,你原本的實力會更高。
最後,面試官可能要求跑幾個他指定的用例,順利的話就結束這場撕題,或者進入到 follow-up questions 了。即使測試結果不對,也不用着急,因為按照上述的方法走下來,代碼應該沒有太大問題,而且我們的表現一直很好,可能有些細節沒注意到。耐心地順着自己思路,尋找出錯的原因就好了。
寫在結尾
以上就是一些個人的小經驗。本文的初衷是我發現不少同學不太重視面試中的溝通交流,所以來分享我的 tips。當然,我們不能舍本逐末,過于追求這些軟實力,而忽視了技術實力的打磨。
如果有不同的想法,也歡迎在評論區理性讨論~
BY /
本文作者:coldme
聲明:本文歸“力扣”版權所有,如需轉載請聯系。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!