一年半经验前端社招——作业帮(offer call)

前言

在鹅厂也呆了一年多了,业务一般般,而且很忙(晚上10点+,每天不定时随时oncall)。希望能换个平台寻求更好的发展和更高的技术视野,也希望能找到轻松一些的工作,所以出来看机会了。个人选择的原则:满足工作生活平衡、付出收益平衡、业务未来可观三者之一。近来有一批面试,整理完每一篇后,会持续更新《一年半经验前端社招》系列的文章

下面的题目,都会标明每一题的性质,也会给出一些参考思路

  • 描述:对概念、过程的描述,纯理论性问答题为主
  • 举例:说出应用场景,或者是自己团队实践的情况
  • 伪代码:写代码,但不需要跑起来,甚至可以随便写伪代码,主要目的是描述思路
  • 编程:真正的写代码,需要跑起来,有测试用例,要看到效果

往期回顾:

hr面的话,是一些日常、项目回顾(技术细节少说)、职业规划、为什么跑路、为什么选择这边、目前薪资和职级、期望薪资。hr面基本类似,后面会出一个hr面专题

公司面试难度评估:✭✭✩✩✩

1面

  1. 一堆看代码说输出的题【描述】
    就是this、变量提升、闭包、event loop说输出的那些基础题。这些必须秒答出来且答对,基础一定不能有差错
  2. 项目介绍【描述】
  3. cache-loader有什么坑,缓存错误怎么解决【描述】【举例】
    面试官提到,他们做一个可视化编辑页面的系统,对组件使用了cache-loader,开发中有时候出现缓存错误的文件的问题。他说他们遇到了这个问题,暂时没有解决,叫我猜想一下,可能是什么原因导致的。我说应该是开发过程中,修改了被引用模块/引用模块、或者切换git分支,需要自己删除掉node_modules/.cache或者重启dev server。
  4. 编程题,9选3(15min)【编程】
  • 实现bind(送分)
  • 防抖&节流(送分)
  • settimeout实现interval(注意和普通的要无差别体验)
;(() => {
  const list = new Set();
  function myInterval(fn, ms) {
    const ref = {};
    const exec = () => {
      return setTimeout(() => {
        fn.apply(null);
        const timer = exec();
        ref.current = timer;
      }, ms);
    };
    ref.current = exec();
    list.add(ref);
    return ref;
  }

  function myClearInterval(ref) {
    clearTimeout(ref.current);
    list.delete(ref);
  }
  window.myInterval = myInterval;
  window.myClearInterval = myClearInterval;
})()
  • 字符串大小写反转(送分)
  • 节点是不是属于某个节点下(当时我写了一个不带parentid的版本,要自己一层层搜。如果带parentid的,就简单很多了,测试用例你自己写,他们也没有给出)
  • 反转链表(常规题)
  • 合并数组['a', 'b'], [1, 2, 3] => ['a', 1, 'b', 2, 3] (送分)
  • 合并有序数组 [1, 5], [2, 5, 6, 8] => [1, 2, 5, 5, 6, 8] (常规题,而且比合并有序链表还要简单一些)
  • 一堆数字字符串组成最大数是多少[50, 2, 5, 9] => 95502
    function getMaxNumber(arr) {
    return arr.sort((a, b) => `${a}` < `${b}` ? 1 : -1).sort((a, b) => {
    if (`${a}`.startsWith(`${b}`) || `${b}`.startsWith(`${a}`)) {
      return `${a}` > `${b}` ? 1 : -1 // 头部相同,局部反转
    }
    return 0
    }).join('');
    }

都属于比较简单的且经典的,可以当作练练手。毫不夸张的说,实现interval和最后一题稍微能扛多一阵,其他的那些经典的题,如果大家平时了解过的都可以秒杀的。

编程题说9选3,但是作为有追求的人,除了面试过了拿offer,还应该追求高评价,拿到更多的薪水和更高的定级。那么,15分钟内甚至10分钟内,把它们全部写了吧。平均每题不用1分钟,单链表和判断节点祖先花了一点时间写测试用例。我是从最后一题开始倒着做的,面试官看着都呵呵笑了,说继续干,有时间就继续,可以可以!最后口头问了一下如何判断链表有没有环,我说快慢指针。

2面

  1. 说项目,深挖【描述】
  2. react生命周期和diff算法【描述】
    新的、旧的,hook替代的。树、组件、列表三种diff(故意引话题,等他问key)
  3. key的作用【描述】
    复用元素,描述一下有key的列表diff过程(果然问了key)
  4. 内部系统配置页面不写或少写代码的实现思路【描述】【举例】
    新建页面 => 设置配置、db => 新页面onload => 拉配置,根据db的字段和配置渲染表格 => 配置不能满足的使用装饰器劫持实现个性化 => 业务代码&框架代码分离(微前端架构)
  5. 多框架、历史页面怎么解决【举例】
    旧页面iframe、新页面走上面的流程,多框架使用external + 动态引入

后面我问问题的时候,发现他们的基础设施、开发流程有一些可以优化的地方,我说了一些自己的看法,面试官挺开心的样子,说回去看一下

最后

这次社招面试中最简单的一家了,全程很轻松,并且掌握了主动权把控面试节奏。cache-loader有什么坑,缓存错误怎么解决,这个问题我也没遇到过,面试的回答只是根据作用来猜想的,路过的有人知道或者遇到的话可以分享一下。

lhyt个人技术沉淀

#作业帮##社招##面经##前端工程师#
全部评论
数组组成最大值那个,如果是[9,5,2,50], 答案就错了
点赞 回复 分享
发布于 2020-05-08 14:10
哪里的作业帮?地点呢
点赞 回复 分享
发布于 2020-06-04 01:00

相关推荐

不愿透露姓名的神秘牛友
11-26 10:47
作业帮 前端工程师 18k 大专
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 11:18
作业帮 后端 17x15 大专
点赞 评论 收藏
分享
评论
4
29
分享
牛客网
牛客企业服务