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。
      • 休息: 短暂休息。
    • 番茄时钟 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 事件。
      • 休息: 短暂休息。
    • 番茄时钟 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)。

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 函数来提供数据。提供的数据可以是静态值,也可以是响应式数据。通常推荐提供响应式数据(使用 refreactive)。
      • 实践: 创建一个顶层组件(祖先),导入 provideref。使用 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)。
      • 掌握 provideinject 的基本使用。

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 的自定义表单输入组件。
    • 使用默认插槽、具名插槽和作用域插槽来灵活分发内容。
    • 使用 provideinject 实现跨层级的数据传递。
    • 理解 <component :is="..."> 实现动态组件切换。
    • 理解 defineAsyncComponent 实现异步组件加载的概念。
    • 能够根据不同的需求场景,选择合适的组件间通信方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务

深入解析Spring Boot与Kafka集成&#xff1a;构建高效消息驱动微服务 引言 在现代微服务架构中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而Apache Kafka凭借其高吞吐量、低延迟和可扩展性&#xff0c;成为了许多企业的首选。本文将详细介绍如何在Spring Boot应用…

谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频

近期&#xff0c;谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力&#xff0c;能够生成 1 - 3 分钟的 AI 视频&#xff0c;为用户带来全新的内容创作与信息获取体验。 NotebookLM&#xff1a;AI 笔…

第十六届蓝桥杯复盘

文章目录 1.数位倍数2.IPv63.变换数组4.最大数字5.小说6.01串7.甘蔗8.原料采购 省赛过去一段时间了&#xff0c;现在复盘下&#xff0c;省赛报完名后一直没准备所以没打算参赛&#xff0c;直到比赛前两天才决定参加&#xff0c;赛前两天匆匆忙忙下载安装了比赛要用的编译器ecli…

Manus AI 突破多语言手写识别技术壁垒:创新架构、算法与应用解析

在人工智能领域&#xff0c;手写识别技术作为连接人类自然书写与数字世界的桥梁&#xff0c;一直备受关注。然而&#xff0c;多语言手写识别面临诸多技术挑战&#xff0c;如语言多样性、书写风格差异、数据稀缺性等。Manus AI 作为该领域的领军者&#xff0c;通过一系列创新技术…

25考研经验贴(11408)

声明&#xff1a;以下内容都仅代表个人观点 数学一&#xff08;130&#xff09; 25考研数学一难度介绍&#xff1a;今年数学一整体不难&#xff0c;尤其是选填部分&#xff0c;大题的二型线面和概率论大题个人感觉比较奇怪&#xff0c;其他大题还是比较容易的。.26如何准备&a…

嵌入式软件--stm32 DAY 6 USART串口通讯(下)

1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后&#xff0c;我们趁热打铁&#xff0c;争上游&#xff0c;进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里&#xff0c;它也可…

QT使用QXlsx读取excel表格中的图片

前言 读取excel表格中的图片的需求比较小众&#xff0c;QXlsx可以操作excel文档&#xff0c;进行图片读取、插入操作&#xff0c;本文主要分享单独提取图片和遍历表格提取文字和图片。 源码下载 github 开发环境准备 把下载的代码中的QXlsx目录&#xff0c;整个拷贝到所创建…

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计&#xff08;登录 每日3次 中奖40% 道具兑换码&#xff09; ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …

Unity editor文件数UI(支持勾选框)

unity editor文件数&#xff08;支持勾选框&#xff09; 使用的时候new一个box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…

隨筆20250519 Async+ThreadPoolTaskExecutor⾃定义线程池进阶实战

1.ThreadPoolTaskExecutor线程池 有哪⼏个重要参数&#xff0c; 什么时候会创建线程 1.核心綫程數 查看核心綫程數目是否已經滿&#xff0c;未滿 創建一條綫程 執行任務&#xff0c;已滿負責執行第二部 2.阻塞隊列 查看阻塞隊列是否已經滿&#xff0c;未滿將任務加入阻塞隊列&…

YOLO11解决方案之实例分割与跟踪探索

概述 Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 实例分割是一项计算机视觉任务,涉及在像素级别识别和勾勒图像中的单个对象。与只按类别对像素进行分类的语义分割…

VScode各文件转化为PDF的方法

文章目录 代码.py文件.ipynb文本和代码夹杂的文件方法 1:使用 VS Code 插件(推荐)步骤 1:安装必要插件步骤 2:安装 `nbconvert`步骤 3:间接导出(HTML → PDF)本文遇见了系列错误:解决方案:问题原因步骤 1:降级 Jinja2 至兼容版本步骤 2:确保 nbconvert 版本兼容替代…

现代计算机图形学Games101入门笔记(十五)

蒙特卡洛积分 为什么用蒙特卡洛积分&#xff0c;用来做什么&#xff1f;跟黎曼积分区别&#xff0c;黎曼积分是平均分成n等分&#xff0c;取每个小块中间的值取计算每个小块面积&#xff0c;再将n份集合加起来。蒙特卡洛积分就是随机取样&#xff0c;假设随机取样点xi,对应的f…

软件架构之-论高并发下的可用性技术

论高并发下的可用性技术 摘要正文摘要 ;2023年2月,本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发,该项目旨在为长三角地区渔船建造设计院、以及渔船审图机构提供一个便捷化的服务平台。在此项目中,我作为项目组成员参与了项目建设工作,并担任系统架…

Q-learning 算法学习

Q-learning是一种经典的无模型、基于价值的算法&#xff0c;它通过迭代更新状态-动作对的Q值&#xff0c;最终找到最优策略。 一 Q-learning的核心思想 1.1目标 学习一个状态-动作价值函数 &#xff0c;表示在状态 s 下执行动作 a 并遵循最优策略后的最大累积奖励。 的核心…

鸿蒙生态崛起:开发者机遇与挑战并存

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、何为鸿蒙生态&#xff1f; 二、在鸿蒙生态下开发时遇到的挑战 三、对于鸿蒙生态未…

TCP/IP-——C++编程详解

1. TCP/IP 编程基本概念 TCP&#xff08;传输控制协议&#xff09;&#xff1a;面向连接、可靠的传输层协议&#xff0c;保证数据顺序和完整性。IP&#xff08;网际协议&#xff09;&#xff1a;负责将数据包路由到目标地址。Socket&#xff08;套接字&#xff09;&#xff1a…

Python图像处理基础(三)

Python图像处理基础(三) 文章目录 Python图像处理基础(三)2、计算机色彩(Computer Color)2.5 色彩分辨率2.6 灰度颜色模型2.7 CMYK 颜色模型2.7.1 K 部分2.8 HSL/HSB 颜色模型2、计算机色彩(Computer Color) 2.5 色彩分辨率 人眼可以看到许多不同的颜色,但我们的感知…

Vue路由深度解析:Vue Router与导航守卫

Vue路由深度解析&#xff1a;Vue Router与导航守卫 一、Vue Router基础与安装配置 1. Vue Router核心概念 Vue Router是Vue.js官方的路由管理器&#xff0c;主要功能包括&#xff1a; 嵌套路由映射模块化的路由配置路由参数、查询、通配符细粒度的导航控制自动激活的CSS类链…