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

基于python的task--时间片轮询

目录

前言

utf-8

chinese GB2312

 utf-8 排除task.c

chinese GB2312 排除task.c

运行结果


前言

        建议是把能正常工作的单个功能函数放到一起(就和放while函数里的程序一样),程序会按顺序自动配置。

        不同的格式已经对应给出。

utf-8

import os
import redef extract_functions():func_re = re.compile(r'^void\s+(?!.*Init\b)(\w+)\s*\(void\)\s*{', re.MULTILINE)functions = []for file in os.listdir('.'):if file.endswith('.c'):try:with open(file, 'r', encoding='utf-8') as f:matches = func_re.finditer(f.read())functions.extend(m.group(1) for m in matches)except UnicodeDecodeError:print(f"警告: {file} 非UTF-8编码已跳过")return sorted(set(functions))def generate_files(func_list):# 生成task.hwith open('task.h', 'w', encoding='utf-8') as f:f.write(f"""#ifndef TASK_H
#define TASK_H#include <stdint.h>typedef struct {{void (*task)(void);uint32_t interval;uint32_t counter;
}} Task;#define TASK_COUNT {len(func_list)}
extern Task tasks[TASK_COUNT];void tasks_init(void);
void scheduler(void);#endif
""")# 生成task.cwith open('task.c', 'w', encoding='utf-8') as f:f.write("""#include "task.h"Task tasks[TASK_COUNT];void tasks_init(void) {
""")for i, func in enumerate(func_list):f.write(f'    tasks[{i}] = (Task){{{func}, {10*(i+1)}, 0}};\n')f.write("""}void scheduler(void) {for(uint8_t i=0; i<TASK_COUNT; i++){if(++tasks[i].counter >= tasks[i].interval){tasks[i].task();tasks[i].counter = 0;}}
}
""")if __name__ == "__main__":funcs = extract_functions()generate_files(funcs)print(f"生成成功: 共配置{len(funcs)}个任务")

chinese GB2312

import os
import redef extract_gb2312_functions():pattern = re.compile(r'^void\s+(?!.*Init\b)(\w+)\s*\(void\)\s*{',re.MULTILINE)functions = []for file in os.listdir('.'):if file.endswith('.c'):try:with open(file, 'r', encoding='gb2312') as f:functions += [m.group(1) for m in pattern.finditer(f.read())]except UnicodeDecodeError:print(f"解码失败: {file} 非GB2312编码")return sorted(set(functions))def generate_gb_tasks(func_list):with open('task.h', 'w', encoding='gb2312') as f:f.write("#ifndef TASK_H\n""#define TASK_H\n\n""typedef struct {\n""    void (*run)(void);\n""    unsigned int interval;\n""    unsigned int counter;\n""} Task;\n\n"f"#define TOTAL_TASKS {len(func_list)}\n""extern Task tasks[TOTAL_TASKS];\n""void init_tasks(void);\n""#endif\n")with open('task.c', 'w', encoding='gb2312') as f:f.write('#include "task.h"\n\nTask tasks[TOTAL_TASKS];\n\n')f.write('void init_tasks(void) {\n')for idx, func in enumerate(func_list):f.write(f'    tasks[{idx}] = (Task){{{func}, {10*(idx+1)}, 0}};\n')f.write('}\n\n''void tick_scheduler(void) {\n''    for(int i=0; i<TOTAL_TASKS; i++) {\n''        if(++tasks[i].counter >= tasks[i].interval) {\n''            tasks[i].run();\n''            tasks[i].counter = 0;\n''        }\n''    }\n''}\n')if __name__ == "__main__":valid_funcs = extract_gb2312_functions()generate_gb_tasks(valid_funcs)print(f"生成完成: {len(valid_funcs)}个任务")

         把项目放到python目录下,再在想要生成的位置创建.py文件

         测试验证GB2312的,执行基本没啥大问题,生成的tsak文件仍需要验证,暂时没有时间。

 utf-8 排除task.c

import os
import redef extract_functions():exclude_files = {'task.c'}pattern = re.compile(r'^void\s+(?!.*Init\b)(\w+)\s*\(void\)\s*{', re.MULTILINE)funcs = []for file in os.listdir('.'):if file.endswith('.c') and file not in exclude_files:with open(file, 'r', encoding='utf-8') as f:matches = pattern.finditer(f.read())funcs.extend(m.group(1) for m in matches)return sorted(set(funcs))def generate_task_files(func_list):with open('task.h', 'w', encoding='utf-8') as h:h.write(f'''#ifndef TASK_H
#define TASK_Htypedef struct {{void (*execute)(void);unsigned int interval;unsigned int counter;
}} Task;extern Task tasks[{len(func_list)}];
void init_scheduler(void);
void run_scheduler(void);
#endif''')with open('task.c', 'w', encoding='utf-8') as c:c.write('#include "task.h"\n\nTask tasks[%d];\n\n' % len(func_list))c.write('void init_scheduler() {\n')for idx, name in enumerate(func_list):c.write(f'    tasks[{idx}] = (Task){{{name}, {50*(idx+1)}, 0}};\n')c.write('}\n\nvoid run_scheduler() {\n''    for(int i=0; i<%d; i++) {\n' % len(func_list) +'        if(++tasks[i].counter >= tasks[i].interval) {\n''            tasks[i].execute();\n''            tasks[i].counter = 0;\n''        }\n    }\n}')if __name__ == '__main__':functions = extract_functions()generate_task_files(functions)

chinese GB2312 排除task.c

import os
import redef extract_funcs():exclude_files = {'task.c'}pattern = re.compile(r'^void\s+(?!.*Init\b)(\w+)\s*\(void\)\s*{', re.MULTILINE)funcs = []for f in os.listdir('.'):if f.endswith('.c') and f not in exclude_files:try:with open(f, 'r', encoding='gb2312') as file:content = file.read()funcs += [m.group(1) for m in pattern.finditer(content)]except UnicodeDecodeError:print(f"跳过非GB2312文件: {f}")return sorted(set(funcs))def build_task_files(func_list):# 生成头文件with open('task.h', 'w', encoding='gb2312') as h:h.write(f'''#ifndef _TASK_H
#define _TASK_Htypedef struct {{void (*exec)(void);unsigned int cycle;unsigned int tick;
}} Task;#define TASK_NUM {len(func_list)}
extern Task task_table[TASK_NUM];void task_init(void);
void task_scheduler(void);
#endif''')# 生成源文件with open('task.c', 'w', encoding='gb2312') as c:c.write('''#include "task.h"\n\nTask task_table[TASK_NUM];\n\n''')c.write('void task_init(void) {\n')for i, name in enumerate(func_list):c.write(f'    task_table[{i}] = (Task){{{name}, {20*(i+1)}, 0}};\n')c.write('}\n\nvoid task_scheduler(void) {\n''    for(unsigned char i=0; i<TASK_NUM; i++) {\n''        if(task_table[i].tick++ >= task_table[i].cycle) {\n''            task_table[i].exec();\n''            task_table[i].tick = 0;\n''        }\n''    }\n}')if __name__ == '__main__':valid_func = extract_funcs()build_task_files(valid_func)print(f"生成完成: {len(valid_func)}个任务")

运行结果

相关文章:

基于python的task--时间片轮询

目录 前言 utf-8 chinese GB2312 utf-8 排除task.c chinese GB2312 排除task.c 运行结果 前言 建议是把能正常工作的单个功能函数放到一起&#xff08;就和放while函数里的程序一样&#xff09;&#xff0c;程序会按顺序自动配置。 不同的格式已经对应给出。 utf-8 impo…...

《前端秘籍:SCSS阴影效果全兼容指南》

在前端开发的旅程中&#xff0c;为网页元素添上阴影效果&#xff0c;就像为一幅画作点缀光影&#xff0c;能让页面瞬间生动起来&#xff0c;赋予元素层次感与立体感。可当我们满心欢喜地在SCSS中写下阴影代码&#xff0c;满心期待着在各种浏览器中都呈现出完美效果时&#xff0…...

强化学习机器人模拟器——RobotApp:一个交互式强化学习模拟器

RobotApp 是一个基于 Python 和 Tkinter 的交互式强化学习(Reinforcement Learning, RL)模拟器,集成了 GridWorld 环境和 QAgent 智能体,支持 Q-learning、SARSA 和 SARSA(λ) 算法。本博客将详细解析 robot_app.py 的功能、架构和使用方法,展示其如何通过直观的 GUI 界面…...

2025-04-26-利用奇异值重构矩阵-美团

2025-04-26-利用奇异值重构矩阵-美团 题目内容 在一家致力于图像处理的科技公司&#xff0c;你被分配到一个新项目&#xff0c;目标是开发一种图像压缩算法&#xff0c;以减少存储空间并加速传输。团队决定使用奇异值分解&#xff08; S V D SVD SVD&#xff09;对图像进行降…...

《解锁SCSS算术运算:构建灵动样式的奥秘》

SCSS作为CSS预处理器&#xff0c;算术运算功能犹如一颗璀璨明珠&#xff0c;赋予我们动态计算样式属性值的强大能力&#xff0c;让网页样式不再是一成不变的刻板呈现&#xff0c;而是能够根据各种条件和需求灵动变化。 在SCSS的世界里&#xff0c;算术运算绝非孤立的存在&…...

STM32Cube-FreeRTOS任务管理工具函数-笔记

STM32Cube-FreeRTOS任务管理工具函数-笔记 一、获取任务句柄的函数1. 创建任务并获取句柄2. 获取当前任务句柄3. 获取空闲任务句柄4. 根据任务名称获取句柄 二、单个任务操作相关函数1. 程序在运行时可以获取或改变一个任务的优先级3. 获取任务信息4. 获取任务信息5. 获取任务名…...

【第三十四周】多模态大模型调研

多模态大模型调研 摘要Abstract引言多模态技术的主要方向视觉-语言大模型&#xff08;Vision-Language Large Models, VLLMs&#xff09;语音-语言大模型&#xff08;Speech-Language Large Models, SLLMs&#xff09;音乐 - 语言大模型&#xff08;Music-Language Large Model…...

【2025最新】Baichuan-M1-instruct部署教程

首先机器至少要A100、4090、3090 这里选AutoDL的4090D&#xff0c;运行至少要20G显存。这里镜像选基础镜像11.8【更新&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;24G带不动&#xff01;显存不够】 有时候…...

Unity与Unreal Engine(UE)的深度解析及高级用法

以下是Unity与Unreal Engine(UE)的深度解析及高级用法对比,结合技术特性、行业应用与未来发展进行综合阐述: 一、核心差异与适用场景对比 1. 技术架构与编程模式 Unity 语言与脚本:主要使用C#,语法简洁且易于学习,适合快速原型开发和中小型项目。支持可视化脚本工具(如…...

网络:TCP三次握手、四次挥手

目录 深刻理解三次握手 深刻理解四次挥手 深刻理解三次握手 三次握手时&#xff0c;如果最后一个ACK包&#xff0c;服务器没有收到&#xff0c;此时&#xff1a; 客户端&#xff1a;认为已经建立链接 服务器&#xff1a;认为没有建立链接&#xff0c;还在超时等待。 而此时…...

spdlog自定义formatter

用了之后发现&#xff0c;spdlog的默认日志记录格式为&#xff1a; [2014-10-31 23:46:59.678] [my_loggername] [info] Some message 但是这个格式不是我想要的&#xff0c;怎么办&#xff0c;这个也简单&#xff0c;上面的内容也就是几个标签的组合而已&#xff0c;spdlog自定…...

Spring AI 实战:第四章、Spring AI多模态之看图说话

引言:从"码农"到"多媒体魔术师" “曾经,我们的代码核心擅长处理文本,就像餐厅里只会做炒饭的厨师。现在有了Spring AI多模态支持,我们突然拥有满汉全席的烹饪技巧!” 作为一名常年与String打交道的开发者,当第一次看到Spring AI可以同时处理图片、音…...

ES6入门---第二单元 模块五:模块化

js不支持模块化 注意&#xff1a; 需要放到服务器环境 1、如何定义模块&#xff1f; export 东西 例&#xff1a;1.js文件中 console.log(1模块加载了);//显示是否加载了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…...

Python 函数装饰器和闭包(变量作用域规则)

本章内容&#xff1a; Python 如何计算装饰器句法 Python 如何判断变量是不是局部的 闭包存在的原因和工作原理 nonlocal 能解决什么问题 掌握这些基础知识后&#xff0c;我们可以进一步探讨装饰器&#xff1a; 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化装饰器…...

什么是constexpr?

什么是constexpr&#xff1f; 简单来说&#xff0c;constexpr就是告诉编译器&#xff1a;“我这个变量或函数的值可以在编译时算出来&#xff0c;请帮我提前算好&#xff0c;运行时直接用结果&#xff0c;不用再算了。” • **传统const**只表示变量不可修改&#xff0c;但不…...

如何在 PowerEdge 服务器上设置 NIC 分组

以下文章提供了有关 Windows、VMware 和 Linux 中的 NIC 分组的信息。 什么是网络适配器分组&#xff1f;设置 NIC 分组 Windows设置 NIC 分组 VMware设置 NIC 分组 Linux 什么是网络适配器分组&#xff08;绑定&#xff09;&#xff1f; 网络适配器分组是一个术语&#xff0…...

ES6入门---第三单元 模块四:Set和WeakSet

set数据结构: 类似数组&#xff0c;但是里面不能有重复值&#xff0c;如果有&#xff0c;只显示一个 set用法: let setArr new Set([a,b]); setArr.add(a); 往setArr里面添加一项 let setArr new Set().add(a).add(b).add(c); setArr.delete(b); 删除一项 setArr.ha…...

架构进阶:75页架构规划方法课件 【附全文阅读】

本文概述了一个关于架构规划方法的目录及其目的&#xff0c;重点介绍了基于联邦企业架构&#xff08;FEAF&#xff09;的架构建模方法&#xff0c;并提及了不同层面的架构建模方法以及培训的目的。以下是对该内容的简洁总结&#xff1a; **架构规划方法目录及其目的** 本文旨在…...

前端面经-VUE3篇(三)--vue Router(二)导航守卫、路由元信息、路由懒加载、动态路由

一、导航守卫 vue Router 中的 导航守卫&#xff08;Navigation Guards&#xff09; 是一个非常重要的功能&#xff0c;用于在路由切换过程中&#xff0c;拦截、控制、检查或延迟页面跳转。 你可以理解为&#xff1a; &#x1f510; “进门前的保安”&#xff0c;控制哪些页面…...

RTX-3090 Qwen3-8B Dify RAG环境搭建

RTX-3090 Qwen3-8B Dify RAG环境搭建 一、环境配置二、操作步骤1、创建容器2、下载`Qwen3-8B`和embedding模型3、安装`transformers`4、安装`vllm`5、安装`flash-attention`6、启动兼容OpenAI API的服务1、方案一:启动`vllm`服务【不支持多任务】2、方案二:Flask和PyTorch实现的…...

Circular Plot系列(三):【视频教程】复现NCS图表之高大上的单细胞UMAP环形图

高端复杂的UMAP复现&#xff1a; 这又是一个高大上且炫酷的单细胞UMAP图&#xff0c;展示的信息很多&#xff0c;有大类细胞和亚群&#xff0c;以及marker基因和cell count信息&#xff0c;还可以增加其他的分组信息等等。没错&#xff0c;看这个图就是circlize一层层画的。我们…...

MCP智能体多Agent协作系统设计(Multi-Agent Cooperation)

目录 &#x1f680; MCP智能体多Agent协作系统设计&#xff08;Multi-Agent Cooperation&#xff09; &#x1f31f; 为什么需要多Agent协作&#xff1f; &#x1f9e0; 多Agent协作系统架构设计 &#x1f6e0;️ 1. 构建基础智能体基类&#xff08;Agent Base&#xff09;…...

栈Stack

一 栈:先进后出 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 Stack<Integer> sta…...

HTML01:HTML基本结构

HTML基本结构 <html> <head><meta charset"UTF-8"><title>我的第一个网页</title> </head> <body>我的第一个网页 </body> </html><body、</body等成对的标签&#xff0c;分别叫开发标签和闭合标签单独…...

QT聊天项目DAY07

1.Win配置和使用GRPC 1.1 克隆GRPC库 克隆GRPC git clone -b v1.34.0 https://gitee.com/mirrors/grpc-framework.git 查看Git有没有安装 没有安装 1.1.1 安装Git https://git-scm.com/ 一路next 添加Git的路径到系统环境变量下 我这次没用管理员权限&#xff0c;并且也没…...

2025年PMP 学习三

4.2制定项目管理计划 4. 项目管理计划 - 内容&#xff08;输出&#xff09; 项目目标的制定原因&#xff1a; 3个基准&#xff08;范围基准、进度基准、成本基准&#xff09; 子管理计划&#xff1a;范围、需求、进度、成本、质量、资源、沟通、风险、采购等管理计划&#xf…...

软考-软件设计师中级备考 10、文件管理、设备管理

一、 文件管理 1、文件目录 文件控制块&#xff08;FCB&#xff09;&#xff1a;是操作系统为管理文件而设置的数据结构&#xff0c;包含了文件的基本信息&#xff08;如文件名、文件大小、文件类型等&#xff09;、存取控制信息&#xff08;如文件所有者的权限、其他用户的权…...

Linux环境下的进程创建-fork函数的使用, 进程退出exit和_exit的区别,以及进程等待waitpid和status数据的提取方法

目录 一、进程创建 1.fork函数 1&#xff09;进程调用fork函数是如何创建子进程的 2&#xff09;代码示范 2.写时拷贝 二、进程退出 1.退出码 1&#xff09;什么是退出码&#xff1f; 2&#xff09;为什么要有退出码&#xff1f; 3&#xff09;退出码是怎么做到的&#xff1f; …...

【数据结构与算法】常见排序算法详解(C++实现)

目录 一、排序的基本概念 二、插入排序 2.1 直接插入排序 2.2 折半插入排序 2.3 希尔排序 三、交换排序 3.1 冒泡排序 3.2 快速排序 四、选择排序 4.1 简单选择排序 4.2 堆排序 五、归并排序 六、基数排序 七、计数排序 结语 一、排序的基本概念 排序 就是重新…...

STM32GPIO输入实战-按键key模板及移植

STM32GPIO输入实战-按键key模板及移植 一&#xff0c;按键模板展示二&#xff0c;按键模板逻辑1&#xff0c;准备工作&#xff1a;头文件与全局变量2&#xff0c;读取硬件状态&#xff1a;key_read_raw()3,核心处理&#xff1a;key_process_simple() 的四行代码 三&#xff0c;…...

LeetCode 1128.等价多米诺骨牌对的数量:计数

【LetMeFly】1128.等价多米诺骨牌对的数量&#xff1a;计数 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-equivalent-domino-pairs/ 给你一组多米诺骨牌 dominoes 。 形式上&#xff0c;dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a …...

Spring MVC设计与实现

DispatcherServlet的初始化与请求处理流程 初始化阶段 Servlet 生命周期触发&#xff1a;当 Web 容器&#xff08;如 Tomcat&#xff09;启动时&#xff0c;根据注解/配置&#xff0c;DispatcherServlet 的 init() 方法被调用。 初始化 WebApplicationContext 根 WebApplicat…...

日语学习-日语知识点小记-进阶-JLPT-N1阶段(1):语法单词

日语学习-日语知识点小记-进阶-JLPT-N1阶段&#xff08;1&#xff09;&#xff1a;语法单词 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰&#xff08;3&#xff09;高级语法N1语法和难点一、N1语法学习内容&#xff08;高级语法&#xff…...

stm32week14

stm32学习 十.GPIO 2.基本结构 基本结构&#xff1a; F1与其它的的最大区别是上下拉电阻的位置 施密特触发器是一种整形电路&#xff0c;可以将非标准方波&#xff0c;整形成方波 图中MOS管的输出规则&#xff1a; 3.8中工作模式 ①输入浮空&#xff1a; 上下拉电阻均不工…...

WPF中Binding

绑定ViewModel中的数据 添加数据上下文 方法一&#xff1a;在XAML中添加 <Window.DataContext><local:MainWindowViewModel /> </Window.DataContext>方法二&#xff1a;在界面层的cs文件中添加 this.DataContext new MainWindowViewModel();绑定 publ…...

Google Agent space时代,浅谈Agent2Agent (A2A) 协议和挑战!

如果说去年Google Cloud大会大家还在数“AI”这个词被提了多少次&#xff0c;那么今年&#xff0c;绝对是“Agent”的主场&#xff01;开发者主题演讲几乎被它“刷屏”&#xff0c;展区的许多 Demo 也都号称是 Agent 应用。 但我得诚实地说&#xff0c;大会现场关于 Agents 的 …...

爬虫的应用

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;文本数据的预处理是至关重要的基础环节。它如同工匠雕琢璞玉前的打磨工作&#xff0c;直接影响后续模型分析与挖掘的效果。本文将基于 Python&#xff0c;以电商平台的差评和优质评价文本数据为例&#xff0c;详细展…...

力扣面试150题--相同的树

Day 41 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...

Java后端开发day40--异常File

&#xff08;以下内容全部来自上述课程&#xff09; 异常 异常&#xff1a;异常就是代表程序出现的问题 1. 异常的分类 1.1 Error 代表的是系统级别的错误&#xff08;属于严重问题&#xff09; 系统一旦出现问题&#xff0c;sun公司会把这些错误封装成Error对象。 Error…...

集成算法学习

集成算法通过组合多个弱学习器提升模型性能&#xff0c;以下是核心内容详解&#xff1a; 一、核心思想 - 组合优势&#xff1a;结合多个简单模型&#xff08;如决策树&#xff09;&#xff0c;通过“少数服从多数”或“加权平均”等策略&#xff0c;降低方差、偏差或过拟合风险…...

工业认知智能:从数据分析到知识创造

工业认知智能:从数据分析到知识创造 引言 当前制造业面临的知识管理困境令人震惊:68%的工艺知识存储于老员工头脑中,30%的企业因知识传承断层导致质量事故。麦肯锡研究显示,应用认知智能技术的企业,其工艺创新速度提升3-5倍。本文将系统阐述工业认知智能的"感知-理…...

8.1 Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略

Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略 关键词:PDF报告生成, Word文档自动化, 企业微信集成, Docker容器化, CI/CD流水线 1. 多格式报告生成实战 通过扩展报告输出格式,满足不同用户的文档需求。我们使用Python生态的成熟库实现PDF/Word生成,并…...

25.5.4数据结构|哈夫曼树 学习笔记

知识点前言 一、搞清楚概念 ●权&#xff1a;___________ ●带权路径长度&#xff1a;__________ WPL所有的叶子结点的权值*路径长度之和 ●前缀编码&#xff1a;____________ 二、构造哈夫曼树 n个带权值的结点&#xff0c;构造哈夫曼树算法&#xff1a; 1、转化成n棵树组成的…...

统计学中的p值是什么?怎么使用?

李升伟 整理 在统计学中&#xff0c;p值&#xff08;p-value&#xff09;是帮助研究者判断假设检验结果是否具有统计显著性的重要指标。以下是关于p值的详细解释和使用方法&#xff1a; 1. p值的定义 p值表示在原假设&#xff08;H0&#xff09;为真的情况下&#xff0c;观察…...

22:一维码与二维码区别

一维码&#xff08;条形码&#xff09; 一维条码即指条码条和空的排列规则&#xff0c;常用的一维码的码制包括&#xff1a;EAN码、39码、交叉25码、UPC码、128码、93码&#xff0c;ISBN码&#xff0c;及Codabar&#xff08;库德巴码&#xff09;等。 条码是由一组规则排列的条…...

Java学习手册:SQL 优化技巧

一、SQL 查询优化 选择合适的索引列 &#xff1a;索引可以显著提高查询速度&#xff0c;但需要选择合适的列来创建索引。通常&#xff0c;对于频繁作为查询条件的列、连接操作的列以及排序或分组操作的列&#xff0c;应该考虑创建索引。例如&#xff0c;在一个订单表中&#xf…...

《Vue3学习手记8》

vue3中的一些API shallowRef ( ) 和shallowReactive ( ) shallowRef (浅层响应式) 1.作用:创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。 2.用法: const originalref(...) const original2shallowRef(original) 3.特点:只跟踪引用值的变化&#xff0c;不关心…...

平衡二叉搜索树模拟实现1-------AVL树(插入,删除,查找)

本章目标 1.AVL树的概念 2.AVL树的模拟实现 1.AVL树的概念 1.AVL树是最先被发明的平衡二叉搜索树,AVL树是一颗空树或者具有以下的性质 它的左右子树都是AVL树,并且左右高度差不超过1,AVL树是一颗高度平衡二叉搜索树,通过高度差去控制平衡 2.为什么高度差是1? 当结点个数为8…...

运算放大器的主要技术指标

运放&#xff08;运算放大器&#xff09;是一种基础电子器件&#xff0c;具有输入阻抗高、开环放大倍数大、输入端电流小、同相端与反相端电压几乎相等等特点。在选型时&#xff0c;需要考虑技术指标如输入失调电压、输入失调电压漂移、输入失调电流、共模抑制比、压摆率、建立…...

51单片机入门教程——每个音符对应的重装载值

前言 本教程基于B站江协科技课程进行个人学习整理&#xff0c;专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题&#xff0c;也助力新手快速掌握51单片机核心知识&#xff0c;实现从C语言理论到单片机实践应用的高效过渡 。...