首页 > 字节跳动前端实习生(上海)
头像
jybnb
发布于 2020-10-18 19:42
+ 关注

字节跳动前端实习生(上海)

一面(2020-10-14)1h20m

  1. 自我介绍

  2. 说说为什么学前端

  3. 学前端需要什么特质

  4. 介绍项目

    • 登录权限问题
    • cookie和sessionStorage和localStorage
    • 后端如何修改cookie
    • 前端可以修改cookie么
    • 前端可以读取cookie么(不发请求)
  5. vue带来了怎样的好处

    • 什么是渐进式框架(我自己挖的坑,没回答出来)
    • vue相比jquery怎么提高性能(我提了vue可以提高性能)
    • diff算法对比做的优化(没回答出来)
    • 数据驱动视图如何实现的
    • watcher有哪些接口
    • watcher是做什么的
    • Dep构造函数有哪些方法,这些方法再什么时候调用
  6. 简单实现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遍历
  7. 实现对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的,会对你提示的,赞
  8. 用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>
    • 如何把这个功能模块抽离
  9. 用mixin实现height、width两个属性,分别为浏览器的高宽,响应式

  10. 实现一个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
    }

更多模拟面试

全部评论

(1) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

近期精华帖

热门推荐