Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
Vue2&3
- 基礎性
- 1. 關於Vue2和Vue3生命週期的差別
- 2. Vue2&3組件之間傳參不同點
- Vue2 傳遞與接收
- Vue3 傳遞與接收 (使用script setup語法糖)
- Vue3 傳遞與接收 (不使用script setup語法糖)
- 3. Vue2&3 keep-alive 組件
- Vue2 keep-alive
- Vue3 keep-alive
- 進階性
- 爲什麽POST請求有時會重複調用兩次
- 網路問題
- 跨域請求與預檢請求
- JS原型、原型鏈
- 原型
- 原型鏈
- 繼承 有哪些繼承 優點是什麼
- new 操作符具体干了什么
- js 有哪些方法改变 this 指向
- 对一个函数链式调用 bind,this 指向的是谁?为什么?
整個内容一般都是講Vue2&3的不同點 并無單個版本説明
博客為 >>星光菌子
整理
基礎性
1. 關於Vue2和Vue3生命週期的差別
-
相似的生命周期阶段
Vue 2
和Vue 3
都包含以下几个核心的生命周期阶段,且对应的钩子函数功能类似 -
创建阶段:在实例初始化时触发,主要用于初始化数据和事件
Vue 2
:beforeCreate 和 created
Vue 3
:beforeCreate 和 created
不过在 Vue 3 的组合式 API 里,beforeCreate 和 created可以省略
,因为 setup 函数在这个阶段之前执行,能完成相同的初始化工作 -
挂载阶段:在实例挂载到 DOM 之前和之后触发
Vue 2
:beforeMount 和 mounted
Vue 3
:beforeMount 和 mounted
功能与 Vue 2 一致 -
更新阶段:当响应式数据发生变化,DOM 重新渲染前后触发
Vue 2
:beforeUpdate 和 updated
Vue 3
:beforeUpdate 和 updated
功能与 Vue 2 一致 -
销毁阶段:在实例销毁前后触发,用于清理一些资源
Vue 2
:beforeDestroy(Vue 2.2.0 起也叫 beforeUnmount) 和 destroyed(Vue 2.2.0 起也叫 unmounted)
Vue 3
:beforeUnmount 和 unmounted
beforeUnmount 替代了 Vue 2 的 beforeDestroy,unmounted 替代了 destroyed
2. Vue2&3組件之間傳參不同點
在 Vue 2
和 Vue 3
中,组件之间传参主要有两个明显不同点
-
声明方式:
Vue 2
在组件选项中使用props
选项以对象或数组形式声明接收的属性;Vue 3
在script setup
中使用 defineProps 宏函数来声明,在普通script
中使用和Vue 2
类似的props
选项
-
事件监听:
Vue 2
使用$emit
触发自定义事件,父组件使用v-on
或@
监听;Vue 3
在script setup
中使用defineEmits
宏函数声明可触发的事件,触发方式和Vue 2
类似,但语法更简洁
Vue2 傳遞與接收
# 父组件 Parent.vue<template><div><!-- 引入子组件并传递数据,同时监听子组件触发的事件 --><ChildComponent :message="parentMessage" @childEvent="handleChildEvent" /></div>
</template><script>
// 引入子组件
import ChildComponent from './Child.vue';export default {components: {ChildComponent},data() {return {// 父组件的数据,用于传递给子组件parentMessage: '来自 Vue 2 父组件的数据'};},methods: {// 处理子组件触发的事件的方法handleChildEvent(data) {console.log('在 Vue 2 中收到来自子组件的数据:', data);}}
};
</script>
# 子组件 Child.vue<template><div><!-- 显示从父组件接收到的数据 --><p>{{ message }}</p><!-- 点击按钮触发向父组件发送事件 --><button @click="sendEventToParent">向父组件发送事件</button></div>
</template><script>
export default {// 声明接收父组件传递的 propsprops: ['message'],methods: {// 触发向父组件发送事件的方法sendEventToParent() {// 触发自定义事件并传递数据给父组件this.$emit('childEvent', '来自 Vue 2 子组件的数据');}}
};
</script>
Vue3 傳遞與接收 (使用script setup語法糖)
# 父组件 Parent.vue<template><div><!-- 引入子组件并传递数据,同时监听子组件触发的事件 --><ChildComponent :message="parentMessage" @child-event="handleChildEvent" /></div>
</template><script setup>
import { ref } from 'vue';
// 引入子组件
import ChildComponent from './Child.vue';// 使用 ref 创建响应式数据,作为要传递给子组件的数据
const parentMessage = ref('来自 Vue 3 父组件的数据');// 处理子组件触发的事件的方法
const handleChildEvent = (data) => {console.log('在 Vue 3 中收到来自子组件的数据:', data);
};
</script>
# 子组件 Child.vue<template><div><!-- 显示从父组件接收到的数据 --><p>{{ message }}</p><!-- 点击按钮触发向父组件发送事件 --><button @click="sendEventToParent">向父组件发送事件</button></div>
</template><script setup>
import { defineProps, defineEmits } from 'vue';// 声明接收父组件传递的 props
const props = defineProps({message: String
});// 声明可触发的自定义事件
const emits = defineEmits(['child-event']);// 触发向父组件发送事件的方法
const sendEventToParent = () => {// 触发自定义事件并传递数据给父组件emits('child-event', '来自 Vue 3 子组件的数据');
};
</script>
Vue3 傳遞與接收 (不使用script setup語法糖)
# 父组件 Parent.vue<template><div><!-- 引入子组件,传递数据并监听子组件触发的事件 --><ChildComponent :message="parentMessage" @child-event="handleChildEvent" /></div>
</template><script>
import { ref } from 'vue';
// 引入子组件
import ChildComponent from './Child.vue';export default {components: {ChildComponent},setup() {// 使用 ref 创建响应式数据const parentMessage = ref('来自 Vue 3 父组件的数据');// 处理子组件触发的事件的方法const handleChildEvent = (data) => {console.log('在 Vue 3 中收到来自子组件的数据:', data);};// 返回需要在模板中使用的数据和方法return {parentMessage,handleChildEvent};}
};
</script>
# 子组件 Child.vue<template><div><!-- 显示从父组件接收到的数据 --><p>{{ message }}</p><!-- 点击按钮触发向父组件发送事件 --><button @click="sendEventToParent">向父组件发送事件</button></div>
</template><script>
import { defineComponent } from 'vue';export default defineComponent({// 声明接收父组件传递的 propsprops: {message: {type: String,required: true}},// 声明可触发的自定义事件emits: ['child-event'],setup(props, { emit }) {// 触发向父组件发送事件的方法const sendEventToParent = () => {// 触发自定义事件并传递数据给父组件emit('child-event', '来自 Vue 3 子组件的数据');};// 返回需要在模板中使用的方法return {sendEventToParent};}
});
</script>
3. Vue2&3 keep-alive 組件
keep-alive
是 Vue 提供的一个内置组件,用于缓存动态组件或路由组件,避免组件在切换时重复创建和销毁,从而提高组件的性能和响应速度。下面分别介绍 Vue 2 和 Vue 3 中 keep-alive 的使用方法
activated
和deactivated
是比較特殊的兩個鉤子,需要keep-live
配合使用
當引入keep-alive
的時候,頁面第一次進入,鉤子的觸發順序created
=>mounted
=>activated
,退出時觸發deactivated
當再次進入(前進或後退)時,只觸發activated
核心功能相同:在
Vue 2
和Vue 3
中,keep-alive
组件的核心功能都是缓存组件实例,避免重复创建和销毁
基本用法相同:都是通过将需要缓存的组件包裹在<keep-alive>
标签内来实现缓存
Vue2 keep-alive
<template><!-- 使用 keep-alive 包裹需要缓存的组件 --><keep-alive><!-- 通过 is 指令动态切换组件 --><component :is="currentComponent"></component></keep-alive><!-- 切换组件的按钮 --><button @click="toggleComponent">Toggle Component</button>
</template>
<script>
// 引入组件
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';
export default {data() {return {// 当前显示的组件currentComponent: 'ComponentA'};},components: {ComponentA,ComponentB},methods: {toggleComponent() {// 切换组件this.currentComponent = this.currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA';}}
};
</script>
// ComponentA.vue
<template><div><h1>Component A</h1></div>
</template>
<script>
export default {activated() {// 组件被激活时触发console.log('Component A activated');},deactivated() {// 组件被停用时触发console.log('Component A deactivated');}
};
</script>
Vue3 keep-alive
<template><!-- 使用 keep-alive 包裹需要缓存的组件 --><keep-alive><!-- 通过 is 指令动态切换组件 --><component :is="currentComponent"></component></keep-alive><!-- 切换组件的按钮 --><button @click="toggleComponent">Toggle Component</button>
</template><script setup>
import { ref } from 'vue';
// 引入组件
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';// 定义当前显示的组件
const currentComponent = ref(ComponentA);
const toggleComponent = () => {// 切换组件currentComponent.value = currentComponent.value === ComponentA ? ComponentB : ComponentA;
};
</script>
// ComponentA.vue
<template><div><h1>Component A</h1></div>
</template>
<script setup>
import { onActivated, onDeactivated } from 'vue';
// 组件被激活时触发
onActivated(() => {console.log('Component A activated');
});
// 组件被停用时触发
onDeactivated(() => {console.log('Component A deactivated');
});
</script>
進階性
爲什麽POST請求有時會重複調用兩次
網路問題
有時瀏覽器為了確保請求的可靠性,會在網路不穩定的情況下自動重試請求
如果第一次POST
請求因網路問題而沒有成功,瀏覽器可能會自動再發一次請求
這種情況下,我們會看到兩次POST
請求
跨域請求與預檢請求
當我們進行跨網域請求時,尤其是使用
CORS(跨網域資源共用)
時,瀏覽器會在正式發送POST
請求之前發送OPTIONS
請求,這就是所謂的預檢請求
這是為了確定伺服器是否允許跨網域請求
fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': 'Bearer token'},body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));# 在開發者工具中,我們可以看到先發了一個OPTIONS請求,接著才是實際的POST請求
JS原型、原型鏈
原型
- ① 所有引用类型都有一个
__proto__ (隐式原型)
属性,属性值是一个普通的对象 - ② 所有函数都有一个
prototype(原型)
属性,属性值是一个普通的对象 - ③ 所有引用类型的
__proto__
属性指向它构造函数的prototype
原型鏈
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的 __proto__
隐式原型上查找,即它的构造函数的 prototype
,如果还没有找到就会再在构造函数的 prototype
的 __proto__
中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链
原型鏈判斷
Object.prototype.__proto__; //null
Function.prototype.__proto__; //Object.prototype
Object.__proto__; //Function.prototype
Object instanceof Function; //true
Function instanceof Object; //true
Function.prototype === Function.__proto__; //true
繼承 有哪些繼承 優點是什麼
继承(inheritance
)是面向对象软件技术当中的一个概念。如果一个类别 B
“继承自”另一个类别 A
,就把这个 B
称为“A
的子类”,而把 A
称为“B
的父类别”也可以称“A
是 B
的超类”.
组合继承: 原型链继承和借用构造函数方法组合就是组合继承。用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承.
寄生组合式继承: 结合借用构造函数传递参数和寄生模式实现继承。这是最成熟的方法,也是现在库实现的方法
優點:继承可以使得子类具有父类别的各种属性和方法,在子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能
new 操作符具体干了什么
- 新建一个空对象
obj
- 把
obj
的隐式原型和构造函数通过原型链连接起来 - 将构造函数的
this
指向obj
- 如果该函数没有返回对象,则返回
this
// 定义一个构造函数 Person,用于创建表示人的对象
// 构造函数通常首字母大写,这是一种约定俗成的写法,用于区分普通函数
// 参数 name 表示人的姓名,参数 age 表示人的年龄
function Person(name, age) {// 将传入的 name 参数赋值给新对象的 name 属性this.name = name;// 将传入的 age 参数赋值给新对象的 age 属性this.age = age;
}// 自定义的函数 myNew,用于模拟 new 操作符的功能
// 参数 constructor 是一个构造函数,也就是我们想要用来创建对象的函数
// 使用剩余参数语法 ...args 接收传递给构造函数的所有参数,这些参数会在构造函数执行时使用
function myNew(constructor, ...args) {// 步骤 1: 创建一个新对象// Object.create(constructor.prototype) 方法用于创建一个新对象,// 并将这个新对象的原型设置为构造函数的原型。// 这样新对象就可以继承构造函数原型上定义的所有属性和方法const newObj = Object.create(constructor.prototype);// 步骤 2: 将新对象的 this 指向构造函数,并执行构造函数// constructor.apply(newObj, args) 方法调用构造函数,// 并将构造函数内部的 this 指向新创建的对象 newObj,// 同时将之前收集的参数 args 传递给构造函数,让构造函数可以根据这些参数初始化新对象的属性const result = constructor.apply(newObj, args);// 步骤 3: 判断构造函数的返回值// 如果构造函数返回的是一个对象(通过 typeof result === 'object' 判断类型为对象,// 并且 result!== null 排除返回值为 null 的情况,因为 typeof null 也会返回 'object'),// 就返回构造函数的返回值;// 否则,返回我们在步骤 1 中创建的新对象 newObjreturn typeof result === 'object' && result!== null? result : newObj;
}// 使用自定义的 myNew 函数创建对象
// 这里将 Person 构造函数作为第一个参数传递给 myNew,
// 并将 'John' 和 30 作为后续参数传递,这些参数会在 Person 构造函数执行时使用
const person = myNew(Person, 'John', 30);// 打印创建的对象
// 此时打印出的对象应该包含 name 和 age 属性,值分别为 'John' 和 30
console.log(person);
- Object.create(constructor.prototype):这行代码创建了一个新对象
newObj
,并将其原型指向构造函数的原型,这样,新对象就可以继承构造函数原型上的属性和方法 - constructor.apply(newObj, args):使用
apply
方法将构造函数的this
指向新对象newObj
,并执行构造函数,将参数args
传递给构造函数 - 返回值判断:如果构造函数返回一个对象,则返回该对象;否则,返回新创建的对象
newObj
js 有哪些方法改变 this 指向
call
,apply
,bind
三者的第一个参数都是 this
需要指向的对象,但在后续的参数上只有 apply
是接收一个数组,call
和 bind
用逗号分开;call
和 apply
直接调用,返回的是一个值,而 bind
不直接调用,返回的是一个函数形式,执行:foo.bind(obj)()
# call()
# call() 方法允许你调用一个函数,同时指定该函数内部 this 的值,并且可以依次传递参数给函数
// 定义一个对象,后续将作为 this 的指向
const person = {name: 'Alice'
};
// 定义一个函数,函数内部使用 this 来访问属性
function introduce(hobby) {// 打印出根据 this 指向的对象属性生成的介绍语句console.log(`大家好,我叫 ${this.name},我喜欢 ${hobby}。`);
}
// 使用 call 方法调用 introduce 函数,并将 person 对象作为 this 的指向
// 同时传递 '画画' 作为 introduce 函数的参数
introduce.call(person, '画画'); # -------------------------------分割線-------------------------------------# apply()
# apply() 方法和 call() 方法类似,同样用于调用函数并指定 this 的值,不同之处在于它接受一个数组作为函数的参数
// 定义一个对象,作为 this 的指向
const anotherPerson = {name: 'Bob'
};
// 定义一个函数,内部使用 this 访问属性
function introduceFood(food1, food2) {// 打印出根据 this 指向的对象属性生成的喜欢食物的语句console.log(`我叫 ${this.name},我喜欢吃 ${food1} 和 ${food2}。`);
}
// 使用 apply 方法调用 introduceFood 函数
// 将 anotherPerson 对象作为 this 的指向
// 并以数组形式传递 '披萨' 和 '汉堡' 作为函数参数
introduceFood.apply(anotherPerson, ['披萨', '汉堡']); # -------------------------------分割線-------------------------------------# bind()
# bind() 方法会创建一个新的函数,在调用时会将 this 的值设置为你提供的值,并且可以预先传入部分参数
// 定义一个对象,作为 this 的指向
const student = {name: 'Charlie'
};
// 定义一个函数,内部使用 this 访问属性
function study(subject) {// 打印出根据 this 指向的对象属性生成的学习语句console.log(`${this.name} 正在学习 ${subject}。`);
}
// 使用 bind 方法创建一个新的函数 newStudy
// 将 student 对象作为新函数内部 this 的指向
// 并预先传入 '数学' 作为参数
const newStudy = study.bind(student, '数学');
// 调用新函数
newStudy();
对一个函数链式调用 bind,this 指向的是谁?为什么?
在 JavaScript
中,对一个函数链式调用 bind
时,this
最终指向的是第一次调用 bind
时所指定的对象
- 原因
bind
方法会创建一个新的函数,在调用时这个新函数的this
值会被锁定为bind
方法调用时第一个参数所指定的对象
当对一个函数多次链式调用bind
时,后续的bind
调用并不会改变第一次bind
所确定的this
指向,因为后续的bind
是基于前一次bind
所创建的新函数来操作的,而前一次bind
已经固定了this
的指向
// 定义一个简单的函数,函数内部打印 this 的值
function printThis() {console.log(this);
}
// 创建一个对象,后续会将其作为 this 指向
const obj1 = { name: 'obj1' };
const obj2 = { name: 'obj2' };
// 第一次调用 bind,将 this 指向 obj1
const bound1 = printThis.bind(obj1);
// 对 bound1 再次调用 bind,尝试将 this 指向 obj2
const bound2 = bound1.bind(obj2);
// 调用最终绑定后的函数
bound2();
相关文章:
Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麽POST請求…...
Python基于Django的医用耗材网上申领系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
STM32使用无源蜂鸣器
1.1 介绍: 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同…...
9.1go结构体
Go不是完全面向对象的,没有类的概念,所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义: type Person struct { Name string Age int } 字段可以是任意类型,包括其他结构体或指针。 字段名以大写…...
Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)
Ubuntu20.04本地配置IsaacLab的G1训练环境(一) 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面,如果Ubuntu剩余空间低于60G,则空间不足,除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…...
全星FMEA软件:汽车电子行业研发管理高效之选
全星FMEA软件:汽车电子行业研发管理高效之选 在汽车电子行业,FMEA(失效模式与影响分析)是确保产品质量和安全的关键工具。然而,传统的FMEA分析过程往往繁琐复杂,耗费大量时间和精力。 全星FMEA软件应运而生…...
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 一、简单介绍 二、Docker 下载安…...
OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…...
RLock类详细介绍、应用场景和示例代码
概述 org.redisson.api.RLock 是 Redisson 提供的 分布式可重入锁(类似 ReentrantLock),基于 Redis 实现,常用于 分布式环境 下的 并发控制。 1. RLock 详解 🔹 特点 基于 Redis 实现,支持 集群环境。可…...
【HeadFirst系列之HeadFirst设计模式】第16天之生成器模式(Builder Pattern):让对象构建更优雅!
🚀 生成器模式(Builder Pattern):让对象构建更优雅! “遇到复杂对象构建?试试生成器模式!” 在日常开发中,我们经常会遇到 创建对象属性过多、构造方法过长、可选参数混乱 的问题。这…...
Browser Use+DeepSeek的使用教程
browser-use webui 主要功能 提供了全新的网页界面,简单好用,方便操作。 支持更多大语言模型,比如 Gemini、OpenAI、Azure 等,还有最近爆火的国产大模型 DeepSeek,未来还会加更多。 支持用自己的浏览器,不用…...
“此电脑”中删除WPS云盘方法(百度网盘通用)
📣此方法适用于卸载WPS云盘后,WPS云盘图标依然在此电脑中显示的问题。 原理:通过注册来进行删除 步骤: WIN键R,打开运行窗口,输入regedit命令,来打开【注册表编辑器】; 从左侧,依…...
1. 树莓派上配置机器人环境(具身智能机器人套件)
1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...
正则表达式(2)匹配规则
正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合,并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类:[abc…...
Golang实践录:go发布版本信息收集
go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文,为方便阅读,使用工具翻译成中文,重要特性参考其它资料补充/修改。由于发布版本内容较多…...
go:windows环境下安装Go语言
1.下载 打开Go语言中文网下载页面: https://studygolang.com/dl 按照对应平台选择下载: https://studygolang.com/dl/golang/go1.19.2.windows-amd64.msi。 2.安装 双击下载好的文件 记下安装路径,删除末尾的反斜杠: C:\Program…...
遵义市招生管理信息系统的开发与实现
近年来,随着信息技术的发展,各类管理系统在教育领域得到广泛应用。本文将介绍如何开发一个基于Web的招生管理信息系统,以提高遵义市招生工作的效率和透明度。 系统架构设计 本系统采用典型的三层架构,包括表示层、业务逻辑层和数…...
Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Pytest自动化框架
目录 Pytest简单介绍 第一章:Pytest console命令 1.pytest -v 参数 -h 参数 其他一些参数:仅供参考 第二章. mark标记 pytest.mark.skip pytest.mark.skipif pytest.mark.xfail 编辑 pytest.mark.patametrize 单个参数 多个参数 直接…...
算法之 前缀和
文章目录 前缀和基础3427.变长子数组求和 前缀和与哈希表1524.和为奇数的子数组数目 距离和1685.有序数组中绝对值之和 前缀异或和1177.构建回文串检测 其他一维前缀和1310.子数组异或查询 二维前缀和1314.矩阵区域和 前缀和,就是定义pre[i] 为nums的前i个元素的和值…...
【Windows下Gitbook快速入门使用】
Windows下Gitbook快速入门使用 1 工具安装1.1 Node.js下载安装1.1 环境变量1.2 npm配置1.3 安装gitbook 2 gitbook使用2.1 gitbook 无法执行2.2 gitbook常用命令 Gitbook是一个软件,使用Git和Markdown来编排书本; GitBook helps you pushlish beautiful …...
python网络爬虫开发实战之基本库使用
目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…...
【hello git】git rebase、git merge、git stash、git cherry-pick
目录 一、git merge:保留了原有分支的提交结构 二、git rebase:提交分支更加整洁 三、git stash 四、git cherry-pick 共同点:将 一个分支的提交 合并到 到另一个上分支上去 一、git merge:保留了原有分支的提交结构 现有一个模型…...
deepseek、腾讯元宝deepseek R1、百度deepseekR1关系
分析与结论 区别与联系 技术基础与定制方向: DeepSeek官网R1版本:作为基础版本,通常保留通用性设计,适用于广泛的AI应用场景(如自然语言处理、数据分析等)。其优势在于技术原生性和官方直接支持。腾讯元宝…...
DeepSeek + 沉浸式翻译 打造智能翻译助手
本文详细介绍如何使用 DeepSeek API 沉浸式翻译插件打造个性化翻译助手。 一、DeepSeek API 配置 基础配置 API 基础地址:https://api.deepseek.com需要申请 API Key支持与 OpenAI SDK 兼容的调用方式 可用模型 deepseek-chat:已升级为 DeepSeek-V3&am…...
iOS 聊天 IM 消息收发管理工具
iOS 聊天 IM 消息收发管理工具 连续疯狂加班告一段落,趁着离职前夕的空闲时间,整理一下重构相关的文档。之前写过两篇文章 iOS 客户端 IM 以及列表 UI 框架 、iOS 客户端 IM 消息卡片插件化,突然发现时间过的真的很快,这都已经是…...
从零开始学习Slam--数学概念
正交矩阵 矩阵的转置等于它的逆矩阵,这样的矩阵称之为正交矩阵 即: Q T Q I Q^T Q I QTQI, 这样的矩阵列向量都是单位向量且两两正交。 旋转矩阵属于特殊的正交群,即SO(n),这里n通常是3,所以SO(3)就是…...
3.使用ElementUI搭建侧边栏及顶部栏
1. 安装ElementUI ElementUI是基于 Vue 2.0 的桌面端组件库。使用之前,需要在项目文件夹中安装ElementUI,在终端中输入以下命令,进行安装。 npm i element-ui -S并在main.js中引入ElementUI 2. 使用elmentUI组件进行页面布局 2.1 清空原…...
pandas-基础(数据结构及文件访问)
1 Pandas的数据结构 1.1 Series 特点:一维的数据型对象,包含一个值序列和数据标签(即索引) 创建Series: pandas.Series(dataNone, indexNone, dtypeNone, nameNone, copyFalse, fastpathFalse) 参数说明: data&a…...
windows下使用msys2编译ffmpeg
三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...
Linux驱动开发(1.基础创建)
序言:从高层逻辑到底层硬件的回归 在当今的软件开发中,我们习惯于用高级语言构建抽象层——通过框架、库和云服务快速实现功能。这种“软逻辑”的便利性让开发效率倍增,却也逐渐模糊了我们对计算机本质的认知:一切代码终将落地为…...
长短期记忆网络(LSTM)学习指南
长短期记忆网络(LSTM)学习指南 1. 定义和背景 长短期记忆网络(Long Short-Term Memory, LSTM)是一种递归神经网络(RNN)的变体,旨在解决传统RNN在处理长期依赖关系时遇到的梯度消失或爆炸问题。…...
蓝耘智算平台助力阿里万相2.1:文生图创作攻略
声明:非广告,为用户体验文章 目录 引言 一、认识蓝耘智算平台与阿里万相 2.1 (一)蓝耘智算平台概述 (二)阿里万相 2.1 文生图技术解析 二、蓝耘智算平台注册与环境准备 (一)注…...
HarmonyOS ArkTS声明式UI开发实战教程
引言:为何选择ArkTS? 在HarmonyOS生态快速发展的当下,ArkTS作为新一代声明式UI开发框架,正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛",直到接触ArkTS后才发现&…...
电脑总显示串口正在被占用处理方法
1.现象 在嵌入式开发过程中,有很多情况下要使用串口调试,其中485/422/232转usb串口是非常常见的做法。 根据协议,接口芯片不同,需要安装对应的驱动程序,比如ch340,cp2102,CDM212364等驱动。可…...
linux 安装nvidia 驱动所有发行版通用
之前有写过Ubuntu安装驱动的手册: https://blog.csdn.net/qq_50247813/article/details/146062785 到官网寻找合适的驱动: https://www.nvidia.cn/drivers/lookup 直接选择 linux 64-bit 适用于所有x86构架的linux,arm需要选择arm架构。 这次…...
PHP之数组
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于数组的信息。 PHP中的数组不用指定数据类型,同时索引不一定是数字。 与其说是数组,其实更像map。 创建和输出 $arr array(1, 2, 3); $arr1 [1, 2, 3]; var_dump(…...
【js逆向】图灵爬虫练习平台 第十五题
地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvMTUv 不一样的两个值 hook cookie两次执行出现密文v值 最主要是这个函数 直接扣整个js代码,然后补环境即可,可以参考 同花顺那篇文章,有讲 关键代码 var rt;!funct…...
LeetCode 1328.破坏回文串:贪心
【LetMeFly】1328.破坏回文串:贪心 力扣题目链接:https://leetcode.cn/problems/break-a-palindrome/ 给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典…...
【商城实战(11)】解锁商品搜索与筛选功能,提升用户购物体验
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Android AudioFlinger(五)—— 揭开AudioMixer面纱
前言: 在 Android 音频系统中,AudioMixer 是音频框架中一个关键的组件,用于处理多路音频流的混音操作。它主要存在于音频回放路径中,是 AudioFlinger 服务的一部分。 上一节我们讲threadloop的时候,提到了一个函数pr…...
HTML-05NPM使用踩坑
2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷,然后一番折腾之后,终究还是没有解决npm的问题😞😞😞,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…...
并发编程——累加器
目录 1 AtomicLong 1.1 核心功能 1.2 实现原理: (1)基于 Unsafe 的底层操作 (2) volatile字段的内存可见性 (3)CAS 操作与 ABA 问题 1.3 性能分析 1.4 使用场景 2 LongAdder 核心设计原理 1 分段存储 2 分散更新策略 3.处理高竞…...
LeetCode - 28 找出字符串中第一个匹配项的下标
题目来源 28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode) 题目解析 暴力解法 本题如果采用暴力解法的话,可以定义两个指针 i,j,其中 i 指针用于扫描 S(haystack)串,j 指针…...
人机交互革命:从触屏到脑波的13维战争
人机交互革命:从触屏到脑波的13维战争 一、交互维度大爆炸:重新定义人机沟通边界 当ChatGPT开始解析你的微表情,当Neuralink芯片能读取皮层信号,人机交互已突破【键鼠】的次元壁。我们正经历人类史上最大规模的感官革命ÿ…...
如何查看Elastic-Job在Zookeeper中的注册信息
目录 使用zkCli.sh脚本 1. 连接ZooKeeper 2. 查看根目录 3. 查看具体作业的注册信息 4. 退出ZooKeeper客户端 使用ZooInspector工具 1.下载并安装ZooInspector: 2.连接到Zookeeper服务器: 3.浏览服务节点: 4.查看服务实例数据: 注…...
【数据库系统概论】事务
一、事务的定义 1.定义: 事务是数据库管理系统中的一个逻辑工作单元,它由一组操作组成,这些操作是数据库的增删查改的这种一些类的操作,这些操作要么全部成功,要么全部失败。逻辑工作单元是指在数据库中执行的一组操…...
FPGA 配置原理
用户编程控制的FPGA 是通过加载比特位流配置内部的存储单元实现的。该存储单元就是所谓的配置单元,它必须在器件上电后进行配置,从而设置查找表(LUT)的属性、连线方式、IOB 电压标准和其它的用户设计。 1.配置帧 以Xilinx 公司的…...
《DeepSeek MoE架构下,动态专家路由优化全解析》
在人工智能飞速发展的当下,模型架构的创新与优化始终是推动技术进步的关键力量。DeepSeek的混合专家模型(MoE)架构,以其独特的设计理念和卓越的性能表现,在大模型领域崭露头角。而其中的动态专家路由优化技术ÿ…...
ORA-01861一次奇怪的字符串格式匹配问题
客户的一个生产库服务器挂了,还好有容灾数据库,在把生产库切换到容灾库后,大部分的业务都恢复了,但是有一个上传数据的应用报错: ORA-01861:文字与格式字符串不匹配 这个报错呢以前遇到过好几次,基本都是date类型和字符串类型匹配的问题, 一般就是字段需要date类型的数据,但是…...