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

前端:遇到的面试题

HTML,CSS

mvvm 框架和 mvc 框架的区别

· MVC 框架是模型-视图-控制器的缩写,它是一种通过将代码分为三个部分的方式来组织应用程序的结构,这三个部分分别是模型(Model)、视图(View)和控制器(Controller)。模型表示数据(处理数据),视图表示用户界面,控制器负责管理数据和用户界面之间的交互。
· MVVM 框架是模型-视图-视图模型的缩写,它是一种通过将代码分为三个部分的方式来组织应用程序的结构,这三个部分分别是模型(Model)、视图(View)和视图模型(ViewModel)。模型表示数据,视图表示用户界面,视图模型则是两个部分的连接通道,负责将模型的数据绑定到视图上,使视图和模型之间的交互更加简单。

· 区别:
在 MVC 中,控制器负责处理视图和模型之间的数据传递。而在 MVVM 中,视图模型则负责处理视图和模型之间的数据传递,它通过数据绑定将模型数据和视图进行绑定,使得数据的变化可以自动更新视图。

CSS 选择器的优先级

‌CSS选择器主要包括:元素选择器、类选择器(class)、ID 选择器和通用选择器(通配符)。
① 元素选择器是最基本的选择器,它根据 HTML 元素\标签的类型来选择元素。比如 p 选择器可以选择当前 HTML 里所有<p> 标签的元素。
② 类选择器是通过 HTML 元素的类属性来选择元素,使用 . 符号来表示,后面跟着类名。比如 .my-class 选择器将选择所有类名为 my-class 的元素‌。
③ ID 选择器是通过 HTML 元素的 ID 属性来选择元素。ID 选择器使用 # 符号来表示,后面跟着 ID 名。ID 在HTML文档中是唯一的,所以你可以使用它来为特定的元素设置样式,因此在同一个 HTML 页面不能出现同一个 ID,哪怕它们的元素不是同一个类型。
④ 通用选择器(通配符)是使用 * 符号来选择页面上的所有元素。通配符选择器通常用于清除默认样式或为所有元素设置基础样式,但不推荐频繁使用,因为它可能会影响页面性能‌。

那么这些选择器的优先级为 ID 选择器 > 类选择器 > 元素选择器 > 通用选择器

Vue

如何理解 Vue 的响应式

在 Vue 3 中,响应式系统通过 reactive 和 ref 这两个 API 实现数据的响应式追踪。

  1. ref:将一个基础数据类型单一对象包裹为响应式引用,可以通过 .value 访问数据,例如数字、字符串、数组等。
  2. reactive:将一个对象转为响应式对象,适合用于复杂的嵌套结构。

响应式 API 的 watch 和 computed 都用于监听和响应数据变化,但它们的用法和场景不同:

  1. computed:适用于计算依赖其他响应式数据得出的值。当依赖的数据变化时,computed 会重新计算并返回缓存的结果。此外 computed 具有缓存机制,只有在依赖数据变化时才重新计算,这使其在多次访问时性能更优。
  2. watch:用于监听响应式数据的变化,执行回调函数(如异步操作、API 请求、日志记录等),适合处理异步任务和复杂逻辑。watch 缓存结果,数据变化时总会触发回调。
import { reactive, ref, computed, watch } from 'vue';const state = reactive({count: 0,user: {name: 'Alice',age: 25}
});
const count = ref(0);
count.value++; // 更新值时使用 .valueconst doubleCount = computed(() => count.value * 2);  // 依赖 count,且只在 count 改变时重新计算
watch(() => state.user.age, (newAge, oldAge) => {  // 回调函数console.log(`Age changed from ${oldAge} to ${newAge}`);
});  

Vue 的钩子:created 和 mounted

Vue 的生命周期钩子函数:Vue 组件实例从生成 new 到被销毁 destory 的过程各阶段执行的生命周期函数,比如创建实例,装载模板,渲染模板等,这个就被称为钩子函数(监听函数),每当 Vue 实例处于不同的生命周期时,对应的函数就会被触发调用。
Vue 的八大生命周期钩子函数有:

函数调用时间作用
beforeCreatevue实例初始化之前调用在组件实例初始化后,数据观测和事件机制等都还未配置完成,无法访问到 data 和 methods 等属性
createdvue实例初始化之后调用组件实例已创建完成,属性、方法等已经可以访问
beforeMount挂载到DOM树之前调用在模板 template 编译、虚拟 DOM 渲染之前,DOM 还没有挂载到页面上
mounted挂载到DOM树之后调用组件模板已经挂载到页面,真实的 DOM 可被访问
beforeUpdate数据更新之前调用组件的响应式数据改变,虚拟 DOM 即将重新渲染之前
updated数据更新之后调用组件完成数据更新,DOM 更新同步完成
beforeDestroyvue实例销毁之前调用组件实例即将被销毁、从页面中移除之前
unmountedvue实例销毁之后调用组件实例被销毁、DOM 已从页面中移除

总体而言,Vue 组件的实例化遵循这个流程:按顺序先处理 JavaScript 逻辑(初始化数据和方法),然后编译模板 template (生成虚拟 DOM 树),最后将其挂载到 DOM(渲染到真实 DOM)。

真实 DOM 和虚拟DOM

· 虚拟 DOM:虚拟 DOM 是 Vue 使用的一种轻量级别的对象树,一个抽象概念,它描述了真实 DOM 的结构。每当数据变化时,渲染函数生成的虚拟 DOM,并与旧的虚拟 DOM 进行差异比较(diff)以确定哪些节点发生了变化(diff 算法),然后将这些差异应用到真实 DOM 上,最终由浏览器进行渲染。

· 真实 DOM:真实 DOM 是浏览器渲染的实际 HTML 结构。它表示页面上所有且真正存在的元素节点。如果直接操作真实 DOM 会触发浏览器的重新渲染,尤其在数据频繁更新的情况下,这种操作开销较大。

· 区别:
效率:虚拟 DOM 是一个内存中的对象树,操作比真实 DOM 快得多,因为它不引起浏览器的渲染重排。
更新方式:虚拟 DOM 利用 diff 算法进行更新,只更改必要的节点;而真实 DOM 更新会触发浏览器渲染,成本较高。

DOM 是文档对象模型
BOM 是浏览器对象模型,BOM 的顶级对象是 window;BOM 比 DOM 更大,它包含 DOM。
window 对象的常见事件:窗口加载事件 window.onload、调整窗口大小事件 window.onresize、定时器 setTimeout() 和 setInterval() 等

网络

get 和 post 的区别

GET 和 POST 是 HTTP 协议中的两种常见请求方法,它们用于从服务器请求数据或将数据发送到服务器。主要区别如下:
用途
GET 主要用于请求数据。它从服务器获取资源,通常用于读取数据而不改变服务器的状态(如访问网页内容)。
POST:主要用于提交数据。它将数据发送到服务器,并可能修改服务器上的资源(如提交表单、创建新数据,多次提交订单会生成多个订单)。
数据传输方式
GET:将数据附加在 URL 中,作为查询字符串的一部分发送。URL 后的查询字符串以 ? 开头,各个参数通过 & 分隔。
POST:将数据放在请求的主体(body)中,因此不会显示在 URL 上。数据可以包含更多的信息量和更复杂的结构。
数据长度
GET:URL 有长度限制(不同浏览器和服务器有不同限制,通常在 2000 字符左右),不适合传输大量数据。
POST:没有长度限制,适合传输大数据量。
安全性
GET:由于参数在 URL 中可见,敏感信息容易暴露,因此不适合发送敏感数据。
POST:相对更安全,因为数据在请求体中,虽然它仍然可以通过网络嗅探工具捕获,但不会直接暴露在 URL 中。搭配 HTTPS 提高安全性。
浏览器缓存
GET:浏览器会缓存 GET 请求,因此重复请求相同 URL 时会直接使用缓存结果。
POST:默认情况下不会缓存 POST 请求,通常每次都发送新的请求。

总结:GET:用于数据请求,数据放在 URL 中,有长度限制,适合读取操作。POST:用于数据提交,数据在请求体中,无长度限制,适合更新操作。

Vue router 的传参方式:查询字符串和路径传递参数
查询字符串:/content -> http://localhost:5173/content?id=100&name=Lisa  
路径传递参数:/user/:id/name/:name/:number? -> http://localhost:5173/user/100/name/Lisa 

http://www.mrgr.cn/news/60749.html

相关文章:

  • ES 自定义排序方式
  • Java程序设计:spring boot(12)——定时调度集成 - Quartz
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法
  • Android13、14特殊权限-应用安装权限适配
  • Redis 事务 问题
  • 【传声器】电容式、动圈式
  • Oracle 第10章:触发器
  • Spring MVC介绍
  • Spring Boot 3项目创建与示例(Web+JPA)
  • 江协科技STM32学习- P23 DMA 直接存储器存取
  • CSS.选择器
  • Java性能调优与垃圾回收机制(4/5)
  • 当代AI大模型产品经理现状,及产品经理转型方向?
  • QT 机器视觉 (3. 虚拟相机SDK、测试工具)
  • 在没有 TIA Portal 的情况下,使用存储卡向 S7-1200 /S7-1500CPU 传输程序
  • Halcon 3D模型筛选操作
  • 如何通过AI提升产品经理效率!助产品经理工作效率翻倍
  • #Js篇:Date日期梳理
  • 嵌入式C语言中VT100特殊符号实现
  • 一些MySQL的知识
  • matlab程序设计
  • Android在kts中使用navigation及Args
  • 文件属性与目录
  • 一个简单的图像分类项目(三)编写脚本:参数设置
  • Python学习-列表基本操作
  • MODSI EVI 数据的时间序列拟合一阶谐波模型