LeetCode 二分查找、移除元素与有序数组平方题解
涵盖 LeetCode 三道算法题:704 二分查找、27 移除元素、977 有序数组的平方。详细解析了二分查找的两种区间定义写法,双指针法在移除元素中的应用,以及有序数组平方的双指针排序方案。提供 C 语言代码实现,包含暴力解与优化解对比,强调边界处理与内存管理注意事项。
涵盖 LeetCode 三道算法题:704 二分查找、27 移除元素、977 有序数组的平方。详细解析了二分查找的两种区间定义写法,双指针法在移除元素中的应用,以及有序数组平方的双指针排序方案。提供 C 语言代码实现,包含暴力解与优化解对比,强调边界处理与内存管理注意事项。

系统讲解了数据结构中的查找技术,包括基本概念、评价指标及平均查找长度计算。详细阐述了顺序查找(普通与哨兵实现)、折半查找(判定树构建与效率)、分块查找的原理与流程。重点分析了二叉排序树的定义、查找、插入及删除操作的递归与非递归实现,并探讨了其时间复杂度特性。

LeetCode 第 962 题'最大宽度坡'的 C 语言解法。题目要求在整数数组中找到满足 i < j 且 nums[i] <= nums[j] 的最大宽度 j - i。解决方案采用单调栈策略:首先从左到右构建一个存储递减元素索引的单调栈,然后从右向左遍历数组,利用栈顶元素与当前值比较计算宽度并更新最大值。该方法时间复杂度为 O(n),空间复杂度为 O(n)

介绍 Linux 下 TCP 服务器开发流程。从基础 Socket 编程实现 Echo 服务器入手,逐步优化并发能力,涵盖多进程、多线程及线程池模型。重点讲解文件描述符管理、僵尸进程处理及线程同步机制。最后扩展至远程命令执行场景,通过白名单机制防范安全风险。适合后端开发者学习网络编程与高并发架构。

在 Windows、macOS 和 Linux 三大主流操作系统上搭建 C 语言开发环境的详细步骤。内容包括编译器安装(如 MinGW、Xcode 命令行工具、GCC)、编辑器或 IDE 配置(VS Code、CLion)、调试工具设置(GDB)以及跨平台开发技巧。通过遵循文中的操作指南,开发者可以快速建立稳定的编译运行环境,进行代码编写、调试及项目管理。

Libmodbus 库的源码架构与核心机制。内容涵盖 Modbus 协议理论模型(PDU/ADU 分层及事务处理)、代码初始化流程(上下文创建与连接建立)、核心数据结构(struct_modbus 及 backend 指针策略模式)、主站与从站的工作流程(请求构建、发送、接收、校验及响应处理)。文章还介绍了实际应用场景,总结了前后端分离的设计模式及其在工业通信开发中的价值。
SSD1315 OLED 驱动芯片的特性及其在嵌入式开发中的应用。文章详细解析了 SSD1315 的硬件抽象层实现,包括 I2C 通信协议的地址配置、读写操作及控制字节的使用。同时阐述了其页寻址模式的显存结构,提供了设置页面地址和列地址的代码示例。针对列地址分两次传输的原因进行了说明,并强调了边界检查的重要性以避免显示错位问题。

单链表的数据结构与 C 语言实现。内容包括单链表概念、节点定义、以及核心操作函数的编写,如头插尾插、头删尾删、指定位置插入删除、查找与销毁等。文章提供了完整的头文件、源文件及测试代码示例,帮助读者理解线性表在内存中的动态分配与指针操作逻辑。

详细讲解了数据结构中的双向循环链表。内容包括链表分类、双向链表的概念与结构(哨兵位)、基本操作(尾插、头插、尾删、头删、指定位置插入删除、查找、打印)及销毁的实现原理。提供了基于 C 语言的完整代码示例(List.h, List.c, test.c),展示了如何通过一级指针管理带头节点的双向循环链表,确保接口一致性与内存安全。
STM32定时器主从级联的应用场景与核心机制。通过级联可将两个16位定时器扩展为32位计数器,解决低频信号测量精度不足的问题。重点解析了TRGO信号的作用及CR2寄存器MMS位的配置方法,展示了如何利用主定时器触发从定时器以实现高精度同步控制。

详细讲解了线性表中的顺序表与链表。涵盖静态与动态顺序表的结构定义、扩容机制及增删查改操作实现;单链表与双向带头循环链表的节点操作与分类;以及常见算法题如移除元素、反转链表、合并有序数组等的双指针解法。最后对比了顺序表与链表在存储空间、访问效率及插入删除性能上的差异,帮助读者理解两种数据结构的核心特性与适用场景。
探讨了单片机开发中C语言保持主流地位的原因。主要优势包括极致的代码效率与资源控制,相比C++减少了运行时开销和内存占用;以及成熟的工具链与生态系统。尽管C++在桌面领域表现优异,但在资源受限的嵌入式环境中,C语言的稳定性和可靠性仍占主导,适用于工业控制、汽车电子等领域。

C/C++ 中的结构体概念,涵盖声明方式、变量初始化、自引用实现链表、内存对齐规则及优化、传参方式以及位段的使用与注意事项。重点讲解了内存对齐的原因、默认对齐数修改方法,以及位段在节省空间时的跨平台风险。

Linux 系统编程中的文件描述符(FD)概念及其底层实现机制。阐述了进程创建时默认打开的标准输入输出流(0, 1, 2),以及文件描述符的分配规则(从最小未使用下标开始)。详细讲解了输出重定向、追加重定向和输入重定向的原理及代码实现,区分了标准输出流与标准错误流在重定向时的不同行为。最后介绍了 dup2 函数在文件描述符复制与重定向中的应用,通过示例展示了如何将程序输出重定向至文件。
系统讲解滑动窗口算法在多个经典题目中的应用,包括长度最小子数组、无重复字符最长子串、乘积小于 K 的子数组、水果成篮及最小覆盖子串。核心涵盖双指针移动策略、哈希表计数、乘法与加法初始化差异、以及有效状态判断逻辑。通过代码解析与避坑指南,帮助读者掌握滑动窗口的通用模板与边界处理技巧,理解时间复杂度 O(n) 的实现原理。

栈(Stack)这一线性表的数据结构,重点阐述了其后进先出(LIFO)的特性及基本操作。内容包括顺序栈的结构定义、初始化、入栈、出栈、获取栈顶元素等核心功能的 C 语言实现代码。此外,还探讨了双栈共享空间的优化策略,利用数组两端向中间延伸的方式提高内存利用率。文章提供了完整的代码示例及遍历方法,适合初学者掌握栈的基础原理与应用。
介绍基于 STM32 的数字万用表 DIY 项目。涵盖项目背景、核心价值及硬件设计精要。主控选用 STM32F103C8T6,具备 12 位 ADC 和丰富外设。针对高精度需求可考虑 STM32F373 系列。文中对比了电阻分压等量程扩展方案,适合电子爱好者学习模数转换与信号调理技术。
介绍在 STM32 微控制器上移植和部署 LVGL 图形库的完整流程。涵盖硬件资源评估(SRAM/SDRAM)、显示与输入驱动初始化、定时器心跳设置、基础 UI 控件创建及动画实现。同时分析了常见开发问题如屏幕闪烁、触摸校准、内存溢出及性能优化方案(DMA2D、部分刷新)。旨在帮助开发者在资源受限环境下构建流畅的嵌入式人机交互界面。

介绍在 STM32 裸机环境下实现多任务调度的方法。通过利用 HAL 库的 SysTick 定时器获取时间戳,构建轻量级任务调度器,替代传统的阻塞式延时(HAL_Delay)。该方案支持非阻塞轮询,确保按键扫描、屏幕刷新、LED 控制等多任务并发执行,提升系统实时性。代码基于结构体封装,易于移植至不同 STM32 系列,并通过 IO 翻转法验证定时精度。
Keil 5 开发环境的安装流程,涵盖 C51 单片机与 STM32 微控制器的双版本部署。内容包括分别安装 C51 版与 MDK 版,通过合并配置文件实现兼容,以及后续芯片包的安装。安装时需注意路径设置、驱动安装及管理员权限。