当前位置: 首页 > news >正文

2024 前端面试每日1小时

三日

概念30分

1. 如何理解Vue的模板编译原理

Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中,AST扮演了非常重要的角色,它用树形结构描述了模板的内容和结构,是编译过程的核心数据结构;同事,优化步骤可以提高后续渲染的性能,减少不必要的计算和比较;最后生成渲染函数实可以根据Vue实例的数据生成虚拟DOM,并最终渲染。

  • 模板解析(Parse):将模板字符串转换为抽象语法树(AST);
  • 优化(Optimize):静态优化,标记无需更新的节点,提高后续渲染性能;
  • 生成(Generate):将优化后的AST转换为JS渲染函数;
  • 生成渲染函数(Render):将生成的JS字符串转换为可执行函数,可根据Vue数据生成虚拟DOM;
2. Vue的自定义指令
  1. 全局注册
Vue.directive('focus', {  // 当被绑定的元素挂载到 DOM 中时……  inserted: function (el) {  // 聚焦元素  el.focus()  }  
})
  1. 局部注册
directives: {  focus: {  // 当被绑定的元素挂载到 DOM 中时……  inserted: function (el) {  // 聚焦元素  el.focus()  }  }  
}

自定义指令钩子

  • bind:只调用一次,指令第一次绑定到元素时调用;
  • inserted:被绑元素插入父节点时调用;
  • update:所在组件的VNode更新时调用
  • componentUpdated:指令所在组件的VNode及其子VNode全部更新后调用;
  • unbind:只调用一次;

注意事项:

  • 自定义指令:专注于操作DOM,而不是更改数据或者处理复杂逻辑;
  • 当与Vue的响应式系统交互时,要小心使用updated 钩子,可能会在一个元素的生命周期内多次调用;
  • 如果需要在组件卸载时清理DOM操作,可使用 unbind
3. 对Vue的diff算法理解

vue的diff算法,也被称为“虚拟DOM差异算法”,是Vue实现高效DOM更新机制的核心部分。这个算法用于比较新旧两个虚拟DOM树,将差异应用到实际的DOM上,从而避免不必要的DOM操作,提高性能。

  • 双端比较:同层节点比较;
  • 深度优先遍历:先比较当前节点的子节点,再比较兄弟节点;
  • key比较:key不同,则直接会创建一个新的DOM节点;
  • 优化策略:同层比较、先头后尾、复用策略等;

二日

概念30分

1. Vue2和Vue3的区别
  • 响应式:vue2使用的是Object.defineProperty(),vue3使用的是proxy
  • vue3全部由ts重构,对ts支持更友好;
  • 自定义渲染器
  • composition API
  • vue3可以存在多个根节点,vue2只能有一个
1.1 Vue3相比较Vue2的优势
  1. 性能更好
  2. 体积更小
  3. 更好的ts支持
  4. 更好的代码组织
  5. 更好的逻辑抽离
  6. 更多的新功能

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JAVA自制小游戏之推箱子
  • 光伏组件积灰检测系统
  • 【代码】自定义函数
  • 数据治理与数据提取:解锁信息价值的双钥匙
  • 计算机网络——物理层
  • img标签添加::before ::after 伪元素无效,伪元素增加:hover伪类无效
  • java项目之飘香水果购物网站(springboot+vue+mysql)
  • 树莓派4B 学习笔记1:TF卡系统盘烧录_初次启动_远程端连接配置
  • 【高阶数据结构(七)】B+树, 索引原理讲解
  • 多态(C++)
  • Ubuntu22.04之扩展并挂载4T硬盘(二百三十三)
  • 【typescript】omit和pick的好处,以及区别和用法
  • 怎么做好客户信息管理?
  • linux日常运维2
  • web前端三大主流框架
  • “大数据应用场景”之隔壁老王(连载四)
  • CentOS7 安装JDK
  • ES6系列(二)变量的解构赋值
  • JAVA之继承和多态
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mockjs让前端开发独立于后端
  • Redis 中的布隆过滤器
  • 创建一种深思熟虑的文化
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何学习JavaEE,项目又该如何做?
  • 如何在 Tornado 中实现 Middleware
  • 新版博客前端前瞻
  • 智能合约开发环境搭建及Hello World合约
  • 移动端高清、多屏适配方案
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #《AI中文版》V3 第 1 章 概述
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (状压dp)uva 10817 Headmaster's Headache
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .htaccess配置重写url引擎
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 服务 ServiceController
  • .Net6 Api Swagger配置
  • .net8.0与halcon编程环境构建
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .skip() 和 .only() 的使用
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • [12] 使用 CUDA 进行图像处理
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++]18:set和map的使用
  • [Contiki系列论文之2]WSN的自适应通信架构
  • [Day 36] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [English]英语积累本