编程语言学习
文章平均质量分 80
记录编程路上遇到的各种问题,以及相关语言的学习遇到的各种问题。
雪域迷影
专业:计算机
擅长领域:C++服务端和客户端开发
兴趣:象棋、乒乓球、游泳、听音乐。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Hazel游戏引擎结构分析
Hazel游戏引擎是一个开源的2D/3D引擎,基于C++和OpenGL实现。文章分析了其核心架构,包括8个主要子系统:核心系统、渲染系统、场景系统、资源管理系统、脚本系统、物理系统、音频系统和编辑器系统。各子系统通过分层设计和事件驱动机制保持松耦合,核心系统作为基础支撑其他模块。文章详细阐述了子系统间的依赖关系和调用链,并提供了架构图和模块依赖图,展示了引擎如何通过UUID资源引用和事件总线实现高效协作。该架构设计为学习游戏引擎开发提供了有价值的参考。原创 2026-04-11 16:35:22 · 638 阅读 · 0 评论 -
evpp-现代化C++11高性能的Reactor模式的C++网络库
摘要:evpp是一个基于libevent开发的现代化C++11高性能网络库,支持TCP/UDP/HTTP等协议的异步非阻塞服务器和客户端。主要特性包括C++11接口、多线程安全、跨平台支持等,已用于生产环境处理数万亿次网络通信。文章详细介绍了在Windows11上使用VS2026和vcpkg编译evpp的步骤,包括安装依赖库、构建项目和运行示例程序。示例展示了TCP服务器和客户端的实现,演示了消息收发和连接状态回调功能。该库还提供memcached和NSQ客户端等扩展功能。原创 2026-04-04 19:56:24 · 490 阅读 · 0 评论 -
OpenHarmony 电源管理模块状态转换分析
OpenHarmony电源管理服务组件提供系统电源状态管理功能,包括重启系统、休眠运行锁管理和电源状态查询。该组件采用分层架构设计,包含NAPI层、Native层、服务层和测试框架,支持从用户活动触发状态转换(如亮屏/灭屏)到系统级电源管理(如合盖睡眠、强制睡眠)。主要状态包括AWAKE(亮屏)、INACTIVE(灭屏)和SLEEP(S3休眠),通过超时机制和事件驱动实现状态自动切换,同时支持运行锁机制保持设备唤醒。该组件是OpenHarmony电源管理子系统的重要组成部分,与显示管理、电池管理等模块协同工原创 2026-03-25 23:10:28 · 518 阅读 · 0 评论 -
SDL3库实现的贪吃蛇小游戏,不到400行代码
SDL3库官方示例中提供了一个简洁的贪吃蛇游戏实现,仅用397行C代码就完成了核心功能。该示例展示了SDL3库的基本使用方法,包括窗口创建、渲染、输入处理和游戏逻辑实现。游戏具有标准贪吃蛇玩法:蛇身随方向键移动,吃到食物后增长,碰到边界会循环。代码结构清晰,将游戏状态、渲染和输入处理分离,可作为SDL3初学者学习游戏开发的入门参考。官方还提供了在线演示版本,方便开发者快速体验效果。原创 2026-03-17 21:56:05 · 138 阅读 · 0 评论 -
C++17中的结构化绑定
摘要: C++17引入的结构化绑定(Structured Bindings)允许将对象成员或容器元素解构为独立变量,提升代码简洁性。支持数组、std::pair/tuple、std::map键值对及自定义结构体(需实现tuple_size和get特化)。示例展示了如何解构数组、pair、map遍历、tuple以及deque/list等容器,并提供了自定义结构体的实现方法。结构化绑定通过避免手动解包减少冗余,但需注意其创建的是新变量而非引用。该特性使代码更现代化且易读,适用于多种标准容器和数据结构场景。原创 2026-02-09 23:47:09 · 462 阅读 · 0 评论 -
MacOS中运行Next.js项目注册新用户时MongoDB报错MongoServerError
摘要:本文记录了在MacOS上运行Next.js项目时遇到的MongoDB报错问题及解决方法。作者安装MongoDB 8.0社区版后,运行Next.js项目时出现"Transaction numbers are only allowed on a replica set member or mongos"错误。解决方案是将单节点MongoDB配置为Replica Set模式,包括修改配置文件、初始化Replica Set等步骤。此外还提供了使用非事务操作或MongoDB Atlas的替代原创 2026-02-01 20:02:35 · 840 阅读 · 0 评论 -
C++17中使用inline修饰类的静态成员变量
摘要:C++17引入的inline static允许在类内直接初始化静态成员变量,而C++11不支持此特性,需在类外定义和初始化。使用场景包括单例模式、共享资源管理和延迟初始化。inline static简化代码、提高可读性并避免链接错误。C++11中替代方案是在类外定义静态变量,并通过静态方法初始化。升级到C++17可直接使用inline static使代码更简洁。原创 2026-01-28 21:10:27 · 682 阅读 · 0 评论 -
C++实现ATM状态机
摘要:本文展示了一个使用C++实现的ATM状态机系统,采用面向对象设计。程序模拟了ATM的基本功能,包括用户登录、余额查询、存款、取款和退出操作。通过ATMState基类和具体状态类(IdleState、MenuState)实现状态模式,使用ATM类管理用户数据和状态切换。系统采用动态分配状态对象的方式,支持灵活的状态转换。文章还提供了代码说明、运行示例,并建议了可能的扩展功能,如增加更多状态、持久化存储和安全性改进。原创 2026-01-25 11:32:02 · 217 阅读 · 0 评论 -
Python中连接Redis数据库并存储数据
本文介绍了如何在Python中使用redis库连接Redis数据库并进行数据存储和读取。主要内容包括:安装redis库(pip install redis),建立Redis连接(redis.StrictRedis),存储键值数据(set方法),读取数据(get方法),以及存储和读取字典数据(hset和hgetall方法)。示例代码演示了完整的操作流程,包含异常处理,并展示了如何存储字符串和字典类型的数据。运行结果验证了连接成功、数据存储和读取的功能实现。该方案适用于需要高效键值存储的场景,为Python应用原创 2026-01-12 22:36:19 · 521 阅读 · 0 评论 -
环保HJ212-2017协议CRC校验码计算
HJ212-2017协议CRC校验码计算摘要: 本文介绍了环保HJ212-2017协议中的CRC16校验算法实现。该协议采用ANSI CRC16校验方式,通过特定步骤计算数据段的校验码。文章详细说明了CRC16算法步骤,包括初始化寄存器、逐字节异或运算、移位处理等过程,并提供了C语言、Python和Java三种语言的实现代码示例。通过实际数据段"QN=20160801085857223..."的校验计算,验证了算法正确性,输出结果1C80与预期一致。该CRC校验方法可有效检测数据传输过程原创 2026-01-11 10:11:18 · 470 阅读 · 0 评论 -
怎么将.ts文件转换成.js文件?
要将.ts文件转换为.js文件,可以使用TypeScript编译器(tsc)。首先安装TypeScript(npm install -g typescript),然后通过命令tsc example.ts编译单个文件,或使用tsconfig.json配置文件管理整个项目。编译后的.js文件可直接在Node.js或浏览器中运行。原创 2025-12-20 22:26:28 · 567 阅读 · 0 评论 -
Windows11中VS2026使用C++ 现代化json库nlohmann::json的3种方式
本文介绍了在Windows11系统下使用VS2016集成现代化JSON库nlohmann的两种方法:一是直接引入头文件方式,下载源代码后将include目录拷贝到项目中使用;二是通过NuGet包管理器安装nlohmann.json库。文章详细展示了两种方式的实现步骤,包括项目配置、代码示例和运行结果。第一种方式需要手动管理头文件,第二种方式则通过包管理器自动处理依赖关系。两种方法都能有效实现JSON的序列化和反序列化功能,NuGet方式更为简便。文中还提及vcpkg作为第三种可选方案。原创 2025-12-18 23:52:42 · 1014 阅读 · 0 评论 -
nlohmann::json库对象和json结构体转换的新方式
nlohmann::json库从3.9.0版本开始提供了6个宏来简化自定义类型与JSON的转换,不再需要手动定义to_json/from_json函数。这些宏分为侵入式(需在类内定义)和非侵入式(可在类外定义)两类,支持最多64个成员变量。其中包含常规版本、带默认值版本和仅序列化版本,为开发者提供了更灵活的JSON转换方式选择。原创 2025-12-18 23:22:35 · 1524 阅读 · 0 评论 -
Windows11中使用VS2022编译运行libevent网络库
本文介绍了在Windows11系统中使用VS2022和CMake编译运行libevent事件通知网络库的完整过程。主要内容包括:1) libevent库的功能简介;2) 从GitHub获取源代码的方法;3) 使用CMake配置VS2022工程的具体命令;4) 编译过程的关键步骤和注意事项;5) 在VS2022中运行hello-world示例项目。文章详细说明了Visual Studio版本与CMake生成器参数的对应关系,并展示了编译后的目录结构和项目文件。原创 2025-12-13 21:55:56 · 1291 阅读 · 0 评论 -
macOS中使用cJSON解析库解析JSON
本文介绍了在macOS系统中使用cJSON解析库的两种方法。cJSON是一个轻量级的ANSI C JSON解析器,采用MIT开源协议。第一种方法是通过下载cJSON源代码,使用CMake编译生成库文件后引入项目;第二种是直接拷贝cJSON.h和cJSON.c文件到项目中。文章详细说明了第一种方法的步骤:安装pkg-config、下载源码、使用CMake编译安装,并展示了编译过程的输出日志。cJSON具有超轻便、可移植和单文件特点,适合在C++项目中处理JSON数据。原创 2025-12-10 21:34:08 · 1234 阅读 · 0 评论 -
C++中编写UT单元测试用例时如何mock非虚函数?
摘要: 在C++单元测试中,使用GoogleTest的GMock通常只能mock虚函数。针对非虚函数的mock,官方推荐通过模板参数实现依赖注入。此外,开源项目cpp-stub提供了更灵活的解决方案,支持对各类函数(包括非虚成员函数、静态函数、构造函数等)进行mock。该工具通过获取函数地址并替换为桩函数实现mock,支持多种平台和编译器,但无法mock纯虚函数、lambda和部分系统调用。使用时需注意编译选项优化和代码覆盖率收集方法。原创 2025-11-25 22:11:40 · 1339 阅读 · 0 评论 -
C++ 11 中的move赋值运算符
C++11中的移动赋值运算符通过转移而非复制资源提升性能。文章展示了标准库vector和自定义类的移动赋值实现方式,重点说明了其避免复制、减少内存占用的优势。通过MyString类的例子,详细演示了移动构造函数和移动赋值运算符的实现方法,包括资源所有权的转移和原对象状态的清空。最后通过示例程序验证了移动语义的高效性,输出结果显示移动后的源对象变为空状态,而目标对象成功接管资源。原创 2025-11-14 23:38:44 · 621 阅读 · 0 评论 -
IoTClient
IoTClient [English](README.md) | 简体中文这是一个物联网设备通讯协议实现客户端,将包括主流PLC通信读取、ModBus协议、Bacnet协议等常用工业通讯协议。本组件基于.NET Standard 2.0,可用于.Net的跨平台开发,如Windows、Linux甚至可运行于树莓派上。本组件终身开源免费,采用最宽松MIT协议,您也可以随意修改和商业使用(商业使用请做好评估和测试)。开发工具:Visual Studio 2019QQ交流群:995475200.转载 2021-05-06 18:59:14 · 4247 阅读 · 0 评论 -
Java实现快速排序算法
本文介绍了Java实现的快速排序算法,这是一种基于分治思想的高效排序方法。算法通过选取基准值(pivot)将数组分为三部分,并递归排序子数组。文章提供了完整的Java代码实现,包括分区(partition)和交换(swap)操作,并对随机生成的数组进行排序演示。快速排序的平均时间复杂度为O(nlogn),适合大规模数据排序。示例展示了排序前(无序)和排序后(升序)的数组对比结果。原创 2025-11-06 23:38:23 · 498 阅读 · 0 评论 -
Typescript语言中通过get请求获取api.open-meteo.com网站的天气数据
摘要:本文介绍了如何使用TypeScript通过GET请求获取api.open-meteo.com网站的天气数据。示例代码使用node-fetch模块发送HTTP请求,包含设置经纬度参数、处理响应数据和错误捕获。文章详细说明了项目初始化、代码编译和运行步骤,并展示了预期的JSON格式输出结果。该方法可为TypeScript开发者提供一个简单有效的气象API调用解决方案,适用于Node.js环境。原创 2025-11-02 14:20:21 · 1251 阅读 · 0 评论 -
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
本文介绍了使用Go语言通过HTTP GET请求获取api.open-meteo.com网站天气数据的方法。代码示例展示了如何构建请求URL、发送GET请求、处理响应状态码、读取响应数据并解析JSON格式的天气信息。文章还提供了错误处理机制、运行步骤和注意事项,并演示了如何访问具体的天气字段数据。该实现仅使用Go标准库的net/http和encoding/json包,无需额外依赖,适合快速获取天气API数据的基本需求。原创 2025-11-01 22:13:26 · 1434 阅读 · 0 评论 -
Python中通过get请求获取api.open-meteo.com网站的天气数据
本文介绍了如何使用 Python 的 requests 模块通过 GET 请求获取 api.open-meteo.com 网站的天气数据。代码示例演示了如何构建带参数的请求(包含纬度、经度等),处理200响应及异常情况,并解析返回的JSON格式天气数据(如温度、风速等)。文章还提供了安装依赖、运行脚本的具体步骤以及示例输出,适用于需要获取天气数据的Python开发者。原创 2025-11-01 21:42:43 · 1329 阅读 · 0 评论 -
使用Java通过get请求获取api.open-meteo.com网站的天气数据
本文介绍了使用Java发送HTTP GET请求获取api.open-meteo.com网站天气数据的方法。示例代码展示了如何通过HttpURLConnection类实现GET请求,包括URL构建、请求发送、响应处理和异常捕获。文章还提供了代码编译运行步骤、示例输出结果,并提及了JSON解析库的使用建议。对比作者先前用C++和Node.js实现的同功能文章,本文完整呈现了Java版本的具体实现过程,注意事项包括网络连接检查和POST请求的扩展方法。原创 2025-11-01 21:15:56 · 655 阅读 · 0 评论 -
Nodejs通过get请求获取api.open-meteo.com网站的天气数据
本文介绍了使用Node.js的http模块获取天气数据的方法。通过GET和POST请求调用api.open-meteo.com天气API,演示了请求配置、数据处理和错误处理的具体实现。GET请求通过URL参数传递经纬度信息获取天气数据;POST请求则通过请求体发送JSON数据。文中提供了完整的代码示例,并指出当API不支持POST请求时会返回错误信息,同时建议对复杂HTTP需求可使用axios等高级库。运行示例代码后,GET请求成功返回包含温度、风速等详情的天气数据。原创 2025-11-01 20:43:00 · 676 阅读 · 0 评论 -
C++中使用cpp-httplib和nlohmann_json库实现http请求获取天气数据
本文介绍了如何在C++中使用cpp-httplib和nlohmann_json库实现HTTP请求获取天气数据。cpp-httplib是一个轻量级的HTTP/HTTPS客户端/服务端库,而nlohmann_json是流行的JSON解析库。文章展示了如何通过这两个库向api.open-meteo.com发送请求获取天气预报数据,并解析返回的JSON格式响应,提取当前温度信息。示例代码演示了同步和异步两种请求方式,最终输出包含温度值和单位的天气信息。这种方法为C++开发者提供了简单高效的HTTP通信解决方案。原创 2025-10-31 22:39:03 · 872 阅读 · 0 评论 -
Visual Studio 2026 IDE发布了
微软发布Visual Studio 2026 IDE,提供Insiders预览版下载。该版本是继2022版后的重大更新,包含多个新特性改进。开发者可通过官网链接下载社区版、专业版和企业版,或观看YouTube发布派对视频了解详情。官方博客和发行说明提供了版本更新内容参考,支持开发者抢先体验最新功能。原创 2025-09-27 15:01:50 · 2005 阅读 · 1 评论 -
C++编写的经典贪吃蛇游戏
C++贪吃蛇游戏项目摘要 这是一个使用C++和Raylib图形库开发的经典贪吃蛇游戏项目,采用现代软件开发实践构建。项目特点包括: 核心功能: 支持WASD键控制 移动的食物增加游戏难度 3个不同布局的关卡 使用Raylib处理渲染和UI 采用Catch2进行单元测试 技术架构: 应用OOP设计模式(Command, GameLoop) 逻辑层与渲染层分离 清晰的目录结构 CMake构建自动化 使用Doxygen文档化 Clang格式化代码 开发流程: 采用Jira进行看板项目管理 GitHub分支工作流原创 2025-09-21 18:41:50 · 1347 阅读 · 0 评论 -
Ubuntu22.04中使用cmake安装abseil-cpp库
Abseil是Google开源的C++基础库,包含增强标准库功能的实用工具,被广泛应用于gRPC、Protobuf和TensorFlow等项目中。该项目支持Bazel和CMake构建系统,提供了算法、容器、调试、哈希、同步等20多个功能模块。文档详细介绍了两种构建方式,特别是通过CMake可生成静态库或动态库(通过设置BUILD_SHARED_LIBS选项)。Abseil采用Apache 2.0许可证,建议用户实时更新主分支或使用长期支持版本。Ubuntu 22.04环境下可通过指定C++17标准和测试选项原创 2025-09-03 21:47:37 · 1610 阅读 · 0 评论 -
使用AssemblyAI将音频数据转换成文本
摘要:本文介绍了如何使用AssemblyAI的API将音频文件转换为文本。首先需要注册账号获取API Key,然后提供了Python、JavaScript、PHP等多种语言的代码示例来调用其语音转文本服务。示例中展示了如何上传本地或远程音频文件,并通过轮询方式获取转换结果。虽然官方未提供Java示例,但其他语言的实现方式清晰展示了API的基本调用流程和参数设置。原创 2025-08-03 19:25:28 · 1343 阅读 · 0 评论 -
Ubuntu22.04中下载OpenHarmony源代码
Ubuntu22.04获取OpenHarmony源码指南 本文档详细介绍了在Ubuntu22.04系统中获取OpenHarmony开源操作系统代码的四种方法: 从码云仓库获取:适用于开发者参与贡献或学习源码,需注册gitee账号并配置git环境,通过repo工具下载最新代码。 从DevEco Marketplace获取:适合快速开发初学者,可下载定制化发行版,需先安装Node.js和hpm-cli工具。 从镜像站点获取:提供稳定版本下载,适合需要特定LTS版本的用户,可直接获取压缩包文件。 从GitHub仓原创 2025-08-01 20:41:35 · 1576 阅读 · 0 评论 -
C++23中的std::expected:异常处理
C++23引入的std::expected为错误处理提供了更优雅的解决方案。这个模板类允许函数返回期望值或错误值,避免了异常处理的复杂性。示例展示了如何使用std::expected处理除零错误:当除数为0时返回错误信息,否则返回计算结果。代码还演示了链式调用,通过and_then和or_else方法进行连续操作。相比传统的异常处理,std::expected提供了更类型安全、更直观的错误处理方式,使代码更加清晰易读。该特性特别适用于需要明确处理错误场景的场合,如数值计算、文件操作等。原创 2025-07-20 22:34:24 · 1155 阅读 · 0 评论 -
内存越界访问导致C++ 程序崩溃并使用AddressSanitizer(ASan)工具定位
摘要:本文演示了一个C++程序因数组越界访问导致崩溃的案例,并展示了如何使用AddressSanitizer(ASan)工具定位问题。程序通过vector越界写入破坏内存,可能引发后续崩溃。使用ASan编译后(添加-fsanitize=address -g选项),运行时会精准报告堆缓冲区溢出错误,包括越界操作的具体行号(如nums[5]=100)和内存分配信息。ASan能有效检测内存越界、释放后使用等问题,显著提升调试效率。原创 2025-07-19 09:12:25 · 645 阅读 · 0 评论 -
C++23中的std::print和std::println
C++23引入了std::print和std::println函数,简化了格式化输出操作。这两个函数通过<print>头文件提供,其中println会自动添加换行符。相比传统cout和printf,它们提供了更简洁易读的语法和潜在的性能优势。示例展示了其基本用法,包括格式化输出和自定义类型格式化。在VS2022中需手动设置C++23标准才能使用这些新特性。这些改进使C++的I/O操作更接近现代语言如Python和Java的便利性。原创 2025-06-28 20:55:52 · 1094 阅读 · 0 评论 -
使用 CMake 的典型 Linux 项目
摘要: 本文介绍了如何使用CMake构建典型Linux项目的实用指南。作者对比了Autotools和CMake,选择后者作为构建工具。文章详细讲解了项目结构设计、模块配置、依赖管理(包括内部模块和外部软件包)等关键环节。通过实际代码示例展示了ADD_EXECUTABLE、ADD_LIBRARY、TARGET_LINK_LIBRARIES等核心CMake命令的使用方法,特别强调了如何利用pkg-config工具处理非CMake注册的外部依赖。本文为开发者提供了简明实用的CMake入门指导翻译 2025-06-13 23:47:15 · 154 阅读 · 0 评论 -
C++11中的右值引用和完美转发
C++11中的右值引用和完美转发原创 2025-03-02 22:32:40 · 1254 阅读 · 0 评论 -
C++中std::move移动语义的使用
std::move 是 C++11 引入的一个标准库函数,它位于<utility>头文件中,主要作用是将左值转换为右值引用,从而能够触发移动语义,让资源从一个对象转移到另一个对象,而不是进行深拷贝。这样做可以避免不必要的资源分配和释放,提高程序性能,尤其是在处理大型对象或资源密集型对象时优势明显。原创 2025-03-02 11:13:00 · 2061 阅读 · 0 评论 -
Ubuntu22.04中使用CMake配置运行boost库示例程序
Ubuntu22.04中使用CMake配置运行boost库原创 2024-11-10 08:52:01 · 1375 阅读 · 0 评论 -
【Spring Boot & React】Spring Boot和React教程 完整版
在B站找到一个不错的SpringBoot和React的学习视频,作者是。值得仔细学习一下,特此记录。原创 2024-10-05 08:35:26 · 1229 阅读 · 0 评论 -
C++实现俄罗斯方块(Windows控制台版)
在油管上看到一个使用C++控制台编写的俄罗斯方块小游戏,200多行,B站上也有相关的讲解视频,非常不错,值得学习。CSDN博主,讲解得已经非常详细了,为此我就不赘余了。原创 2024-09-08 11:09:15 · 1185 阅读 · 0 评论 -
Ubuntu22.04编译报错:error while loading shared libraries: libtinfo.so.5:cannot open shared object file
Ubuntu22.04编译源码时找不到libtinfo5.so库原创 2024-05-25 08:49:18 · 1608 阅读 · 0 评论
分享