Vue百日学习计划Day36-42天详细计划-Gemini版
总目标: 在 Day 36-42 理解组件化开发的思想,熟练掌握 Vue 组件的注册、Props、Events、v-model、Slots、Provide/Inject 等核心概念和实践,能够构建可复用和易于维护的组件结构。
- 所需资源:
- Vue 3 官方文档 (组件基础): https://cn.vuejs.org/guide/essentials/component-basics.html
- Vue 3 官方文档 (组件深入): https://cn.vuejs.org/guide/components/registration.html (此链接及后续部分覆盖注册、Props、Events、v-model、Slots、Provide/Inject、动态与异步组件)
- 你的 Vue 3 实践项目(作为实践环境)。
Day 36: 组件基础与注册 (~3 小时)
-
本日目标: 理解组件化思想,学会创建和注册 Vue 单文件组件(SFC),并在应用中使用它们。
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: 为什么需要组件化?
- 活动: 阅读官方文档“组件基础”引言,理解组件化带来的好处(代码复用、可维护性、关注点分离)。思考如何将一个复杂的页面拆分成独立的逻辑块。
- 思考: 在你日常看到的网页中,哪些部分可以被抽象成可复用的组件?
- 休息: 短暂休息。
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: 创建单文件组件 (.vue)。
- 活动: 阅读官方文档“单文件组件”部分。了解
.vue
文件结构(<template>
,<script setup>
,<style>
)。创建一个新的.vue
文件,编写最基础的组件代码(包含一个模板和一个简单的<script setup>
块)。 - 实践: 在你的项目
src/components
目录下创建一个MyComponent.vue
文件,添加基础模板和空的 script/style 块。 - 休息: 短暂休息。
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 局部组件注册。
- 活动: 阅读官方文档“组件注册”部分关于局部注册的内容。理解在
<script setup>
中导入组件后,无需额外注册步骤,直接在模板中使用即可。 - 实践: 在
src/App.vue
或其他父组件中,导入你创建的MyComponent.vue
,并在父组件的<template>
中使用<MyComponent/>
标签。运行项目,确认子组件被渲染。 - 休息: 短暂休息。
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 全局组件注册 (了解)。
- 活动: 阅读官方文档关于全局注册的内容。理解全局注册的组件可以在应用中的任何地方直接使用,无需导入。了解它的优缺点(方便但可能导致打包体积过大,且依赖不明确),以及为什么在现代构建工具下更推荐局部注册。
- 实践: (可选,了解概念为主) 如果你的项目使用
main.js
作为入口,尝试在main.js
中使用app.component()
方法注册一个组件。 - 休息: 短暂休息。
-
总结与回顾 (10-15 分钟):
- 回顾组件化思想、
.vue
文件结构。 - 巩固局部组件注册是现代 Vue 开发的主要方式。
- 确保你能在父组件中成功使用子组件。
- 回顾组件化思想、
-
Day 37: 组件通信 - Props (~3 小时)
-
本日目标: 学习如何使用 Props 实现父组件向子组件传递数据。
-
所需资源: Vue 3 官方文档 (Props): https://cn.vuejs.org/guide/components/props.html
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: Props 的概念与声明 (
defineProps
)。 - 活动: 阅读官方文档“Props”部分。理解 Props 是组件接收外部数据的接口,数据流是单向的(父 -> 子)。学习在子组件的
<script setup>
中使用defineProps
宏来声明组件接受的 Props。 - 实践: 在 Day 36 创建的
MyComponent.vue
中,使用defineProps(['message'])
声明一个message
prop。 - 休息: 短暂休息。
- 内容: Props 的概念与声明 (
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: 在模板和脚本中使用 Props。
- 活动: 理解声明的 Props 可以直接在子组件的模板中像普通变量一样使用,在脚本中则可以通过
defineProps
的返回值访问(如果需要)。 - 实践: 在
MyComponent.vue
的<template>
中显示{{ message }}
。在父组件使用子组件时,通过属性绑定:message="'Hello from Parent!'"
传递数据。 - 休息: 短暂休息。
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: Props 类型校验 (基础)。
- 活动: 阅读官方文档关于 Props 类型校验的部分。学习如何为 Props 指定预期的 JavaScript 数据类型(String, Number, Boolean, Array, Object, Date, Function, Symbol)。理解类型校验失败时会发出控制台警告(仅在开发模式)。
- 实践: 将
defineProps(['message'])
改为defineProps({ message: String })
。尝试传递非字符串类型的数据,观察警告。为其他数据类型添加校验。 - 休息: 短暂休息。
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: Props 类型校验 (必填与默认值)。
- 活动: 学习如何将 Prop 标记为必填 (
required: true
) 以及如何为 Prop 设置默认值 (default: ...
)。理解不同数据类型的默认值写法(特别是对象/数组默认值需要通过工厂函数返回)。 - 实践: 将
message
Prop 设为必填。为另一个 Prop 设置默认值。设置一个对象 Prop,并使用工厂函数设置默认值。 - 休息: 短暂休息。
-
总结与回顾 (10-15 分钟):
- 回顾 Props 的概念、声明、使用。
- 巩固 Props 类型校验的各种方式(类型、必填、默认值)。
- 确保理解 Props 的单向数据流原则:子组件不应直接修改 Prop 的值。
-
Day 38: 组件通信 - Events (~3 小时)
-
本日目标: 学习如何使用 Events 实现子组件向父组件传递信息或通知。
-
所需资源: Vue 3 官方文档 (Events): https://cn.vuejs.org/guide/components/events.html
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: Events 的概念与声明 (
defineEmits
)。 - 活动: 阅读官方文档“组件事件”部分。理解事件用于子组件向父组件“发出信号”。学习在子组件的
<script setup>
中使用defineEmits
宏来声明组件会发出的事件。声明 emitted 事件有助于文档化和校验。 - 实践: 在一个子组件(例如一个按钮组件
MyButton.vue
)中,使用defineEmits(['click'])
声明一个click
事件。 - 休息: 短暂休息。
- 内容: Events 的概念与声明 (
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: 触发事件 (
$emit
)。 - 活动: 学习在子组件的方法中或通过 DOM 事件监听器来调用
$emit
函数触发声明的事件。 - 实践: 在
MyButton.vue
中,给<button>
元素添加一个@click="$emit('click')"
。 - 休息: 短暂休息。
- 内容: 触发事件 (
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 在父组件监听事件 (
v-on
或@
)。 - 活动: 阅读官方文档关于监听事件的部分。理解在父组件中使用子组件时,可以通过
v-on:
或其缩写@
来监听子组件发出的事件,并绑定一个父组件的方法来响应。 - 实践: 在父组件中使用
MyButton
,并添加@click="handleButtonClick"
,在父组件的<script setup>
中定义handleButtonClick
方法(例如弹出一个 alert)。 - 休息: 短短休息。
- 内容: 在父组件监听事件 (
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 传递参数与事件校验 (可选)。
- 活动: 学习在
$emit
时可以传递额外的参数给父组件的事件处理函数。了解defineEmits
也可以接收一个对象进行更详细的事件校验(可选,但了解一下)。 - 实践: 修改
MyButton.vue
,在$emit('click', 'some data', 123)
时传递一些参数。在父组件的handleButtonClick(data1, data2)
方法中接收并打印这些参数。 - 休息: 短暂休息。
-
总结与回顾 (10-15 分钟):
- 回顾 Events 的概念、声明 (
defineEmits
)、触发 ($emit
)、监听 (@
)。 - 巩固如何通过事件传递数据从子到父。
- 确保你能构建一个父子组件,父组件向子组件传文本 (Props),子组件点击按钮向父组件发送消息 (Events)。
- 回顾 Events 的概念、声明 (
-
Day 39: Props/Events 实践与 v-model
应用于组件 (~3 小时)
-
本日目标: 通过实践巩固 Props 和 Events 的用法,并学习如何使你的自定义组件支持
v-model
。 -
所需资源:
- Vue 3 官方文档 (Props): https://cn.vuejs.org/guide/components/props.html
- Vue 3 官方文档 (Events): https://cn.vuejs.org/guide/components/events.html
- Vue 3 官方文档 (在组件上使用 v-model): https://cn.vuejs.org/guide/components/v-model.html
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: Props 与 Events 综合实践。
- 活动: 构建一个更复杂的父子组件交互示例。例如:一个列表组件 (父) 渲染多个列表项组件 (子)。父组件通过 Props 将数据传递给每个列表项。每个列表项有一个删除按钮,点击时通过 Events 通知父组件删除对应的项(传递项的 ID 或索引)。
- 实践: 实现上述列表与列表项的示例。
- 休息: 短暂休息。
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容:
v-model
在组件上的概念。 - 活动: 阅读官方文档“在组件上使用 v-model”部分。理解
v-model
在组件上是 Prop 和 Event 的语法糖。默认情况下,v-model
绑定到modelValue
Prop 并监听update:modelValue
事件。 - 思考: 为什么 Vue 需要这个语法糖?它简化了什么?
- 休息: 短暂休息。
- 内容:
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 实现组件的
v-model
支持。 - 活动: 学习如何在你的自定义输入组件中接收
modelValue
Prop,并在需要更新值时触发update:modelValue
事件。 - 实践: 创建一个简单的自定义文本输入组件 (
MyInput.vue
)。声明modelValue
Prop (defineProps(['modelValue'])
) 和update:modelValue
事件 (defineEmits(['update:modelValue'])
)。在内部<input>
元素的@input
事件中,调用$emit('update:modelValue', $event.target.value)
。 - 休息: 短暂休息。
- 内容: 实现组件的
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 使用自定义
v-model
组件。 - 活动: 在父组件中,使用你创建的
MyInput
组件,并使用v-model
绑定一个响应式变量。 - 实践: 在父组件中定义一个
text = ref('')
。在模板中使用<MyInput v-model="text"/>
。在父组件模板中显示{{ text }}
,观察输入框和显示是否同步。 - 休息: 短暂休息。
- 内容: 使用自定义
-
总结与回顾 (10-15 分钟):
- 巩固 Props 和 Events 是组件通信的基础方式。
- 理解
v-model
在组件上的实现原理和使用方法。 - 确保你的自定义输入组件能够成功支持
v-model
。
-
Day 40: 组件内容分发 - Slots (~3 小时)
-
本日目标: 学习如何使用 Slots 实现父组件向子组件插入内容,使组件更具灵活性和可复用性。
-
所需资源: Vue 3 官方文档 (Slots): https://cn.vuejs.org/guide/components/slots.html
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: Slots 的概念与默认插槽。
- 活动: 阅读官方文档“插槽”部分。理解 Slots 是组件模板中的占位符,允许父组件将任意内容“注入”到子组件的指定位置。学习默认插槽
<slot></slot>
。 - 实践: 创建一个容器组件 (
MyCard.vue
),其中有一个<slot></slot>
占位符。在父组件使用MyCard
时,在<MyCard>...</MyCard>
标签中间放入一些 HTML 内容,观察这些内容如何出现在子组件<slot>
的位置。 - 休息: 短暂休息。
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: 具名插槽 (
<slot name="...">
)。 - 活动: 学习如何使用具名插槽,通过
name
属性区分不同的插槽。学习在父组件中使用v-slot:name
或#name
指令来指定内容要插入到哪个具名插槽。 - 实践: 修改
MyCard.vue
,添加<slot name="header"></slot>
和<slot name="footer"></slot>
。在父组件中,使用<template #header>...</template>
和<template #footer>...</template>
将内容分别插入到头部和尾部插槽。 - 休息: 短暂休息。
- 内容: 具名插槽 (
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 作用域插槽 (Scoped Slots) 的概念。
- 活动: 阅读官方文档关于作用域插槽的内容。理解作用域插槽允许子组件向父组件的插槽内容暴露数据。这使得父组件可以根据子组件提供的数据来决定如何渲染插槽内容。
- 思考: 作用域插槽解决什么问题?(父组件需要使用子组件内部的数据来控制渲染)。
- 休息: 短暂休息。
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 使用作用域插槽 (
<slot :propName="...">
,v-slot:name="slotProps"
)。 - 活动: 学习在子组件的
<slot>
标签上绑定属性来暴露数据(这些属性会作为对象传递给父组件的插槽)。学习在父组件的<template v-slot:name="slotProps">
或<template #name="slotProps">
中通过slotProps
对象访问子组件暴露的数据。 - 实践: 修改一个组件(例如列表项组件),在
<slot>
标签上绑定一项数据,如<slot :item="itemData"></slot>
。在父组件使用时,通过<template #default="{ item }"> {{ item.name }} </template>
的方式接收并使用这个数据来渲染列表项内容。 - 休息: 短暂休息。
- 内容: 使用作用域插槽 (
-
总结与回顾 (10-15 分钟):
- 回顾 Slots 的概念、默认插槽、具名插槽。
- 重点巩固作用域插槽的用法和它解决的问题。
- 确保你能构建一个包含不同类型插槽的组件,并在父组件中正确使用它们。
-
Day 41: 组件通信 - Provide/Inject 与 Slots 实践 (~3 小时)
-
本日目标: 学习 Provide/Inject 实现跨层级组件通信,并通过实践巩固 Slots 用法。
-
所需资源:
- Vue 3 官方文档 (Slots): https://cn.vuejs.org/guide/components/slots.html
- Vue 3 官方文档 (Provide / Inject): https://cn.vuejs.org/guide/components/provide-inject.html
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: Slots 综合实践。
- 活动: 结合默认插槽、具名插槽和作用域插槽,构建一个更复杂的组件示例。例如:一个模态框(Modal)组件,包含头部、内容和底部插槽,内容插槽是一个作用域插槽,可以暴露模态框的开关状态给父组件,让父组件决定显示什么内容。
- 实践: 实现一个 Modal 组件,包含头部(具名)、内容(作用域)和底部(具名)插槽。
- 休息: 短暂休息。
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: Provide/Inject 的概念。
- 活动: 阅读官方文档“Provide / Inject”部分。理解 Provide/Inject 提供了一种“依赖注入”的方式,允许一个祖先组件向其所有后代提供数据,无论层级有多深。理解它解决了 Prop Drilling(逐层传递 Prop)的问题。
- 思考: 什么场景下 Provide/Inject 比 Props 更合适?(数据需要在多个层级深的后代组件中使用)。
- 休息: 短暂休息。
-
番番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 使用
provide
提供数据。 - 活动: 学习在祖先组件的
<script setup>
中使用provide
函数来提供数据。提供的数据可以是静态值,也可以是响应式数据。通常推荐提供响应式数据(使用ref
或reactive
)。 - 实践: 创建一个顶层组件(祖先),导入
provide
和ref
。使用provide('my-key', myData)
提供一个响应式数据myData = ref('Initial Data')
。 - 休息: 短暂休息。
- 内容: 使用
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 使用
inject
注入数据。 - 活动: 学习在后代组件的
<script setup>
中使用inject
函数来注入祖先组件提供的数据。理解inject
函数的第一个参数是提供时使用的 key,第二个参数是找不到提供数据时的默认值。 - 实践: 创建一个中间组件和一个底层组件(后代)。在底层组件中,导入
inject
,使用const injectedData = inject('my-key', 'Default Value')
注入数据。在模板中显示{{ injectedData }}
。在顶层组件和底层组件之间嵌套中间组件。观察数据是否成功注入。 - 休息: 短暂休息。
- 内容: 使用
-
总结与回顾 (10-15 分钟):
- 巩固 Slots(默认、具名、作用域)的用法。
- 理解 Provide/Inject 的概念和它解决的问题(Prop Drilling)。
- 掌握
provide
和inject
的基本使用。
-
Day 42: 动态组件、异步组件与综合回顾 (~3.5 小时)
-
本日目标: 学习动态加载和异步加载组件的技术,并对组件化开发的各种知识进行全面回顾。
-
所需资源:
- Vue 3 官方文档 (动态组件): https://cn.vuejs.org/guide/components/dynamic-async.html#dynamic-components
- Vue 3 官方文档 (异步组件): https://cn.vuejs.org/guide/components/dynamic-async.html#async-components
-
学习计划:
-
番茄时钟 1 (25 分钟工作 + 5 分钟休息):
- 内容: 动态组件 (
<component :is="...">
)。 - 活动: 阅读官方文档关于动态组件的部分。理解
<component :is="...">
允许你根据一个响应式变量的值来动态切换要渲染的组件。 - 实践: 创建几个简单的组件(例如
Home.vue
,About.vue
,Contact.vue
)。在父组件中定义一个响应式变量currentComponent = ref('Home')
。在模板中使用<component :is="currentComponent"></component>
。添加按钮,点击时修改currentComponent
的值,观察渲染的组件是否切换。 - 休息: 短暂休息。
- 内容: 动态组件 (
-
番茄时钟 2 (25 分钟工作 + 5 分钟休息):
- 内容: 动态组件与
<KeepAlive>
(了解)。 - 活动: 简单了解
<KeepAlive>
组件可以缓存动态组件的实例,避免在切换时销毁和重建。理解它对性能的潜在影响。 - 实践: (可选) 将
<component :is="...">
包裹在<KeepAlive>
中,观察组件切换时是否会重新执行生命周期钩子(如果缓存,则不会)。 - 休息: 短暂休息。
- 内容: 动态组件与
-
番茄时钟 3 (25 分钟工作 + 5 分钟休息):
- 内容: 异步组件 (
defineAsyncComponent
) 的概念。 - 活动: 阅读官方文档关于异步组件的部分。理解异步组件用于延迟加载组件的代码块,直到需要渲染时才从服务器加载。这有助于减小初始打包体积,提高应用的首屏加载速度(代码分割)。
- 思考: 异步组件主要解决什么问题?
- 休息: 短暂休息。
- 内容: 异步组件 (
-
番茄时钟 4 (25 分钟工作 + 5 分钟休息):
- 内容: 使用
defineAsyncComponent
。 - 活动: 学习使用
defineAsyncComponent
函数来定义一个异步组件。它接收一个加载函数,通常是动态导入 (import()
)。了解异步组件可以配合 Suspense 或具有加载、错误、超时状态处理(虽然这些可能不是本次计划的重点,但要知晓)。 - 实践: 将之前创建的一个不太重要的组件(例如某个设置页面的组件)改为异步组件:
const AsyncComponent = defineAsyncComponent(() => import('./components/MyHeavyComponent.vue'))
。在父组件中使用<AsyncComponent/>
。 - 休息: 短短休息。
- 内容: 使用
-
番茄时钟 5 (25 分钟工作 + 5 分钟休息):
- 内容: 综合回顾:组件通信方式总结。
- 活动: 花时间回顾并总结所有学过的组件间通信方式:Props (父->子)、Events (子->父)、v-model (父<->子,语法糖)、Slots (父->子,内容分发)、Provide/Inject (祖先->后代)。思考它们各自的适用场景和优缺点。
- 思考: 对于一个特定的通信需求,你会选择哪种方式?为什么?
- 休息: 短暂休息。
-
番茄时钟 6 (25 分钟工作 + 5 分钟休息):
- 内容: 综合实践与问题解答。
- 活动: 尝试构建一个稍复杂的示例,结合使用多种通信方式。例如:一个简单的用户列表,使用
v-for
渲染,每个列表项是子组件,子组件通过 Props 接收用户数据,通过 Events 删除用户。列表顶部有一个过滤输入框,父组件通过 Props 传递过滤文本给子组件,或者子组件通过 Events 向上报告过滤文本。或者尝试用 Slots 渲染列表项的不同部分。遇到问题,查阅文档或回顾之前的学习内容。 - 实践: 选择一个综合实践场景并开始实现。
- 休息: 短暂休息。
-
最终回顾 (10-15 分钟):
- 确保对组件化开发的整体流程和各个核心概念有了清晰的认识。
- 回顾掌握程度,标记薄弱环节以便后续加强。
- 思考如何将这些知识应用到实际项目开发中。
-
掌握检查:
- 在 Day 42 结束时,你应该能够:
- 独立创建和使用局部注册的 Vue 单文件组件。
- 使用
defineProps
声明 Props 并进行类型校验、设置必填和默认值。 - 使用
defineEmits
声明事件,通过$emit
触发事件,并在父组件使用@
监听事件和接收参数。 - 实现一个支持
v-model
的自定义表单输入组件。 - 使用默认插槽、具名插槽和作用域插槽来灵活分发内容。
- 使用
provide
和inject
实现跨层级的数据传递。 - 理解
<component :is="...">
实现动态组件切换。 - 理解
defineAsyncComponent
实现异步组件加载的概念。 - 能够根据不同的需求场景,选择合适的组件间通信方式。
相关文章:
Vue百日学习计划Day36-42天详细计划-Gemini版
总目标: 在 Day 36-42 理解组件化开发的思想,熟练掌握 Vue 组件的注册、Props、Events、v-model、Slots、Provide/Inject 等核心概念和实践,能够构建可复用和易于维护的组件结构。 所需资源: Vue 3 官方文档 (组件基础): https://cn.vuejs.org/guide/es…...
Python对JSON数据操作
在Python中,对JSON数据进行增删改查及加载保存操作,主要通过内置的json模块实现。 一、基础操作 1. 加载JSON数据 • 从文件加载 使用json.load()读取JSON文件并转换为Python对象(字典/列表): import json with open…...
upload靶场1-5关
网上的解析有一些题目对应不上,比如第五关说是 空格 点 空格绕过 ,我这里就无法成功解析,但大小写绕过就成功了,慢慢会把后面的关卡也写出来 这里建议开一台win7的虚拟机,在上面搭建靶场,可以省很多麻烦 …...
网络传输(ping命令,wget命令,curl命令),端口
网络传输: ping命令:检查指定的网络服务器是否是可联通状态 语法:ping 【-c num】IP或主机名 -c:是检查的次数,不使用-c,将无限次持续检查 wget命令:wget是非交互式的文件下载器࿰…...
upload-labs靶场通关详解:第10关
一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".ph…...
深入解析`lsof`命令:查看系统中打开文件与进程信息
1、lsof的基本概念 lsof (List Open Files) 提供了一种方式来查看系统上哪些进程正在访问哪些文件,能够显示文件类型、文件名、文件描述符、所属进程等详细信息。 在类Unix系统中,几乎所有的操作都与文件相关联,文件不…...
C++ 与 Python 内存分配策略对比
内存管理是编程中的一个核心概念,它直接影响程序的性能、稳定性和资源利用率。C 和 Python 作为两种广泛使用的编程语言,在内存分配和管理方面采用了截然不同的策略。 C 内存分配策略 C 赋予程序员对内存的精细控制能力,同时也带来了更大的…...
TB开拓者策略交易信号闪烁根因及解决方法
TB开拓者策略信号闪烁分析 TB开拓者策略交易信号闪烁根因 TB开拓者策略交易信号闪烁根因分析 信号闪烁是交易策略开发中常见的问题,特别是在TB(TradeBlazer)开拓者等平台上。以下是信号闪烁的主要根因分析: 主要根因 未来函数问题 使用了包含未来信息…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)うけみけい 受身形(2)復習(ふくしゅう):3、单词(1)日语(2)日语片假名单词4、相近词练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今…...
牛客网NC209794:使徒袭来
牛客网NC209794:使徒袭来 题目背景 问题分析 数学建模 设三位驾驶员的战斗力分别为 a, b, c已知条件:a b c n (n为输入的正整数)目标:求 a b c 的最小值 解题思路 根据算术-几何平均值不等式(AM-GM不等式),对于任意正实数a, b, c&a…...
命令行登录 MySQL 报 Segmentation fault 故障解决
问题描述:对 mysql8.0.35 源码进行 make,由于一开始因为yum源问题少安装依赖库 库,在链接时遇到错误 undefined reference to,后来安装了相关依赖库,再次 make 成功。于是将 mysqld 启动,再用 mysql -u roo…...
2025ICPC邀请赛南昌游记
滚榜时候队伍照片放的人家的闹麻了,手机举了半天 。 最后银牌700小几十罚时,rank60多点。 参赛体验还行,队长是福建人,说感觉这个热度是主场作战哈哈哈哈。空调制冷确实不太行吧。 9s过A是啥,没见过,虽然…...
kotlin flow的写法
以下是 Android 开发中 Kotlin Flow 的常见使用模式和操作符的完整中文总结: 1. 基本 Flow 创建方式 // 从多个值创建 val flow1 flowOf(1, 2, 3)// 使用 flow 构建器 val flow2 flow {emit(1)delay(100)emit(2) }// 从集合创建 val flow3 listOf(1, 2, 3).asFl…...
springboot+mybatis或mybatisplus在进行%name%的前后模糊查询时如何放防止sql注入
在使用 Spring Boot 配合 MyBatis 或 MyBatis-Plus 进行数据库操作时,确保防止 SQL 注入是非常重要的。对于 %name% 样式的前后模糊查询,以下是几种有效的方法来防止 SQL 注入: 1. 使用 MyBatis 的 <if> 标签和 #{} 占位符 MyBatis 默…...
基于51单片机教室红外计数灯光控制—可蓝牙控制
基于51单片机智能教室灯光 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 本系统由STC89C52单片机时钟芯片DS1302液晶屏LCD1602光敏电阻红外对管LED灯模块按键模块蓝牙模块构成 具体…...
HTTPS、SSL证书是啥?网站“安全小锁”的入门科普
你有没有发现,浏览网页时,有些网站地址栏前面会出现一个小锁的图标🔒,而有些网站却没有?这个小锁其实代表着网站用了“HTTPS”,是比普通“HTTP”更安全的协议。今天,我们就来聊聊HTTPS、SSL证书…...
大模型备案中的安全考量:筑牢数字时代的安全防线
在数字化浪潮席卷全球的当下,大模型技术凭借强大的数据分析、模式识别与语言理解生成能力,成为推动产业变革、提升社会运转效率的关键力量。从智能客服降本增效,到医疗影像精准诊断,再到金融风险智能预测,大模型正重塑…...
Linux句柄数过多问题排查
以下是Linux句柄数过多问题的排查与解决方法整理: 一、检测句柄使用情况 1.查看系统限制 单个进程限制:ulimit -n 系统级总限制:cat /proc/sys/fs/file-max 2.统计进程占用量 查看指定进程:lsof -p <PID> | wc -…...
Python训练第三十天
DAY 30 模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 总结:导入包的核心就是找到目录,只有理解了py…...
Java资源管理与防止泄漏:从SeaTunnel源码看资源释放
资源管理是 Java 开发中常被忽视却至关重要的一环。本文从 SeaTunnel 案例出发,探讨 Java 中如何正确管理资源,防止资源泄漏。 SeaTunnel 中的一次修复 Apache SeaTunnel 项目中的 HiveSink 组件曾存在一个典型的资源泄漏隐患。修复前后的代码对比如下…...
Notepad++ 学习(三)使用python插件编写脚本:实现跳转指定标签页(自主研发)
目录 一、先看成果二、安装Python Script插件三、配置Python脚本四、使用脚本跳转标签页方法一:通过菜单运行方法二:设置快捷键(推荐) 五、注意事项六、进阶使用 官网地址: https://notepad-plus-plus.org/Python Scri…...
PYTHON训练营DAY30
库的导入 一、导入整个 import 库 二、从库中导入特征项 from 库 import XXX 三、非标准导入:导入整个库 from 库 import * 四、导入自定义的库 (一)项目 创建一个打招呼的库 # greet.py def say_hello(name):return f"你好&a…...
Linux 文件(2)
文章目录 1. 文件描述符1.1 文件描述符是什么1.2 文件描述符如何分配 2 重定向2.1 输出重定向2.2 输入重定向2.3 使用dup2进行重定向 3. 文件、父子进程和进程替换 1. 文件描述符 1.1 文件描述符是什么 什么是文件描述符呢? 我们先来看之前所介绍的系统级别的文件…...
netcore项目使用winforms与blazor结合来开发如何按F12,可以调出chrome devtool工具辅助开发
就是像在开发网页那样,可以使用devtool工具辅助开发。可查看页面css,js等。我在网上看解决办法。没一个有用的。自己找了一个。不需要单独在页面写多余的代码 我的program.cs中有服务注册代码增加 3行代码。 #if DEBUGservices.AddBlazorWebViewDevelo…...
CSS attr() 函数详解
attr() 是 CSS 中的一个函数,用于获取 HTML 元素的属性值并在样式中使用。虽然功能强大,但它的应用有一些限制和注意事项。 基本语法 element::pseudo-element {property: attr(attribute-name); } 可用场景 1. 在伪元素的 content 属性中使用&#…...
人生如戏、戏如人生
今早,6:30起床给一家人弄早餐,然后听到了老公的一声大喊:”半小时了,你干什么了“,原来孩子说她在理书包,被老公骂了。 最近几天,老公脾气变得很差,孩子每天都会被老公骂…...
Java迭代器知识点详解
在 Java 编程中,迭代器(Iterator)是一种用于遍历集合(如 List、Set、Map 等)元素的接口。它提供了一种统一的方式来访问集合中的元素,而无需暴露集合的内部结构。以下是关于 Java 迭代器的详细知识点&#…...
免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷
近日,苏州自动驾驶巴士线路——阳澄数谷示范线正式上线,即日起向全民免费开放试乘体验! 在苏州工业园区地铁3号线倪浜•阳澄数谷站外,一辆辆黑、白配色的小巴正在道路上有条不紊地行驶。与普通公交不同的是,小巴造型奇…...
Kotlin 协程
第一个协程程序 协程是可暂停计算的一个实例。它在概念上类似于线程,因为它需要运行一个代码块,该代码块与其他代码并发运行。然而,协程并不绑定到任何特定的线程。它可以在一个线程中暂停执行,并在另一个线程中恢复执行。 协程…...
MySQL函数触发:函数处理与触发器自动化应用
引言 各位数据库爱好者们好!今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 🚀。函数就像数据库中的"瑞士军刀",能帮你高效处理各种数据;而触发器则是数据库的"自动感应器",能在数据…...
数据可视化热图工具:Python实现CSV/XLS导入与EXE打包
在数据分析工作中,热图(Heatmap)是一种非常直观的可视化工具,能够清晰展示数据矩阵中的数值分布和相关性。本文将介绍如何使用Python构建一个支持CSV/XLS文件导入、热图生成并可打包为EXE的桌面应用程序。 核心功能设计 我们的热图工具将包含以下核心功能: 支持CSV和Excel…...
CUDA Stream的进阶用法:流水线并行的资源竞争解决方案
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 引言:多任务推理场景的挑战 GPU在AI推理服务器的典型负载特征(并行模…...
Eclipse Java 开发调优:如何让 Eclipse 运行更快?
Eclipse Java 开发调优:如何让 Eclipse 运行更快? 在 Java 开发领域,Eclipse 是一款被广泛使用的集成开发环境(IDE)。然而,随着项目的日益庞大和复杂,Eclipse 的运行速度可能会逐渐变慢&#x…...
大模型(1)——基本概念
文章目录 一、大模型的定义与概念二、大模型的原理与技术核心三、大模型的应用领域四、市面上常用的大模型1. 生成类模型(文本/代码/图像)2. 理解类模型(文本/语义)3. 多模态模型4. 国产大模型 五、总结与趋势 一、大模型的定义与…...
MYSQL故障排查和环境优化
一、MySQL故障排查 1. 单实例常见故障 (1)连接失败类问题 ERROR 2002 (HY000): Cant connect to MySQL server 原因:MySQL未启动或端口被防火墙拦截。 解决:启动MySQL服务(systemctl start mysqld)或开放…...
sts下载安装
windows下STS(Spring Tools Suite,自带spring插件的eclipse)的下载与安装_sts下载-CSDN博客Spring Boot安装与配置教程_spring boot安装配置-CSDN博客...
Baklib知识中台架构设计与智能服务实践
知识中台架构四库体系解析 现代企业知识管理系统的核心在于构建结构化知识资产池,Baklib通过独创的四库体系——知识库、流程库、案例库、模型库——实现知识资源的全生命周期管理。其中,知识库作为基础层,聚合文档、图谱等显性知识…...
TinyEngine 2.5版本正式发布:多选交互优化升级,页面预览支持热更新,性能持续跃升!
前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低代码平台。适用于多场景的低代码…...
嵌入式系统:技术演进、应用领域发展趋势全面解析
嵌入式系统:技术演进、应用领域及发展趋势全面解析 一、引言 在当今数字化时代,嵌入式系统已悄然融入到我们生活的方方面面,从日常使用的智能手机、智能家电,到汽车中的各种控制系统,乃至工业生产中的自动化设备、航…...
软件工程-项目管理
进度管理 又叫时间管理,确定进度目标,在与质量、成本目标协调的基础上,实现工期目标 具体包括以下过程: 活动定义:确定完成各项交付成果需要展开的具体活动活动排序:活动之间的先后关系和逻辑关系活动资…...
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果修改图元类型
1. 爆炸效果 这是几何着色器中的一个常见应用,我们使用几何着色器来模拟爆炸效果。 我们希望将每个三角形沿其表面法向量向外移动,则实际上是将组成环面的三角形向外“爆炸”。 我们只需取三个顶点的法向量,然后将其相加并求平均ÿ…...
需求频繁变更?AI 驱动的自动化解决方案实践
在软件开发的实际场景中,需求频繁变更已成为困扰开发团队的常见难题。每一次需求变动,都意味着代码的重新编写、调试与测试,不仅消耗大量时间和人力成本,还可能引发一系列连锁反应,影响项目进度与质量。而飞算 JavaAI …...
ffmpeg转码后的视频有横条纹和彩虹横条等乱彩问题
原因:ffmpeg安装的时,./configure 添加了–disable-asm参数,导致色彩异常。 **解决方法:**移除该参数–disable-asm。 注意:不加该参数可能提示no yasm或nasm等问题,解决该问题即可。大多是环境变量没有配置…...
QT6 源(111):阅读与注释菜单栏 QMenuBar,进行属性与成员函数测试,信号与槽函数测试,并给出源码
(1) (2) (3) (4) (5) (6) (7)以下源代码来自于头文件 qmenubar . h : #ifndef QMENUBAR_H #defi…...
达梦数据库对json字段进行操作
在达梦数据库中,字段类型不能显式定义为JSON,通常以VARCHAR或TEXT类型存储JSON字符串,可以通过内置的JSON函数对JSON格式数据进行操作和条件过滤。 1. 创建表并插入JSON数据 假设字段类型为VARCHAR,存储JSON字符串: -…...
基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,相机分类,二手相机 开题报告内容 基于FlaskVue框架的东莞市二手相机交易管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着数字技术的迅猛发展和摄影文化的广泛普及,相机已成为人们记录生活、表达创意的重要工…...
谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频
近期,谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力,能够生成 1 - 3 分钟的 AI 视频,为用户带来全新的内容创作与信息获取体验。 NotebookLM:AI 笔…...
MCP详解
前言:AI能力跃迁的“最后一公里” 当前,大语言模型(LLMs)已展现出文本生成、逻辑推理等通用能力,但其与真实世界的交互仍存在瓶颈。传统模式下,开发者需为每个外部工具(如数据库、API、文件系统)编写定制化接口,导致开发周期长、兼容性差、安全风险高。而模型上下…...
信息学奥赛一本通 1539:简单题 | 洛谷 P5057 [CQOI2006] 简单题
【题目链接】 ybt 1539:简单题 洛谷 P5057 [CQOI2006] 简单题 【题目考点】 1. 树状数组 模板题及讲解:洛谷 P3374 【模板】树状数组 【解题思路】 解法1:树状数组 该有01构成数组初值都为0。 某位置的元素被修改奇数次后值为1&#x…...
设计模式-面试题
摘要: 1、通俗易懂,适合小白 2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系! 1. 什么是设计模式? 设计模式是在软件开发过程中,针对反复出现的问题所…...