軟件工程師今年就業這麽難?不應該呀。這個將應屆畢業的女小留,麵試13家公司,最終全悲劇的詳細曆程

這樣的小留經曆確實不容易,尤其是目前的大環境下。這個女小留的主動,頑強和毅力,估計一半的小中們趕不上。

ZT:

https://www.1point3acres.com/bbs/thread-987916-1-1.html

[應屆生NG]麵掛13家公司23ng上岸失敗實錄

注冊賬號x21年實習早早上岸的自己怎麽沒想到23年的自己真的會走到這一步發一個帖子,整理了之前麵試的麵經有興趣的最近有麵到的可以看看另一方麵也想看看地裏前輩有沒有合適的崗位可以給一些機會感謝!

1. 背景介紹

我現在正在USC讀cs37,21fall入學,按照正常按照i20計劃是23年底畢業,但是還是準備著23Spring畢業,想著早點畢業早點工作。現在計劃失敗,我並沒有向學校申請畢業,所以準備23fall再選些課,到時候再畢業。我之前因為疫情在國內有過1~2年的工作經驗,主要在自動駕駛行業。去年暑假我在圖森sd定位組實習,由於眾所周知的原因並沒有return。我的技術棧主要是SLAM,3D reconstruction,c/c++,稍微帶點learning的東西。找的工作general sde,slam算法和c/c++的崗位都有過嚐試,如果地裏的前輩有任何的合適的崗位也希望可以給一些機會,不管是全職還是實習(我也可以summer+fall full time實習),ng或者要求1~2年experienced都可,再次感謝!

2. 麵試

麵試的主要出題集中在這幾大領域:leetcode題,c/c++的八股,概率論(集中在貝葉斯條件概率的那些),采樣,線性代數,3D Geometry,SLAM基礎,graphics點線麵.

這些麵試時間線橫跨從22年11月份到現在,具體時間線我就不介紹了,主要是麵試內容的介紹。


2.1 Tesla

Manager在LinkedIn上reach out我,說是想找Spring的實習生,技術棧是SLAM,應該是地圖定位部門的。在交流的時候,發現他好像更傾向於full time intern,但是USC政策不允許學分超過4分的學期做full time internship,隻能part time而且得在LA或者remote。但即使這樣還是麵了兩輪
    一麵:
        coding:出了一個簡單的數組操作,flatting list。類似於這種[[1, 2, 3], [4, 5, 6], [7], [8, 9]] -> [1, 2, 3, 4, 5, 6, 7, 8, 9],但是左邊可以有很多層,維度未定,我用recursive弄了弄,然後他問我是不是不怎麽寫python(python應該會有更方便的語法去弄)...我說對...工作都是寫c++
        接著就開始問概率論的東西了,bus A到達時間從0到1小時均勻分布,bus B到達時間從0到0.5均勻分布
            0.1小時恰好bus A到達的概率?0.1小時恰好bus B到達的概率?答:都是0
            雖然都是0,上麵兩個哪個更可能到達?答:bus B
            問題都沒聽懂,但問的應該是貝葉斯公式的東西,因為他問我這個公式知道嗎?我就說P(A∩B) = P(A)P(B|A)=P(B)P(A|B)。後麵我搞清楚了,應該是條件概率的應用,問題應該大致類似於bus A比bus B早到的概率,用條件概率做積分即可。.
    二麵:(沒想到會有二麵
        coding:考了個prefix sum,做完了
        線性代數:Find the dimension and construct a basis for the four subspaces associated with the following matrix。大致是線代裏麵的找一個nxn方陣的子空間,那個方陣不是滿秩的,是n-1的。我這時候並沒有複習到線代,所以這裏可以說非常慘烈

結果:後麵Tesla就ghost了,我自己也非常非常清楚原因,不能full-time實習+麵得非常差。

2.2 OPPO 北美

這個是OPPO北美給手機做AR的團隊,也是團隊的某個成員在LinkedIn上看了我的profile,然後就有了後麵的麵試。崗位名字是senoir/staff的,但是不知道為啥給了我麵試。
    一麵:
        先對著我的簡曆聊了聊之前的經曆,主要集中在vSLAM和3D reconstruction
        問了epipolar 和homography,都現場給他推導出來了
        接下來就開始迷惑了,先是問我知不知道針孔攝像頭模型,我說知道. ----
            他:有的時候即使模型參數標定對了,也會有誤差是為什麽?
            我:說明你的圖像還帶有其他畸變,這些是針孔模型所描述不出來的
            他:沒有畸變
            我:沒有畸變的話,假設你的標定完全準確,沒有任何計算誤差,這不應該有什麽誤差呀?除非是x,y方向上的映射,不單單是跟x,y方向上的坐標有關係,比如x方向上的映射即跟x方向的像素坐標有關,也跟y方向上的像素坐標有關(我為了幫助他描述問題,寫了一下針孔模型的映射方程,並解釋了哪個參數代表什麽
            他:也不是這個意思
            我迷惑了 ..
        在我寫出映射方程之後,麵試官甚至後麵跟我道歉說自己沒說清楚問題,我就更迷惑了...

結果:後麵ghost了兩周,再去問就說拒了,雖然說自己清楚肯定夠不到senior崗,但是就這麽莫名其妙掛了還是心有不甘...

2.3 Pegasus

中文是雲驥智行,21年才成立的初創,在國內和北美都有崗位。一位學姐幫我內推北美的機會。

這個聊了很久,可能得有一個半小時,對著我的簡曆問了很多的細節,沒有問什麽domain knowledge。但是最後問我,能不能spring先全職實習,然後畢業再全職入職。我說spring full-time可能有點困難。然後還問我,如果給了我offer就一定會去嗎?我:... 說了一些違心但是體麵的話。但是大致是比較華人的公司了orz

結果:不出意外的拒了,那時候的自己還沒意識到,現在的就業行情已經到了要跟公司表衷心的地步了(歎氣.

2.4 Applied Intuition

這家做自動駕駛simulation的,似乎近幾年已經有盈利了。朋友的朋友內推不久之後就reachout了。先是hr跟我討論了合適的崗位,我之前在國內自駕公司的地圖組,所以想著能不能去他們的地圖組,但是他們地圖算法組需要公民/綠卡,所以就給我安排了類似於地圖產線組(就是那些automation pipeline組)的麵試

    一麵:
        問了問簡曆,他們不是算法團隊,但是也跟我聊了很多slam方麵的東西,算是有來有回
        coding:非常基礎的字典基本操作,外加字符串的操作,感覺都不算是lc題目
    二麵:忘記了,但應該不難,也很快過了
    Virtual Onsite:
        VO1: bfs,求到地圖上好幾個點的距離和最短路徑,followup是uniform cost search
        VO2: 類似於graphics的狀態更新和碰撞檢測,給你一個點的位置,heading,speed和yawrate,怎麽更新位置。需要自己設計類來描述上述信息,並且進行狀態更新(即更新點的位置)。如果這個物體還有半徑,然後碰撞檢測。說完思路之後,寫了寫api但是沒寫完。這裏本來題目會更複雜的,比如這個物體不是圓,而是長方形,這樣的碰撞檢測就會更複雜。我沒有做過類似的東西,所以表現一般
        VO3: system design。我以為ng崗位不會有system design沒想到還是碰到了。問題是讓我設計一條地圖的產線pipeline,我不是搞這些的,自己即沒有做過也沒有專門準備過system design。我硬著頭皮跟麵試官複述了前司的地圖產線pipeline的大致結構,甚至描述了數據存儲geojson的內容。跟麵試官聊了很多,包括如何進行地圖query,如何對地圖進行切分,這些我也盡我所能地複述了前司的一些做法。


結果:reject,說實話有點可惜,麵試過程跟麵試官聊的還挺通常的,可能不是他們想要的答案吧。我早就跟他們說我是算法的,前麵電麵一直給我過讓我誤以為他們挺需要我這個背景的,如果按照前兩麵標準,vo應該是可以過的。但最後拒了也隻能自我安慰確實不match

2.5 Matician

灣區一家機器人公司,崗位就是做slam定位的應該。

    一麵:
        給你一個數據流,一直給係統輸入新的數據,要求隨時調用你的api能夠隨時用O(1)的時間算出均值和平方差。均值好辦,variance的話其實就是variance = E(x^2) - E(x)^2的應用。你的數據結構裏麵存三個東西,當前的E(x),當前的E(x^2)和當前已經收到的數據數量n。每次輸入進一個新的數據,你都依據n,立馬更新E(x),E(x^2),這些都是O(1)的,然後每次調用你的api套用公式即可
        采樣:你可以有一個均勻采樣的函數,如何實現在一個圓裏麵均勻采樣點。我先說了一個拒絕采樣的方式,即在這個圓的bounding box裏麵均勻采樣,分別對x和y坐標采樣,這樣在這個正方形裏麵的點是均勻的,然後如果你采樣的點如果在圓裏麵的話就接受,如果在圓外麵的話就接著再重複上述步驟直到這個點在圓裏麵。麵試官不滿意這個答案,想讓我用一些構造的方式實現,當時思路有點受限,加上麵試官不太給提示,當場沒能順利的做出來,隻說了如果用極坐標的話可能可以有一些方式可以構造。(麵試完之後我自己仔細想了一下,確實可以用極坐標的方式構造,(r,angle),angle可以直接用均勻分布,半徑r的話需要在用均勻分布拿到數字之後再次開根號,算出來的結果作為r。我的具體的思路是我們需要保證每個點的周圍小領域是均勻的,即你的采樣要在圓裏的每個地方的小區域是constant,對於極坐標來說這個小區域的麵積為$r\Delta\theta\Delta r$,如果你直接讓均勻采樣的結果作為theta和r的值,這個麵積會跟半徑有關係,不會是constant,所以你需要將均勻采樣的結果i再開根號,你會發現這樣的話會消去那個r,從而變成constant)


結果:reject,後麵那個采樣問題麵試官一直不肯放過我,說了一些這種問題的思路,但是沒能答出具體的結果,也接受吧

2.6 Arista Networks

一家做網絡的老公司了,學校的career fair投的,後麵reachout我,這個主要是c/c++的崗位。室友靠著python拿到了offer,我想著自己c/c++怎麽都要比python熟悉,盡管難也選擇報說自己會c/c++

    一麵:
        c和操作係統的一些基礎:控製符輸出,主要就是c的string其實就是一個const的char的pointer,所以在打印的時候%s和%d分別是打印出字符串和地址。還借題發揮問我一些access invalid的memory導致的segmentation fault具體流程是什麽。也回答出來了,是操作係統那一套,因為c這種底層的語言,你甚至可以亂給個地址,然後*p這樣去access這個地址裏的內容。如果這塊內存如果沒跟os申請或者權限錯誤的話就會報錯,具體流程是你的address是virtual address,cpu裏麵會有個硬件單元MMU來做virtual memory到physical memory的轉換,依據就是每個進程自己的page table,但是你access的這塊內存根本沒有申請過,所以page table的這個entry是空的,這算是page fault那麽它就會trap進os kernel裏麵。在kernel裏,os會嚐試幫你解決page fault,主要依據是每個進程都會有個linked list存放著所有聲明的虛擬內存的信息memory map(包括讀寫權限之類的),如果在這個map裏麵也沒有說你聲明有這塊內存,或者是你並不具有相對應的權限,那麽就會直接報segmentation fault;如果這個map裏麵有這個內存的信息,那麽它就可能會幫進行一些操作,諸如將文件從disk拷貝到memory,或者是幫你申請一個heap的page等等,然後再正常返回。
        lc題:實現BST的find previous node,find subtree max的函數,這兩個都可以分情況討論出來,然後用這兩個函數實現in-order遍曆,其實就是用find_max之後一直find_pre
    二麵:.
        整個麵試圍繞用c++實現一個stack數據結構展開,我需要用泛型編程
            先討論實現可能的方案:linked list或者是自己拿一個數組,記錄最後一個棧尾所在的位置
            問:這兩個方法的複雜度? 答:都可以算是O(1)的,linked list自然不用說,對於第二種來說,在數組需要擴列的時候,即resize的時候會消耗n,但是平均下來amortized的複雜度其實是O(1)的
            問:實際應用當中這兩個哪個要更快?答:我覺得應該是第二種方式,這裏有很多可以說。linked list需要為每個值多增加一個指針的消耗,而數組方法不需要。其次,數組是連續內存,它隻需要在resize的時候調用一次malloc/new,而linked list每次新增加一個值都需要調用malloc/new,這種申請的函數是需要trap進os裏麵的,相對來說要花更久的時間
            開始寫實現代碼實現方法2,吐槽一下,這家居然是在vim上寫代碼。需要用template泛型編程,寫完大致的代碼之後就開始了各種優化
            問:new和malloc有什麽區別?你為什麽用new。答:malloc隻會申請內存,new是會做初始化的,即調用constructor。這裏確實可以用malloc替換,因為我們不需要默認的初始值,我們需要原來的數組的值拷貝過來
            問:你知道exception safe嗎?(最後5-10分鍾)這個時候我還沒這個概念,不知道exception safe是個專門的topic,我就回答說如果你想保證exception safe的話,你可以給整個block加個try catch,這裏隻會有new這種函數的會有exception。但是麵試官不太滿意這個答案,我後麵去專門看了c++的這個exception safe的話題才明天他想聊啥。exception safe是一種method實現的時候的要求,就是當你的method崩潰時,你需要保證你的class的內部成員都是有效的,且沒有內存泄漏,可以接著使用(reenter)。在我這裏最關鍵的就是這個棧尾的位置,這個值我是最開始加的,然後再去進行resize之類的操作,實際上是不太好的,因為當申請內存的時候如果報錯,那麽你這個棧尾已經就更改了(除非用try catch去改,但不讓用呀),所以exception safe的push的寫法應該是這樣的,這樣的話是不需要主動的try catch的,因為即使報錯也不會損壞class結構(其實還可以再優化,就是改用realloc,這個函數是為一塊區域resize,如果這塊內存後麵有充足的連續內存,那麽就直接在尾部增加,這樣的話是不需要copy的;如果沒有充足的連續內存的話,就會再給你找一塊新的內存,這樣的話就需要copy

    void push(int value) {
        if table is full:
            new placement larger memory
      push the value
      last_index++
    }

複製代碼
結果:當場reject,最後的5-10分鍾可以說是噩夢,一個topic不知道就掛了,最後那幾分鍾一直在看麵試官秀操作,確實對於c++的東西非常了解也操作細微,連哪兩句互換順序也有講究。我在完整看完effective c++之後才發現exception safe確實是一個大的topic。這是又一次距離offer很近的一次,也無可奈何。

2.7 Zipline

做無人機送快遞的公司,是他們的定位組

    一麵:是manager的簡曆麵,主要對著我的簡曆問我vSLAM相關的經曆,聊的還不錯
    take home challenge:一道lc題目,給定一個2D矩陣(你可以想象成一個grey image)和一個pattern(也是2D矩陣,但是要更小一點),在大的image當中找到最左上角的patter的位置(可以理解為最樸素的pattern matching),沒想出什麽好的辦法就直接暴力搜索了


結果:reject。應該是那個challenge有更好的辦法,但是沒能想出來,自己也大意了.

2.8 WeRide
..
文遠智行,跟我前司感覺差不多量級的公司。這次麵的是地圖組,也跟我我在國內的前司所在組一樣。

    一麵:lc題,是一道greedy的題目,一開始用dp推,他不滿意說可以用更簡單的,然後我反應過來那就隻能用greedy了,還給他證明了greedy的正確性。具體題目忘記是什麽了,比較類似於一根線上有很多點(村莊),給這些村莊分配電樁,每個電樁可以覆蓋一定區域的供電,用最少的電樁。實際問題應該要比這個複雜,但是也可以用greedy
    virtual onsite:分了兩天,總共四輪.
        VO1:聊了一會兒自己的項目,然後就開始coding了,這裏就已經開始無語了。麵試官不給完全題目的定義,很多都需要自己去定義問題,又不是API design的問題,完全不懂為啥要這麽為難candidate
            他:假設你駕駛一輛車在路上行駛,你的車行駛到一定的油量的時候會跳燈,跳燈之後還能繼續開一段距離,但是會對車有損耗。路上所有加油站距離起始點的距離以一個table的形式給你,如何能夠加最少次的油且對車損耗最少的情況下到達終點?
            我:跳燈之後還能繼續開一段距離,這個距離知道嗎?這個損耗又是怎麽定義的呢?
            他:我不知道,需要你做一些假設
            我:看起來既要加油次數少,又要損耗少,怎麽去量化這兩個的影響呢?
            他:我不知道,也需要你去做建模
            我:(我說實話已經有點無語了,一個明顯的dp題搞得咋咋唬唬的)那麽我們就量化這些cost,這輛車有個滿油量,也有個跳燈油量,為了分別量化加油次數和車損耗,我們可以做以下的假設,假設加一次油就會有一個固定的cost,然後每次加油的時候會結算一下是否有跳燈損耗,如果加油的時候已經在跳燈油量以下,那麽就會有一個損耗=跳燈油量-當前油量。假設我們是滿油出發的,然後在終點一定會做一次跳燈損耗結算。我們可以用一個dp table,dp[i]表示在隻考慮0-ith這些加油站,且在ith加油站加油,cost最小的solution。那麽它的轉移方程就可以為dp[i] = min(dp[j] + refuel_cost + alter_threshold > cur_fuel ? (alert_threshold - cur_fuel) : 0) for all j if (j < i) and distance(j, i) < full_fuel
            他:sounds good
            我開始實現,應該有一些edge case沒cover到,但是整體思路是對的,這個lc題寫的,前麵問題定義讓我花了很多時間去給這個問題建模,最後沒時間cover所有edge case
        VO2:純簡曆麵,麵試官非常judge,總是一臉不屑的樣子和語氣。技術細節問不倒我,最後隻能問出靈魂之問,“你這個impact有嗎?”“你這看起來沒啥用啊”“你為什麽用這種方式實現這個目的”。我其實很想說,第一年的sde基本上就隻能mentor叫我們幹什麽我們就得幹什麽,我們這種ng能決定什麽,方案也是mentor上麵定的(攤手
        VO3:
            epipolar和homography的推導
            epipolar的應用,兩個相機前後放置,前一個相機的光心能被後一個相機觀測到,那麽後一個相機的所有epipolar lines會是怎麽樣的?前相機的光心會在後相機上有投影,所有的epipolar lines都會經過這個投影點,即所有的epipolar lines會像是從這個投影點向所有方向發散射線。
            如果是雙目相機呢?雙目的話,兩個攝像頭的視線是平行的,且他們的x和y軸都是平行的,所以所有的epipolar lines都是平行的
            采樣:在2D平麵上,給定一個三角形,要求在三角形上均勻采樣點。和Matician的那個類似,我先給了拒絕采樣的方法,但是麵試官不滿意。我的想法是取相鄰兩條邊作為坐標係,這個坐標係的xy軸夾角不是正規的90度,但是依舊分別對這兩個坐標軸進行均勻采樣,加起來的點就是在平行四邊形裏麵,而且在裏麵是均勻分布(思路跟Matician那個也類似,他們的單位小區域麵積是constant),至於三角形的話,如果算出來的向量如果在三角形裏麵的話就直接通過,如果不在的話,就對其進行四邊形的中心對稱轉換,也就是映射到三角形裏。
            coding:偏graphics的碰撞檢測。假設你有一個矩形,一個圓,如果檢測這兩個形狀有overlap,這裏麵試官提示了蠻多,實現了一個快速的方式。(其實暴力一點,把所有情況分類討論也可以,但是麵試官要簡略的方式.
        VO4:純公式推導的一輪,沒辦法用ipad投影手寫,手打的公式推導
            ICP問題的公式推導,需要講出ICP的具體步驟,也需要講出為什麽。這裏我全部講清楚了,不清楚的可以自己再去看看SLAM14講。大致步驟是,先算出兩簇點的中心點,然後對兩簇點進行去中心化處理,最後再對一個矩形進行SVD分解,分解可以得出旋轉矩陣,然後利用中心點算出平移向量
            梯度下降的兩種方式的具體公式推導:steepest method和GN。我也都推完了。注意這兩個方法的雅可比矩陣的目標函數是不一樣的,steepest是對整個e=f^2(x)求一階導,而GN是對f(x)求了一階導


結果:reject,我望著我寫的滿滿兩大片的公式陷入沉思,想不出有什麽地方可以以什麽理由拒掉一個這樣的ng,這是打擊最大的一次,導致我後麵的麵試我都力求反應速度快上加快。但是掛了一家跟國內前司差不讀量級公司,還是一模一樣的地圖組,實在是讓人難受,兩年過去了,我果真是沒有任何成長嗎(唉... ..

2.9 TikTok. Χ

是最近tt瘋狂招人的電商組,是一個純後端的組。

    一麵:
        先是問了我一些簡曆,因為我本來就不是sde的,沒搞過純後端的東西,好多web項目也是偏前端,也沒有鏈接數據庫之類的,所以聽到我說那幾個項目主要是AngularJS這種之後就沒有繼續問下去了。
        LC題目考的是一個縫合怪,需要用兩種算法去實現,沒在指定時間寫完


結果:reject。這個情有可原,我那天麵試非常不在狀態,再加上lc題目有點複雜,算是我麵的最差的一家公司

2.10 OPPO 北美

沒錯,你沒看錯,OPPO又來reachout我了,但這次是summer intern,技術棧還是相同的slam,還是做定位的

    一麵:
        先問了問簡曆,交流通暢
        epipolar 和homography又推了一遍
        ICP的流程和推導(跟WeRide的一樣
        lc題目出了個很簡單的dfs,就是很常見的搜索2D矩陣裏的island,我實現完了才告訴我這個題目好像出簡單了(我:I'm a lucky dog


結果:經典ghost兩周之後,去問然後給發了reject,還能怎麽辦呢(攤手

2.11 Symbotic

東部的一家做倉儲warehouse機器人的公司,還算有點年頭,07年成立的。之前實習認識的另一個phd實習生幫我內推的,她剛入職這家

    一麵:
        照例先問簡曆,其實發現好像並不是那麽match,這個組還是搞learning的多一點
        問了我都能回答出來的machine learning基礎,從knn問起,讓我說了一下knn的流程,然後問找k個最近鄰有什麽好辦法,我說一般來說我肯定是用一些特殊的三維樹,什麽kdtree octree這種,就可以很好的長久query。他說 oh i didn't expect that kind of cool answer。結果搞半天是個lc題,我說可以用max heap,他補充了一下說也可以用quick select


結果:一直ghost,應該快一個月了,基本上就是默拒了,還能怎麽辦呢(繼續攤手

2.12 Apple

Apple的The Video Computer Vision (VCV) organization的QA團隊給我發的麵試,崗位是做相機外參標定,應該是服務於算法團隊的,需要對他們的相機外參做evaluation,跟我在圖森暑期實習做的有點類似。

    一麵:manager麵,先了解了一下我的background,比較在意在圖森的那段做的calibration evaluation的經曆,然後給了一個很簡單的lc題目,就是字符串操作,給你一句話,裏麵有若幹個單詞,從後往前打印每個單詞,I Love Coding => Coding Love I
    Virtual Onsite:Apple的經典VO,需要跟團隊裏的每一個成員麵試
        VO1:一道簡單的lc題目,具體想不起來了。
            然後是一個問題:你作為QA團隊的成員需要對算法團隊每周新出版的算法做評估,每周算法團隊都會用他們的新的算法對相機外參進行標定,並且計算error,假設你有好幾個metric,你手上有過去一年的每周的所有metric的error,你怎麽去評估?
            我:我可以假設過去一年的這些數據每個metric都符合高斯分布嗎?
            她:不太能
            我:也對,這樣的話其實就默認了這過去一年算法沒有太多的提升。那麽我們可以取一個小範圍的數據,例如最近十周的數據進行一個高斯分布的假設,計算出它的均值和方差,再用這周的數據帶入進去算z value。因為每個z value都會代表一定的出現概率。如果所有的metric都顯示你這次的error相對非常小,那麽有很大概率這周的算法就是有所提升;如果所有的metrix都顯示你這次的error非常大,那麽有很大概率這周的算法變差了;如果不同的metric顯示的結論不一樣,那麽就很可能這周的算法不具有普適性
            她:和我想的一樣
        VO2:3D Geometry,問了epipolar和homography,麵試官還誇我描述的非常清楚
        VO3:這輪麵試官跟我的經曆好像,再加入蘋果前也是在圖森同一個組實習,寒暄了一下原來圖森組裏的認識的人。LC題,不需要寫代碼,純講思路,需要講的非常細致。一個2D matrix(mxn矩陣)裏麵有兩個island,計算兩個island的最短距離,很快的答完
            先bfs搜索兩個island,並記錄下兩個island所占有的所有位置,順便記錄一下island1的邊緣
            再次進行bfs,隻不過這次的根節點有很多個,由island1的邊緣組成,然後因為需要記錄bfs的level,所以在queue裏麵存放的需要是一個既有位置信息也有level信息的結構體,這樣的話遍曆到island2,終止遍曆的時候可以馬上知道level,即距離
        VO4:電麵的manager麵,出了一道設計API的題目,設計一個類,這個類表示自動販售機,你有固定的一些商品,然後也有相應的數量和價格,你需要實現功能,顧客購買一個東西並給一定的錢,這錢可能不夠,也可能找不開。我先給了一個非常粗糙的版本等著她followup,沒想到她沒問多少就直接結束了,問了一下我最早什麽時候可以開始。(這裏找錢那裏其實可以用greedy,現代的錢的麵額其實是計算好的,可以直接從大到小開始找零
        VO5:一個印度人,從頭到尾像個播報問題的機器。先是問了我的簡曆,然後是slam的domain knowledge,大致讓我把ORB-SLAM的一些流程講了一遍,從前端視覺裏程計到後端優化和回環。問了一個奇怪的問題是“如何debug”,這個問題有點太寬泛了,反正大致就是查backlog,back track,然後看這個exception是不是應該由你raise,然後做相應的處理。
        VO6:先問了問針孔相機模型,然後還有一些雜七雜八的3D geometry。最後是一個open question:跟VO1有點像,如何去評估算法團隊的每周的算法好壞。這裏聊了好多,關於metric的定義,以及如何用這些metric去評估.


結果:在催了三周之後,收到hr的消息appreciate your patience. I did hear from the team, and they are proceeding with another candidate at this time. The team did enjoy meeting with you, but they only have one opening at this time. Would you like to stay in touch, in case another opening becomes available?。還是沒能競爭過其他人,Apple是我麵的最好的一家公司,好幾輪都是提早結束甚至麵試官直接誇perfect,今天收到的消息,說實話有點絕望

3.13 Heavy Iron Studios

一家LA的遊戲公司,年頭倒是蠻久了。在學校的career fair上投遞的簡曆,崗位是associate game developer,就是寫c/c++的

    take home challenge:做之前給我咋咋唬唬說他們c++要求很高,我還又去複習了一遍才來做,結果發現就是很基礎的virtual function之類的,然後是一些c的字符串操作的題目
    Virtual Onsite:
        VO1:c++八股文
            講一講virtual function
            override的作用:我一般不怎麽寫,因為隻要base裏麵function帶有virtual就會算做虛函數,自然而然就會覆蓋繼承。但實際上更多是為了保證你這個函數是被重寫的,有時候你以為這個函數重寫了,實際上可能由於參數有點不一樣並沒有重寫。有點類似於const的作用,建議能寫就寫
            有時候內存明明沒到極限,但是就是new不出新的內存是為什麽?這是因為內存申請是碎片化的,兩個valid內存之間的gap實際上是不確定的,是碎片化的,可能你就想要一個1KB的內存,但是就是找不出連續的一塊1KB的內存。
            有什麽辦法可以解決或者緩解碎片化內存的問題呢?這裏我借用了stl裏麵的allocator的方式,對於大塊的內存申請,隨便申請即可,但是對於小塊的內存申請,我自己維護一個free list,裏麵是片段化的,你隻能以一個最小單位去申請內存,即align到最小單位的倍數申請。
        VO2:lc題目,但是需要用c實現,而且不能借助stl,都寫完了,c的字符串操作確實有點麻煩。具體問題忘記了,一個是link list一個是字符串操作,帶點耐心寫c即可
        VO3 :game design。麵試官說了一個類似於飛機大戰的遊戲,讓我設計一個函數如何去更新這個game的狀態,角色分別有飛機,子彈,隕石。我根據他說的要求大致列了一些需要更新和注意的地方。主要是邏輯層麵上的討論。然後就是一個令人摸不著頭腦的問題了。他問他用我這個函數,最後出來屏幕一片空白。我猜了猜他什麽意思,先是問是不是你沒有初始化,他說你不需要管初始化的事情,你就focus你這個狀態更新函數。最後被我猜出來了,是因為沒有visualization....我想著不應該是先game->updateStatus()再game->visualize()這樣嗎,這問題問著有什麽意義...誰知道你也把可視化也放在狀態更新裏麵。這個之後讓具體設計一些用什麽樣的class來表示隕石,我最開始的想法是一個用多邊形近似隕石,用一個中心點和一組邊緣points來表示,這樣的每次更新位置(隕石有自己的線速度和角速度)都可以直接apply到points上
        VO4:3d的點線麵的問題。
            給你一個3D平麵,給定一個入射向量,求出出射向量。這裏反應了一會兒,但實際上是個非常簡單的問題,直接入射向量加上兩倍的3D平麵的法向量即可,但是由於自己把問題複雜了一些,折騰了一會兒才發現是這麽簡單的形式
            3D空間中有兩個物體,一個是槍(具體是一個點,加上槍的指向向量),一個光盤(具體是一個2D的圓,有半徑,圓心和法向量)。問這把槍能不能射中這個光盤。我的思路是先求出槍的那根線和光盤所在平麵的交點,然後再算這個交點和圓心的距離。我列出了所有的方程,一步一步推出最後的求解。似乎麵試官想要更簡約的表達形式,但也沒有製止我的推導,反正一股很不想要我的感覺(orz
        VO5:behavior,問了一大堆關於遊戲的東西,應該是hiring manager或者hr


結果:ghost了一周,說是還在看其他candidate的麵試結果,又是其他candidates,根據前麵的標準,肯定比不上Apple的麵試,我大概率又被替代

補充內容 (2023-04-18 05:50 +08:00):
最後的那家遊戲公司也拒了,不同領域強塞確實不太行

所有跟帖: 

她應該是麵試前簽了Non-disclosure agreement的,在網上把麵試題這麽寫出來是不對的 -風景線2- 給 風景線2 發送悄悄話 (0 bytes) () 04/18/2023 postreply 07:29:16

誰麵試還簽NDA? -追求平凡- 給 追求平凡 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:00:01

不少麵試都有啊,你沒見過而已 -米奇的廚房- 給 米奇的廚房 發送悄悄話 米奇的廚房 的博客首頁 (0 bytes) () 04/18/2023 postreply 08:25:50

不懂為什麽把這些麵試細節寫出來。 -不常冒泡- 給 不常冒泡 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:19:05

可以掙積分。也是這個網站存在的根本。 -yunick- 給 yunick 發送悄悄話 (0 bytes) () 04/18/2023 postreply 10:36:48

American first -phx007- 給 phx007 發送悄悄話 (0 bytes) () 04/18/2023 postreply 07:44:00

有麵試拿不到是她自己的問題。 -284321- 給 284321 發送悄悄話 (0 bytes) () 04/18/2023 postreply 07:45:39

小留不容易。 -追求平凡- 給 追求平凡 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:01:41

女孩應該比男孩在IT界更容易找到工作。她可能實在是太差了。 -284321- 給 284321 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:26:26

小留要身份不一樣 -Amita- 給 Amita 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:00:55

仔細看完,感覺她的背景,如果是abc肯定有不止一個offer -Amita- 給 Amita 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:34:33

她應該很強了,主要是身份問題,另外她可能隻著眼於大公司。 -icando2- 給 icando2 發送悄悄話 (0 bytes) () 04/18/2023 postreply 08:38:04

所以,風口很重要,現在風向相反 -tibuko- 給 tibuko 發送悄悄話 tibuko 的博客首頁 (0 bytes) () 04/18/2023 postreply 09:19:46

請您先登陸,再發跟帖!