面试题记录

  • 前端页面加载的流程,TCP请求到页面交互
  • 前端框架对比(vue和react)
  • 理解函数式组件的产生背景和优势,理解js class逐渐被react和vue抛弃的原因
  • js的基础知识
  • 优化方案,建议从TCP请求到接口请求再到页面的绘制
  • 刷算法题(leetcode-cn.com)
面试题记录:
  1. 请描述一下vue的双向绑定原理

    答:vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过**Object.defineProperty()**来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。

    vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。

    // 一个简单的双向绑定
    <body>
        <div id="app">
        <input type="text" id="txt">
        <p id="show"></p>
    </div>
    </body>
    <script type="text/javascript">
        var obj = {}
        Object.defineProperty(obj, 'txt', {
            get: function () {
                return obj
            },
            set: function (newValue) {
                document.getElementById('txt').value = newValue
                document.getElementById('show').innerHTML = newValue
            }
        })
        document.addEventListener('keyup', function (e) {
            obj.txt = e.target.value
        })
    </script>
    
  2. 虚拟DOM实现原理,为什么需要虚拟DOM?

    答:虚拟DOM用javascript对象来表示VNode,在传统的开发流程中,使用原生的JS或JQ操作DOM时,很有可能触发回流操作,浏览器重新渲染部分或全部文档,更可怕的是,当需要更新多个节点时,一个节点更新后,导致前一个节点的坐标信息更新,前一次计算为无用功,计算DOM节点浪费了性能,所以直接操作DOM的代价十分昂贵,频繁操作还会造成页面卡顿影响用户体验,通过虚拟DOM我们执行更新大量节点操作时,通过在这个虚拟DOM上实现了一个 diff 算法找出最小变更,再把这些变更写入实际的DOM中。这个虚拟DOM以JS结构的形式存在,计算性能会比较好,而且由于减少了实际DOM操作次数,性能会有较大提升。

  3. watch、computed和methods的区别?

    答:

  4. vue中key的作用?元素顺序变更会导致DOM元素顺序变化吗?为什么?

    答:当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM

  5. vue怎么实现动态路由?

    答:1.后台返回一个json格式的路由表。2.因为后端同学传回来的都是字符串格式的,但是前端这里需要的是一个组件对象啊,写个方法遍历一下,将字符串转换为组件对象。3.利用vue-router的beforeEach、addRoutes、localStorage来配合上边两步实现效果。4.左侧菜单栏根据拿到转换好的路由列表进行展示。
    大体步骤:拦截路由->后台取到路由->保存路由到localStorage(用户登录进来只会从后台取一次,其余都从本地取,所以用户,只有退出在登录路由才会更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值