GitLab資深工程師Jacob Schatz分享了他如何進行技術職位面試以及他的思考過程。技術面試經常被討論,對一些人來說可能是一個敏感話題,因此值得注意的是,本文表達的是Jacob個人的觀點,並不一定代表其雇主的觀點。
你是否是一位感到恐懼、疲憊、悲傷或失望的面試者?我希望改變這種偏見。
我相信人們可以擁有良好的面試體驗,而我同時也能找到合適的候選人。這兩件事可以同時發生!在你的面試過程結束後,在一個理想的世界裡,無論結果如何,你都應該對你自己和這個過程感覺良好。你可能會因為沒有得到這份工作而感到悲傷,或者因為開始你的新工作而感到興奮,但無論哪種情況,你都應該明白其中的原因。
在GitLab,我非常早地就負責招聘工作,因此我見過成千上萬份簡歷。當我剛加入時,我被要求招聘並組建一個前端開發團隊。我是第29名員工(我們現在有500多名員工),我是第一位前端開發人員,所以我們團隊沒有招聘流程。我們逐漸創建了一個流程。
本文的目標是面試者和麵試官。對於面試者,我希望你知道完美的訪談是什麼樣的。面試不應該令人害怕或令人恐懼。這是一份你可以遵循的指南,它可以幫助你儘自己的一份力量創造完美的面試。如果你是一位面試官,也許你已經完善了你的流程。這是我對面試在一個理想世界中如何進行的看法。面試有很多不同的類型,本文重點關注對所有經驗水平的開發人員進行面試。多年來,我堅持了一些很好的流程,本文是對雙方候選人流程的幕後一瞥。
在我開始之前,重要的是要記住,每個人都是人,人是不完美的。沒有完美的開發人員。像對待普通人一樣對待每個人。對某些人的成就感到驚訝是可以的,但崇拜他人是不可以的。天賦既是先天性的,也是後天習得的,你也可以習得它。你的面試官和你都是不完美的。面試不應該圍繞完美展開。以下是面試應該是什麼樣的。
我在候選人身上尋找的五件事
GitLab的價值觀涵蓋了很多重要的方面,你應該閱讀它。這是基於這些價值觀的鬆散基礎。
作為一名面試官,在成為一個富有成效的積極傾聽者時,我一次只能關注這麼多事情。但我確實有五件具體的事情我想關注:
- 這個人“頭腦清醒”嗎?
- 這個人從技術上來說是否符合這個角色的要求?
- 這個人在這個角色中能否自給自足?
- 這個人溝通能力強嗎?他們能和團隊很好地溝通嗎?
- 這個人能很好地處理正面和負面反饋嗎?
當然,我還尋找其他一些東西,但這五件事就足以讓你得到你想要的工作,如果你和我一起面試的話。
忘記緊張吧。我永遠不會因此責備你。我知道你可能會緊張,這完全沒問題。極少數情況下,緊張會成為一個令人衰弱的因素,在這種情況下,我只是要求你重新安排時間。只是不要掛斷我的電話!
認識到會有偏見
我們在GitLab接受過偏見方面的培訓。我在培訓中學到的一件事是,每個人都有偏見,無論你是否認為自己有偏見。有一次,我想到過像一些管弦樂隊那樣進行盲目面試。我們從未實施過(而且這很難),但這就是為什麼我保留一份問題清單和一份我想在每次面試中涵蓋的內容摘要。每次面試都有一個我可以遵循的腳本。所有內容都盡可能重複和相似。隨著面試的進行,我將能夠判斷我是否可以提出更難的問題。更難的問題不是為了淘汰候選人,而是為了合格的候選人。如果你能回答我的難題,這意味著你擁有豐富的經驗和知識。重要的是要知道,我必須以某種形式提出瑣事問題,但我不會根據瑣事問題來評價候選人。這是為了了解你對JavaScript知識和編程的深度。
也就是說,仍然有一個瑣事問題沒有人答對過。我會一直問下去,我相信總有一天,有人會答對。瑣事問題很有趣,因為我是一個主要的JavaScript迷。我只是喜歡談論JavaScript的所有來龍去脈。我正在尋找可以成為我的編碼夥伴的人。招聘人員是關於尋找你可以一起工作的人,而不是為你工作的人。
沒有經驗的面試官傾向於測試你他們知道什麼(這樣當他們可以因為“錯誤”答案而批評你時,他們會感覺更安全一些)。
相反,優秀的面試官專注於你知道什麼,並促進雙向對話以探索共同的契合點。
— Jennifer Kim (@jenistyping) 2019年4月8日
我想知道你的技術能力
這可能是人們最害怕的事情。面試中我們會問諸如“為什麼井蓋是圓的?”之類的問題。事實是,有些公司可能會問來自LeetCode的中等偏難的問題,而有些公司可能根本不會問任何技術問題。
我在你的技能組合中尋找什麼
經驗比我能問的任何技術面試問題都更有說服力。例如,如果我正在招聘前端工程師職位,而有人告訴我他們自己構建了一些很酷的東西,我們可以討論一下,那麼這太棒了。在那之後,我可能還需要向他們提出一些問題,或者演示可能回答了我所有的問題(雖然不太可能,但有可能)。但是,如果我們可以一起瀏覽你非常自豪的某些東西的代碼,那就太好了。
如果你能告訴我你為另一家公司構建的東西,我可以查看你的代碼,或者你可以充分地解釋它,那就很有幫助。挑戰是什麼?你是如何處理10,000條評論的?你是如何處理移動端的?有哪些挑戰?我舉個例子:你為GitLab構建了評論系統。對於評論系統來說,一個有趣的挑戰是處理@下拉菜單中加載用戶以提及其他用戶的問題。事實證明,該下拉菜單的JSON有效負載可能會變得非常大,並且在頁面加載時加載它會使頁面加載速度明顯變慢。但在第一次@按鍵時加載數據也很慢,因為有效負載可能超過10 MB。我們希望用戶擁有無縫的體驗,並且沒有意識到數據需要時間來加載。因此,談論這種體驗的一個好方法是描述你考慮過的一些方法,例如:
- 當評論框第一次出現在視口中時加載數據。
- 在用戶第一次將鼠標懸停在文本區域上時加載數據。
- 一旦用戶以足夠的動量開始滾動,就加載數據。
最後一個不是一個無聊的解決方案,但我確實在面試中聽到有人說過。
我可能會問到算法和數據結構
嘿,面試官們,你們是在為你們的營銷網站招聘人員嗎?不要問他們最難的算法和數據結構問題。是的,算法和數據結構在所有方面都扮演著巨大的角色,但更重要的是候選人了解響應式設計,以及動畫和性能。既然我們正在談論性能,他們應該了解大O表示法。他們應該知道是什麼導致了重繪。看看Firefox Monitor並將其與Salesforce進行比較。 Firefox網站的各個方面都更加快速。為什麼它更快?為什麼Salesforce網站如此笨重和緩慢?調整它們的大小……哎呀!大O可能有助於你解釋某些部分,但能夠解釋整個畫面很重要。
順便提一下大O表示法,因為我提到了它。
大O是一種描述你的代碼在最壞情況下運行時間和/或代碼將佔用多少內存空間的方法。我認為學習它真的很好,並且有助於日常編程。你可以並且應該學習它,這可能需要大約一個小時。一個小時後,無論完成與否,你都很有可能準備好回答面試官會問的任何合法的大O問題。
大O不是你需要學習的課程。以下是一些可以在不到一小時內向你解釋它的文章:
- 我喜歡這篇文章。
- 對於更正式但最終易於理解的文章,請查看Brillant。
- 對於一張你感覺舒適的備忘單,請查看大O備忘單。
- 對於一些很好的例子(使用不同的語言,但非常易於理解),請查看這篇文章。
好的,回到面試中的算法和數據結構。
由於這些類型的問題可能會出現,因此提前做一些功課是值得的。在學習算法和數據結構的面試時,有兩個典型的黃金標準。
- 有一本蓋爾·拉克曼·麥克道威爾寫的《破解編碼面試》一書。
- 有一個名為LeetCode的網站,有很多資源。
還有許多其他東西推薦用於算法和數據結構,大量編碼面試,但與其記住世界上每一個例子(這不會為你解決任何問題),不如學習如何解決這些問題。
正如我上面所說,前端工程師應該為了他們的健康學習大O,因為它對你有好處,就像吃你的韋氏麥片一樣。除非工作需要廣泛的算法和數據結構知識,否則面試官不應該問廣泛的算法和數據結構問題。如果我正在設計一個前端框架,比如Vue,那麼優化DOM差異算法或至少理解你正在使用的算法的實現將非常重要。但這是否意味著我會從CTCI中提出七個額外的難題?不會。你是在測試理解,而不是記憶。當人們解決這些問題(當我問他們時)時,我希望看到他們思考了這個問題,並且我們一起解決了這個問題,而不是我希望看到他們得到了正確的答案。這完全是關於弄清楚你作為一名工程師在得到這份工作後能夠做什麼——而不是你昨天記住的東西。一個了解算法的人將比一個必須在工作中學習算法的人更擅長實現它們。
你們是在招聘人員來構建依賴管理系統嗎?這個人需要了解很多關於算法和數據結構的知識。
這是光譜的兩個極端,但在我看來,並非每個人都需要知道如何從頭開始編寫紅黑樹——但每個人都應該了解大O。然而,學習典型的算法和數據結構將極大地提高你作為軟件開發人員的技能。
當我確實問到算法和數據結構問題時,我會問以下幾個問題:
- 什麼是鍊錶?你能向我展示如何在JavaScript中使用和不使用數組來實現它嗎?
- BFS和DFS有什麼區別?你能實現其中一個嗎?
答錯這些問題不會淘汰任何人。記住,我不使用瑣事來評價候選人。
你頭腦清醒嗎?
在面試期間,我還尋找許多軟技能。這是我確定你是否“頭腦清醒”的方式。
嚴格來說,這意味著你做出了正確的決定,但對我來說,這遠不止於此。頭腦清醒的人會做出合理的決定。與我持有不同意見是好事,但我們應該同意一個知識標準。例如,我們都應該同意,只使用絕對定位來佈局整個博客是一個壞主意。這不是一個合理的決定。
但我可能會創建一個這樣的場景來檢查這些技能:
讓我們進入CodePen並創建一個靜態博客主頁。我們需要一個導航菜單,我們需要一個標題和文章的地方,然後在底部讓我們有一些評論和頁腳。
然後我會引導你了解創建導航的不同方法以及每種方法的優缺點。對於我招聘的許多前端開發人員,我想知道他們了解一些核心JavaScript,所以我可能會要求他們只使用原生JavaScript添加一些小功能。
當一個框架為你做所有事情時,你不需要自己做事情。我想知道你是否了解全局情況。
“頭腦清醒”是一種花哨的說法,意思是你的事情井井有條。這不是一個詳盡的清單,但這些是引起我注意的事情:
你照顧好自己
你專業地說話(這比大多數人知道的更有影響力)
省略非常私人的細節
簡潔地回答問題
花時間思考
當你不知道的時候說“我不知道”
自信,但不要自負,即使你不是
你完成你開始的事情
你誠實
你能夠說不
你知道你想要什麼,並且你想要幫助其他人得到他們想要的東西
你會不同意,甚至會辯論,但知道何時放棄
你能夠在面試中有效地溝通
這段談話輕鬆還是令人筋疲力盡?
你英語流利嗎?口音完全沒問題!
你是否理解正在討論的概念?
你是一個善良的人。
關於最後一點:善良並不意味著你是一個軟弱的人。善良是挑戰他人和給予反饋的重要組成部分。
我想看看你是否自給自足
現在看來這很明顯,但我相信——在GitLab工作之後——自給自足是面試官應該在被招聘的每個人身上尋找的東西。自給自足在你在公司中的角色中扮演著重要的角色。
例如,為了達到極致,想想一位總經理,他們可能比團隊中的任何人都擁有最少的外部指導。每個人都有責任,但總經理通常必須擅長許多事情,包括(但不限於)營銷、銷售和管理。所有這些都會根據團隊規模而改變。他們的角色可能是最模糊的。他們非常自給自足。在我看來,高級開發人員應該能夠承擔整個大型功能並正確實現它。
這並不是說開發人員不應該在過程中進行溝通。他們應該提出問題,並與其他人一起尋找最佳前進方向。
審查面試者的代碼有機會變得枯燥(以一種好的方式),因為我們知道對他們的期望。我們依靠他們來指導經驗較少的開發人員。初級開發人員也應該自給自足,但可能不會獨自承擔大型項目。初級開發人員通常在小塊工作中表現出色。例如,對於初級開發人員來說,承擔高級開發人員在大型項目中承擔的小型任務可能是一件很棒的事情。高級開發人員還可以指導初級開發人員,並引導他們朝著正確的方向前進,以幫助他們變得更加自給自足,這對雙方來說都是一件好事——對經理來說也是一件好事,因為他們可以將更多工作委託給高級開發人員。
如果你是一位前端開發人員,並且在這個職業生涯階段需要手把手指導,這完全是100%可以的,每個人都經歷過。或者,如果你正在申請很多地方但沒有得到任何結果,並且非常沮喪:我建議你在申請之前變得更加自給自足。我建議你變得更加自給自足並獲得你想要的工作的一種方法:忘記代碼示例、小型購物車應用程序及其同類產品,因為它們在求職面試中表現不佳。為某人構建一個完整的應用程序,並以低價或免費的方式進行。找到你附近的教堂、猶太教堂、收容所或其他人,並主動為他們製作一個網站。
請記住,免費客戶通常是最糟糕的客戶。當你能夠說你已經為幾個客戶做過工作時,這將是值得的。為了獲得額外積分,請在一些博客文章中記錄你的工作。這些內容在簡歷上看起來很棒,會讓你從其他人中脫穎而出。我知道任何人都可以通過Wix或其他網站建設平台輕鬆獲得一個網站,但沒有什麼比一個精心設計的自定義網站更好了。我認為在我得到我的第一份編程工作之前,我製作了大約10個左右的網站。我可以寫一本書來講述那些瘋狂的故事。
溝通和反饋是關鍵
這是另一個看似顯而易見但很難做好的點。溝通在GitLab手冊中有很好的記錄,所以我不會詳細介紹它,只是說我遵循GitLab的價值觀,我們正在尋找其他希望也遵循這些價值觀的人。正面和負面反饋也在GitLab手冊中有很好的記錄,所以我不會在這裡介紹它。
我如何進行其餘的面試
因為我們在GitLab面試了很多候選人,所以我們遵循一個通用的流程,以便我們可以輕鬆地重複它。我不會詳細介紹我們的面試流程,因為它一直在不斷發展。但是,總的來說,這是我遵循的流程。
告訴我關於你自己的情況
你會被問到一個著名的類似於“告訴我關於你自己的情況”、“告訴我你一直在做什麼”或“告訴我你在[公司名稱]期間的情況”的問題。當我問這個問題時,我試圖找到你申請的工作和你過去的工作之間的聯繫。最好提前找到共同點。
例如,作為GitLab的一名員工,如果我個人以前端工程師的身份申請FAANG,我相信GitLab和那家公司都在努力提高頁面加載速度。也許我注意到當我第一次加入GitLab時,一個頁面上有26K個事件監聽器,並且能夠將其減少到0,將加載時間減少50%,降至200ms的速度。我相信這將與對話相關。
因此,作為一名面試者,我可能會這樣說:
“你好!我是一名GitLab的前端工程師,我已經在這里工作了3.5年,在我的任期內,我做了很多巨大的改進,我最喜歡的工作領域是性能、用戶體驗設計實施和架構設計。”
此時你不想進入過多的細節,但最好給面試官一些事實來處理。當我問這個問題時,有人開始詳細地講述他們整個職業生涯的10分鐘,這令人沮喪。
是什麼讓你申請我們公司?
面試官可能會問:“是什麼讓你決定申請我們公司?”希望你很高興在這家公司工作——否則,為什麼要費心申請呢?
由於某種原因,這個問題經常讓候選人過度興奮,他們最終會弄混我們公司的名字。這是完全正常的行為,特別是如果你的公司聽起來像另一家公司。
此時我正在尋找的是,看看你是否只是在找工作,或者你真的興奮地想和我們一起工作。我們想要那些真的想和我們一起工作的人。這時我也可以看到一個人是否了解我們公司的情況。例如,有些人喜歡我們的價值觀,閱讀過它們,並想在一家擁有這些價值觀的公司工作。有些人想解決我們正在解決的大問題。有些人看過我們團隊的演講和文章,並希望與像他們一樣聰明的人一起工作。
你的五件事是什麼?
最後,我喜歡問候選人是否對我有什麼問題。這是面試的重要組成部分,你應該事先仔細考慮這一點。你的目標是讓我回應:“哦哦哦,好問題!”一方面,我確實在努力回答你提出的任何問題,所以不要害羞。另一方面,我也在試圖衡量你對這份工作的興趣,所以像“呃,我不知道”這樣的話通常會讓人非常沮喪,因為它表明你可能已經走神了,或者這份工作對你來說沒有興趣。這可能會留下令人不快的餘味。
查找你的面試官並了解他們。提前這樣做可能是一項令人大開眼界的練習。你可能會了解他們的客戶獲取策略,這可能會導致許多其他有趣的問題。如果公司是一家初創公司,他們是否計劃被收購,或者他們是否想進行IPO?當你有一個清晰、經過深思熟慮的問題時,這會讓你聽起來很專業,這同樣是我列出的重要事項之一。
如果你想不出任何問題要問,那麼你真的想要這份工作嗎?如果面試官有個人網站,請查看一下,如果沒有其他問題,你可以問他們關於他們撰寫並發佈到他們網站上的漫畫書的問題。
但我建議:
- 問你通常感興趣的面試問題。在面試之前考慮一下這個問題,因為一個真正有思想的問題通常會大大提高你的候選資格。
- 你,作為候選人,在公司中尋找什麼?面試官需要向你證明什麼才能讓你接受這份工作?
- 這些人像你一樣頭腦清醒嗎?你知道,這是雙向的。
- 這看起來像一份有趣的工作嗎?你甚至想要一份有趣的工作嗎?
- 你會向誰匯報?你跟他們談過嗎?你可以在面試過程中有機會跟他們談談嗎?
- 你是否代表性不足?比如,你是在取代某人還是擔任新的角色?有多少其他人會做你正在做的事情?其他代表性不足的人應該注意哪些跡象?什麼跡象會向你表明這是一個適合你的良好環境?
此時不要問關於薪水或福利的問題;這些事情可以在你找到像我這樣的人之前,與招聘人員進行初步電話溝通時(並且可能應該)進行討論。
結論
與編程不同,面試不是一門精確的科學。你試圖證明你對與公司合作的前景感到興奮。你希望向面試官和自己證明這一點。希望你想要一份有趣的工作。本指南不是要遵循的腳本,而更多的是一些鬆散的想法,以幫助你進入面試官的思維方式,其中也包含一些針對其他面試官的技巧。也許我指出了你以前可能不知道的事情。
請記住,理論上,面試不應該是一個可怕的過程,而更像是一個尋找一起工作的伙伴的過程。
以上是採訪技術職位並不是一定很恐怖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

對於Astro,我們可以在構建過程中生成大部分網站,但是有一小部分服務器端代碼可以使用Fuse.js之類的搜索功能來處理搜索功能。在此演示中,我們將使用保險絲搜索一組個人“書籤”


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。