软件工程师今年就业这么难?不应该呀。这个将应届毕业的女小留,面试13家公司,最终全悲剧的详细历程

来源: gegenion 2023-04-18 07:04:40 [] [旧帖] [给我悄悄话] 本文已被阅读: 次 (38432 bytes)

这样的小留经历确实不容易,尤其是目前的大环境下。这个女小留的主动,顽强和毅力,估计一半的小中们赶不上。

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):
最后的那家游戏公司也拒了,不同领域强塞确实不太行

所有跟帖: 

自身不强吧 -凊荷- 给 凊荷 发送悄悄话 凊荷 的博客首页 (0 bytes) () 04/18/2023 postreply 07:16:47

她应该是面试前签了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

小留有种地方很不懂事。 -LVHawaii- 给 LVHawaii 发送悄悄话 LVHawaii 的博客首页 (0 bytes) () 04/18/2023 postreply 08:01:18

不懂为什么把这些面试细节写出来。 -不常冒泡- 给 不常冒泡 发送悄悄话 (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

也没什么容易不容易的,现在很多美国年轻人都被layoff了, -LVHawaii- 给 LVHawaii 发送悄悄话 LVHawaii 的博客首页 (78 bytes) () 04/18/2023 postreply 08:06:19

女孩应该比男孩在IT界更容易找到工作。她可能实在是太差了。 -284321- 给 284321 发送悄悄话 (0 bytes) () 04/18/2023 postreply 08:26:26

21年秋入学,23年秋毕业,那是念硕士。硕士班很多很水的。 -LVHawaii- 给 LVHawaii 发送悄悄话 LVHawaii 的博客首页 (0 bytes) () 04/18/2023 postreply 08:30:45

小留要身份不一样 -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

请您先登陆,再发跟帖!

发现Adblock插件

如要继续浏览
请支持本站 请务必在本站关闭/移除任何Adblock

关闭Adblock后 请点击

请参考如何关闭Adblock/Adblock plus

安装Adblock plus用户请点击浏览器图标
选择“Disable on www.wenxuecity.com”

安装Adblock用户请点击图标
选择“don't run on pages on this domain”