奔三路 - 你30岁前的学习路!

奔三路学习网

当前位置: 主页 > 前端面试通 > 笔经面经 >

前端面试题

时间:2018-05-21 14:46来源: 作者:小邱
讲道理,XX的大楼,感觉还不错。来的有点早,在下面找了个奶茶店,一边疯狂喝水,一遍思考人生。然后到点了,就上去了,面试是在8楼,讲道理,还是有点紧张的,毕竟一年没准备过面试了

讲道理,XX的大楼,感觉还不错。来的有点早,在下面找了个奶茶店,一边疯狂喝水,一遍思考人生。然后到点了,就上去了,面试是在8楼,讲道理,还是有点紧张的,毕竟一年没准备过面试了,心里还是很玄的。进去以后,和其他面试的小伙伴分配到一个房间了,过了一会,有人拿了面试题过来,给了隔壁的小伙伴。。。我偷偷瞄了一眼,是 爪哇。过了一会又过来了,拿了两份面试题,一份给了我,一份给了另一个小伙伴,都是前端的。面试题总共三页还是四页,都是基础,拿起笔 pia pia 就写了起来,过了一会就交了,刚交就想起来自己一道题做错了,感觉很难受。。。小插曲:旁边面 爪哇 的小伙伴用手机疯狂百度,笔试过程没人管的,我是老实人,不干这事

一面

面试官感觉人不错,拿着我的面试题和简历到外面去了,我赶紧和他说我一道题做错了,并说了正确答案。面试官表示他还没看面试题,然后过了一遍,不好意思,我好像全做对了。。。刚开始就随便问了问this,严格模式和非严格模式下执行函数的this。

干货,整个过程都是用笔写的

  1. 我提了,说面试题目太简单了(现在想想的确这样说不好),然后面试官就说,那我给你出个不简单的,flatten的实现,我一想,这个我好像写过,拿起笔,啪啪啪就写起来了。过

  2. 问了我知不知道最近网上的快排事件,我说知道,就让我写了,我用的是最常用的3while写法,写到一半他就没让我写了,我写的和书上的一毛一样。。。然后又让我说出归并排序的原理,这个没有让我写了,我就直接说了,就是切成两个数组,巴拉巴拉,具体自己上网查询。过

  3. 知道immer.js吗,Mobx作者弄的一个不可变数据,知道的不多,就随便说了说,然后又让我说明了immutable.js的数据更新原理,和react的tree diff有点像,巴拉巴拉将自己知道说了。过

  4. KOA中间件原理,卧槽,这个我读过源码,还分析过,就是通过compose组合中间件,巴拉巴拉。过

  5. 获取所有文件和文件夹。这个就是个树结构,因为我记不清fs APi的使用了,就问能不能用dom树去代替,面试官说可以,这个我写过。。。巴拉巴拉,面试官说,能不能不用递归,用while+广度+深度还是啥,我靠,我懵了,虽然我知道广度优先,深度优先,但我特么没写过啊,有点紧张,抓着笔思考了会人生,面试官看我这样,就向我解释了下。卒

  6. 面试官说:“那我问你一个哲学的问题,为什么有数据结构这种东西?”哇,这是啥,巴拉巴拉扯了一通,大致就是物以类聚,人以群分,先人积累下来的经验,这些让我们更方便处理数据啥的。尬

  7. 对函数式编程了解多少,对算法了解多少。我函数式懂的不多,函数式编程还是比较难的,什么y组合子,听着就晕。算法就随便说了些,动态规划树啊啥的。面试官问我是怎样学习算法的,我就说自己平时会在知乎看些相关的文章。然后面试官就说想我这样零散的看并不能获得太大提高,应该有组织的去看。关于函数式,他向我推荐了Haskell,说我只需要看看基本就可以了,然后再去看redux就会好很多。懵

  8. 又问了很多,然后问我想了解什么,其实我知道XX的技术栈的,所以就说了些,表示有很大的兴趣。

其他问题就不一一列举了,他还问我看了关于node的什么书籍,我张口差点说了《九浅一深nodejs》。。。我已经记不清楚是谁带的头了

总结:面试官和我说,人的知识结构是T字型的,底下的都是基础知识,只有基础知识弄好才能学习更广的知识,然后说了我基础不太好。。。我一想,完蛋,这下真凉了,我的认知里,基础是最重要的。

二面

一面面试官把我带回去了,让我等一会,过了一会,二面面试官来了,继续和面试官一起出去。二面问的问题就是舒服多了。

  1. 因为我在简历中写了用了react和vue,就问了我两者有什么不同。我就说了更新策略啊,react通过setState手动批量更新,vue是Object.defineProperty去监听属性变化。然后还有什么slot和this.props.children这样。

  2. 关于redux的一些问题,熟悉redux一般不会有太大问题。

  3. 就是一些杂碎的问题,为啥想离职,关于离职,多从自身找问题,别说公司咋的咋的,很不好。

  4. 又问了些,然后问我想知道什么,我balala说了一些,然后问面试是不是结束了,然后他说是,结果下个星期出来,我一听,这下真凉了,好歹有个三面人事面吧。。。

最后面试官把我带了回去,也没说让我走,等了半个小时,我想大概挂了,就找了别的员工问了下是不是自己可以走了,然后问了人事,说把我忘了。。。以为二面面试官把我送走了,准备打电话和我通知的。然后人事说让我放心,给了口头offer,正式offer下个星期给我,然后就是和说要准备什么,让我看邮件。总体面试效率比较高了。

结局

还算满意吧,表现的的确不太好,但也算把自己学的东西说出来了。结局也是好的,顺利拿到offer。

解析,补充一些小东西,具体看源码

  1. 扁平化数组,flatten已经进入规范,在MDN上的Array可以查到该方法,记住一点,能用reduce的都用reduce,数组运算,你的下次运算结果需要用到上次运算的结果,都可以用reduce。
const flatten = (arr) => arr.reduce((a, b) => {
  if (Array.isArray(b)) {
    return a.concat(flatten(b));
    // 该项是数组,连接 递归调用的结果,否则直接连接
  }
  return a.concat(b);
}, []);
  1. 深克隆

需要注意的坑就是typeof nulltypeof RegExp('test')typeof Date()typeof Boolean(true)typeof String('t')typeof Number(1)为object,数组和对象也要区分开,具体看源码。

  1. 求一个页面多少dom节点

原理和flatten一样,都是递归,看源码

  1. 求dom树结构

这个个人觉得挺重要的,也很有趣,看源码,也是递归

  1. 求一颗dom树的最大深度 原理是递归一次,就说明向下走了一层,记录最大值,比较,结束后返回
const getDomDepth = (node) => {
  let max = 1;

  void function fn(d, m) {
    m++;
    Array.from(d.children).forEach(n => {
      if (n.children.length) {
        fn(n, m);
      } else {
        if (max < m) max = m;
      }
    })
  }(node, 1);

  return max;
}

作者:shiyangzhaoa
(责任编辑:admin)
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
发布者资料
小邱 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2017-11-26 17:11 最后登录:2018-06-11 16:06

关注奔三路