Vue3学习总结
一、Vue 3 基础搭建与核心语法
1.创建 Vue 3 应用
在项目的入口文件 main.js
中,通过以下代码创建 Vue 3 应用实例:
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);
app.mount('#app');
这几行代码的作用是引入 createApp
函数,创建一个应用实例,并将 App.vue
挂载到页面上指定的 #app
元素。
2.组合式 API
Vue 3 引入了 组合式 API(Composition API),提供了更灵活的逻辑复用方式。
- 组合逻辑:Composition API 提供了一种新的方式来组织和复用逻辑代码。它允许开发者以函数的形式定义组件的逻辑,而不是像 Options API 那样分散在
data
、methods
、computed
等选项中。 - 生命周期钩子:如
onMounted
,onUnmounted
等等,与 Options API 中的生命周期钩子相对应,但更灵活,可以自由组合。 -
setup
:组件的入口函数,用于定义响应式数据、计算属性、方法等。
<script setup>
import { ref, onMounted } from 'vue';const message = ref('Hello World');onMounted(() => {console.log('Component is mounted!');
});
</script><template><p>{{ message }}</p>
</template>
import { ref, onMounted } from 'vue';export default {setup() {const count = ref(0);onMounted(() => {console.log('Component mounted');});return {count,};},
};
3.<script setup>
语法
<script setup>
是 Vue 3 提供的重要语法糖,极大地简化了组件的代码结构。在该语法下,模块顶层的代码会自动编译到 setup()
函数中,无需显式定义 setup
函数。
二、响应式原理与数据处理
Vue 3 使用 Proxy 实现响应式系统,Vue 3 使用 Proxy 替代了 Vue 的 Object.defineProperty
,实现了更强大的响应式系统。
1.ref
和 reactive
ref
和reactive
:ref
用于创建简单的响应式引用,而reactive
则用来处理对象。对于数组和对象,建议使用reactive
。.value
访问器:当使用ref
创建的响应式引用时,需要通过.value
来读取或设置其内部值。
<script setup>
import { ref, reactive } from 'vue';// 使用 ref 创建基本类型响应式变量
const count = ref(0);// 使用 reactive 创建复杂类型的响应式对象
const state = reactive({name: 'Vue',version: 3,
});function increment() {count.value++;
}
</script><template><div><p>Count is {{ count }}</p><button @click="increment">Increment</button><p>Name is {{ state.name }}, Version is {{ state.version }}</p></div>
</template>
2.toRefs
toRefs
函数用于将一个响应式对象转换为普通对象,其中每个属性都转换为一个 ref
,这样在解构响应式对象时能够保持其响应性。
<template><div><p>姓名: {{ name }}</p><p>年龄: {{ age }}</p></div>
</template><script setup>
import { reactive, toRefs } from 'vue';const person = reactive({name: '王五',age: 30
});const { name, age } = toRefs(person);
</script>
三、组件化开发
1.组件定义与使用
Vue 3 使用 .vue
文件来定义组件,包含 <template>
、<script>
和 <style>
三个部分。
<template><div><p>{{ message }}</p><button @click="increment">Increment</button></div>
</template><script>
import { ref } from 'vue';export default {setup() {const message = ref('Hello, Vue 3!');const increment = () => {message.value += '!';};return {message,increment,};},
};
</script><style scoped>
p {color: blue;
}
</style>
使用 <script setup>
定义组件十分便捷,只需在 <script setup>
标签内编写逻辑代码,在 <template>
标签内编写模板内容。
// 子组件 Child.vue
<template><div><p>这是一个子组件</p></div>
</template><script setup>
// 这里可以定义子组件的逻辑
</script>
在父组件中使用子组件时,先导入子组件,然后在模板中直接使用子组件标签即可。
// 父组件 Parent.vue
<template><div><Child /></div>
</template><script setup>
import Child from './Child.vue';
</script>
2.组件通信
-
Props:父组件向子组件传递数据。
-
事件:子组件向父组件传递数据。
父传子
通过 props
实现父组件向子组件传递数据。
// 父组件 Parent.vue
<template><div><ChildComponent :message="parentMessage" /></div>
</template><script setup>
import ChildComponent from './ChildComponent.vue';
const parentMessage = '父组件传递的信息';
</script>
// 子组件 ChildComponent.vue
<template><div><p>{{ message }}</p></div>
</template><script setup>
const props = defineProps(['message']);
</script>
子传父
子组件通过 emit
触发事件向父组件传递数据。
// 子组件 Child.vue
<template><div><button @click="sendDataToParent">传递数据给父组件</button></div>
</template><script setup>
import { defineEmits } from 'vue';const emits = defineEmits(['dataFromChild']);
const sendDataToParent = () => {emits('dataFromChild', '子组件的数据');
};
</script>
// 父组件 Parent.vue
<template><div><Child @dataFromChild="handleDataFromChild" /></div>
</template><script setup>
import Child from './Child.vue';const handleDataFromChild = (data) => {console.log('接收到子组件的数据:', data);
};
</script>
兄弟组件通信
兄弟组件通信通常借助事件总线或状态管理库(如 Pinia)来实现。事件总线可以通过创建一个空的 Vue 实例来作为事件中心,兄弟组件通过这个实例来触发和监听事件。使用 Pinia 时,将共享的数据存储在 Pinia 的 store 中,兄弟组件都可以访问和修改这个 store 中的数据。
3.插槽
匿名插槽
父组件可以在子组件标签内插入内容,子组件通过 <slot>
标签渲染这些内容。
// 父组件 Parent.vue
<template><div><ChildComponent><p>这是插入到子组件的匿名插槽内容</p></ChildComponent></div>
</template><script setup>
import ChildComponent from './ChildComponent.vue';
</script>
// 子组件 ChildComponent.vue
<template><div><slot></slot></div>
</template><script setup>
</script>
具名插槽
父组件可以通过 template
标签和 #name
语法指定插槽名称,子组件通过 <slot name="xxx">
渲染对应的内容。
// 父组件 Parent.vue
<template><div><ChildComponent><template #header><h1>这是头部插槽内容</h1></template><template #content><p>这是内容插槽内容</p></template></ChildComponent></div>
</template><script setup>
import ChildComponent from './ChildComponent.vue';
</script>
// 子组件 ChildComponent.vue
<template><div><slot name="header"></slot><slot name="content"></slot></div>
</template><script setup>
</script>
四、生命周期管理
在 <script setup>
中,可以方便地使用各种生命周期钩子函数,这些钩子函数在组件的不同阶段被调用。
<template><div><p>组件内容</p></div>
</template><script setup>
import { onMounted, onUpdated, onUnmounted } from 'vue';onMounted(() => {console.log('组件已挂载');
});onUpdated(() => {console.log('组件已更新');
});onUnmounted(() => {console.log('组件已卸载');
});
</script>
onMounted
在组件挂载完成后调用,可用于初始化数据、获取 DOM 元素等操作;onUpdated
在组件更新后调用,可用于在数据更新后执行一些额外的逻辑;onUnmounted
在组件卸载时调用,可用于清理定时器、解绑事件等操作。
五、计算属性与监听器
1.计算属性
计算属性是基于响应式数据的缓存值,只有当它所依赖的响应式数据发生变化时才会重新计算。
<template><div><p>原始数字: {{ number }}</p><p>加倍后的数字: {{ doubleNumber }}</p></div>
</template><script setup>
import { ref, computed } from 'vue';const number = ref(10);
const doubleNumber = computed(() => number.value * 2);
</script>
在这个例子中,doubleNumber
是一个计算属性,依赖于 number
的值。当 number
变化时,doubleNumber
会自动重新计算。
2.监听器
监听器用于监听响应式数据的变化,并在数据变化时执行相应的操作。
<template><div><input v-model="inputValue" /></div>
</template><script setup>
import { ref, watch } from 'vue';const inputValue = ref('');
watch(inputValue, (newValue, oldValue) => {console.log('新值:', newValue, '旧值:', oldValue);
});
</script>
上述代码中,通过 watch
监听 inputValue
的变化,当 inputValue
改变时,会在控制台打印出新值和旧值。
六、指令系统
1.内置指令
v-model
v-model
用于表单元素的双向数据绑定,使得表单元素的值与响应式数据保持同步。
<template><div><input v-model="inputText" /><p>输入的内容: {{ inputText }}</p></div>
</template><script setup>
import { ref } from 'vue';const inputText = ref('');
</script>
v-if、v-else、v-else-if
这些指令用于条件渲染,根据表达式的真假来决定是否渲染相应的内容。
<template><div><p v-if="isShow">显示的内容</p><p v-else>不显示的内容</p></div>
</template><script setup>
import { ref } from 'vue';const isShow = ref(true);
</script>
v-for
v-for
用于列表渲染,通过遍历数组或对象来渲染多个元素。
<template><div><ul><li v-for="(item, index) in list" :key="index">{{ item }}</li></ul></div>
</template><script setup>
import { ref } from 'vue';const list = ref(['苹果', '香蕉', '橙子']);
</script>
v-bind
v-bind
可以缩写为 :
,用于动态绑定 HTML 属性,使属性值根据响应式数据的变化而变化。
<template><div><img :src="imageUrl" :alt="imageAlt" /></div>
</template><script setup>
import { ref } from 'vue';const imageUrl = ref('path/to/image.jpg');
const imageAlt = ref('描述图片');
</script>
v-on
v-on
可以缩写为 @
,用于绑定事件监听器,当事件触发时执行相应的函数。
<template><div><button @click="handleClick">点击我</button></div>
</template><script setup>
const handleClick = () => {console.log('按钮被点击了');
};
</script>
2.自定义指令
自定义指令可以扩展 Vue 的功能,通过 directive
函数来定义。
<template><div><input v-focus /></div>
</template><script setup>
import { directive } from 'vue';const vFocus = directive('focus', {mounted(el) {el.focus();}
});
</script>
上述代码定义了一个自定义指令 v-focus
,当组件挂载时,会自动将焦点设置在使用该指令的输入框上。
七、状态管理(Pinia)
Vue 3 推荐使用 Pinia 作为状态管理库。
1.安装与引入
首先通过 npm install pinia
安装 Pinia,然后在 main.js
中引入并使用:
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';const pinia = createPinia();
const app = createApp(App);
app.use(pinia);
app.mount('#app');
2.创建 Store
使用 defineStore
函数定义一个 store,用于存储和管理应用的状态。
// store/counter.js
import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),actions: {increment() {this.count++;}}
});
3.在组件中使用 Store
在组件中通过 useCounterStore
函数来访问和使用 store 中的状态和方法。
<template><div><p>计数器: {{ counterStore.count }}</p><button @click="counterStore.increment">增加</button></div>
</template><script setup>
import { useCounterStore } from './store/counter.js';const counterStore = useCounterStore();
</script>
八、路由管理(Vue Router)
1.安装与配置
通过 npm install vue-router
安装 Vue Router,然后在 router/index.js
中配置路由:
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const router = createRouter({// 配置使用history模式history: createWebHistory(import.meta.env.BASE_URL),// 定义路由规则routes: [{path: '/', // 路由名称name: 'home',component: HomeView // 同步组件},{path: '/about',name: 'about',// route level code-splitting// this generates a separate chunk (About.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import('../views/AboutView.vue') // 异步组件}]
})export default router
2.动态路由和嵌套路由
-
动态路由:通过
:id
定义动态路径参数。 -
嵌套路由:通过
children
定义嵌套路由。
const routes = [{path: '/user/:id',component: User,children: [{ path: 'profile', component: Profile },{ path: 'posts', component: Posts },],},
];
3.在 main.js
中引入路由
在 main.js
中引入配置好的路由:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'const app = createApp(App)app.use(router)app.mount('#app')
3.在组件中使用路由
在组件中可以使用 router-link
来创建导航链接,使用 router-view
来显示当前路由对应的组件。
<script setup>
// RouterLink是一个组件
// RouterView也是一个组件
import { RouterLink, RouterView } from 'vue-router'
</script><template><!-- 配置路由出口 --><nav><router-link to="/">Home</router-link><router-link to="/about">About</router-link></nav><main><router-view></router-view></main>
</template><style scoped>
nav {display: flex;width: 200px;
}
nav a {flex: 1;
}
main {width: 400px;height: 200px;border: 1px solid #ccc;
}
</style>
九、性能优化
1 懒加载
-
组件懒加载:使用
defineAsyncComponent
或import()
动态加载组件。 -
路由懒加载:使用
import()
动态加载路由组件。
const Home = defineAsyncComponent(() => import('./views/Home.vue'));
2 代码拆分
-
使用 Webpack 或 Vite 的代码拆分功能,将代码分割成多个 chunk。
3 缓存组件
-
使用
<keep-alive>
缓存组件状态,避免重复渲染。
<keep-alive><router-view />
</keep-alive>
4.Teleport
- 传送内容到DOM的不同位置:允许你把组件的内容“传送”到应用程序中的任意位置,而不受组件层级结构的限制。这对于模态框、提示信息等场景特别有用。
<teleport to="body"><!-- 这里的内容会被插入到 body 元素中 --><div id="modal">...</div>
</teleport>
5.Transition 组件增强
TransitionGroup
和 Transition
:提供了更强大的过渡效果控制,包括列表动画等功能。
6. Suspense
- 异步组件加载:允许你在等待异步依赖(如从服务器获取数据)时展示占位符内容,直到所需资源准备好为止。
<suspense><template #default><AsyncComponent /></template><template #fallback>Loading...</template>
</suspense>
十、最佳实践
1 组件设计
-
单一职责:每个组件只负责一个功能。
-
Props 验证:使用
props
的type
和validator
进行数据验证。
export default {props: {message: {type: String,required: true,validator: (value) => value.length > 0,},},
};
2 代码风格
-
使用组合式 API 组织逻辑。
-
使用
ref
和reactive
定义响应式数据。 -
使用
computed
和watch
处理复杂逻辑。
3 错误处理
-
使用
try...catch
捕获异步错误。 -
使用全局错误处理函数捕获未处理的异常。
app.config.errorHandler = (err, vm, info) => {console.error('Global error:', err);
};
十一、 工具链
1 Vite
Vite 是 Vue 3 的推荐构建工具,支持快速开发和热更新。
2 Vue DevTools
Vue DevTools 是浏览器扩展,用于调试 Vue 应用。
十二、测试
1 单元测试
使用 Jest 或 Vitest 进行单元测试。
import { mount } from '@vue/test-utils';
import MyComponent from './MyComponent.vue';test('renders correctly', () => {const wrapper = mount(MyComponent);expect(wrapper.text()).toContain('Hello, Vue 3!');
});
2 端到端测试
使用 Cypress 进行端到端测试。
describe('MyComponent', () => {it('renders correctly', () => {cy.visit('/');cy.contains('Hello, Vue 3!');});
});
十三、TypeScript 支持
- 内置对 TypeScript 的友好支持:包括类型推断、类型检查以及更好的开发体验。Composition API 特别适合 TypeScript,因为它提供了更明确的类型定义。
<template><p>{{ message }}</p>
</template><script setup lang="ts">
import { ref } from 'vue';const message = ref<string>('Hello, Vue 3 with TypeScript!');
</script>
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Vue3学习总结
一、Vue 3 基础搭建与核心语法 1.创建 Vue 3 应用 在项目的入口文件 main.js 中,通过以下代码创建 Vue 3 应用实例: import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app); 这几行代码的作用是引入…...
![](https://i-blog.csdnimg.cn/img_convert/9bd84aa6c16544bd68ab12c81ea351ad.webp?x-oss-process=image/format,png)
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
![](https://i-blog.csdnimg.cn/direct/bd5db2a2310943cf89637f985253a3c3.heic)
【读书与思考】焦虑与内耗
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 今天一个朋友和我说,最近比较焦虑和内耗,无心工作和学习,我问他你焦虑内耗的时候,时间主要花在哪了,他告诉我说主要花在看有关移…...
![](https://www.ngui.cc/images/no-images.jpg)
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue.js开发入门:从零开始搭建你的第一个项目
前言 嘿,小伙伴们!今天咱们来聊聊 Vue.js,一个超火的前端框架。如果你是编程小白,别怕,跟着我一步步来,保证你能轻松上手,搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...
![](https://i-blog.csdnimg.cn/direct/49af320fcb47436c864c359c3a7bc7a5.png)
LS1046+XILINX XDMA PCIE调通
欢迎点赞收藏,欢迎私下讨论技术,分享技术 硬件平台 :NXP LS1046 XILINX FPGA 软件平台:LINUX 4.19.68 buildroot LS1046 PEX3 接 XILINX FPGA,linux使用designware的PCI主控制器。下载XILINX DMA驱动,解…...
![](https://i-blog.csdnimg.cn/direct/7941b86d92c547cfa3bdc17012bfcbd7.png)
HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系
一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…...
![](https://www.ngui.cc/images/no-images.jpg)
YOLOv10-1.1部分代码阅读笔记-downloads.py
downloads.py ultralytics\utils\downloads.py 目录 downloads.py 1.所需的库和模块 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…...
![](https://i-blog.csdnimg.cn/direct/38ea57cdd8e8406390eb6814d86d96a7.png)
计算机图形学【绘制立方体和正六边形】
工具介绍 OpenGL:一个跨语言的图形API,用于渲染2D和3D图形。它提供了绘制图形所需的底层功能。 GLUT:OpenGL的一个工具库,简化了窗口创建、输入处理和其他与图形环境相关的任务。 使用的函数 1. glClear(GL_COLOR_BUFFER_BIT |…...
![](https://i-blog.csdnimg.cn/direct/922b9077f3a04aeebc20ade87fe091ac.png)
基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,中医药管理平台当然不能排除在外。中医药数据可视化平台是在实际应用和软件工程的开发原理之上,运用Python语言、ECharts技术、…...
![](https://i-blog.csdnimg.cn/direct/1fd04756f5f446f98111096d16a21f14.png)
kafka消费堆积问题探索
背景 我们的商城项目用PHP写的,原本写日志方案用的是PHP的方案,但是,这个方案导致资源消耗一直降不下来,使用了20个CPU。后面考虑使用通过kafka的方案写日志,商城中把产生的日志丢到kafka中,在以go写的项目…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue.js 使用插槽(Slots)优化组件结构
Vue.js 使用插槽(Slots)优化组件结构 今天我们聊聊 Vue.js 的一个超实用功能——插槽(Slots)。插槽是 Vue 组件开发中的神器,用好它,你可以让组件变得更灵活、更可复用,还能写出优雅的代码结构…...
![](https://i-blog.csdnimg.cn/direct/47b25646abcb4c0a80d9d5d1b2e1739c.png)
Broker如何进行定时心跳发送和故障感知
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...
![](https://i-blog.csdnimg.cn/direct/da3228ab454444a1a5d4e5b36c3e88b5.png)
网络安全设备主要有什么
网络安全设备指的肯定是硬件设备了,国内卖安全硬件的没几家,天融信,启明星辰,绿盟,深信服,就这四家卖的比较齐全吧,上它们官网看一下,就知道市面上主要的网络安全设备有哪些了。分类…...
![](https://www.ngui.cc/images/no-images.jpg)
Android Framework WMS全面概述和知识要点
一、概述 定义与作用 在 Android 系统中,WindowManagerService(WMS)就像是一个大管家,负责管理整个系统的窗口界面。它是 Android Framework 的核心组件之一,处于 system_server 进程内,在 Framework 层占…...
![](https://i-blog.csdnimg.cn/img_convert/8e857df036ff6bdbbc963dfb39b78875.webp?x-oss-process=image/format,png)
记一次某红蓝演练经历
在某天接到任务,对xxx进行一次红蓝演练,于是把自己渗透过程给记录下来,漏洞关键地方也会打码,希望各位大佬理解,菜鸡一枚,勿喷/(ㄒoㄒ)/~~ 概述 拿到目标域名第一件事就是信息收集,曾经一位大…...
![](https://i-blog.csdnimg.cn/img_convert/13da8033f31c20ff14e38f2bbe6f260a.png)
一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问
文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站…...
![](https://www.ngui.cc/images/no-images.jpg)
【零基础入门Go语言】struct 和 interface:Go语言是如何实现继承的?
提到面向对象编程中的继承,许多人脑海中可能会浮现出 Java、C 等语言中那一套熟悉的类继承体系。然而,Go 语言作为一门别具一格的编程语言,并没有遵循传统的继承模式。那么,在 Go 语言的世界里,它是怎样实现类似于继承…...
![](https://i-blog.csdnimg.cn/direct/98ae2e0848fb46f5be79f49a696be728.png)
麦田物语学习笔记:实现拖拽物品交换数据和在地图上生成物品
基本流程 1.代码思路 (1)InventoryUI的PlayerSlots与PlayerBag里一一对应,所以想要实现交换数据实际上是,先拿到被拖拽的物体所对的Slot的序号和目标的Slot序号,然后将这两个序号对调一下 (2)物品交换的数据逻辑应该在InventoryManager里去调用,因为InventoryManager里管理了p…...
![](https://i-blog.csdnimg.cn/direct/4f42d0f662e444a3a36d463d7921f42c.jpeg)
一些计算机零碎知识随写(25年1月)-1
我原以为世界上有技术的那批人不会那么闲,我错了,被脚本真实了。 今天正隔着画画呢,手机突然弹出几条安全告警通知。 急忙打开服务器,发现问题不简单,直接关服务器重装系统..... 首先,不要认为小网站&…...
![](https://i-blog.csdnimg.cn/direct/984fc79c2247401ea15895134ccab8d6.png)
Qt学习笔记第81到90讲
第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。 在widget.h内添加新的私有成员变量: QTimer *timer; 在widget类的构造…...
![](https://www.ngui.cc/images/no-images.jpg)
Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
Centos9 Docker 安装 MySQL8.4.0 定时备份数据库到本地 创建目录,创建配置文件启动容器命令定时备份MySQL执行脚本Linux每日定时任务命令文件内参数其他时间参数 AT一次性定时任务 创建目录,创建配置文件 $ mkdir -p /opt/mysql/conf$ vim /opt/mysql/…...
![](https://i-blog.csdnimg.cn/direct/d23d4208f7054c5cb70348b66be79a1a.png)
网络原理一>UDP协议详解
UDP和TCP都是应用层中的重要协议,如果做基础架构开发,会用得多一些。 这一篇我们先简单聊一下的UDP TCP格式呈现: 我们知道UDP是一种无连接,面向数据报,全双工,不可靠传输特性的网络协议。 基本格式如图…...
![](https://i-blog.csdnimg.cn/direct/2312d43857b94ebf97bfd4f64fcb967b.png)
MySQL的小问题
编码问题 不管官方使用什么编码:latin1、gbk、utf8、utfmb4。统一使用utfmb4 MySQL中的utf8并不是utf-8,它省略了一个字节,只是用三个字节存储所有的符号,utfmb4才是utf-8 远程登录问题: MySQL官方默认没有启动远程…...
![](https://i-blog.csdnimg.cn/img_convert/c6bba40421aee7fa4fbef5bfca8e9c6d.png)
Mac——Docker desktop安装与使用教程
摘要 本文是一篇关于Mac系统下Docker Desktop安装与使用教程的博文。首先介绍连接WiFi网络,然后详细阐述了如何在Mac上安装Docker,包括下载地址以及不同芯片版本的选择。接着讲解了如何下载基础镜像和指定版本镜像,旨在帮助用户在Mac上高效使…...
![](https://i-blog.csdnimg.cn/direct/c5c70ceda7b4482cbae3a1f7fc53327e.png)
FastApi Swagger 序列化问题
问题 错误现象: fastapi的 swagger 界面无法正常打开控制台报错:raise PydanticInvalidForJsonSchema(fCannot generate a JsonSchema for {error_info}) 详细报错: File "d:\Envs\miniconda3\envs\xdagent\lib\site-packages\pydan…...
![](https://i-blog.csdnimg.cn/direct/433cee489fa1439aaf6ab316c49788e3.png)
《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)
CountVectorizer方法介绍 CountVectorizer 是 scikit-learn 库中的一个工具,它主要用于将文本数据转换为词频矩阵,而不是传统意义上的词向量转换,但可以作为词向量转换的一种基础形式。用于将文本数据转换为词频矩阵,它是文本特征…...
![](https://i-blog.csdnimg.cn/img_convert/d0b897e4aadf7cdc2ea13d5174a60099.png)
UML系列之Rational Rose笔记三:活动图(泳道图)
一、新建活动图(泳道图) 依旧在用例视图里面,新建一个activity diagram;新建好之后,就可以绘制活动图了: 正常每个活动需要一个开始,点击黑点,然后在图中某个位置安放,接…...
![](https://i-blog.csdnimg.cn/img_convert/91fb3d3c48ed8f4f96e5b934a7581ea1.png)
Java面向对象面经总结
目录 面向对象基础 面向对象与面向过程的区别 创建一个对象用什么运算符,对象实体与对象引用的区别 对象相等和引用相等的区别 构造方法的特点,是否可被重写? 面向对象三大特征 封装 继承 多态 接口和抽象类的共同点和区别 深拷贝…...
![](https://www.ngui.cc/images/no-images.jpg)
红队工具使用全解析:揭开网络安全神秘面纱一角
红队工具使用全解析:揭开网络安全神秘面纱一角 B站红队公益课:https://space.bilibili.com/350329294 学习网盘资源链接:https://pan.quark.cn/s/4079487939e8 嘿,各位网络安全爱好者们!在风云变幻的网络安全战场上&am…...
![](/images/no-images.jpg)
网站模板免费下载中文版/百度电话客服24小时
“计算机科学只存在两个难题:缓存失效和命名。” ——Phil KarIton 前言 命名一直是我编程过程中很头痛的事,有时为了一个恰当的名称是想了又想,还忍不住Google一下。命名真是一门艺术,好的命名那叫一个高大上。今天总结一些前端命…...
![](https://img-blog.csdnimg.cn/img_convert/28ca4235d234986e0189d28e7ca5e636.png)
院校网站建设/百度竞价排名系统
作为一名优秀的项目经理,在工作中,经常需要对项目进度进行追踪,而在项目追踪中,我常用甘特图来进行追踪,以此来更好的展现工作完成情况的进度。工作中,如果你列出这样的项目进度报告交给老板,不…...
![](http://hiphotos.baidu.com/see7di/pic/item/12094aee8dd9128fb3fb95a3.jpg)
wordpress 判断置顶/百度关键字
/*/调用方法: Pop(this,{ pos:3,//上;右;下;左 tim:3000, oft:{x:10,y:0}, htm:这是需要显示的内容<br>HTML5入门之新标签的解析,//可以为fun fun:function(i){} }); Pop(); /*/ 核心代码 var Popfunction(i,opt){ var $Pop,$Hand; if(!i || !opt){Function.attempt(func…...
![](http://top.oa.com/pictures/201209/1347276387_34.png)
大连网站开发企业/宁波网站推广营销
1. Php图片上传12. PHP函数getimagesize的具体使用方法4 3. 异步上传图片5 1. Php图片上传 上传步骤: 1、创建一个文件上传表单 <html> <body> <form action"upload_file.php" method"post" enctype"multipart/form-data&q…...
![](/images/no-images.jpg)
网站建设费用哺乳期可以吃党参吗/2021年网络热点舆论
题目:原题链接(困难) 标签:动态规划 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(N2)O(N^2)O(N2)O(N2)O(N^2)O(N2)492ms (47.06%)Ans 2 (Python)Ans 3 (Python) 解法一: class Solution:def shortestCommonSu…...
![](/images/no-images.jpg)
昆明网站建设在河科技/东莞网络营销推广公司
视频演示:http://u.115.com/file/f2e6d30b81 语言集成查询 (LINQ) 不仅可用于检索数据,而且还是一个功能强大的数据转换工具。通过使用 LINQ 查询,您可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。您可以通过排序和…...