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

vue常见题型(1-10)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 2.2双向绑定的原理是什么
    • vue框架采用的是数据双向绑定的方式,由三个重要部分构成
      • 2.2.1.ViewModel
      • 2.2.2 双向绑定
        • 2.2.3.1.编译`Compile`
        • 2.2.3.2.依赖收集
  • 3.组件通信方式
    • 3.1概念
    • 3.2解决了什么
    • 3.3分类
    • 3.4方案
      • 3.4.1.props
      • 3.4.2.$emit 触发自定义事件
      • 3.4.3.ref
      • 3.4.4.EventBus
      • 3.4.5.provide和inject
      • 3.4.6.vuex
    • 3.5.小结
  • 4.data属性是一个函数和是一个对象的区别?
    • 4.1.实例和组件定义data的区别
    • 4.2.区别
    • 4.3.结论
  • 5.动态给vue的data添加一个新的属性时会发生什么?怎样解决
    • 5.1.直接添加属性
    • 5.2分析
    • 5.3.解决方法
      • 5.3.1.Vue.set()
      • 5.3.2.Object.assign()
      • 5.3.3.$forceUpdate
    • 5.4.小结
  • 6.v-if和v-for的优先级
    • 6.1.作用
    • 6.2.优先级
      • 6.2.1.示例
    • 6.3.注意事项
  • 7.v-show和v-if区别?使用场景
    • 7.1.共同点
    • 7.2.区别
    • 7.3.原理分析
      • 7.3.1.v-show
      • 7.3.2.v-if
    • 7.4.使用场景
  • 8.vue中的key
      • 8.1.1.背后的事情
    • 8.2.设置key与不设置key区别
      • 8.2.1.设置key值一定能提高diff效率吗
  • 9.常用的修饰符
    • 9.1.定义
    • 9.2.作用
      • 9.2.1.表单修饰符
        • 9.2.1.1.lazy
        • 9.2.1.2.trim
        • 9.2.1.3.number
      • 9.2.2.事件修饰符
        • 9.2.2.1.stop
        • 9.2.2.2.prevent
        • 9.2.2.3.self
        • 9.2.2.4.once
        • 9.2.2.5.capture
        • 9.2.2.6.passive
        • 9.2.2.7.native
        • 10.2.3.鼠标按钮修饰符
        • 10.2.4.键盘修饰符
        • 10.2.5.v-bind修饰符
          • 10.2.5.1.async
          • 10.2.5.2.props


2.2双向绑定的原理是什么

vue框架采用的是数据双向绑定的方式,由三个重要部分构成

  • 数据层(Model):应用的数据及业务逻辑
  • 视图层(View):应用的展示效果,ui组件
  • 业务处理层(ViewModel):框架封装的核心,负责将数据与视图关联起来,这个分层的方案,有一个专业术语MVVM这里控制的核心功能便是数据双向绑定

2.2.1.ViewModel

主要职责:

  • 🍕🍕🍕数据变化后更新视图
  • 视图变化后更新数据
    还有两个主要部分
  • 监听器(Observer):对所有数据的属性进行监听
  • 解析器(Compiler):对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数

2.2.2 双向绑定

vue中的双向绑定的流程:

  • 🚜🚜🚜new Vue()首先执行初始化,对data执行响应化处理,这个过程发生在Observe中
  • 对模板执行编译,找到其中动态绑定的数据,从data中获取并初始化视图,发生在Compile中
  • 定义一个更新函数和Watcher,将来对应数据变化时Watcher会调用更新函数
  • 由于data的某个key在一个视图中可能出现多次,所有每个key都需要一个管家Dep来管理多个Watcher
  • 将来data中数据一旦发生变化,会首先找到对应的Dep,通知所有Watcher执行更新函数
    http://cmsadm.caidao8.com/electricityTax/showInstruction.hx?uuid=5c81c7c0e8ba4a078d4c32e811fab932
2.2.3.1.编译Compile
  • 🤣🤣🤣对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数

在这里插入图片描述

2.2.3.2.依赖收集

data中的某个key,同一个key可能出现多次,每次都需要收集出来用一个watcher来维护他们,此过程称为依赖收集,多个watcher需要一个Dep来管理,需要更新时由Dep统一通知
在这里插入图片描述

3.组件通信方式

3.1概念

  • 🧨🧨🧨组件
  • 通信
    组件是框架最强大的功能之一,每一个.vue结尾的文件都可以称为一个组件。
    通信指的是发送者通过某种格式来传递信息到接收者以达到某个目的。
    广义上,任何信息的传递都是组件间通信。通过一种方式来传递信息以达到某个目的。

3.2解决了什么

🚕🚕🚕通信的本质是信息同步共享,框架中,每个组件之间都有独自的作用域,组件之间的数据是无法共享的。但由于开发中需要让组件之间共享数据,这样通过组件通信就可以实现同步。

3.3分类

  • 父子组件之间
  • 兄弟组件之间
  • 祖孙与后代
  • 非关系组件之间

3.4方案

🍕🍕🍕常规通信方案

  • props
  • $emit触发自定义事件
  • ref
  • EventBus
  • Provide与Inject
  • Vuex

3.4.1.props

在这里插入图片描述

  • 适用场景:父->子
  • 子组件设置props属性,用来接收父组件传递的参数
  • 父组件在使用子组件标签中通过字面量来传递值
    Children.vue
props:{//字符串形式name:String,age:{type:Number,default:19,require:true }
}

Father.vue

<Children name='' age = 19 />

3.4.2.$emit 触发自定义事件

  • 适用场景:子组件传递给父组件
  • 子组件通过$emit触发自定义事件,第二个参数为传递的数据
  • 父组件绑定监听器获取到子组件传递过来的数据
    Children.vue
methods:{sendData(){this.$emit('add',info) }
}

Father.vue

<Children @add="children($event)" />

3.4.3.ref

  • 🌮🌮🌮父组件在使用子组件的时候设置ref
  • 父组件通过设置子组件 ref来获取数据
    父组件
<Children ref="foo" />
//获取子组件实例方法,就能获取到对应数据
this.$refs.foo

3.4.4.EventBus

  • 🚜🚜🚜兄弟组件传值
  • 创建一个中央事件总线EventBus
  • 兄弟组件通过$emit触发自定义事件,$emit第二个参数为传递的数值
  • 另一个兄弟组件通过$on监听自定义事件
//main.js
Vue.prototype.$bus = new Vue()

Children1.vue

this.$bus.$emit('foo')

Children2.vue

this.$bus.$on('foo',this.nameData)

3.4.5.provide和inject

  • 在祖先组件定义provide属性,返回传递的值
  • 在后代组件通过inject接收组件传递过来的值
    祖先组件
provide(){return{foo:'foo' }
}

后代组件

inject:['foo'] //获取到祖先组件传递过来的值

3.4.6.vuex

  • 🥟🥟🥟复杂关系的组件数据传递
  • vuex相当于一个用来存储共享变量的容器
    在这里插入图片描述
  • state用来存放共享变量
  • getter,可以增加一个getter派生状态,(相当于store中的计算属性),用来获得共享变量的值
  • mutations用来存放修改state的方法
  • actions也是用来存放修改state的方法,不过action是在mutations的基础上进行。常用来做一些异步操作

3.5.小结

  • 🌭🌭🌭父子关系选择propsref
  • 🥟🥟🥟兄弟关系选择$bus
  • 🌮🌮🌮祖先与后代选择ProvideInject
  • 🍕🍕🍕复杂关系选择vuex存放共享的数据变量

4.data属性是一个函数和是一个对象的区别?

4.1.实例和组件定义data的区别

vue实例的时候定义data属性即可以是一个对象,也可以是一个函数

const app = new Vue({el:"#app",//对象格式data:{foo:"foo"  },//函数格式data(){return{foo:"foo" } }
})

组件中定义data属性,只能是一个函数
如果定义为一个对象

Vue.component('component1',{template:`<div>组件</div>`,data:{foo:'foo' }
})

则会得到警告信息,返回的data应该是一个函数

4.2.区别

function Component(){}
Component.prototype.data = {count:0
}

创建两个组件实例

const componentA = new Component()
const componentB = new Component()
//修改`componentA`组件`data`属性的值,`componentB`中的值也发生了变化
console.log(componentB.data.count)//0
componentA.data.count = 1
console.log(componentB.data.count)//1
//因为共用了一个内存地址

采用函数的形式,则不会有影响(函数返回的对象内存地址并不相同)

function Component(){this.data = this.data()
}
Component.prototype.data = function(){return {count:0 }
}
//修改`componentA`组件`data`属性的值,`componentB`中的值不受影响
console.log(componentB.data.count)//0
componentA.data.count = 1
console.log(componentB.data.count)//1

4.3.结论

  • 🍔🍔🍔根实例对象data可以是对象也可以是函数(根实例时单例),不会产生数据污染情况。
  • 组件实例对象data必须是函数,目的是为防止多个组件实例对象之间共用一个data,会产生数据污染。采用函数的形式,initData时会将其作为工厂函数都会返回全新的data对象

5.动态给vue的data添加一个新的属性时会发生什么?怎样解决

5.1.直接添加属性

从一个例子开始,定义一个p标签,通过v-for遍历
然后,给button绑定点击事件,预期点击按钮时,数据新增一个属性,界面新增一行

<p v-for="(value,key) in item" :key="key">{{value}}</p>
<button @click="addProperty">动态添加新属性</button>

实例化一个实例,定义data属性和methods方法

const app = new Vue({el:"#app",data:()=>{item:{oldProperty:"旧属性" } },methods:{addProperty(){this.item.newProperty = "新属性" //添加console.log(this.item);//输出 }}
})

触发按钮,发现数据更新了,但页面没有更新

5.2分析

vue2是用Object.defineProperty实现的数据响应式

const obj = {};
Object.defineProperty(obj,'foo',{get(){console.log(`get foo:${val}`)return val;},set(newVal){if(newVal !== val){console.log(`set foo:${newVal}`)val = newVal }}
})

🍕🍕🍕当访问foo属性或者设置foo值的时候都能够触发settergetter

obj.foo
obj.foo = 'new'

🍔🍔🍔当为obj添加新属性时,却无法触发事件属性的拦截

obj.newPro = '新属性' 

🍟🍟🍟一开始objfoo属性被设定成响应式数据,而newPro是后面新增的属性,并没有通过Object.defineProperty设置成响应式数据

5.3.解决方法

🍳Vue不允许在已经创建的实例上动态添加新的响应式属性,若想实现数据与视图同步更新,以下三种方式

  • Vue.set()
  • Object.assign()
  • $forceUpdated()

5.3.1.Vue.set()

🧀Vue.set(target,propertyName/index,value)

  • {Object | Array} target
  • { string | number } propertyName/index
  • { any } value
    🧨返回值:设置的值
    🌮通过Vue.set向响应式对象中添加一个property,并确定这个新property同样是响应式的,且触发视图更新。其内部是调用defineReactive方法,通过Object.difineProperty实现属性拦截

5.3.2.Object.assign()

🍿直接使用Object.assign()添加到对象的新属性不会触发更新,应创建一个新的对象,合并原对象和混入对象的属性

this.someObject = Object.assign({},this.someObject,{newProperty1:1,newProperty2:2})

5.3.3.$forceUpdate

🚓如果需要在vue中做一次强制更新,99.9%的情况,是在某个地方做了错误的写法,迫使实例重新渲染。仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

5.4.小结

  • 如果添加少量的新属性,可以采用Vue.set()
  • 如果添加大量的新属性,采用Object.assign()创建新对象
  • (不建议)比较粗暴的方式$forceUpdate() 强制刷新
    🌭vue3proxy实现的数据响应式,添加新属性时可以实现数据响应式

6.v-if和v-for的优先级

6.1.作用

🐱‍🏍v-if指令用于条件性地渲染一块内容。指令表达式返回true时被渲染
v-for指令基于一个数组来渲染一个列表。需要使用item in data形式的特殊语法,其中data是源数据,而item是被迭代的数组元素的别名
🚗在v-for时,建议设置key值,并且保证每个key值是独一无二的,这便于diff算法进行优化

6.2.优先级

🍖v-ifv-for都是vue模板系统中的一个指令
在模板编译时,会将指令系统转化成可执行的render函数

6.2.1.示例

<div id="app"><p v-if="isShow" v-for="item in items">{{item.title}}</p>
</div>

🍟创建vue实例,存放isShowitems数据

const app = new Vue({el:"#app",data(){return{items:[{title:"foo"},{title:"更多"} ] } },computed:{isShow(){return this.items && this.items.length > 0 } }
})

🧇模板指令的代码都会生成在render函数中,通过app.$options.render就能得到渲染函数

f anonymous(){with(this){return _c('div',{attrs:{"id":"app"}},_l((items),function(item){return (isShow) ? _c("p",[_v("\n" + _s(item.title) + "\n")]) : _e() }),0)}
}

_l是vue的列表渲染函数,函数内部都会进行一次if判断
初步得到结论:v-for优先级是比v-if
🍖再将v-forv-if放到不同标签上

<div id="app"><template v-if="isShow"><p v-for="item in listData" :key="item.id">{{}}</p> </template>
</div>

再输出render函数

f anonymous(){with(this){return _c('div',{attrs:{"id":"app"}},[(isShow)?[_v("\n"),_l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)}
}

当作用在不同标签上时,是先进行判断,再进行列表的渲染。
在进行if判断时,v-for是比v-if先进行判断
最终结论:v-for优先级高于v-if

6.3.注意事项

🥞两个指令不要放在同一个元素上,带来性能方面的浪费。
外层嵌套template(页面渲染不生成dom节点),进行判断,在内部v-for循环
如果条件出现在内部,通过计算属性computed提前过滤掉不需要显式的项

computed:{listdata:function(){return this.list.filter(function(item){return item.isShow }) }
}

7.v-show和v-if区别?使用场景

7.1.共同点

🌮都能控制元素是否显式

7.2.区别

  • 控制手段不同
  • 编译过程不同
  • 编译条件不同
    🍿控制手段不同:v-show隐藏是为元素添加样式隐藏display:none,dom元素依旧还在。v-if显式隐藏是将dom整个添加或删除
    🧇编译过程不同:v-if切换有有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件。v-show只是简单的基于css切换
    🧀编译条件:v-if是真正的条件渲染,它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。只有渲染条件为假时,并不做操作,直到为真才渲染。
    🌭性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

7.3.原理分析

大概过程

  • 将模板template转为ast结构的js对象
  • ast得到的js对象拼装renderstaticRenderFns函数
  • renderstaticRenderFns函数被调用后生成虚拟VNODE节点,该节点包含创建DOM节点所需信息
  • vm.patch函数通过虚拟DOM算法利用VNODE节点创建真实DOM

7.3.1.v-show

🚓不管初始条件是什么,元素总是会被渲染

7.3.2.v-if

🥙v-if在实现上比v-show要复杂,因为还有else else-if等条件需要处理

7.4.使用场景

v-if相比v-show开销更大,如果需要频繁切换,使用v-show较合适,如果在运行时条件很少改变,使用v-if较合适

8.vue中的key

🚓在使用v-for时,需要给单元加上key
key是给每一个vnode的唯一id,也是diff的一种优化策略,可以根据key,更准确,更快的找到对应的vnode节点

8.1.1.背后的事情

  • 🎉如果不用key,Vue会采用就地原则,最小化element的移动,并且会尝试尽最大程度在同适当的地方对相同类型的element,做patch或者reuse
  • 🍟如果使用key,Vue会根据keys的顺序记录element,曾经拥有了key的element 如果不再出现的话,会被直接remove或destoryed
  • 用+new Date()生成的时间戳作为key,手动强制触发重新渲染
  • 当拥有新值的render作为key时,拥有了新key的comp出现了,那么旧key Comp会被移除,新 key Comp触发渲染

8.2.设置key与不设置key区别

🧨创建一个实例,2秒后往items插入数据

<body><div id="app"><p v-for="item in items" :key="item">{{item}}</p> </div><script>const app = new Vue({el:'#app',data:{items:['a','b','c','d']},mounted(){setTimeout(()=>{this.itmes.splice(2,0,'f')},2000) } }) </script>
</body>

🥪在不使用key时,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2.1.设置key值一定能提高diff效率吗

  • 🧀文档明确表示
    当用v-for正在更新已渲染过的元素列表时,它默认用"就地复用"策略。如果数据项的顺序被改变,vue将不会移动dom元素来匹配数据项的顺序,而是简单复用此处每个元素,并且确保它在特定索引下显示已渲染过的每个元素。
  • 🍗此默认的模式是高效的,只适用于不依赖子组件状态或临时dom状态(例如:表单输入值)的列表渲染输出
  • 🌭

9.常用的修饰符

9.1.定义

  • 🌮是用于限定类型以及类型成员的声明的一种符号
    处理了许多DOM事件的细节,不再需要花时间去处理零碎的事情,而能有更多的精力专注于程序的逻辑处理。
    分为以下五种:
  • 表单修饰符
  • 事件修饰符
  • 鼠标按键修饰符
  • 键值修饰符
  • v-bind修饰符

9.2.作用

9.2.1.表单修饰符

🌭在填写表单时用的最多的是input标签,指令用的最多的是v-model,关于表单的修饰符有

  • lazy
  • trim
  • number
9.2.1.1.lazy

🍿在填写完信息后,光标离开标签时,才会将值赋予给value,也就是在change事件之后之后再进行信息同步

<input type="text" v-model.lazy="value" />
<p>{{value}}</p>
9.2.1.2.trim

🧀自动过滤用户输入的首空格字符,而中间的空格不会过滤

<input type="text" v-model.trim="value" />
9.2.1.3.number

🍗自动将用户的输入值转为数值类型,但如果这个值无法被parseFloat解析,则会返回原来的值

<input v-model.number="age" type="number">

9.2.2.事件修饰符

🥪是对事件捕获以及目标进行了处理,有如下

  • stop
  • prevent
  • self
  • once
  • capture
  • passive
  • native
9.2.2.1.stop

🧨阻止事件冒泡,相当于调用event.stopPropagation方法

<div @click="shout(2)"><button @click.stop="shout(1)">ok</button>
</div>
9.2.2.2.prevent

🚗阻止默认行为,相当于event.preventDefault方法

<form v-on:submit.prevent="onSubmit"></form>
9.2.2.3.self

🎉只当在event.target是当前元素自身时触发处理函数

<div v-on:click.self="">...</div>

🍕顺序很重要;相应的代码会以同样的顺序产生。用v-on:click.prevent.self会阻止所有的点击。而v-on:click.self.prevent 只会阻止对元素自身的点击

9.2.2.4.once

🚓绑定了事件,只能触发一次,第二次就不会触发

<button @click.once="add(1)">ok</button>
9.2.2.5.capture

🍚使事件触发从包含这个元素的顶层开始往下触发

<div @click.capture="add(1)">
obj1
<div @click.capture="add(2)">
obj2
<div @click="add(3)">
obj3
<div @click="add(4)">
obj4</div>
</div>
</div>
</div>
9.2.2.6.passive

🍔在移动端,当监听元素滚动事件时,会一直触发onscroll事件会让网页变卡,因此使用时,相当于给onscroll事件加了一个.lazy修饰符

//滚动事件的默认行为将会立即触发,而不会等待`onScroll`完成,其中包括`event.preventDefault()`的情况
<div v-on:scroll.passive="onScroll"></div>

🥫 .passiveprevent不能一起使用,因为.prevent将会被忽略,同时浏览器会展示一个警告

9.2.2.7.native

🥞让组件变成像html内置标签那样监听根元素的原生事件,否则组件上使用v-on只会监听自定义事件

<chrildren-component v-on:click.native="add" />

注意:使用native修饰符来操作普通html标签是会令事件失效。

10.2.3.鼠标按钮修饰符

🍔鼠标按钮修饰符针对的就是左键、右键、中键点击

  • left左键
  • middle中键
  • right右键
<button @click.left="add(1)">ok</button>
<button @click.right="add(2)"></button>
10.2.4.键盘修饰符

🍚键盘事件(onkeyup,onkeydown),keyCode有很多,但vue为我们提供了很多别名,分为以下两种

  • 普通键(enter、tab、delete、space、esc、)
  • 系统修饰键(ctrl、alt、meta、shift...)
//只有按键为keyCode的时候才触发
<input type="text" @keyup.keyCode="add()">

还可以通过以下方式自定义一些全局的键盘吗别名

Vue.config.keyCodes.f2 = 113
10.2.5.v-bind修饰符

🚓为属性进行操作,

  • async
  • prop
  • camel
10.2.5.1.async

🥪能对props进行一个双向绑定

//父组件
<component :myMessage.sync="bar"></component>
//子组件
this.$emit('update:myMessage',params)

以上方式相当于以下的简写

<component :myMessage="bar" @update:myMessage="add"></component>
<script>
add(e){this.bar = e
}
</script>
<!--子组件-->
<script>
func(){this.$emit('update:myMessage',data)
}
</script>

🍞使用sync需要注意以下:

  • 使用async的时候,子组件传递的事件名称格式必须为update:value,其中value必须与子组件中props中声明的名称完全一致
  • 注意带有.async修饰符的v-bind不能和表达式一起使用
  • v-bind.sync用在一个字面量的对象上,例如v-bind.sync="{title:doc.title}",是无法正常工作的。
10.2.5.2.props

🍿设置自定义标签属性,避免暴露数据,防止污染HTML结构

<input id="uid" title="title1" value="1" :index.prop="index">

相关文章:

vue常见题型(1-10)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式&#xff0c;由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…...

【SpringBoot】使用注解进行XSS防御

在Spring Boot中&#xff0c;我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段&#xff0c;它可以在方法或字段级别对输入进行校验&#xff0c;从而防止XSS攻击。 引入相关依赖 maven依赖&#xff1a; <!--JSR-303/JSR-380用于验证的注解 --> <de…...

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——模拟芯片 真题题目分享&#xff0c;完整题目&#xff0c;无答案&#xff08;共8套&#xff09; 实习岗位…...

vscode 下载慢的解决方法

下载链接示例&#xff1a;https://az764295.vo.msecnd.net/stable/ccbaa2d27e38e5afa3e5c21c1c7bef4657064247/code1.62.3-1637137107amd64.deb 解决方法&#xff1a; 把 az764295.vo.msecnd.net 替换成 vscode.cdn.azure.cn...

STM32ZET6-USART使用

一、原理说明 STM32自带通讯接口 通讯目的 通信方式&#xff1a; 全双工&#xff1a;通信时可以双方同时通信。 半双工&#xff1a;通信时同一时间只能一个设备发送数据&#xff0c;其他设备接收。 单工&#xff1a;只能一个设备发送到另一个设备&#xff0c;例如USART只有…...

es自动补全(仅供自己参考)

elasticssearch提供了CompletionSuggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询效率&#xff0c;对于文档中字段的类型有一些约束&#xff1a; 查询类型必须是&#xff1a;completion 字段内容是多个补全词条形成的数组 P…...

13-综合排序:Function Score Query 优化算分

使用了 function_score 查询来根据某个字段的值对查询结果进行打分。以下是该查询的主要部分&#xff1a; query: 包含了实际执行搜索的部分&#xff0c;在这里包括一个 multi_match 查询。 multi_match&#xff1a;用于在多个字段上执行相同的查询。 query&#xff1a;设置…...

鸿蒙应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&am…...

RabbitMQ设置消息过期时间

RabbitMQ设置消息过期时间 1、过期消息&#xff08;死信&#xff09;2、设置消息过期的两种方式2.1、设置单条消息的过期时间2.1.1、配置文件application.yml2.1.2、配置类RabbitConfig2.1.3、发送消息业务类service&#xff08;核心代码&#xff09;2.1.4、启动类2.1.5、依赖文…...

大数据-209 数据挖掘 机器学习理论 - 梯度下降 梯度下降算法调优

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…...

排序算法简介

直接插入排序&#xff1a; 将第一个元素视为已排序的序列&#xff0c;其余元素视为未排序序列。 ‌ 逐个处理‌&#xff1a;从第二个元素开始&#xff0c;逐个将当前元素插入到已排序序列的适当位置&#xff0c;直到所有元素都被插入。 ‌ 插入过程‌&#xff1a;对于每个待…...

(没有跳过联网激活)导致使用微软账号激活电脑---修改为本地账户和英文名字

修改为本地账户和英文名字 前言微软账号&#xff0c;本地账号与用户名基本知识账户管理方式一方式2 查看账户的sid并且修改文件夹名字和系统变量修改注册表和建立软件路径超链接注意事项总结 前言 当没有联网激活新买的电脑时候&#xff0c;这个就不用看了 当你是联网激活的时…...

[论文粗读][REALM: Retrieval-Augmented Language Model Pre-Training

引言 今天带来一篇检索增强语言模型预训练论文笔记——REALM: Retrieval-Augmented Language Model Pre-Training。这篇论文是在RAG论文出现之前发表的。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 语言模型预训练…...

flink 内存配置(五):网络缓存调优

flink 内存配置&#xff08;一&#xff09;&#xff1a;设置Flink进程内存 flink 内存配置&#xff08;二&#xff09;&#xff1a;设置TaskManager内存 flink 内存配置&#xff08;三&#xff09;&#xff1a;设置JobManager内存 flink 内存配置&#xff08;四&#xff09;…...

set和map的使用

目录 1.关联式容器 2.键值对 3.set 3.1set的模版参数列表 3.2对set的修改 3.2.1insert 3.2.2 erase 3.2.3clear 3.2.4swap 3.2.5 find 3.3set的迭代器 3.4set的容量 4.map 4.1对map的修改 4.1.1insert 4.1.2erase 4.1.3swap 4.1.4clear 4.2map的迭代器 4.3opera…...

LCL三相并网逆变器simulink仿真+说明文档

背景描述&#xff1a; 详细解析了LCL三相并网逆变器的工作原理&#xff0c;强调了准PR比例谐振控制的重要性&#xff0c;讨论了电感、电容参数选择及保护电路设计。通过仿真结果展示了逆变器性能优化的方法&#xff0c;以提升系统效率和稳定性。 模型介绍&#xff1a; 整体模…...

从0开始深度学习(24)——填充和步幅

1 填充 在上一节中&#xff0c;我们的卷积步骤如下&#xff1a; 可以发现输入是 3 3 3\times3 33&#xff0c;输出是 2 2 2\times2 22&#xff0c;这样可能会导致原始图像的边界丢失了许多有用信息&#xff0c;如果应用多层卷积核&#xff0c;累积丢失的像素就更多了&#…...

CPU Study - Instructions Fetch

参考来源&#xff1a;《超标量处理器设计》—— 姚永斌 N-Way CPU 取指问题 如果CPU可以在每个周期内同时解码N条指令&#xff0c;则此类CPU为N-Way超标量处理器。 N-Way超标量处理器需要每个周期从I-Cache中至少取得N条指令&#xff0c;这N条指令成为一组Fetch Group。 为了…...

GJ Round (2024.9) Round 1~7

前言&#xff1a; 点此返回 GJ Round 目录 博客园可能食用更佳 Round 1 (9.10) A 洛谷 P10059 Choose 不难发现结论&#xff1a;记长度为 L L L 时对应的 X X X 最大值为 f ( L ) f(L) f(L)&#xff0c;则 f ( L ) f(L) f(L) 单调不降 那么就可以考虑使用二分求出最小的…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...