关于这次挪坑的总结

回头想想,从前年 5 月份入职以来,在大疆的工作已经有近两年的时间,这段时间的总结在 2019 年总结 中已经讲过,就不多讲了。在大疆的工作其实并没有什么问题,只是因为组内人员配置比较特殊,一直以来都只有我一个前端,在工作上得不到反馈,不管是正反馈还是负反馈,这样也就很难有所进步。考虑到个人未来的发展,决定换一份工作,也开始了最近的面试之旅。到今天所有的面试流程都走完了,稍作一下回顾总结。

先说说结果吧,面试的公司/部门有以下几个(base都是深圳):

  • 字节跳动 - 今日头条主端
  • 蚂蚁金服 - 支付宝 H5
  • 腾讯 - PCG 直播中台
  • 阿里 - 国际化中台
  • shopee

最后拿到了字节跳动、蚂蚁金服 和 shopee 三个 offer,腾讯和阿里因为某些原因碰壁,后面的面经里会提到。offer 的薪资因为是保密内容,就不透露具体的数字了,薪资总包情况:

字节跳动 > shopee > 蚂蚁金服

注:如果算时薪的话,shopee 第一,毕竟 shopee 不加班,另外两个出了名的加班多 -。-

权衡各种因素后,最终选择了字节跳动。另外,祝愿老东家大疆越来越好~

现在,从各个角度来说说这几家公司面试下来,我的一些看法和总结吧。想看面经的可以直接跳到这:面经

面试体验

面试体验其实包含很多各方面,比如面试安排、面试过程、面试质量等等,先来说说面试安排吧

面试安排

这一点其实大部分公司都做的不错(除了阿里系),我个人其实对阿里比较向往,也很喜欢阿里,毕竟在前端领域,阿里是国内当之无愧的大哥。但不得不说,在面试安排这一 part ,甚至说面试体验这一大块来说,阿里做的明显不如其他公司。

先说结论:

字节跳动 = shopee > 腾讯 > 蚂蚁金服 > 阿里

这几家公司的面试基本都到了最后一轮(不含HR面),字节跳动和 shopee 都是通过牛客网进行视频面试,面试时间都会提前安排,有变动会提前通知。

而阿里和蚂蚁金服几乎每次面试都是突击,突然一个电话过来就要开始面试,并且大部分是在晚上八点之后,可能是阿里的面试文化吧,但是这点从面试者的角度来说体验确实不佳。另外,阿里自己做的面试系统说实话挺一般的(界面简陋、功能不全),蛮影响公司形象的,强烈建议更新一下,没人力投入直接用牛客网也是个不错的选择啊。

腾讯的话相对阿里系稍微好一些,突击面试只有一次,大部分是正常的面试流程。

面试过程

字节跳动 = shopee > 腾讯 > 蚂蚁金服 = 阿里

阿里在这一块依旧体验不佳 -。-

业务繁忙可以理解,但是至少应该把时间安排好,而不是占用面试者的时间。

印象最深的一次,面试官布置了两道代码题,我写完之后发现面试官不见了,而且阿里的伯乐系统发出的消息完全没有回应。等了二十分钟后让内推的朋友找到了对方,回应说是临时被拉去参加一个会议了(由此可见,面试系统确实有点垃圾,面试官都联系不上)。

腾讯面试过程没有太多问题,扣分的主要原因是慢,太慢了。腾讯是最早开始面试的公司,但是流程却是最晚结束的,并且面试结果比面试官口头承诺的答复时间要晚了几天。

面试质量

面试质量的话,这几家公司都还不错,面试官水平也挺高,毕竟都是深圳排名前几的互联网公司,这点没什么可说的。

不过还是可以吐槽一句:

  • 腾讯技术三面有道智力题面试官说错了题干信息,算了半天没算出来(也可能是其他问题没答好吧,太菜了)

面经

面经其实只是做一个简单的记录,并没有题目的答案,因为很多题目都要根据自身的实际情况回答,而基础的客观技术问题,有不懂的还是自己去寻找答案会更好,一个提炼出来的答案能给你吸收的养分其实并不多。

字节跳动 - 今日头条(已拿offer,职级保密)

一面

  • 自我介绍
  • mysql 和 mongoDB 的底层存储是什么原理,有什么区别?
    • B+Tree 有什么特点
  • redis 内部常用的数据结构有哪几种?
  • 一个 200 状态的请求,是否一定会经过服务器?
    • 浏览器缓存分为哪几种?具体讲一讲
  • 状态机的三个组成部分是什么?
  • service worker可以做什么?局限或者说缺点是什么?
  • 说说你对 HTTPS 的理解

    • HTTPS 密钥的交换过程
    • HTTPS 绝对安全吗?HTTPS欺骗是怎么实现的?
  • react 是怎么将数据变更反应到视图上的

  • vue是怎么解析模板的?
  • 三大框架从数据到视图的原理

    • 谈谈你对虚拟Dom的理解
    • angular的脏检查和vue的双向数据绑定有什么区别?
  • 聊一聊你的工作经历

  • 你提到你有负责 sdk 开发,讲一讲你开发过的 SDK
    • cloudbus-event
      • 事件发布订阅怎么实现的?
    • terra-uploader
      • 大文件上传怎么实现?有什么注意点?
        • 分片上传怎么实现?
        • 断点续传怎么实现?
    • app-info-parser
      • 安装包的解析原理是什么?
  • 你有什么想问我的吗

二面

  • 自我介绍

  • 在线编程:实现 bind 函数

  • 在线编程:实现 call,apply 函数

  • 在线编程:实现一个判断变量类型的函数

  • 在线编程:a~z 有 26个字母,按照 1~26 编码,现在给定一个数字字符串,输出所有可能的解码结果,如:输入 1234,输出 ['axd', 'abcd', 'lcd']

  • 类数组怎么转换为数组?

  • 箭头函数和普通函数有什么区别?

  • // 以下代码执行会输出什么
    const  myfun = () => {
        const args = arguments;
        if (true) {
            console.log(args.join());
        }
    }
    myfun(1, 2);
    
  • 实现一个 div 相对视口居中

  • marigin 塌陷是什么

  • vue3.0 和 vue2.x 的有什么区别

  • 为什么会做 app-info-parser 这个开源项目

  • 你有什么想问我的吗

三面

  • 自我介绍
  • HTTP2 与 HTTP 的区别
  • CDN 原理
  • Vue 的 Dom diff 的实现
    • 完全比较两个 Dom 树和只比较同层节点的算法复杂度各是多少
    • Dom diff 具体流程是怎么样的,内部细节能说一下么
  • 说说你对 Node 运维的了解
  • 假如现在,我说有一个页面打开有点慢,交给你来负责优化,你的思路和做法是什么
    • 前端优化的指标有哪些,通过什么手段获取?
  • 分别讲讲 restful 和 graphQL 及其优缺点
  • 你现在有面其他公司吗?手上有没有什么offer?
  • 如果阿里腾讯都过的话,这三家你会基于什么去考虑?
  • 你有什么想问我的吗

HR面

hr 面没什么好说的,就是沟通一下跳槽原因、薪资期望等等

总结

字节跳动很重视编程能力,写代码的题目比较多,也会有算法题考核,所以想要到字节跳动的同学建议多训练一下这一类的编程题。给我出的题目难度其实不高,唯一的一道算法题是简单的一道动态规划(你别看我,一般的动归真的不难啊!),其他的编程题都是很基础的内容,没有什么难度。

字节跳动这一次面试下来,面试体验还是很不错的,面试官和 HR 也很有诚意,非常坦诚的罗列字节的情况,包括优缺点,拉人也很真诚,这一点加了很多分,最终权衡公司技术水平、薪酬情况等因素,pick 了字节跳动。

有意向加入字节跳动的朋友们,欢迎砸简历或者邮件与我联系!!邮箱:mail@quincychen.cn

内推成功奖金五五分成!!(肮脏但是诱人的 py 交易

shopee深圳(已拿offer,高级)

一面

  • 自我介绍

  • 前端页面优化的手段有哪些

  • 讲一讲你对 js 模块化的了解

    • node 中的依赖和浏览器的有什么区别?
  • tree-shaking 是基于什么实现的?

    • 静态语法分析是怎样的一个过程?
    • tree-shaking 一开始是哪个工具提出实现的呢?
  • CDN 的缓存策略是什么?

  • CDN 常见的状态码是哪几个?

  • vue3 的 composition API 有什么优点?

    • 和 react hook 的区别在哪里?
  • Vue 的生命周期具体讲一下

    • 数据绑定是在什么时候?
    • render 和 模板渲染呢?
  • 讲讲 Vue 的 nextTick 方法

  • webpack 的分包了解吗?

  • 你们项目是用 webpack 还是 rollup?为什么?

  • 讲一讲以下代码的执行过程

    firstName = "aaa";
    
    var namedPerson = Person('xxx');
    // namedPerson.firstName ===
    // namedPerson.lastName ===
    namedPerson.setName('yyy', true);
    
    function whatsMyName() {
      return `${this.firstName} ${this.lastName}`;
    }
    
    // 添加代码,使 Person 函数不使用 new 调用报错
    function Person(name) {
        this.firstName = name;
    }
    
    Person.prototype.setName = (lastName, useAnotherFirstName) => {
      this.lastName = lastName;
    
      if (useAnotherFirstName) {
        var tmp;
        tmp = this.firstName;
        this.firstName = firstName;
        firstName = tmp;
      }
    
      console.log(tmp); // tmp ===
    }
    
    Person.prototype.whatsMyName = whatsMyName;
    
  • 实现一个函数,将对象的 keys 值转换为驼峰的形式

    function camelcase () {}
    
    console.log(camelcase({
      a_b: true
    })); // { aB: true }
    
    console.log(camelcase({
      id: 'abc',
      nested_obj: {
        f_f: 123
      },
      nested_arr: [1, 2],
      nested_arr_and_obj: [
        {
          a_a: 'aa',
          b_b: {
            c_c: 'cc'
          }
        },
        {
          d_d: false
        }
      ]
      }
    )); // { id: 'abc', nestedObj: { fF: 123 }, nestedArr: [1, 2], nestedArrAndObj: [ { aA: 'aa', bB: { cC: 'cc' } }, dD: false ] }
    
    console.log(camelcase([
      {
        a_a: 'aa'
      },
      {
        b_b: 'bb'
      }
    ])); // [ { aA: 'aa' }, { bB: 'bb' } ]
    
  • 你有什么要问我的吗

二面

有不少题目忘记记录了,囧

  • 自我介绍
  • 讲讲 JS 的模块化
    • node 的模块化和浏览器的模块化有什么区别?
    • es6 为什么要实现 export/import ,而不是照着 Node 的模块化语法实现
  • 你 PC 端经验比较多还是移动端经验比较多?
    • 讲讲 PC 端和移动端性能优化有什么区别
    • 针对移动端有什么特别的性能优化吗
      • 除了技术上的优化,有没有从交互上的一些优化做法
  • 我看你开发了两个开源项目,能分别给我讲讲吗
    • app-info-parser 的实现原理是什么,解析流程具体是怎么样的
    • 你这个动态表单组件和业界里已有的有什么区别
  • 你觉得你目前为止做的比较好的项目是哪些?为什么?
  • 你对你未来的职业规划是怎么样的,希望转管理还是深入技术
  • 你为什么要跳槽
  • 我们目前的业务有 blabla,你对哪个比较感兴趣
  • 你有什么要问我的吗

HR面

hr 面也是沟通一下跳槽原因、薪资期望、对团队业务的了解等等

总结

据内推人反馈,面试官对我很满意,其实这次面试下来,我对 shopee 的印象也很好。在这里特别感谢 shopee 对我的认可和后面争取意向时付出的努力,很可惜这次最终没有加入 shopee,未来有机会的话一定会考虑 shopee。向有求职意向的童鞋强推!!需要的话可以找我,我帮你找人内推~

蚂蚁金服 - 支付宝(已拿offer,定级P6)

一面

  • 自我介绍
  • 浏览器输入url到展示页面的过程
  • 负载均衡的原理
  • 相对于PC端,移动端的性能优化有区别?
  • 在以往的项目中,你做过哪些优化?
  • 你对移动端 native 有没有什么了解
  • 说说你对 JSBridge 的了解
  • Vue2 和 Vue3 的区别在哪里
  • vuex 有什么缺点
  • 三大框架的选型你是怎么做的
  • 做负责人的时候,团队有多少人
  • 在管理工作的时候遇到过什么困难?
  • 在创业公司的时候开发和管理的比例是多少
  • 作为负责人需要承担比较困难的部分,你负责的是哪一块复杂的内容?或者说处理过什么难题?
  • 你写的这个vue动态表单组件和业界的其他动态表单组件有什么区别?
  • 你平常是怎么接触或者学习新知识的
  • 最近有在学什么新的东西吗
  • 你有什么问题要问我的吗

二面

  • 自我介绍
  • 浏览器的渲染过程
    • 重绘和重排讲一下
    • transform 会引起重排吗?
    • transform 有什么缺点?
  • 一个移动端的 H5 SPA 页面,如何进行页面优化
    • 有了解过 lazada 页面优化是怎么做的吗
    • 除去这些基本的优化手段,还有什么其他交互上的方法吗
  • 讲一下你了解的设计模式
    • 发布订阅模式有什么缺点?
    • 单例模式有什么缺点?
  • 你刚刚提到你给开源框架提过 PR,具体聊一聊
    • 给 Vue 提的一个代码规范有关的 PR:你是怎么发现这个不规范的?
    • 关于组件解析缓存的 PR
    • 还有其他项目的 PR 吗?
  • 在大疆近两年的时间里,你觉得做的最好或者比较难的项目是哪个?
  • 你平时通过什么接触前端的新知识?
  • 你最近看到的一篇你觉得比较有收获的文章?收获是什么?
  • 有什么想问我的吗?

三面

  • 转换字符串string为 驼峰写法

    camelCase('Foo Bar') // => 'fooBar'
    camelCase('--foo-bar--') // => 'fooBar'
    camelCase('FOO_BAR') // => 'fooBar'
    
  • 用 ts 实现 compare 方法,比较两个semver版本号大小,版本号格式限定为只有主版本、次版本、修改版本,如:1.0.0

  • 实现简单的事件模型,包含 on,emit,off,once 方法

  • 发布订阅模式跟刚刚你实现的事件模型有什么关系?

  • 讲一讲你开发的这个 vue 动态表单组件

  • app-info-parser 的原理可以给我讲一下吗

四面

  • 自我介绍
  • 看你简历中好像主要是对项目的维护,有什么是你自己完成的项目吗?
    • 这么多系统的维护以及新系统的开发,怎么平衡?
  • 组内只有你一个前端,平常的项目流程中会有人给你 review 吗?或者说你觉得这样会有什么问题?
    • 那你是怎么解决这些问题的?
  • 组内只有你一个前端,那公司内部前端有什么横向的一些交流吗?
    • 有一些虚拟组,那你在虚拟组主要做的是什么?以及你已经做到了什么?
  • 你对自己未来的职业规划是怎么样的?
  • 你平常都是怎么完善自己在技术方面的积累的?
    • 那你最近学到的一些东西是什么?
    • 对于技术,你希望往什么方向走?

HR 面

大部分是一些常规的问题,有些不同的是,蚂蚁金服的 HR 比较强势,会压你的薪资,过程中会稍微有些不自在,另外各种暗示和强调阿里的加班强度 -。-

对于蚂蚁金服的加班强度,我有所耳闻,自己对加班接受度也比较高,但是你这一直暗示和强调,很容易让人打退堂鼓啊!

总结

蚂蚁金服算是比较后面的面试流程,面试也越来越从容,基本上没有答不上来的,面试官的反馈也不错,在我准备拒绝offer后还很积极的打了两次电话来争取,很感谢面试官的认可,有机会还是要去阿里江湖走一遭的~

腾讯 - PCG直播中台

面试过程中有一些意外(面试官题干信息给错了),再加上自己发挥的也一般,同时有几个人过了终面,最后被筛掉了(还是要好好努力啊)

一面

  • node可以实现多进程吗?
    • 怎么实现
  • pm2原理是怎么样的?pm2主从进程间如何通信?
  • node读取文件时是多进程还是多线程?
  • 普通索引和组合索引的区别?
    • 应用场景,什么时候用普通索引,什么时候用组合索引?
  • 你知道索引是怎么存储的吗?
    • B+Tree 的特点是什么
    • 哈希索引和 B+Tree 索引对应的优缺点
  • 兄弟组件间如何通信
    • element 的 broadcast 广播机制是如何实现的
  • 聊一下服务网关这个项目
    • 你是如何提高接口响应速度的?
    • 过多的 join 语句如何优化?
    • 服务网关的事件发布订阅是怎么实现的?
      • 没有 websocket 的情况下怎么实现
      • 轮巡效率低、耗资源,那还有什么其他方法实现?
      • 你了解过 SSE(Server-Sent Events) 吗
  • 能跟我讲一下你这两个开源项目吗?

    • app-info-parser 的实现原理?
      • 安装包的解析是异步还是同步?
      • 解析是异步的还是同步的?
    • vue-dynamic-form-component 的实现原理是?
      • 嵌套数据校验是怎么实现的?
      • 自定义组件是怎么实现的?
  • 你有什么要问我的吗

二面

  • 实现二叉树先序遍历
  • 自行实现一个 Promise
  • 实现一个页面,页面上有一个元素可以被鼠标拖拽移动到页面上的某个位置
  • 聊聊你的开源项目

三面

  • 用户请求资源的过程中发生了什么?尽可能详细

  • 有一个 30kb 的文件,用户 A 用 2M 的带宽从深圳请求广州的服务器获取,另一个用户 B 用 100M 的带宽从深圳请求黑龙江的服务器获取,谁先加载完文件?为什么?

    • 如果丢包了,会发生什么?
    • 负载均衡的原理是什么?
  • 用户反馈有个系统打不开了,你怎么排查这个问题?

  • 你有一个天平,140g盐、7g 和 2g 的砝码各一个,只允许使用天平 3 次,把盐分成 90g 和 50g 两堆(第一次不允许使用天平将盐对半分为 70g)

    这里被面试官坑了,他给的题干信息是 5g 和 2g 的砝码各一个,我算了半天都只能最少用 4 次。当时有点脑袋短路,也不知道问一下面试官怎么解,问了的话面试官应该能发现题目给错了

  • 有一个烤肉机,最多同时煎两片肉,肉的一面至少要煎 10 分钟才能煎熟,你有三片肉,请问最短多长时间把它们所有面煎熟?

  • 你现在的薪资是多少?

  • 你为什么要离职?

  • 你有什么要问我的?

  • 你什么时候可以离职?

    当时听到这个问题还以为自己稳了,哈哈哈哈,没想到还有最后的筛选环节,竞争是真的大

总结

腾讯是最早投递简历的,面试流程时间跨度也最大,这几轮面试总的来说发挥比较一般,也导致最后筛选没有通过,也是有点可惜吧。

阿里 - 国际化中台

一面

  • 自我介绍
  • 主要使用的技术栈是什么
  • 相对于PC端,移动端的性能优化有哪些
  • 你对 hybrid 架构有了解吗
  • JS Bridge 的原理是什么
  • express 和 koa 的区别有哪些
    • express 和 koa 的中间件模式有什么区别
  • 你们是怎么选择 node 框架的,依据是什么
  • Vue的响应式原理
  • Diff 算法时间效率为什么是 O(n), 是怎么实现的
  • Vue 和 React 在设计上有什么区别
  • Vue中是怎么管理状态的?
    • vuex储存到浏览器存储和不存储两者有什么优缺点?
  • 组里只有一个前端时怎么保证效率
    • 安排前端任务给后端写,那有些后端不想写前端的时候,你怎么做
  • 你在大疆主要负责的是什么
    • Node项目有哪些,技术栈如何
  • 对于前端国际化,会存在一些什么样的问题?解决方案是什么?
  • 前端安全问题你了解多少,说说你知道的安全问题以及防范措施
  • 跨域解决方案有哪些
  • 如何保证 Node 服务的可用性?
  • 负载均衡是怎么实现的?
    • 一台服务器作为负载均衡起点,那这台服务器压力不会很大吗?
  • 如何保证进程的稳定性?
  • 因为我们内部用的都是 react,所以想问问看你对 react 的熟悉情况
  • 你有什么问题要问我的吗

二面

  • 自我介绍
  • 你现在在大疆的工作内容是什么
    • 一个人负责将近20个系统,有什么诀窍或者技巧吗
    • 一个人对接这么多后端,你是怎么做到的
    • 对你而言,这种极端的一对多情况,有什么挑战或者说你有什么措施来正常完成工作
  • 能跟我讲讲你这两个开源项目吗
    • app-info-parser 的原理是什么?解决了什么问题?
    • vue-dynamic-form-component 的原理呢?为什么要做这个东西?
      • 表单的校验是怎么做的?
      • 表单间的联动怎么做的?
  • 你为什么要离职
    • 现在在大疆还不到两年,为什么会考虑跳槽呢
  • 你觉得你做得最好的项目是哪一个,为什么
    • 这个项目体现了你的什么核心能力,就是别人不具备或者比别人更突出的能力
  • 你目前是组内只有一个前端,如果到了阿里的大环境,你觉得你能转变得过来吗?
  • 你有什么问题要问我吗

笔试

  • 2个正整数字符串的相加,即‘1’+’19’——>’20’(考虑超长字符串相加)
  • 提取url中search部分参数,www.taobao.com?a=1&b=2
  • 实现es5,es6两种方式,写一个类Person,拥有属性age和name,拥有方法say(something),再写一个类Superman,继承Person,拥有自己的属性power,拥有自己的方法fly(height)

*这里要吐槽一个事情,笔试题目写完后发现面试官不见了。。笔试是在伯乐系统上做的(系统很垃圾),发消息完全没有回应,白白等了将近半个小时,找内推的朋友才联系上面试官,回复说是临时被拉到一个会议去了。。

三面

  • 自我介绍
  • 说说你的工作经历
  • 从 MVC 到 MVVM ,讲讲你的理解
  • 聊一聊你的开源项目
    • app-info-parser 的原理是什么?解决了什么问题?
      • 为什么其他同类工具没能解决这些问题?
    • vue-dynamic-form-component 做的是什么?
      • 动态表单组件有很多,你这个有什么不同?
      • 目前有多少前端内容是由后端负责的?
  • 说说你对 BFF 和 server-less 的了解
  • 你的项目有没有比较复杂的架构?
  • 你现在跳槽其实有点频繁,你怎么看这件事?
  • 你有什么问题要问我的吗

挂在了这一面,面试官还是介意我不到两年就跳槽这事,还加了我微信,说我能力很不错,让我先别跳槽,等半年后再来阿里试试。

我:???

最后

终于写完了,可以发广告了!!

有意向寻找工作的童鞋们,字节跳动 长期招收各种技术岗位,前端、后端、iOS和安卓客户端都有大量坑位,base 北京深圳广州,欢迎骚扰!

邮箱:mail@quincychen.cn

0%