蔚来NIO前端日常实习一二面

一、前言

实际上在投这家公司之前,我对于电动车或者是车这一块实在是没有了解过,也没有兴趣去了解,以至于在后面反问的阶段他问我关于电动车的看法我都支支吾吾讲不出多少。

不过一面面试官还是非常好非常好的,有开摄像头,整个人的语气听起来就是一个很和蔼的大哥哥(点名批评古茗面试官),以至于全程都是跟聊天一样,氛围很轻松,因此发挥的也比较好。

二面面试官更多是比较严肃的提出一些对于项目、博客之类的一些问题,以及分享一些经验,人也是比较好的。

HR面基本都是问一些关于我自己个人的信息,以及询问对于蔚来这家车企的了解等等。偏向纯聊天,在这里暂且不记录了。

目前蔚来NIO已经OC,准备收拾行李出发去上海了嘿嘿

二、题目列表

一面

  1. 自我介绍+项目介绍,在项目方面主要和我探讨了 WST-Render 这个我在目前公司里面实现的一款内部用的 Markdown 编辑器,详细介绍了从 code 转换为 DOM 的过程以及主要由我负责的 同步滚动 功能的实现(单这一个功能就讲了20min)。

    另外这个面试官提了一个非常刁钻的问题:既然你目前的渲染组件都是自己通过现成的 Markdown 语法去进行匹配编写的,那么我如果想要在目前的这个渲染区域直接嵌入一个我编写好的一个 Vue 组件只做预览使用,这样子的话又要怎么根据自定义语法去进行组件的引入呢?

    一开始我还以为是类似于 qiankun 这样的微前端的玩意,结果面试官提示说 直接在进行 AST 编译转换的过程中把对应的现成组件进行引入即可 。后来问了一下,原来他们内部就有实现过这样一款类似的工具,真是小巫见大巫了。

    可能是我的项目比较合面试官的胃口,聊项目就聊了40min左右。

  2. 算法题:典中典之动态规划之典中典354. 俄罗斯套娃信封问题,想看题目的同学直接点力扣链接,就是100%纯粹的原题。

    我当时没写出来,只是和面试官探讨了一下相关的解法,因为当时还没刷到这个题,面完之后就立马被我刷到了。

    给一下 TS 版本的解法, 实际上就是数据预处理+求最长公共子序列问题

    function maxEnvelopes(envelopes: number[][]): number {
      // 数据预处理:按宽度升序排序,如果宽度一样,则按高度降序排序
      envelopes.sort((a, b) => (a[0] === b[0] ? b[1] - a[1] : a[0] - b[0]));
    
      // 着眼于高度,求最长递增子序列即可
      const heights = envelopes.map((item) => item[1]);
    
      const lengthOfLIS = (nums: number[]) => {
        const dp = new Array(nums.length).fill(1);
    
        for (let i = 0; i < nums.length; i++) {
          for (let j = 0; j < i; j++) {
            if (nums[j] < nums[i]) {
              dp[i] = Math.max(dp[i], dp[j] + 1);
            }
          }
        }
    
        return Math.max(...dp);
      };
    
      return lengthOfLIS(heights);
    }
    
  3. 算法题:给你一个全是数字的元素个数为n的数组,其中必定有一个数字的个数占比超过 n/2 向上取整。找出这个数字总共可以用多少种方法?

    1. 摩尔投票算法(Moore's Voting Algorithm): 这是一种高效的线性时间复杂度算法。它的基本思想是维护一个候选人和一个计数器,遍历数组时,如果当前元素与候选人相同,则计数器加一,否则减一。如果计数器变为零,则更换候选人为当前元素。最终剩下的候选人就是大于 n/2 的数字。
    function findMajorityElement(nums: number[]): number {
        let candidate = 0;
        let count = 0;
        
        for (let num of nums) {
            if (count === 0) {
                candidate = num;
                count++;
            } else if (num === candidate) {
                count++;
            } else {
                count--;
            }
        }
        
        return candidate;
    }
    
    1. 排序: 将数组排序,然后直接取中间位置的元素即可。由于题目规定一定存在大于 n/2 的数字,所以中间位置的元素一定是所求。
    function findMajorityElement(nums: number[]): number {
        nums.sort((a, b) => a - b);
        return nums[Math.floor(nums.length / 2)];
    }
    
    1. 哈希表: 使用哈希表统计每个数字的出现次数,然后找出出现次数大于 n/2 的数字。
    function findMajorityElement(nums: number[]): number {
        const freqMap: Map<number, number> = new Map();
        
        for (let num of nums) {
            freqMap.set(num, (freqMap.get(num) || 0) + 1);
            if (freqMap.get(num) > nums.length / 2) {
                return num;
            }
        }
        
        // In case no majority element found
        return -1;
    }
    

​ 当时答出了后面两种方法,第一种方法没有事前了解过是比较难在面试当中现场想出来的。

二面

二面换了个面试官,语气很明显的没有一面面试官这么好了,说的话都比较凌厉,因此我也基本不笑呵呵了,比较严肃的面对这个面试官。不过出乎意料,基本上是纯聊天,单纯问我项目+学习+自己的项目运营。等我介绍完毕后,居然来一句 “我听过来感觉你的技术实力还是比较过硬的,我就不考你代码题了。” 代码题才是我最最最薄弱的地方啊喂!就这么逃过了一劫。

首先还是自我介绍+聊项目,项目主要聊的是我参与的一个脚手架开源项目Create-Neat,我就介绍了自己在这个项目中担任的角色、实现的功能等。

叽里呱啦的讲完后,面试官居然真的现场打开了我的 github 主页去找我是否有参与这个项目,并且还进去查看了一下我的 contribution ,结果因为分支太多了找不到我负责的那部分,然后就这部分争论了比较久。不过幸好除了这个项目外,面试官又看到了我仓库里面的其他项目,然后就聊到其他部分了。

然后就是聊我的个人博客,以及我在其他平台写的一些技术文章等等,聊的挺久,他也提供了很多写作的经验。看得出来人也是比较好的。

聊完之后,直接跳过八股+代码,进入反问阶段。其他部分没什么好讲的,不过在反问部分居然问了我一句 “你是二次元吗?”

当时两眼一黑,为什么问我这个?结果说 我看你博客很多女孩子,我就觉得你爱好跟我们这挺相似的。

什么时候二次元都成为加分项了!!

最后面试官说,他们这边虽然是做的一些面向他们智能驾驶系统的一些 ToB 项目,但是他们公司内部也有专门针对某个需求特地去研发内部使用的一些纯技术工具,我也是对这方面相对比较感兴趣。并且他们内部也有实现一个内部组件库,几乎用在所有的管理系统当中。

不过对我个人而言,还是想多做一些技术相关的东西。

三、结语

目前蔚来这边已经OC了,也拒掉了其他大厂的一些offer。整体的面试氛围以及收获也是相对比较大的。希望接下来的时间能够在蔚来有所收获吧!

全部评论
** 二次元
2 回复 分享
发布于 05-17 14:43 北京
二次元启动!
1 回复 分享
发布于 05-17 14:20 浙江
搜狐畅游
校招火热招聘中
官网直投
校友佬在哪里投的日常啊
1 回复 分享
发布于 05-17 14:26 浙江
HR面的时候说蔚来转正要5-6个月的实习时间,对日常和暑期区分没那么大,看组有无HC的
1 回复 分享
发布于 05-19 19:50 安徽
请问投递后几天联系面试的?
1 回复 分享
发布于 05-22 11:02 广东
这下二次元真winwin了
1 回复 分享
发布于 05-31 23:35 上海
请问一面之后多久约的二面呀
点赞 回复 分享
发布于 05-30 01:13 重庆
佬已经去实习了吗?可以问问实习感受吗
点赞 回复 分享
发布于 06-19 17:53 湖北
想问问时间线!
点赞 回复 分享
发布于 07-19 14:17 陕西
二面过后多久约的hr面呀
点赞 回复 分享
发布于 07-22 16:15 上海

相关推荐

总共三个阶段,项目拷打/八股/代码,差不多70m。面试官最后直摇头,有缘再见想问下各位牛油都是怎么回答项目亮点的?先进行自我介绍,宿舍大神给我说,我面试的时候太着急,自我介绍说的太少,还得丰富一下,顺便把简历上的项目介绍一下。boss1阶段,项目拷打。1/什么时候参与到项目中的,你的项目亮点是什么?这块内容想问一下各位牛油都是怎么回答的,我回答得极差,面试官说是我回答得不够细节,偏向于数据处理方面。因为我回答的更多是js处理业务逻辑,并不是很理解hr的意思,还请各位大佬指点。2/项目中使用的组件库有哪些。我并不是很理解这块该怎么回答,因为项目中大多数使用的是组件,并没有二次封装,难道需要多准备一些二次封装的内容?、3/业务中的优化,简单讲了一下业务中对常用数据做了一个store仓库,减少请求数量,以及一些防抖节流。这个地方还能补充,需要好好看一下。boss2阶段,八股。1/闭包原理,使用场景。回答不好,面试官想听的我没说出来。2/webpack打包使用。3/事件循环原理。4/CDN原理。boss3阶段,编程。1/settimeout,写出运行结果。2/方法调用,考察上下文。3/设计模式,手写一个class,实现订阅,销毁,触发。没写出来,给面试官说了思想。4/js实现一个链表,初始化/增/删,写出来了,但是细节没处理好,有bug。总结,人生中第一次二面,在舍友的见证下完成了。感谢蔚来能给我二面的机会,认识到自己的不足,其实挺受打击的,充分见到了自己有多菜。首先项目需要好好完善一下了,找找项目亮点,其次js场景题需要完善,越面越强,继续加油吧,唉
查看11道真题和解析
点赞 评论 收藏
分享
7 12 评论
分享
牛客网
牛客企业服务