面试2

作者: 绝尘kinoko | 来源:发表于2021-06-15 16:15 被阅读0次

    长时间没更,一是单次面试被问倒的题不多,二是问倒的题不太好写。
    这段时间有很多面试,总结来说有几点被问到不好答的:

    1. 性能优化


      性能优化

    来源

    1. 项目亮点
      很难总结,特别都是偏业务轻技术的项目,只能挑一点解决时间比较长的点说。
    2. 设计模式应用
      一般只会问了解哪些设计模式,实际应用只有乌鸫三面问到了,没什么想法。


      来源菜鸟教程
    • 单例模式,vue store(Vue插件应该都算是)、webSocket、连接池、线程池。
    • 工厂模式,工厂类负责各类的生产,vue应用主要是简单工厂,比如switch封装。
    • 状态模式,由状态更改行为,流程/进度组件。
    • 策略模式,用以避免写过多的if else语句,定义一系列算法,使其可替换使用。vue用可以是component标签,用is属性配置不同策略的组件。后端就是普通的接口实现,且实体(策略)类都要对外暴露。
    • 外观模式,隐藏内部细节,vue中使用仅仅是组件设计的一种思路,比如嵌套组件steps/step等。
    • 模板方法模式

    模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现

    比如vue的slot,react的render props。

    • 享元模式,类似单例,在某些程度(根据属性)上共享对象。比如$message等全局提示信息框,分success、warning等状态,每个状态就是一个共享的对象。
    • 观察者模式,响应式数据
    • 订阅发布模式,类似观察者,但是多一个订阅中心的角色,如dom事件监听。
    • 适配器模式,兼容封装。
    • 装饰器模式,es7装饰器,java注解。
    • 代理模式,添加中间层,设置一些控制,代理的细节内部执行。感觉跟工厂类似,不过不是new的时候判断处理,而是访问类的时候。

    结构型模式感觉都是一种组件的设计(解耦)思路,而不是真正实现某些功能需求。

    1. diff算法描述、时间复杂度
      第六项总结,时间复杂度由O(n³)优化成了O(n)。
    2. flutter框架(可忽略)
    3. 描述总结
      很多原理可能知道,但是描述不够精简,需要总结一下。
    • 防抖节流
      防抖和节流,都是控制事件触发频率的方法。
      防抖是当持续触发事件的时候,函数完全不执行,等最后一次触发结束的一段时间之后,再去执行。
      节流是有节制地执行,就是在一段时间内,只执行一次。
    • 响应式数据
      响应式数据是指当数据改变时,视图上该数据的引用位置也会变化。
      原理是采用数据劫持和观察者模式,数据劫持是利用Object.defineProperty监听属性的get/set方法,在get中收集依赖,在set中触发更新。更新重新渲染视图。
      关于更新:更新是异步的,更新动作会存在队列中,会用nextTick方法一次性清空队列。
    • diff算法
      diff算法是更新vnode的过程中,对比新老vnode的算法。算法只针对同级进行对比,用isSameVnode对比,判断tag和key是否一样;如果不一样直接替换,如果一样,就判断是否有子节点,如果只有一边有子节点或者都没有,是比较好处理的;
      如果都有子节点,则需要用双指针来进行对比,用isSameVnode来判断新老子节点的头头 尾尾 头尾 尾头 是否是同一节点 如果满足就进行相应的指针及dom移动;如果全都不相等,进行暴力对比,用老节点的key和index构建一个map,如果找到了,则移动老的子节点到前面去,如果找不到就直接插入;
      对新老的子节点进行递归patch处理,最后老的子节点有多的就删掉,新的子节点有多的就添加到相应的位置。总体思路就是对老节点,能复用的复用,多的删掉,新的能用老的就用老的,没有再添加。

    相关文章

      网友评论

          本文标题:面试2

          本文链接:https://www.haomeiwen.com/subject/bdjveltx.html