0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一位軟件工程師面試Facebook的真實經(jīng)歷

工程師人生 ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師吳畏 ? 2018-10-25 10:47 ? 次閱讀

我剛剛在硅谷的科技公司完成了 7 次現(xiàn)場面試,我收到了來自 Facebook 的軟件工程師的職位 Offer。下面分享一下我是怎么為面試做準(zhǔn)備的,以及我在這個過程中學(xué)到的東西。

(一)為了能到硅谷工作,我已準(zhǔn)備多年

當(dāng)我還在澳大利亞的大學(xué)學(xué)習(xí)計算機(jī)科學(xué)的時候,我總是想象著未來能成為硅谷的一名軟件工程師。我希望自己未來能夠到科技行業(yè)的創(chuàng)新中心硅谷去工作。這個目標(biāo)讓我充滿了動力,它也讓我能夠更加專注地準(zhǔn)備面試。

為了更好地學(xué)習(xí),我辭去了在墨爾本一家非常棒的公司的首席 iOS 工程師的工作,然后回到了我的家鄉(xiāng)城市珀斯。在珀斯,我開始為硅谷公司的面試做準(zhǔn)備。我知道面試準(zhǔn)備將是非常困難和艱巨的一項任務(wù)。

如果你告訴一群軟件工程師技術(shù)面試的流程,其中的很多工程師都會對常見的面試方法持反對意見。很多爭論來自于這樣一個觀點(diǎn):即在白板上解決算法問題實際上并無法實際代表軟件工程師是否能在實際工作中完成日常任務(wù)。

我在這篇文章中不會去討論這個話題。相反,我將從應(yīng)聘者的角度來探討不同類型的面試實踐。同時,我還會分享我自己在面試過程中學(xué)到的東西。

(二)面試是一種技能

在我準(zhǔn)備的面試的過程中,我始終知道面試是非常具有挑戰(zhàn)性的。但是直到我被第一次面試折磨之后,我才知道面試是那么困難。

在面試前,我曾使用過一些付費(fèi)和免費(fèi)服務(wù),這些服務(wù)可以讓那些擁有行業(yè)經(jīng)驗的人通過電話對應(yīng)聘者進(jìn)行代碼和白板模擬面試。這種面試模擬練習(xí)對我應(yīng)對真實面試中所面對的壓力是非常有幫助的。但是后來我逐漸發(fā)現(xiàn),模擬面試練習(xí)只相當(dāng)于真實面試內(nèi)容的很小一部分。

我的建議是,在你沒有積累一些模擬或?qū)崙?zhàn)面試經(jīng)驗之前,不要面試你夢寐以求的工作崗位。面試中緊張的情緒會讓你難以承受,只有通過不斷練習(xí)才能克服這種緊張的情緒。

和生活中的其他很多事情一樣,不斷練習(xí)可以增強(qiáng)你的自信。

(三)我經(jīng)歷的幾種不同類型的面試

如果你在最開始的電話面試中表現(xiàn)得足夠好,你就有機(jī)會參加現(xiàn)場面試,面試可能會持續(xù)整整幾天的時間。每次面試通常會持續(xù) 4 到 6 個小時,具體時間取決于你所面試的公司。

在我自己在硅谷面試的過程中,我總共進(jìn)行了 7 次現(xiàn)場面試,這讓我對目前的面試現(xiàn)狀有了一個獨(dú)特的看待視角。

通常情況下,現(xiàn)場面試會覆蓋三個主要面試主題:算法、架構(gòu)設(shè)計和行為,這些正是我專門研究和精心準(zhǔn)備過的面試內(nèi)容。然而,也有一些公司似乎不按常理出牌,他們會擴(kuò)大的面試內(nèi)容范圍,以考察應(yīng)聘者的更多實用技能。

下面分享一下我經(jīng)歷過的幾種面試類型:

(1)算法面試

這是最常見的面試類型。面試官會要求你在白板上解決一個問題,并據(jù)此來評估你對數(shù)據(jù)結(jié)構(gòu)、排序算法、遞歸、時間/空間復(fù)雜度分析、模式和極端案例識別等方面知識的掌握情況。在這樣的面試中,你通常會提出一個蠻力的解決方案,然后試著改進(jìn)這個解決方案,并且討論權(quán)衡不同的解決方案。

這類面試是我準(zhǔn)備最充分的面試類型,因為連續(xù) 6 周時間,我每一天都會練習(xí)在一個廉價的懸掛白板上解決算法問題,分析它們的時間/空間的復(fù)雜性,真正理解所寫的每一行代碼帶來的結(jié)果。

就我個人而言,我非常喜歡白板算法,因為我不需要擔(dān)心編寫可編譯的語法,這讓我能夠?qū)W⒂诮鉀Q手頭要解決的問題。其他人可能不喜歡在白板上進(jìn)行算法面試,對于這些人,我要說的是,如果能堅持練習(xí),這可能會改變他們的想法。

(2)架構(gòu)設(shè)計面試

這是一種非常有趣的面試類型,也是被我嚴(yán)重低估的一種面試。面試官會要求你在白板上設(shè)計一個系統(tǒng),比如停車場的售票系統(tǒng)、聊天通訊系統(tǒng)、推特信息流系統(tǒng)以及其他常見的系統(tǒng)。

通過這類面試,面試官考察的是,在你拿到一個寬泛的概念之后,你如何設(shè)計一個能夠滿足所有需求和限制性條件的系統(tǒng)。在這個過程中,需要應(yīng)聘者提出正確的問題,因為這些問題將會定義需求和限制性條件。這類面試過程更多的是一種對話,你需要在這個過程中畫一些圖表,甚至是階級結(jié)構(gòu)。所有這些都是一種高層次的交流,所以你不需要編寫任何實際的代碼。

當(dāng)然,你應(yīng)該對交流內(nèi)容進(jìn)行引導(dǎo),從而能讓面試官了解你在系統(tǒng)工作方式方面的知識。如果你是一名后端工程師,你無需探討客戶端應(yīng)用程序機(jī)制的細(xì)節(jié),除非你之前在那個領(lǐng)域積累過一定的專業(yè)技能和知識。我是一名 iOS 工程師,所以我在這類面試中會主要談到架構(gòu)模式、功能的模塊化、設(shè)計模式,而不是談?wù)撊绾螖U(kuò)展 API 端點(diǎn)之類的內(nèi)容。

(3)行為面試

面試官會問你一些關(guān)于你自己的問題以及你如何處理一些特定的情況。準(zhǔn)備這類面試并沒有準(zhǔn)備其它幾類面試那么難,但是它需要你自己做很多自我反省。

通常會問到的問題包括:

你是如何對待失敗的?

你認(rèn)為你自己最大的弱點(diǎn)是什么?

你如何解決沖突?

如果有機(jī)會可以重來,你現(xiàn)在的做法會與以前的有何不同呢?

我覺得很難把這類面試搞砸,但我發(fā)現(xiàn)很多人確實在這類面試中出了問題。他們試圖把自己的強(qiáng)項偽裝成弱點(diǎn),他們回答問題時只說那些他們認(rèn)為面試官會想要聽到的答案,甚至把失敗項目的責(zé)任轉(zhuǎn)嫁到別人身上。類似下面這樣:

“我的弱點(diǎn)就是我太專注了。”

“這個項目失敗主要怪 Jerry,他把這個項目中的大部分工作都搞砸了?!?/p>

要知道,這些面試官都是經(jīng)過嚴(yán)格訓(xùn)練過的專業(yè)人士,他們能輕易辨別那些不稱職的人,并且對應(yīng)聘者所說的廢話謊言非常敏感。他們能快速將那些不合格的候選人 Pass 掉。在面試過程中,要真誠,不要耍小聰明,要表現(xiàn)出對你的工作的熱情,承認(rèn)你的缺點(diǎn),并表現(xiàn)出有改進(jìn)缺點(diǎn)的主動性和強(qiáng)烈意愿,只有這樣,你才能得到面試官的青睞。

(4)文化匹配性

這通常是與行為面試結(jié)合在一起考察的,這主要考察你是否符合公司的價值觀。例如,F(xiàn)acebook 鼓勵黑客似的文化,鼓勵員工大膽嘗試新想法,并通過試驗對想法進(jìn)行測試,而不是害怕打破陳規(guī),也就是所謂的“Move fast and break things”。Airbnb 希望創(chuàng)造一個讓人們在任何地方都能找到歸屬感的世界,所以他們通常會尋找那些具有良好好客技能的人才。

很多大型科技公司都非常重視企業(yè)文化,并根據(jù)應(yīng)聘者是否符合公司價值觀來決定是否錄用他們。如果你在這樣的一家公司里面試,你需要想辦法了解這家公司的價值觀,并找到你自己那些與公司文化相契合的過往經(jīng)歷,并向面試官展示出這一點(diǎn),這一點(diǎn)非常重要。

(5)結(jié)對編程

一種非常有趣的面試類型是,讓你和另外一位工程師在一個設(shè)置好的編程環(huán)境中結(jié)對編程,這和實際工作場景非常類似。你會被分配一個基本的任務(wù),任務(wù)中列出了你必須完成的一系列需求列表。在你完成每一個任務(wù)后,面試官會要求你實施更多的功能,直到到了規(guī)定的時間為止。在這個過程中,你可以自由使用你想使用的任何資源,如 Stack Overflow 或在線文檔。

我發(fā)現(xiàn),在這樣的面試中,很多候選人能否通過考察主要依賴于他們真實世界的開發(fā)經(jīng)驗。與白板面試不同,在這類面試中需要你寫出語法正確的代碼,因此你應(yīng)該徹底了解你的編程語言和環(huán)境,因為你肯定不希望在編程面試過程中花太多時間去在網(wǎng)上或文檔里搜索答案。

在我之前的工作中,在我在做一項任務(wù)時,我會寫干凈的代碼,然后等我覺得任務(wù)完成之后再進(jìn)行優(yōu)化。這種工作方式對這種類型的面試是不利的。

(6)發(fā)現(xiàn)并修復(fù) Bug

作為工程師,我們所做的很多工作都是圍繞著找到和修復(fù)那些我們從不同渠道搜集到的 bug。在這類面試中,你會得到一個需要你去找到和修復(fù)的 bug 列表,在這個過程中,你還需要識別其他可能存在問題的代碼。

我自己只經(jīng)歷過一次這樣的面試,我覺得這類面試真的很難讓人做好準(zhǔn)備,特別對那些經(jīng)驗所有欠缺的初級工程師更是如此。每個編碼環(huán)境都有各自的小怪癖和細(xì)微差別,我所做的很多 bug 修復(fù)工作都來自于以前的 IDE(集成開發(fā)環(huán)境)的經(jīng)驗以及我在過去多年時間里積累的相關(guān)框架。

(7)考察專業(yè)領(lǐng)域知識

在我們今天看到的大多數(shù)通用語言中,編程基本上是相同的。如果你知道一種編程語言的面向?qū)ο缶幊蹋敲催@些技能多半能夠轉(zhuǎn)移到另一種編程語言里。但是,這類面試的考察技是不能在語言或框架之間相互轉(zhuǎn)換的。面試官將會在特定的環(huán)境下考察你在有關(guān) API、內(nèi)存管理、功能和局限等專業(yè)領(lǐng)域知識的掌握情況。

對于這類主題的面試,練習(xí)是很具挑戰(zhàn)性的。和上文中說過的發(fā)現(xiàn)并修復(fù) bug 面試類似,我覺得這類面試問題的答案大都來自于過往的經(jīng)驗。根據(jù)你所申請的職位的級別的不同,面試官評估你的答案的標(biāo)準(zhǔn)會有所不同。例如,如果你申請的是一個初級職位,不知道為什么一個 API 的結(jié)構(gòu)是特定的,那么面試官會在這方面做出讓步,不會對你要求太高。然而,如果你申請的是一個高級職位,面試官對你的要求會更高,這時如果你不知道這個問題的答案的話,這就會給面試官留下非常不好的印象。

(8)對操作系統(tǒng)的了解

根據(jù)你所應(yīng)聘的職位或團(tuán)隊的不同,你可能會有一個專門的操作系統(tǒng)方面的面試。在這個面試中,你會被問到一些問題,面試官通過這些問題對你對計算機(jī)操作系統(tǒng)機(jī)制的理解進(jìn)行評估。說實話,這個面試有點(diǎn)讓我措手不及。操作系統(tǒng)是我早年在大學(xué)里學(xué)過的東西,但是后來慢慢都淡忘了。

(四)你該如何準(zhǔn)備?

正如我在上文中說的那樣,面試本身其實就是一種技能。即使你在日常工作中已經(jīng)是一名優(yōu)秀的程序員,或者在你在學(xué)校的成績非常優(yōu)異,但是在面試會議室里,你的這些技能并不能按1:1 的比例方式轉(zhuǎn)化為面試技能。堅持、重復(fù)地做面試準(zhǔn)備和練習(xí)將在很大程度上決定你的面試結(jié)果。

(1)至少需要掌握這些知識

如果有人問我,我覺得應(yīng)該關(guān)注哪些方面,我建議以下幾點(diǎn):

首先學(xué)習(xí)在紙上和白板上手寫代碼,然后把它放到一個 IDE(集成開發(fā)環(huán)境)中,以便語法高亮顯示,這應(yīng)該成為你的第二天性。

對數(shù)據(jù)結(jié)構(gòu)要有深入的了解,包括他們的長處和弱點(diǎn)。

完全理解大O符號的時間和空間復(fù)雜性,這將與你的算法和排序問題完美地配對。

掌握所有主要的排序算法,因為時間和空間的復(fù)雜性有可能破壞你想要解決的算法的最佳解決方案。

(2)何時開始

根據(jù)你自己的時間表,越早開始越好。我面試過的很多公司都有一個 12 個月的冷卻期,面試未通過的應(yīng)聘者需要等到 12 個月后才能重新申請公司的職位。反過來說,如果你知道你無法在一年時間內(nèi)準(zhǔn)備好這個面試,,你不妨現(xiàn)在開始這個面試流程,大概感受一下面試流程具體是怎樣的,到時真正面試的時候就不會那么害怕了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Facebook
    +關(guān)注

    關(guān)注

    3

    文章

    1429

    瀏覽量

    54479
  • 軟件工程師
    +關(guān)注

    關(guān)注

    8

    文章

    217

    瀏覽量

    21087
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式軟件工程師如何提升自己?

    ,可以為自己的職業(yè)生涯打下堅實的基礎(chǔ),并實現(xiàn)個人的職業(yè)目標(biāo)。愿每一位嵌入式軟件工程師都能在這個充滿挑戰(zhàn)和機(jī)遇的領(lǐng)域中取得成功!
    發(fā)表于 06-12 11:20

    索尼誠邀軟件工程師參與PS免費(fèi)手游平臺設(shè)計

    據(jù)悉,近日,澳大利亞知名媒體TweakTown發(fā)現(xiàn),索尼互動娛樂正在為其旗下的PlayStation Studios Mobile招募名資深的軟件工程師,負(fù)責(zé)設(shè)計PlayStation的免費(fèi)手機(jī)游戲平臺。
    的頭像 發(fā)表于 05-23 17:08 ?620次閱讀

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    嵌入式軟件工程師和硬件工程師的區(qū)別? 嵌入式軟件工程師 嵌入式軟件工程師軟件開發(fā)領(lǐng)域中的種專
    發(fā)表于 05-16 11:00

    大廠電子工程師常見面試題#電子工程師 #硬件工程師 #電路知識 #面試

    電子工程師電路
    安泰小課堂
    發(fā)布于 :2024年04月30日 17:33:15

    為何國外工程師偏愛使用for(;;)來實現(xiàn)MCU死循環(huán)?

    一位工程師發(fā)現(xiàn),國外工程師在給demo在做死循環(huán)時用的是for(;;),而不是常用的while(1)。這僅僅是個人習(xí)慣的問題,還是有更深層次的含義?
    發(fā)表于 04-01 11:26 ?425次閱讀
    為何國外<b class='flag-5'>工程師</b>偏愛使用for(;;)來實現(xiàn)MCU死循環(huán)?

    一位硬件工程師的歷練之路:從入門學(xué)習(xí)理論到... #搞笑 #硬件工程師 #電子工程師 #揚(yáng)興科技

    硬件工程師揚(yáng)興科技
    揚(yáng)興科技
    發(fā)布于 :2024年03月13日 17:50:21

    Cognition發(fā)布首款A(yù)I軟件工程師Devin

    據(jù)報道,Cognition公司今日公布了其首款人工智能軟件工程師——Devin,掀起了打造軟件模式變革的序幕。該產(chǎn)品在SWE-bench代碼測驗中展現(xiàn)出卓越表現(xiàn),甚至超過了部分頂級人類工程師的水準(zhǔn)。
    的頭像 發(fā)表于 03-13 10:57 ?527次閱讀

    如何搞崩個硬件工程師心態(tài)?試試對ta說這幾句

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2024年02月20日 18:05:49

    名嵌入式工程師的漲薪經(jīng)歷

    下面是一位嵌入式工程師的漲薪經(jīng)歷,希望可以幫助到你,幫到其他的在校學(xué)生。 ? 階段 1 大到大三這個階段我與大多數(shù)學(xué)生相同: ? 、學(xué)習(xí)
    的頭像 發(fā)表于 01-05 08:39 ?345次閱讀

    嵌入式軟件工程師常用的

    最近我換工作了,看見不同嵌入式軟件工程師用的平臺都不樣,所以我整理了下。PlatformIO:多平臺支持:PlatformIO支持多種嵌入式平臺,包括Arduino、ESP8266、ESP32
    的頭像 發(fā)表于 12-24 08:00 ?518次閱讀
    嵌入式<b class='flag-5'>軟件工程師</b>常用的

    優(yōu)秀電源工程師的必備技能大揭秘!

    隨著電源市場的不斷擴(kuò)張,開關(guān)電源行業(yè)飛速發(fā)展,企業(yè)對電源工程師的需求日益增加,對電源工程師的技能要求也日漸提高,相信沒有一位電源工程師會錯過讓自己變得更優(yōu)秀的機(jī)會。作為
    的頭像 發(fā)表于 12-19 08:23 ?1477次閱讀
    優(yōu)秀電源<b class='flag-5'>工程師</b>的必備技能大揭秘!

    硬件工程師經(jīng)典面試題詳解

    硬件工程師經(jīng)典面試題詳解
    的頭像 發(fā)表于 11-20 15:08 ?1167次閱讀
    硬件<b class='flag-5'>工程師</b>經(jīng)典<b class='flag-5'>面試</b>題詳解