QMK开发环境搭建指南:Eclipse和VS Code详解
QMK开发环境搭建指南:Eclipse和VS Code详解
前言
各位键盘DIY爱好者们,今天跟大家分享如何搭建QMK固件开发环境。无论你是想定制自己的客制化键盘固件,还是对开源键盘固件开发感兴趣,这篇教程都能帮你搞定开发环境配置。本文将详细介绍如何使用Eclipse和VS Code两种IDE来进行QMK固件开发,让你的开发体验更加流畅高效!
为什么要使用IDE而不是纯文本编辑器?
相比纯文本编辑器,使用IDE进行开发有以下明显优势:
- 智能代码补全:减少拼写错误,提高编码速度
- 便捷的代码导航:快速定位函数和变量定义
- 强大的重构工具:轻松进行代码结构优化
- 自动化构建:无需频繁使用命令行
- Git图形界面:更直观地进行版本控制
- 静态代码分析:提前发现潜在问题
- 丰富的辅助功能:包括调试、代码格式化、调用层次结构显示等
下面我们就分别介绍两种主流IDE的配置方法。
第一部分:Eclipse配置指南
1. 准备工作
在开始配置Eclipse之前,请确保:
- 已经按照QMK官方教程的"入门"部分搭建好基础构建环境
- 能够使用
qmk compile
命令成功构建固件 - 已安装Java 8或更高版本(Eclipse是Java应用程序)
2. 安装Eclipse及必要插件
2.1 下载并安装Eclipse CDT
提示:即使你已经安装了其他版本的Eclipse,建议重新安装CDT版本以保持轻量级并避免不必要的工具干扰。
安装步骤:
- 前往Eclipse官网
- 选择"Eclipse IDE for C/C++ Developers"版本
- 下载后解压到你选择的位置(这将创建一个
eclipse
文件夹)
或者直接下载Eclipse IDE for C/C++ Developers。
2.2 首次启动Eclipse
- 点击"Launch"按钮启动Eclipse(若手动解压,则双击可执行文件)
- 当提示选择工作区时,选择一个存放Eclipse元数据的目录
注意:不要选择qmk_firmware目录,应该选择其父文件夹或其他空文件夹
- 启动后,点击右上角的"Workbench"按钮切换到工作台视图
2.3 安装必要插件
A. AVR插件(关键)
该插件使Eclipse能够理解AVR C代码,是必不可少的:
- 按照使用更新站点的说明进行安装
- 同意未签名内容的安全警告继续安装
B. 控制台ANSI转义插件
此插件用于正确显示QMK makefile生成的彩色构建输出:
- 打开"Help > Eclipse Marketplace…"
- 搜索"ANSI Escape in Console"
- 点击插件的"Install"按钮
- 按照指示完成安装并同意安全警告
安装完毕后,根据提示重启Eclipse。
3. 为QMK配置Eclipse项目
3.1 导入QMK项目
- 点击"File > New > Makefile Project with Existing Code"
- 在下一个界面:
- 选择克隆QMK存储库的目录作为"Existing Code Location"
- 可选择为项目指定不同名称(如"QMK"或"Quantum")
- 选择"AVR-GCC"工具链
- 保持其余部分默认设置,然后点击"Finish"
注意:如果使用自定义名称导入项目出现问题,可尝试保留默认项目名称(即目录名称,可能是
qmk_firmware
)。
项目加载后,就可以通过左侧的"Project Explorer"轻松浏览文件。
3.2 配置键盘构建目标
接下来我们将项目的默认make目标从all
更改为特定键盘和键盘映射组合:
- 将编辑器选项卡聚焦在项目上
- 打开"Project > Properties"窗口,选择"C/C++ Build > Behavior"列表条目
- 将所有已启用版本的默认文本字段从
all
更改为特定键盘目标,如kinesis/kint41:stapelberg
- 通过选择"Project > Clean…"验证设置是否有效
第二部分:VS Code配置指南
Visual Studio Code(简称VS Code)作为一款轻量级但功能强大的编辑器,越来越受到开发者喜爱。下面介绍如何配置VS Code进行QMK开发。
1. 安装VS Code
Windows环境准备
-
安装Git for Windows
- 禁用除
Git LFS
和Check daily for Git for Windows updates
以外的所有选项 - 将默认编辑器设置为"Use Visual Studio Code as Git’s default editor"
- 选择"Use Git from Git Bash only"选项
- 对于"Choosing HTTPS transport backend",任一选项均可
- 选择"Checkout as-is, commit Unix-style line endings"选项(QMK使用Unix风格)
- 其他选项保留默认设置
- 禁用除
-
可选安装Windows的Git凭据管理器,提供更好的凭证管理
-
下载并安装VS Code
配置MSYS2终端集成(Windows环境)
- 点击"File > Preferences > Settings"
- 单击右上角的
{}
按钮打开settings.json
文件 - 设置文件内容如下(如已有内容,则添加并用逗号分隔):
{"terminal.integrated.profiles.windows": {"QMK_MSYS": {"path": "C:/QMK_MSYS/usr/bin/bash.exe","env": {"MSYSTEM": "MINGW64","CHERE_INVOKING": "1"},"args": ["--login"]}},"terminal.integrated.cursorStyle": "line"
}
提示:如果MSYS2安装在其他位置,需修改对应路径为正确位置。
- 使用快捷键Ctrl+`调出终端,或通过"View > Terminal"打开
其他操作系统安装
对于Linux、macOS等系统,只需下载安装VS Code即可,无需额外配置。
2. 安装扩展
VS Code的强大功能很大程度上依赖于其丰富的扩展。以下是推荐安装的扩展:
- Git Extension Pack:安装一系列Git相关工具,方便与QMK固件一起使用
- clangd(可选):C/C++语言服务器,提供智能补全等功能
- EditorConfig for VS Code(可选):帮助代码符合QMK编码规范
- GitHub Markdown Preview(可选):使Markdown预览更接近GitHub效果
- VS Live Share Extension Pack(可选):允许他人远程访问你的工作区提供帮助
安装任何扩展后,请重启VS Code。
3. 配置QMK开发环境
- 点击"File > Open Folder",打开从GitHub克隆的QMK固件文件夹
- 点击"File > Save Workspace As…"保存工作区
配置智能补全和代码导航
通过标准的compile_commands.json
数据库,可以让VS Code的clangd扩展正确识别包含路径和定义:
- 运行命令生成配置:
qmk generate-compilation-database -kb <keyboard> -km <keymap>
- 在VS Code中,按
Ctrl+Shift+P
(macOS:Command+Shift+P
)打开命令面板 - 输入并选择"clangd: Download Language Server"(仅需在安装clangd扩展后执行一次)
- 再次打开命令面板,输入并选择"clangd: Restart Language Server"
现在,你已准备好在VS Code中进行QMK固件开发了!
第三部分:使用VS Code调试ARM MCU
如果你的键盘使用ARM MCU(如STM32系列),并且有Black Magic Probe调试器,可以配置VS Code进行固件调试。
1. 硬件连接
确保Black Magic Probe与MCU的电气连接正确,至少需要连接NRST
、SWDIO
、SWCLK
和GND
引脚。
2. 安装调试扩展
安装VS Code扩展:Cortex-Debug,为VS Code添加ARM Cortex目标调试支持。
3. 配置调试目标
在项目根目录创建或编辑.vscode/launch.json
文件,添加以下内容:
{"version": "0.2.0","configurations": [{"name": "Black Magic Probe (OneKey Proton-C)","type": "cortex-debug","request": "launch","cwd": "${workspaceRoot}","executable": "${workspaceRoot}/.build/handwired_onekey_proton_c_default.elf","servertype": "bmp","BMPGDBSerialPort": "COM4","svdFile": "Q:\\svd\\STM32F303.svd","device": "STM32F303","v1": false,"windows": {"armToolchainPath": "C:\\QMK_MSYS\\mingw64\\bin"}}]
}
需要根据你的设备修改以下参数:
"name"
:描述性名称,自定义即可"cwd"
:QMK固件存储库根目录路径"executable"
:生成的ELF文件路径(位于.build
目录)"BMPGDBSerialPort"
:Windows下的COM端口或Linux/macOS的设备路径"svdFile"
:[可选] SVD文件路径,定义MCU寄存器布局"device"
:MCU名称,与SVD文件匹配"armToolchainPath"
:[可选] ARM工具链安装路径(主要用于Windows)
4. 修改键盘配置启用调试
编辑键盘的rules.mk
文件,添加以下内容:
# Enable debug information in the final binaries
DEBUG_ENABLE = yes
# Disable optimisations for debugging purposes
LTO_ENABLE = no
OPT = g
5. 构建并调试
- 通过常规命令构建并刷写固件:
qmk compile ...
和qmk flash ...
- 在VS Code中切换到调试视图(侧边栏中的"播放"按钮旁)
- 在侧边栏顶部下拉列表中选择创建的调试目标
- 点击绿色播放按钮开始调试
此时应该可以看到调试器已连接并正在执行固件,断点和变量监视功能也应正常工作。
常见问题与解决方案
-
Windows环境下GDB路径问题:
QMK固件在Windows上通常使用QMK MSYS进行编译,需要在gdb设置中指定正确路径。你可能需要在VSCode Cortex-Debug用户设置中修改GDB路径为:C:\\QMK_MSYS\\mingw64\\bin\\gdb-multiarch.exe
-
Eclipse项目导入失败:
尝试使用默认项目名称(即目录名称,通常是qmk_firmware
)重新导入 -
调试器无法连接:
- 检查硬件连接是否正确
- 尝试不同的COM端口(通常会创建两个串行端口设备)
- 验证固件是否正确编译并启用了调试信息
拓展知识:QMK固件开发进阶技巧
-
使用版本控制管理键盘配置:
为不同键盘创建Git分支,方便管理多种配置和回退更改 -
利用宏定义优化代码:
QMK支持强大的宏定义功能,可极大简化复杂功能的实现 -
Custom Matrix实现:
了解键盘矩阵原理,可以自定义扫描方式实现更复杂的功能 -
OLED显示屏开发:
QMK支持集成OLED显示,可显示层信息、键盘状态等 -
无线键盘开发:
结合BLE或其他无线模块,实现无线键盘功能
总结
通过本教程,我们详细介绍了如何使用Eclipse和VS Code两种IDE配置QMK固件开发环境。无论你偏好哪种IDE,都能获得比纯文本编辑器更高效的开发体验。调试功能的加入更是让固件问题定位变得简单直观。
希望这篇教程对你的QMK开发之旅有所帮助!如有任何问题,欢迎在评论区留言交流。
觉得教程有用的话,别忘了点赞、收藏、关注哦!后续会带来更多键盘开发相关教程~
相关文章:
QMK开发环境搭建指南:Eclipse和VS Code详解
QMK开发环境搭建指南:Eclipse和VS Code详解 前言 各位键盘DIY爱好者们,今天跟大家分享如何搭建QMK固件开发环境。无论你是想定制自己的客制化键盘固件,还是对开源键盘固件开发感兴趣,这篇教程都能帮你搞定开发环境配置。本文将详…...
Python pandas 向excel追加数据,不覆盖之前的数据
最近突然看了一下pandas向excel追加数据的方法,发现有很多人出了一些馊主意; 比如用concat,append等方法,这种方法的会先将旧数据df_1读取到内存,再把新数据df_2与旧的合并,形成df_new,再覆盖写入,消耗和速…...
spring中RequestContextHolder
1、在 Spring 框架中, RequestAttributes attributes RequestContextHolder.getRequestAttributes(); 是获取当前请求上下文的核心方法。以下是其关键要点及注意事项: 一、核心机制 作用原理 通过 ThreadLocal 存储当前线程的请求属性对象 …...
Kotlin 遍历
在 Kotlin 中,遍历(迭代)是操作集合、数组、范围(Range)等数据结构的常见需求。Kotlin 提供了多种遍历方式,语法简洁且功能强大。以下是不同场景下的遍历方法总结,附代码示例: 一、…...
Ubuntu Linux系统配置账号无密码sudo
在Linux系统中,配置无密码sudo可以通过修改sudoers文件来实现。以下是具体的配置步骤 一、编辑sudoers文件 输入sudo visudo命令来编辑sudo的配置文件。visudo是一个专门用于编辑sudoers文件的命令,它会在保存前检查语法错误,从而防止可能的…...
C# NX二次开发:判断两个体是否干涉和获取系统日志的UFUN函数
大家好,今天要讲关于如何判断两个体是否干涉和获取系统日志的UFUN函数。 (1)UF_MODL_check_interference:这个函数的定义为根据单个目标体检查每个指定的工具体是否有干扰。 Defined in: uf_modl.h Overview Checks each sp…...
若依项目图片显示问题
图片显示异常问题 路径配置问题:前端图片路径配置错误,最初使用相对路径且未从根目录开始解析,导致浏览器根据当前页面 URL 解析路径出错。例如在用户信息展示页面,若当前页面 URL 为http://localhost:8088/user/profileÿ…...
线索二叉树
一 概念 线索二叉树(Threaded Binary Tree)是一种对二叉树的优化结构,主要解决传统二叉树遍历时需要借助栈或递归(额外空间开销)的问题。通过利用节点中的空指针(nullptr)存储遍历过程中的前驱…...
Git查看某个commit的改动
在Git中查看特定commit的改动有多种方法,下面是几种常用的命令行方式: 1. 使用 git show 命令 这是最常用的方法,直接显示某个commit的详细信息和改动: git show <commit-hash> 例如: git show abc1234 也可…...
es 里的Filesystem Cache 理解
文章目录 背景问题1,Filesystem Cache 里放的是啥问题2,哪些查询它们会受益于文件系统缓存 问题3 查询分析 背景 对于es 优化来说常常看到会有一条结论给,给 JVM Heap 最多不超过物理内存的 50%,且不要超过 31GB(避免…...
2025年3月电子学会等级考试五级题——4、收费站在哪里
文章目录 题目代码公式小结 题目 4、收费站在哪里 在一条高速公路上,如果已知 n 座收费站的位置 x1,x2,… ,xn(不妨假设 0x1 ≤ x2 ≤ … ≤ xn),就很容易算出一共有 n(n-1)/2 个距离的值。而比较困难的问题是,在收集…...
深入探索 JavaScript 中的模块对象
引言 在现代 JavaScript 开发中,模块化编程是一项至关重要的技术。它允许开发者将代码拆分成多个独立的模块,每个模块专注于单一功能,从而提高代码的可维护性、可测试性和复用性。而模块对象则是模块化编程中的核心概念之一,它为…...
R1-Searcher:用强化学习解锁大语言模型检索新能力!
R1-Searcher:用强化学习解锁大语言模型检索新能力! 大语言模型(LLMs)发展迅猛,却常因依赖内部知识而在复杂问题上“栽跟头”。今天解读的论文提出R1-Searcher框架,通过强化学习提升LLMs检索能力。它表现超…...
LangChain框架-PromptTemplate 详解
摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…...
【Java ee 初阶】文件IO和操作(下)
书接上文 文本操作的方法 String[] list() 返回 File 对象代表的目录下的所有文件名 File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示 此处是针对File对象打印得到的效果(调用了File的toString) boolean …...
Android7 Input(六)InputChannel
概述: 本文讲述Android Input输入框架中 InputChannel的功能。从前面的讲述,我们知道input系统服务最终将输入事件写入了InputChannel,而input属于system_server进程,App属于另外一个进程,当Input系统服务想要把事件传递给App进行…...
【Java ee初阶】初始网络
一、IP地址 概念 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 格式 IP…...
LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
在使用 Windows 11 操作系统的电脑上,同时安装了 LabVIEW 2019 32 位和 64 位版本的软件。此前安装的 NI VISA 2024 Q1 版,该版本与 LabVIEW 2019 32 位和 64 位不兼容,之后重新安装了 NI VISA 20.0。从说明书来看,NI VISA 20.0 …...
http协议理解
文章目录 http协议理解基本概念HTTP版本演变版本编年史版本对比未来趋势 HTTP请求/响应结构请求报文响应报文HTTP方法分类对比方法选择原则必须遵守的约束 常见状态码HTTP头部字段HTTPSHTTPS 核心功能说明HTTPS 如何工作? HTTP特点补充知识点启用HTTP/2Nginx 中配置…...
typecho中的Widget设计文档
组成系统的最基本元素 什么是Widget Widget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成。在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,…...
使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…...
基于STM32、HAL库的CH340N USB转UART收发器 驱动程序设计
一、简介: CH340N是南京沁恒电子生产的一款USB转串口芯片,具有以下特点: 支持USB 2.0全速(12Mbps) 内置时钟,无需外部晶振 支持5V和3.3V电源电压 提供常用的MODEM联络信号 内置上电复位电路 支持Windows/Linux/Mac OSX等多平台驱动 体积小,SOP-8封装 二、硬件接口: CH…...
Spring Boot Controller 如何处理HTTP请求体
Spring Boot (通过Spring MVC) 提供了强大的机制来处理不同 Content-Type 的HTTP请求体。这主要依赖于 HttpMessageConverter 接口的各种实现,它们能够自动将请求体内容转换成Java方法参数。 一、核心机制:HttpMessageConverter Spring MVC会根据…...
【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版
本文讲述利用deepseek如何撰写教案并自动实现word高效完美排版。 文章目录 一、访问deepseek官网二、输入教案关键词三、格式转换四、word进一步排版 一、访问deepseek官网 官网:https://www.deepseek.com/ 进入主页后,点击【开始对话】,如…...
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…...
vue 中如何使用region?
vue 中如何使用region? 在 Vue 文件中,你可以使用 //#region 和 //#endregion 注释来创建可折叠的代码区块(类似于 C# 的 region)。这可以显著提高大型 Vue 组件的可读性。 1. 基本用法 在 <script> 部分使用 <script&…...
Spring Boot 启动原理的核心机制
一、核心启动流程概览 Spring Boot 的启动流程可概括为 7 个关键阶段: 1. 加载启动类 (Main Class) 2. 初始化 SpringApplication 实例 3. 加载配置 & 准备环境 (Environment) 4. 创建 ApplicationContext(容器) 5. 刷新容器&#…...
【每天学习一点点】使用Python的pathlib模块分割文件路径
使用Python的pathlib模块分割文件路径 pathlib模块(Python 3.4)提供了面向对象的文件系统路径操作方式,比传统的os.path更加直观和易用。以下是使用pathlib分割文件路径的几种方法: 基本路径分割 from pathlib import Path# 创…...
Qt/C++面试【速通笔记八】—Qt的事件处理机制
在Qt中,事件处理机制是应用程序与用户或系统交互的核心。通过事件处理,Qt能够响应用户的输入、窗口的变化、定时器的触发等各种情况。 1. 事件循环(Event Loop) 在Qt应用程序中,事件循环是事件处理机制的基础。事件循…...
uniapp自定义步骤条(可二开进行调试)
前言 有一个业务需求是需要一个步骤条,但是发现开源的都不太合适,所以就自己写了一个。 开始 test.vue <template><view class"authenticateRecordDetails_container"><!-- 进度 --><view class"authenticateSte…...
uniapp|实现多终端聊天对话组件、表情选择、消息发送
基于UniApp框架,实现跨平台多终端适配的聊天对话组件开发、表情选择交互设计及消息发送,支持文本与表情混合渲染。 目录 聊天界面静态组件实现消息列表布局消息气泡双向布局辅助元素定位与样式静态数据模拟与扩展性设计表情选择器静态模块浮层实现符号网格排列多端样式适配方…...
1.3.1 Linux音频框架alsa详细介绍
ALSA作为对旧OSS系统的替代方案,始于1998年。当时OSS还闭源商业化,因此社区开始开发开源的ALSA。经过多年的发展,ALSA成为Linux内核中音频架构的标准。 结构和架构 ALSA由以下几个主要部分组成: 内核模块: 这是ALSA的…...
R 语言机器学习:为遥感数据处理开启新视角
技术点目录 基础理论、机器学习与数据准备建模与空间预测实践案例与项目了解更多 ——————————————————————————————————————————— 前言综述 在当今科技快速发展的时代,遥感技术为生态学研究提供了海量的数据资源…...
深度 |提“智”向新,奔向未来——当前机器人产业观察
机器人踏着“猫步”在T台走秀、进入工厂协助造车,教育、医疗、城市管理等领域都有了机器人的帮助……今天,机器人已得到广泛应用,走进你我的生活。 伴随着技术日新月异,机器人产业加快提“智”向新。特别是今年以来…...
Web开发-JavaEE应用SpringBoot栈ActuatorSwaggerHeapDump提取自动化
知识点: 1、安全开发-JavaEE-常见依赖-Actuator&Swagger 2、安全开发-JavaEE-安全问题-配置安全&接口测试 一、演示案例-WEB开发-JavaEE-监控依赖-SpringBoot&Actuator&配置安全 SpringBoot Actuator模块提供了生产级别的功能,比如健康…...
AI Agent开发之门:微软官方课程全面解析
AI Agent开发之门:微软官方课程全面解析 引言项目概览10 节核心课程内容详解1. AI 代理简介及应用场景2. 探索 AI Agentic 框架3. 理解 AI Agentic 设计模式4. 工具使用设计模式5. Agentic RAG(检索增强生成)6. 构建可信赖的 AI Agents7. 规划…...
Unity-Shader详解-其五
关于Unity的Shader部分的基础知识其实已经讲解得差不多了,今天我们来一些实例分享: 溶解 效果如下: 代码如下: Shader "Chapter8/chapter8_1" {Properties{// 定义属性[NoScaleOffset]_Albedo("Albedo", 2…...
从零打造个人博客静态页面与TodoList应用:前端开发实战指南
前言 在当今数字时代,拥有个人博客和高效的任务管理工具已成为开发者展示自我和提升生产力的标配。本文将带你从零开始,通过纯前端技术实现一个兼具个人博客静态页面和TodoList任务管理功能的综合应用。无论你是前端新手还是希望巩固基础的中级开发者&a…...
开发者如何优雅应对HTTPS抓包难题
开发者如何优雅应对HTTPS抓包难题:工具实战 深度解析 调试HTTPS接口这件事,真是程序员永远的痛。特别是在移动端、或者遇到客户端集成了第三方安全SDK的项目时,网络调试的门槛几乎成倍提升。你可能也遇到过:Charles不识别证书、…...
Ubuntu 安装远程桌面连接RDP方式
1. 安装 XFCE4 桌面环境 如果你的 Ubuntu 系统默认使用 GNOME 或其它桌面环境,可以安装轻量级的 XFCE4: sudo apt update sudo apt install xfce4 xfce4-goodies 说明:xfce4-goodies 包含额外的插件和工具(如面板插件、终端等&a…...
Ubuntu 22.04 出现 ‘Temporary failure resolving‘ 解决方案
a、使用apt 安装 resolvconf sudo apt-get install resolvconf b、使用 cd /etc/resolvconf/resolv.conf.d/ 进入文件夹,使用 ls 查看目录,会显示 base head tail c、使用 sudo vim base 编辑base文件, 进入时为空,添加 name…...
ubuntu 22.04 换源
参考:清华大学开源软件镜像站 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
Java并发编程几个问题的解答
目录 1、以前你编写的Java程序同时能做几件事情?有几个执行流程?main方法执行完,整个程序一定会退出吗?2、早期的电脑一般是单核CPU,但那时我们就可以在编写程序的同时听歌,你觉得其CPU可以同时执行两个程序…...
JavaScript中数组和对象不同遍历方法的顺序规则
在JavaScript中,不同遍历方法的顺序规则和适用场景存在显著差异。以下是主要方法的遍历顺序总结: 一、数组遍历方法 for循环 • 严格按数组索引顺序遍历(0 → length-1) • 支持break和continue中断循环 • 性能最优,…...
C++ STL入门:set 集合容器
C STL入门:set 集合容器 一、核心特性与适用场景 set 是 C STL 提供的关联式容器,基于红黑树实现,具有两大核心特性: 特性表现形式底层原理元素唯一性重复值自动去重插入时进行二叉树键比对自动排序元素默认升序排列红黑树中序遍…...
[论文笔记] 超详细解读DeepSeek v3全论文技术报告
DeepSeek-V3是一个强大的专家混合(Mixture-of-Experts,MoE)语言模型,总共671B参数,每个token激活37B参数(可以理解为有多个专家,但每个token只会选择一部分专家进行推理,所以一个token的预测,只会用到37B参数),DeepSeek-V3 使用了 多头潜在注意力(...
JS 问号(?)运算符避免中间报错
一、场景 在前端开发过程中,有一些情况比如某些属性可能由于渲染数据的时机不同,一开始是null 或者undifine, 这样访问下面的属性的时候就会报错,我们可以给每个层级后面加个? 就可以避免这个错误。 let data {user: {profile: {name: &q…...
4:点云处理—去噪、剪切、调平
1.点云去噪 dev_clear_window ()dev_open_window(0, 0, 560, 560, black, WindowHandle)GenParamNames : [lut,intensity,light_position,disp_pose,alpha]GenParamValues : [color1,coord_z,0.0 0.0 -0.3 1.0,true,1]DispPose : [0,-0.0005,717.04,280,0,20,0]Instructions[0]…...
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型 内容概要 第17章深入探讨了自编码器(Autoencoders)、生成对抗网络(GANs)和扩散模型(Diffusion Models)。这些模型能够…...
【今日三题】ISBN号码(模拟) / kotori和迷宫(BFS最短路) / 矩阵最长递增路径(dfs)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 ISBN号码(模拟)kotori和迷宫(BFS最短路)矩阵最长递增路径(dfs) ISBN号码(模拟) ISBN号码 #include <iostream> #incl…...