什么网站做电子元器件/快速整站排名seo教程
Composition API
可以说是Vue3的最大特点,那么为什么要推出Composition Api
,解决了什么问题?
通常使用Vue2开发的项目,普遍会存在以下问题:
- 代码的可读性随着组件变大而变差
- 每一种代码复用的方式,都存在缺点
- TypeScript支持有限
以上通过使用Composition Api
都能迎刃而解
以下面试题汇总自2022(金三银四)-vue3面试题汇总文章
一、Options Api与Composition Api的区别?
1、Options Api
:选项API,即以vue为后缀的文件,通过定义methods
,computed
,watch
,data
等属性与方法,共同处理页面逻辑。
用组件的选项 (data、computed、methods、watch
) 组织逻辑在大多数情况下都有效。然而,当组件变得复杂,导致对应属性的列表也会增长,这可能会导致组件难以阅读和理解。
2、Composition API
中,组件根据逻辑功能来组织的,一个功能所定义的所有 API
会放在一起( 更加的 高内聚,低耦合
)。
3、Composition Api
相对Options Api
的两大优点:
- 逻辑组织
Options Api
在处理一个大型的组件时,内部的逻辑点容易碎片化,可能同时存在于method,computed,watch
等API中,我们必须不断地“跳转”相关代码的选项块,这种碎片化使得理解和维护复杂组件变得困难。Composition Api
将某个逻辑关注点相关的代码全都放在一个函数里,这样,当需要修改一个功能时,就不再需要在文件中跳来跳去。
- 逻辑复用
- 在
vue2.0
中,当混入多个mixin
会存在两个非常明显的问题:命名冲突、数据来源不清晰 - 而
Composition Api
可以通过编写多个hooks函数
就很好的解决了
- 在
总结
- 在逻辑组织和逻辑复用方面,
Composition API
是优于Options API
- 因为
Composition API
几乎是函数
,会有更好的类型推断
。 Composition API
对tree-shaking
友好,代码也更容易压缩
Composition API
中见不到this
的使用,减少了this
指向不明的情况- 如果是小型组件,可以继续使用
Options API
,也是十分友好的
二、Vue3.0性能提升主要是通过哪几方面体现的?
1、编译阶段优化
回顾Vue2
,我们知道每个组件实例都对应一个 watcher 实例
,它会在组件渲染的过程中把用到的数据property
记录为依赖,当依赖发生改变,触发setter
,则会通知watcher
,从而使关联的组件重新渲染。
因此,Vue3
在编译阶段,做了进一步优化:
① diff算法优化
vue3
在diff
算法中相比vue2
增加了静态标记
,其作用是为了会发生变化的地方添加一个flag标记
,下次发生变化的时候直接
找该地方进行比较。
② 静态提升
Vue3中对不参与更新
的元素,会做静态提升,只会被创建一次
,在渲染时直接复用。免去了重复的创建操作,优化内存。
没做静态提升之前,未参与更新的元素也在render函数
内部,会重复创建阶段
。
做了静态提升后,未参与更新的元素,被放置在render 函数外
,每次渲染的时候只要取出
即可。同时该元素会被打上静态标记值为-1
,特殊标志是负整数
表示永远不会用于 Diff
。
③ 事件监听缓存
默认情况下绑定事件行为会被视为动态绑定(没开启事件监听器缓存
),所以每次
都会去追踪它的变化。开启事件侦听器缓存
后,没有了静态标记。也就是说下次diff算法
的时候直接使用
。
④ SSR优化
当静态内容大到一定量级时候,会用createStaticVNode
方法在客户端去生成一个static node
,这些静态node
,会被直接innerHtml
,就不需要创建对象,然后根据对象渲染。
2、源码体积
相比Vue2
,Vue3
整体体积变小
了,除了移出一些不常用的API
,最重要的是Tree shanking
。
任何一个函数,如ref、reavtived、computed
等,仅仅在用到
的时候才打包
,没用到
的模块都被摇掉
,打包的整体体积变小
。
3、响应式系统
vue2
中采用 defineProperty
来劫持整个对象,然后进行深度遍历所有属性,给每个属性
添加getter和setter
,实现响应式。
vue3
采用proxy
重写了响应式系统,因为proxy
可以对整个对象进行监听
,所以不需要深度遍历。
- 可以监听动态属性的添加
- 可以监听到数组的索引和数组length属性
- 可以监听删除属性
三、Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?
1、vue2
中采用 defineProperty
来劫持整个对象,然后进行深度遍历所有属性,给每个属性添加getter和setter,实现响应式。但是存在以下的问题:
- 检测不到对象属性的添加和删除
- 数组API方法无法监听到
- 需要对每个属性进行遍历监听,如果嵌套对象,需要深层监听,造成性能问题
2、proxy:监听是针对一个对象的,那么对这个对象的所有操作会进入监听操作。
总结:
- Object.defineProperty只能遍历对象属性进行劫持
- Proxy直接可以劫持整个对象,并返回一个新对象,我们可以只操作新的对象达到响应式目的
- Proxy可以直接监听数组的变化(push、shift、splice)
- Proxy有多达13种拦截方法,不限于apply、ownKeys、deleteProperty、has等等,这是Object.defineProperty不具备的
四、Vue3.0响应式原理
vue3 响应式是使用 ES6 的 proxy 和 Reflect 相互配合实现数据响应式,解决了 vue2 中视图不能自动更新的问题。
proxy 是深度监听,所以可以监听对象和数组内的任意元素,从而可以实现视图实时更新。
详细的原理可查看vue3.0 响应式原理(超详细)
总结响应式大致分为三个阶段:
初始化阶段
:初始化阶段通过组件初始化方法形成对应的proxy对象
,然后形成一个负责渲染的effect
。get依赖收集阶段
:通过解析template
,替换真实data
属性,来触发get
,然后通过stack方法
,通过proxy对象
和key
形成对应的deps
,将负责渲染的effect
存入deps
。(这个过程还有其他的effect,比如watchEffect存入deps中 )。set派发更新阶段
:当我们this[key] = value
改变属性的时候,首先通过trigger
方法,通过proxy对象
和key
找到对应的deps
,然后给deps
分类分成computedRunners
和effect
,然后依次执行,如果需要调度
的,直接放入调度。
Proxy只会代理对象的第⼀层,那么Vue3⼜是怎样处理这个问题的呢?
判断当前Reflect.get的返回值是否为Object,如果是则再通过 reactive ⽅法做代理, 这样就实现了深度观测。
监测数组的时候可能触发多次get/set,那么如何防⽌触发多次呢?
我们可以判断key是否为当前被代理对象target⾃身属性,也可以判断旧值与新值是否相等,只有满⾜以上两个条件之⼀时,才有可能执⾏trigger。
五、说说Vue 3.0中Treeshaking特性?举例说明一下?
1、是什么?
Tree shaking
是一种通过清除多余代码
方式来优化项目打包体积
的技术,专业术语叫Dead code elimination
- 简单来讲,就是在保持代码
运行结果不变
的前提下,去除无用的代码
在Vue2
中,无论我们使用什么功能,它们最终都会出现在生产代码中。主要原因是Vue
实例在项目中是单例的,捆绑程序无法检测到该对象的哪些属性在代码中被使用到。
而Vue3
源码引入tree shaking
特性,将全局 API
进行分块。如果您不使用其某些功能,它们将不会包含在您的基础包中
2、如何做?
Tree shaking
是基于ES6
模板语法(import
与exports
),主要是借助ES6
模块的静态编译
思想,在编译时
就能确定模块的依赖关系
,以及输入
和输出
的变量。
Tree shaking
无非就是做了两件事:
- 编译阶段利用
ES6 Module
判断哪些模块已经加载 - 判断那些模块和变量未被使用或者引用,进而删除对应代码
3、作用(好处)?
通过Tree shaking
,Vue3
给我们带来的好处是:
- 减少程序体积(更小)
- 减少程序执行时间(更快)
- 便于将来对程序架构进行优化(更友好)
以下面试题汇总自「2022」打算跳槽涨薪,必问面试题及答案——VUE3 篇
六、Vue3 新特性有哪些?
1、性能提升
- 响应式性能提升,由原来的
Object.defineProperty
改为基于ES6
的Proxy
,使其速度更快 - 重写了
Vdom
(diff算法优化,增加静态标志) - 进行模板编译优化(静态提升,不参与更新的元素只被创建一次)
- 更加高效的组件初始化
2、更好的支持 typeScript
Vue.js 2.x
选用Flow
做类型检查,来避免一些因类型问题导致的错误,但是 Flow 对于一些复杂场景类型的检查,支持得并不好。Vue.js 3.0
抛弃了Flow
,使用TypeScript
重构了整个项目TypeScript
提供了更好的类型检查,能支持复杂的类型推断
3、新增 Composition API
Composition API
是 vue3
新增的功能,比 mixin
更强大。它可以把各个功能模块独立
开来,提高代码逻辑的可复用性,同时代码压缩性更强。
在 Vue3
中,定义 methods
、watch
、computed
、data
数据等都放在了 setup()
函数中。
setup()
函数会在created()
生命周期之前执行。执行顺序为:beforeCreate > setup > created
4、新增组件
Fragment
不再限制template
只有一个根节点。Teleport
传送门,允许我们将控制的内容传送到任意的DOM
中。Suspense
等待异步组件时渲染一些额外的内容,让应用有更好的用户体验。
5、Tree-shaking:支持摇树优化
摇树优化后会将不需要的模块修剪掉,真正需要的模块打到包内。优化后的项目体积只有原来的一半,加载速度更快。
6、Custom Renderer API: 自定义渲染器
实现 DOM 的方式进行 WebGL 编程。
七、vue3 组合式API生命周期钩子函数有变化吗?
setup
是围绕 beforeCreate
和 created
生命周期钩子运行的,所以不需要显示的定义它们。其他的钩子都可以编写到 setup
内。
值得注意的是组合式API
中的钩子函数,通过在生命周期钩子前面加上 on
来访问组件的生命周期钩子。需要注册,并且只能在 setup
期间同步使用,因为它们依赖于内部的全局状态来定位当前组件实例。
下图是选项式API 和 组合式API 生命周期钩子对比:
八、watch 和 watchEffect 的区别?
watch
和 watchEffect
都是监听器,watchEffect
是一个副作用函数。它们之间的区别有:
-
watch
:既要指明监视的数据源,也要指明监视的回调。 -
而
watchEffect
可以自动监听数据源作为依赖。不用指明监视哪个数据,监视的回调中用到哪个数据,那就监视哪个数据。 -
watch
可以访问改变之前和之后
的值,watchEffect
只能获取改变后
的值。 -
watch
运行的时候不会立即执行
,值改变后才会执行,而watchEffect
运行后可立即执行
。这一点可以通过watch
的配置项immediate
改变。 -
watchEffect
有点像computed
:- 但
computed
注重的计算出来的值(回调函数的返回值), 所以必须要写返回值。 - 而
watcheffect
注重的是过程(回调函数的函数体),所以不用写返回值。
- 但
-
watch
与vue2.x
中watch
配置功能一致,但也有两个小坑- 监视
reactive
定义的响应式数据时,oldValue
无法正确获取,强制开启
了深度监视(deep配置失效) - 监视
reactive
定义的响应式数据中某个属性
时,deep配置有效
。
- 监视
let sum = ref(0)
let msg = ref('你好啊')
let person = reactive({name:'张三',age:18,job:{j1:{salary:20}}
})//情况1:监视ref定义的响应式数据
watch(sum,(newValue, oldValue)=>{console.log("sum变化了", newValue, oldValue),(immediate:true)
})
//情况2:监视多个ref定义的响应式数据
watch([sum, msg],(newValue, oldValue)=>{console.log("sum或msg变化了", newValue, oldValue),(immediate:true)
})
//情况3:监视reactive定义的响应式数据
//若watch监视的是reactive定义的响应式数据,则无法正确获得oldValue,且强制开启了深度监视。
watch(person,(newValue, oldValue)=>{console.log("person变化了", newValue, oldValue),(immediate:true,deep:false) //此处的deep配置不再生效。
})
//情况4:监视reactive所定义的一个响应式数据中的某个属性
watch(()=>person.name,(newValue, oldValue)=>{console.log("person.name变化了", newValue, oldValue)
})
//情况5:监视reactive所定义的一个响应式数据中的某些属性
watch([()=>person.name, ()=>person.age],(newValue, oldValue)=>{console.log("person.name或person.age变化了", newValue, oldValue)
})
//特殊情况:
watch(()=>person.job,(newValue, oldValue)=>{console.log("person.job变化了", newValue, oldValue)
}, {deep:true})
九、v-if 和 v-for 的优先级哪个高?
在 vue2
中 v-for
的优先级更高,但是在 vue3
中优先级改变了。v-if
的优先级更高。
十、script setup 是干啥的?
scrtpt setup
是 vue3
的语法糖,简化了组合式 API
的写法,并且运行性能更好。使用 script setup
语法糖的特点:
- 属性和方法无需返回,可以直接使用。
- 引入
组件
的时候,会自动注册
,无需通过components
手动注册。 - 使用
defineProps
接收父组件传递的值。 useAttrs
获取属性,useSlots
获取插槽,defineEmits
获取自定义事件。- 默认
不会对外暴露
任何属性,如果有需要可使用defineExpose
。
十一、Vue2/Vue3组件通信方式?
Vue3的8种和Vue2的12种组件通信,值得收藏
Vue3通信方式:
- props
- $emit
- expose / ref
- $attrs
- v-model
- provide / inject(原理:原型链)
- Vuex/pinia
- mitt
Vue2.x 组件通信共有12种
- props
- $emit / v-on
- .sync
- v-model
- ref
- children/children / children/parent
- attrs/attrs / attrs/listeners
- provide / inject
- EventBus
- Vuex
- $root
- slot
十二、ref与reactive的区别?
ref与reactive 是 Vue3
新推出的主要 API
之一,它们主要用于响应式数据的创建。
template
模板中使用的数据和方法,都需要通过setup
函数return
出去才可以被使用。ref
函数创建的响应式数据,在模板中可以直接被使用,在JS
中需要通过.value
的形式才能使用。ref
函数可以接收原始数据类型与引用数据类型。reactive
函数只能接收引用数据类型。ref
底层还是使用reactive
来做,ref
是在reactive
上在进行了封装,增强了其能力,使它支持了对原始数据类型的处理。- 在
Vue3
中reactive
能做的,ref
也能做,reactive
不能做的,ref
也能做。
十三、EventBus与mitt区别?
Vue3.0通关秘籍
Vue2
中我们使用 EventBus
来实现跨组件之间的一些通信,它依赖于 Vue
自带的 $on/$emit/$off
等方法,这种方式使用非常简单方便,但如果使用不当也会带来难以维护的毁灭灾难。
而 Vue3
中移除了这些相关方法,这意味着 EventBus
这种方式我们使用不了, Vue3
推荐尽可能使用 props/emits
、provide/inject
、vuex
等其他方式来替代。
当然,如果 Vue3
内部的方式无法满足你,官方建议使用一些外部的辅助库,例如:mitt。
优点
- 非常小,压缩后仅有
200 bytes
。 - 完整
TS
支持,源码由TS
编码。 - 跨框架,它并不是只能用在
Vue
中,React
、JQ
等框架中也可以使用。 - 使用简单,仅有
on
、emit
、off
等少量实用API。
十四、谈谈pinia?
Vue3.0通关秘籍
Pinia 是 Vue
官方团队成员专门开发的一个全新状态管理库,并且 Vue
的官方状态管理库已经更改为了 Pinia
。在 Vuex 官方仓库中也介绍说可以把 Pinia
当成是不同名称的 Vuex 5
,这也意味不会再出 5
版本了。
优点
- 更加轻量级,压缩后提交只有
1.6kb
。 - 完整的
TS
的支持,Pinia
源码完全由TS
编码完成。 - 移除
mutations
,只剩下state
、actions
、getters
。 - 没有了像
Vuex
那样的模块镶嵌结构,它只有store
概念,并支持多个store
,且都是互相独立隔离的。当然,你也可以手动从一个模块中导入另一个模块,来实现模块的镶嵌结构。 - 无需手动添加每个
store
,它的模块默认情况下创建就自动注册。 - 支持服务端渲染(
SSR
)。 - 支持
Vue DevTools
。 - 更友好的代码分割机制,传送门。
Pinia
配套有个插件 pinia-plugin-persist进行数据持久化,否则一刷新就会造成数据丢失
本文摘录自:
- 2022(金三银四)-vue3面试题汇总
- vue3.0 响应式原理(超详细)
- 「2022」打算跳槽涨薪,必问面试题及答案——VUE3 篇 -纯干货!图解Vue响应式原理
- Vue3.0通关秘籍
相关文章:

Vue3.0面试题汇总
Composition API 可以说是Vue3的最大特点,那么为什么要推出Composition Api,解决了什么问题? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺…...

TCP编程:从入门到实践
目录 一、引言 二、TCP协议原理 1.面向连接 2.可靠传输 三、TCP编程实践 1.TCP服务器 2.TCP客户端 四、总结 本文将带你了解TCP编程的基本原理,并通过实战案例,教你如何在网络编程中运用TCP协议。掌握TCP编程,为构建稳定、高效的网络通信…...

Python NumPy 数据分析:处理复杂数据的高效方法
Python NumPy 数据分析:处理复杂数据的高效方法 文章目录 Python NumPy 数据分析:处理复杂数据的高效方法一 数据来源二 获取指定日期数据三 获取指定行列数据四 求和计算五 比例计算六 平均值和标准差七 完整代码示例八 源码地址 本文详细介绍了如何使用…...

【Preference Learning】Reasoning with Language Model is Planning with World Model
arxiv: https://arxiv.org/abs/2305.14992 问题背景:当前LLM推理受到几个关键因素的限制: (1)LLM缺乏世界模型(一种人类就有的对环境的心理表征,可以模拟行动以及活动对外部世界状态的影响)去…...

OJ在线评测系统 后端基础部分开发 完善CRUD相关接口
完善相关接口 判斷编程语言是否合法 先从用户的请求拿到Language package com.dduo.dduoj.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dduo.dduoj…...

计算机网络--TCP、UDP抓包分析实验
计算机网络实验 目录 实验目的 实验环境 实验原理 1、UDP协议 2、TCP协议 实验具体步骤 实验目的 1、掌握使用wireshark工具对UDP协议进行抓包分析的方法,掌握UDP协议的报文格式,掌握UDP协议校验和的计算方法,理解UDP协议的优缺点&am…...

FreeRTOS的中断管理
前言 FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念,FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时候也可以使用硬件中断,但是硬件中断ISR的设计要注意一些设计原则,在本节中我…...

JS加密=JS混淆?(JS加密、JS混淆,是一回事吗?)
JS加密、JS混淆,是一回事吗? 是的!在国内,JS加密,其实就是指JS混淆。 1、当人们提起JS加密时,通常是指对JS代码进行混淆加密处理,而不是指JS加密算法(如xor加密算法、md5加密算法、…...

hive-拉链表
目录 拉链表概述缓慢变化维拉链表定义 拉链表的实现常规拉链表历史数据每日新增数据历史数据与新增数据的合并 分区拉链表 拉链表概述 缓慢变化维 通常我们用一张维度表来维护维度信息,比如用户手机号码信息。然而随着时间的变化,某些用户信息会发生改…...

高并发内存池(六):补充内容
目录 有关大于256KB内存的申请和释放处理方法 处理大于256KB的内存申请 补充内容1 补充内容2 补充内容3 处理大于256KB的内存释放 新增内容1 新增内容2 测试函数 使用定长内存池替代new 释放对象时不传对象大小 补充内容1 补充内容2 补充内容3 补充内容4 测试…...

高性能存储 SIG 月度动态:优化 fuse 提升 AI 存储接入能力,erofs 工具发布新版本
本次月报综合了 SIG 在 7、8 两个月的工作进展,包含多项新特性、优化、Bugfix 等。 SIG 整体进展 fuse 支持 failover,并优化 background 读写公平性,提升 AI 存储接入场景的能力。 erofs page cache 共享特性已发到上游社区,re…...

2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程
Protobuf 序列化概述 Protobuf(Protocol Buffers)是由Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。它用于在不同系统之间高效地交换数据。Protobuf使用定义文件(.proto)来描述数据结构,并通过…...

【小程序】微信小程序课程 -4 项目实战
目录 1、 效果图 2、创建项目 2.1 创建小程序端 2.1.1 先创建纯净项目 2.1.2 删除components 2.1.4 删除app.json红色部分 2.1.5 删除index.json红色部分 2.1.6 删除index.wxss全部内容 2.1.7 删除index.wxml全部内容 2.1.8 app.json创建4个页面 2.1.9 app.json添加…...

【期刊】论文索引库-SCI\SSCI\IE\南大核心\北大核心\CSCD等
外文期刊检索 SCI SCI即《科学引文索引》(Science Citation Index),是由美国科学信息研究所(Institute for Scientific Information)创建于1961年,收录文献的作者、题目、源期刊、摘要、关键词,不仅可以从文献引证的角度评估文章的学术价值,还可以迅速方便地组建研究课…...

开源链动 2+1 模式 S2B2C 商城小程序:社交电商团队为王的新引擎
摘要:本文深入探讨在社交电商领域中,团队的重要性以及如何借助开源链动 21 模式 S2B2C 商城小程序,打造具有强大竞争力的团队,实现个人价值与影响力的放大,创造被动收入,迈向财富自由之路,同时为…...

使用Fiddler Classic抓包工具批量下载音频资料
1. 通过F12开发者工具,下载音频文件 浏览器打开音频列表->F12快捷键->网络->媒体,播放一个音频文件,右边媒体下生成一个音频文件,右击“在新标签页中打开”,可以下载这个音频文件。 2.通过Fiddler Classic抓…...

QT开发:基于Qt实现的交通信号灯模拟器:实现一个带有倒计时功能的图形界面应用
介绍 本文将介绍如何使用Qt框架实现一个简单的交通信号灯控制程序。本程序包括一个图形界面,显示红、黄、绿三色信号灯,并通过定时器控制信号灯的切换。同时,我们还将实现一个带有按钮的界面,用于展示信号灯的状态。 1. 安装Qt开…...

【编程基础知识】网络I/O模型详解:从阻塞到异步
引言 网络I/O模型是网络编程的核心,它们决定了应用程序如何进行读写操作以与网络进行数据交换。了解不同的网络I/O模型对于设计高效、可扩展的网络应用程序至关重要。 一、阻塞I/O(Blocking I/O) 1. 定义 阻塞调用:当应用程序…...

yolo自动化项目实例解析(六)自建UI(主窗口、预览窗口)
前面我们大致把各个代码块梳理出来了,但是还是不知道从那块开始,我们这里主要先通过ui页面的元素去推理整个执行过程,我们首先需要知道ui功能里面有那些组件 qt设计师基础控件 Qt Designer 是一个图形界面设计工具,用于创建 Qt 应…...

Unity优质教程分类汇总 【持续更新中】
以下收录的均为作者自己看过的觉得比较好的教程 基础 Unity入门: https://www.bilibili.com/video/BV1HX4y1V71E?p13 生命周期 https://docs.unity.cn/cn/2022.3/uploads/Main/monobehaviour_flowchart.svg https://zhuanlan.zhihu.com/p/551294000 编程技巧…...

真正掌握left join on 和 where 的差别
总结 用 where 是先连接然后再筛选用 on 是先筛选再连接数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下: on条件是在生成临时表…...

神经网络在多分类问题中的应用
作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~个人主页:小高要坚强的博客当前专栏:Python之机器学习本文内容:神经网络在多分类问题中的应用作者“三要”格言:要坚强、要努力、要学习 目录 1. 引言 2.数据构造 3.划分数据集 4.神经网络实现多…...

nginx的安装和使用
源码安装 1.环境准备:卸载其他方式安装的web应用,防止端口冲突 2.下载nginx源码包 wget https://nginx.org/download/nginx-1.20.2.tar.gz 3.源码编译安装 yum install -y gcc pcre-devel zlib-devel #安装依赖包 useradd -M -s /sbin/nologin ngi…...

js采用覆盖键、覆盖鼠标滑动事件实现禁止网页通过 ctrl + +/- 和 ctrl + 滚轮 对页面进行缩放
一、兼容电脑端的禁止通过 ctrl /- 和 ctrl 滚轮 对页面进行缩放 const keyCodeMap {// 91: true, // command61: true,107: true, // 数字键盘 109: true, // 数字键盘 -173: true, // 火狐 - 号187: true, // 189: true, // -};二、覆盖ctrl||command ‘’/‘-’ // 覆…...

某客户Oracle RAC无法启动故障快速解决
某日,9:50左右接到好友协助需求,某个客户Oracle RAC无法启动,并发过来一个报错截图,如下: 和客户维护人员对接后,远程登录服务端进行故障分析。 查看hosts信息,首先进行心跳测试,测…...

【计算机网络 - 基础问题】每日 3 题(二十八)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

探索甘肃非遗:Spring Boot网站开发案例
1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前&#…...

产品管理- 互联网产品(6):产品测试
可用性测试 招募有代表性用户作为测试代表参与者,评估某产品符合特定可用性及符合程度。以具有代表性的用户为测试样本。 测试中多关注用户表情与动作。多鼓励与测试的用户更多的操作以用户角度发现问题。同时要做好询问工作,耐心聆听用户的意见&#x…...

奖金高达 110 万元,Spatial Joy 2024 全球 AR 应用开发大赛启动
今年是AR应用开发大赛第三届,恰逢Rokid成立十周年,我们推出全新的大赛品牌“Spatial Joy”,引领开发者享受开发乐趣,为其打造充满挑战和惊喜的开发之旅,逐渐成为空间计算时代全球最大AR应用开发大赛。回顾大赛发展&…...

git add成功后忘记commit的文件丢了?
本文目标:开发人员,在了解git fsck命令用法的条件下,进行git add成功但由于误操作导致丢失的文件找回,达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中,分支太多(基线分…...