字节跳动前端实习生(上海)
一面(2020-10-14)1h20m
自我介绍
说说为什么学前端
学前端需要什么特质
介绍项目
- 登录权限问题
- cookie和sessionStorage和localStorage
- 后端如何修改cookie
- 前端可以修改cookie么
- 前端可以读取cookie么(不发请求)
vue带来了怎样的好处
- 什么是渐进式框架(我自己挖的坑,没回答出来)
- vue相比jquery怎么提高性能(我提了vue可以提高性能)
- diff算法对比做的优化(没回答出来)
- 数据驱动视图如何实现的
- watcher有哪些接口
- watcher是做什么的
- Dep构造函数有哪些方法,这些方法再什么时候调用
简单实现Dep这个构造函数(敲代码喽)
function Dep() { this.subs = [] } Dep.prototype.addSub = function (watcher) { this.subs.push(watcher) } Dep.prototype.notify = function () { for(const watcher of this.subs) { watcher.update() } }
- 我看你用到可for-of,你说说它和for-in的区别
- 如何让对象可以被for-of遍历
实现对a这个实例对象用for-of遍历
class A { items: string[] } const a = new A() for (const i of a) { i }
答:
A.prototype.[symbols.iterator] = function() { int i = 0 return { next: () => { int flag = false if(i === this.items.length) { flag = true } return { value: this.items[i++], done: flag } } } }
- 解释一下你写的代码
- symblos我还写错了,流泪,面试官还是很nice的,会对你提示的,赞
用vue去实现一个倒计时的组件,有开始、停止、重置按钮,组件接受一个参数 limit(父传子),limit到0就不会再倒了
<template> <p>{{limit}}</p> <button @click=start>开始</button> <button @click=stop>停止</button> <button @click=reset>重置</button> </template> <script> export default { data() { return { timer: null, number: this.limit } }, props: ['limit'], methods: { start(){ this.timer = setTimeout(() => { if(this.limit <= 0) { clearTimeout(this.timer) }else { this.number-- } }, 1000) }, stop() { clearTimeout(this.timer) }, reset() { this.number = this.limit } } } </script>
- 如何把这个功能模块抽离
用mixin实现height、width两个属性,分别为浏览器的高宽,响应式
实现一个add函数,支持任意个参数,可以无限调用,有valueOf,调用valueOf方法就不能再计算了,返回计算结果
function add() { var sum = 0 var func = function() { for(const num of arguments) { sum += num } return arguments.callee } func.valueOf = function() { return sum } return func } add.valueOf = function() { let sum = add.sum add.sum = 0 return sum }