- 博客(42)
- 收藏
- 关注
原创 彻底搞懂鸿蒙 AppStorage:应用全局状态管理从入门到最佳实践
AppStorage 是 ArkUI 框架提供的应用全局单例内存状态仓库,应用启动时由框架自动创建,应用进程销毁时随之释放。它以键值对(Key-Value)的形式存储数据,应用内所有页面、所有 UIAbility、任意自定义组件均可访问其中的属性,且数据变更可触发对应 UI 的自动刷新HarmonyOS设备开发。简单理解:它是整个 App 共用的「全局内存盒子」,所有组件都能往里存、往外取,一处修改,全应用同步生效。
2026-06-21 18:36:17
208
原创 从原生Socket聊天室入门,被新手忽略的「协议」:网络通信的通用规则
协议不是高深的技术名词,放在我们的 Socket 聊天室里,就是客户端与服务端提前约定好的“消息格式规范”。既然裸字符串不可靠,最优解就是把零散的字段,封装成结构化数据。结合 TypeScript 的类型约束,我们可以清晰地拆分消息模块,这也是工业界通用的做法。第一步:定义消息类型枚举(区分指令)// protocol.ts 协议文件(前后端共用)// 连接相关ONLINE = 'online', // 用户上线OFFLINE = 'offline', // 用户下线。
2026-06-11 15:45:10
170
原创 彻底搞懂 ArkTS 状态管理 V1:8 个核心装饰器全解析
ArkTS 声明式 UI 的核心思想是 “数据驱动 UI”:UI 是状态的映射,状态变化时,UI 会自动重新渲染。鸿蒙官方提供的状态管理 V1是一套基于装饰器的轻量级状态管理方案数据所有权:谁拥有数据,谁负责初始化和销毁数据传递:数据如何在组件之间传递数据响应:数据变化后如何触发 UI 刷新和自定义逻辑状态管理 V1 是鸿蒙开发中 90% 场景下的首选方案,它简单、高效、开箱即用,不需要引入任何第三方库。本文基于鸿蒙官方文档,全面解析了 ArkTS 状态管理 V1 的 8 个核心装饰器。
2026-06-07 15:21:41
322
原创 鸿蒙 ArkTS 多线程完全指南:告别 UI 卡顿,从 TaskPool 到 Worker
多线程是鸿蒙开发的分水岭。只会写单线程代码的开发者,永远只能写出卡顿、体验差的应用;而掌握了多线程的开发者,才能写出真正流畅、专业的鸿蒙应用。优先使用 TaskPool 处理短期 CPU 密集型任务,只有在需要长期运行和持续通信时才使用 Worker,永远不要在 UI 线程做任何耗时操作。希望这篇文章能帮你彻底搞懂鸿蒙多线程。
2026-06-03 22:32:26
363
原创 Codex+ClaudeDesktop+DeepSeekV4——AI编程双核驱动配置指南
现在市面上的 AI 编程工具很多,但大多数是单 Agent 模式:你说一句,它做一步。这套方案不一样。它是两个 Agent 分工协作角色组件职责规划者理解项目、设计方案、拆任务、审代码执行者Claude Desktop + MCP 工具读写文件、跑测试、操作浏览器、调 APICodex 负责想,Claude 负责做。这才是真正能用起来的协作模式。AI Agent 能把开发中的重复劳动从 80% 压缩到 20%。省下来的时间,用来做架构设计、业务理解、安全分析这些真正需要人的事情。
2026-05-29 22:28:47
342
原创 鸿蒙 ArkTS 实战进阶:从核心组件到面向对象编程一篇通
接口用于定义对象的结构和类型,它不包含具体实现,只描述对象应该具有哪些属性和方法。接口是 TypeScript/ArkTS 最强大的特性之一,能够帮助我们在编译时发现类型错误。这周我们完成了从 “基础组件使用” 到 “面向对象编程” 的跨越。掌握了Scroll和Tabs这两个核心组件,我们已经能够开发出绝大多数移动端常见的页面布局;而学习了类、接口和泛型,我们的代码开始变得更加结构化、可维护和可复用。
2026-05-29 19:54:55
252
原创 Git 与 GitHub 从入门到精通:程序员必备的版本控制神器
Git 是由 Linux 之父 Linus Torvalds 在 2005 年为了管理 Linux 内核开发而创建的版本控制系统。分布式:每个开发者都有完整的本地仓库速度快:几乎所有操作都在本地完成强大的分支管理:支持轻量级分支和合并数据完整性:所有文件都有哈希校验,防止篡改代码审查 (Pull Request)问题跟踪 (Issues)项目管理 (Projects)持续集成 (CI/CD)维基 (Wiki)Git 和 GitHub 是现代程序员的必备技能。
2026-05-23 12:26:10
336
原创 从零构建 Node.js TCP 多人聊天室 - 完整实战教程
✅ 多人实时聊天 - 支持多个客户端同时连接✅ 昵称系统 - 用户可自定义昵称✅ 消息广播 - 消息自动发送给所有在线用户✅ 命令系统 - 、、 等实用命令✅ 优雅退出 - Ctrl+C 或输入命令均可正常断开✅ 局域网支持 - 其他设备可通过 IP 地址连接🛠️ 技术栈技术用途说明Node.js运行时环境v18+ 推荐net 模块TCP 网络通信Node.js 内置模块TypeScript类型安全严格模式开发readline 模块命令
2026-05-23 10:56:39
353
原创 鸿蒙 ArkTS 实战进阶:组件复用三剑客与状态管理一篇通
Styles专门用来封装通用的、所有组件都能用的样式属性,比如宽高、边距、背景色这些,解决重复写样式的问题。// 全局@Styles:不用加this,所有组件都能用// 使用:直接调用,一行搞定所有通用样式Column() {Text("卡片内容").commonCard() // 直接复用样式@Styles只能写通用属性,不能写组件专属属性,比如 Text 的fontSize就不能写在里面。ForEach 用索引当 key,列表渲染错乱。
2026-05-15 13:58:45
385
原创 前缀树 (Trie):一文搞懂字符串高效处理神器
前缀树(Trie,也叫字典树、单词查找树)是一种专门用于处理字符串的树形数据结构。它的核心思想是利用字符串的公共前缀来减少存储空间和查询时间。与二叉树不同,前缀树的每个节点代表一个字符,而不是一个完整的字符串。从根节点到某一个叶子节点的路径,就构成了一个完整的字符串。前缀树是一种专门用于处理字符串的高效数据结构,它利用字符串的公共前缀来优化存储和查询性能。虽然它有一些缺点,但在需要频繁进行前缀匹配的场景中,它仍然是无可替代的选择。
2026-05-10 16:16:33
330
原创 从静态到动态:鸿蒙 ArkTS 列表组件与状态装饰器实战
State管组件内部状态,@Prop管父子传值单向数据流的核心逻辑:父组件管数据,子组件只管展示,改数据要通知父组件列表组件List的基础用法,以及ForEach循环渲染的正确姿势,尤其是 key 的重要性把所有知识点串起来,开发一个完整的动态列表应用学完这些,其实我们已经能开发大部分的基础业务页面了,比如商品列表、用户列表、待办清单这些,都是基于这些知识点。
2026-05-04 19:52:01
301
原创 鸿蒙 ArkTS 实战全解:从基础布局到完整页面,核心组件与样式一篇通
在上一篇入门教程里,我们带大家认识了 ArkTS 的标准页面结构、@Component/@Entry 装饰器、@State 响应式状态,以及最简单的 Text、Button 组件,很多同学看完之后反馈:知道了基础的页面框架,但是不知道怎么写出好看、能用的页面?图片怎么加载?样式怎么调?输入框怎么和数据绑定?各种布局属性、样式属性太多了,不知道哪些是高频必学的?
2026-04-26 18:50:22
484
原创 鸿蒙 ArkTS 学习入门
本文全面覆盖 ArkTS 入门核心知识点,从基础页面结构、布局组件,到响应式状态管理,再到输入框、按钮等交互式组件,形成完整的入门知识体系。ArkTS 标准页面结构与基础语法规范Column、Row 两种核心基础布局的使用Text 文本组件样式配置与 @State 响应式状态TextInput 输入监听与 Button 点击事件组合组件实现完整的用户交互功能掌握以上内容,即可完成鸿蒙基础页面开发,为后续复杂组件、高级布局与业务功能开发打下坚实基础。
2026-04-20 18:27:54
440
原创 TypeScript 事件循环:串联异步与网络编程的底层核心
三者无法割裂。我们用编写异步语法,用netfetch实现网络通信,而事件循环,就是驱动这一切运行的底层调度器。TS(JavaScript)是单线程语言,这意味着它同一时间只能做一件事。但我们的网络请求、定时器、异步函数却不会阻塞程序运行,这一切的答案,都是事件循环。
2026-04-11 16:29:09
389
原创 TypeScript 网络编程从零到一:net 模块全解析(入门专属)
很多刚接触网络编程的同学都会有一个困惑:B 站、论坛上的教程全是 C++/Java,语法晦涩、环境折腾,还没写通一个 TCP 连接就先被劝退了。但其实,:语法友好、跨平台、不用折腾复杂的编译环境,Node.js 内置的net模块封装了完整的 TCP 网络通信能力,API 设计简洁易懂,写通一个客户端 - 服务端通信只需要十几行代码。这篇博客会从零开始,带你吃透net。
2026-04-08 21:52:17
589
原创 告别回调地狱!TypeScript 异步编程零基础上手指南
其实 TS 异步编程一点都不复杂,核心逻辑和 JS 完全一致,只是多了一层类型保护,帮你提前规避 bug。异步的本质:处理耗时操作,不卡死主线程,就像点外卖,不用死等,好了再通知你写法优先级:直接无脑用,不用纠结回调和复杂的 Promise 链式TS 的核心作用:给异步结果加类型约束,提前发现错误,别写any必做的事:一定要用try/catch捕获异步错误,避免程序崩溃。
2026-04-06 14:20:33
356
原创 不止语法糖:TypeScript Set 与 Map 深度解析
Set 与 Map 是 TypeScript 对原生数据结构的完美补全。从底层来看,它们基于哈希表实现的 O (1) 时间复杂度操作,能显著提升代码性能;从类型安全来看,TS 的泛型约束让它们可以在编译期规避类型错误,写出更健壮的代码;从实际开发来看,它们能覆盖从算法刷题到业务开发的绝大多数场景,是 TS 入门必须吃透的核心内容。遇到唯一性判断用 Set,遇到动态键值映射用 Map,在实战中多练多用,就能完全掌握二者的精髓。
2026-04-05 23:07:35
407
原创 并查集:最简单却超好用的数据结构
查(Find):查询某个元素属于哪个集合,通常是查集合的根节点。并(Union):把两个元素所在的集合合并成一个集合。它的核心应用场景,就是解决 ** 动态连通性(Dynamic Connectivity)** 问题。想象一下,我们有一堆独立的节点,一开始它们都是各自为政的。然后我们不断地往里面加边,把两个节点连起来。在这个过程中,我们随时想知道:节点 A 和节点 B 是不是已经连通了?现在总共有多少个独立的连通块?这就是并查集最擅长的领域。
2026-03-29 17:40:28
387
原创 图的存储与依赖管理:从邻接表到入度数组
邻接表:是图的「轻量化存储方案」,高效记录节点间的连接关系,让我们能快速找到「当前节点的后续影响」。入度数组:是节点的「状态管理器」,帮我们判断「当前节点是否可以开始处理」(入度为 0 时)。配合的意义:在依赖关系问题中,邻接表负责「传递影响」,入度数组负责「触发处理」,两者缺一不可 —— 这也是拓扑排序、任务调度等问题的核心思想。
2026-03-22 21:48:20
397
原创 KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
你有没有遇到过这些场景?在编辑器里 Ctrl+F 搜索关键词、用 C 语言的strstr找子串、统计子串出现次数……。而提到字符串匹配算法,绕不开的就是大名鼎鼎的 KMP 算法。很多同学初学 KMP 的时候,都会卡在「next 数组到底怎么算」「为什么最长相等前后缀是这个值」,甚至觉得它晦涩难懂,不如暴力匹配好理解。这篇文章,我会从暴力匹配的痛点出发,一步步带你拆解 KMP 的核心逻辑,搞懂 next 数组的本质,最后解答大家最关心的问题:为什么我们常用的库函数,大多不用 KMP?
2026-03-21 10:59:10
417
原创 TypeScript 入门学习笔记:从零开始掌握核心概念
TS 里用type或interface来定义对象的结构,就像给数据画了一张 “图纸”。// 必选属性// 可选属性,加?标记score?: number;const student: Student = { name: "张三", age: 18 };interface和type很像,但它更适合定义 “行为规范”,还支持继承。// 定义一个“能说话”的接口// 定义Student接口,继承Speakable// 实现Student接口的对象,必须有name、age、sayHi。
2026-03-17 21:55:42
473
原创 从 “猜数字游戏” 入门 BST:C 语言从零实现与核心操作
BST 的核心就是一棵 “帮你快速猜数字的二叉树”,它有两个非常简单的规则,记住这两个规则,你就懂了 BST 的一半。#include <limits.h> // 用于INT_MIN,设定初始前一个值// BST节点结构体:就三个东西——值、左孩子指针、右孩子指针int val;// 节点存的数字// 指向左孩子的指针(左边比它小)// 指向右孩子的指针(右边比它大)} TreeNode;两个简单规则:普通二叉树结构 + 左小右大;一个神奇性质:中序遍历升序;
2026-03-14 16:25:04
363
原创 从 “Top-K 问题” 入门二叉堆:C 语言从零实现与经典应用
二叉堆的核心是一种基于完全二叉树实现、满足堆序性质的高效数据结构,它的核心逻辑就像一个层级分明的金字塔:塔顶永远是整个结构里的最值(最大值或最小值),每一层的节点都必须满足和下一层节点的大小规则,保证每一步操作都能快速维护这个金字塔的秩序。和有序数组、单链表这类结构不同,二叉堆完美兼顾了「快速获取最值」和「高效动态修改」的能力:获取堆顶最值仅需O(1)时间,插入、删除最值操作也仅需O(log n)时间,远优于有序数组 O (n) 的插入删除开销,天生适配需要动态维护极值的场景。二叉堆的实现核心是。
2026-03-14 16:16:59
379
原创 从棋盘到代码:N 皇后的回溯之道
为优化程度);剪枝策略:提前排除明显冲突的列,减少递归次数;更大 n 的处理:当 n>10 时,当前代码的固定数组会溢出,可改为动态分配。N 皇后问题是回溯法的经典应用,核心在于 “逐行尝试、冲突回退”。通过 C 语言实现,不仅能加深对回溯思想的理解,还能锻炼内存管理和指针操作能力。力扣 51 题的提交过程,也让我们体会到工程化代码的严谨性。
2026-03-05 19:58:19
180
原创 从“岛屿数量”入门DFS:深度优先搜索的经典应用
DFS 的全称是 Depth-First Search,也就是深度优先搜索,它的核心是 “一条路走到黑”—— 就像你走进一个迷宫,遇到岔路就选一条一直走到底,走不通了再回头换另一条路,直到找到出口或者遍历完所有路径。和 BFS(广度优先搜索,“逐层扩散”)不同,DFS 更适合处理 **“连通性判断”“路径搜索”“回溯遍历”** 这类问题。比如岛屿数量问题,我们需要找到所有连通的陆地,DFS 可以一次性遍历完所有相连的陆地,完美契合这类问题的需求。递归和栈模拟。
2026-02-11 12:14:14
292
原创 从“腐烂的橘子”入门BFS:层序遍历的经典应用
BFS 的全称是 Breadth-First Search,也就是广度优先搜索,它的核心是 “按层遍历”—— 就像你往池塘里扔一颗石头,水波会一层一层向外扩散,BFS 就是这样一层一层处理问题的。和 DFS(深度优先搜索,“一条路走到黑”)不同,BFS 更适合处理 **“同时扩散”“最短路径”“层序统计”** 这类问题。比如腐烂的橘子,每分钟所有腐烂的橘子会同时感染周围的新鲜橘子,这正好对应 BFS 的 “层”:每一层就是一分钟,每一层的节点就是当前所有腐烂的橘子。BFS 的实现离不开队列。
2026-02-11 11:09:18
398
原创 Floyd 判圈算法:从链表找环到数组寻重,一次搞懂线性时间的环检测
Floyd 判圈算法不仅是链表环检测的最优解,还能通过 “数组转链表” 的变形,解决数组寻重等问题。其核心思想是利用快慢指针的速度差检测环,再通过数学推导定位环入口,时间与空间复杂度都达到了理论最优。
2026-01-30 20:46:13
624
原创 C 语言实战:手把手实现学生信息管理系统
这个学生信息管理系统基于单向链表实现,支持学生信息的录入、打印、保存(文本 / 二进制)、读取、统计、查找、修改、删除等核心功能,覆盖了 C 语言从基础语法到文件 IO、内存管理的大部分核心知识点,是初学者练手的经典项目。// 学生信息结构体float math;}stu;// 链表节点结构体stu stu;}Node;// 链表头节点结构体int size;}List;忘记释放 malloc 申请的内存 → 内存泄漏;链表操作时未初始化 next 指针 → 野指针崩溃。
2025-12-13 21:53:48
924
原创 选择排序与归并排序(分治思想):原理、实现与性能对比
选择排序是简单排序的代表,核心是 “找最小元素交换”,On2) 时间复杂度适合小规模、简单场景;归并排序是分治排序的典型,核心是 “分解 - 合并”,Onlogn) 时间复杂度是处理大规模数据的优选;算法选择无优劣之分,需结合数据规模、内存限制、实现成本等场景综合判断。
2025-12-06 22:21:12
667
原创 C 语言实现二叉树:从 0 到 1 理解基础操作
二叉树的核心是节点结构体:包含数据域、左指针、右指针,指针是连接节点形成树结构的关键;二叉树核心操作包括:创建节点(内存分配 + 初始化)、插入节点(小左大右规则)、递归遍历(前 / 中 / 后序,中序遍历可实现升序输出);递归是实现二叉树操作的高效方式:利用递归的对称特性,可简洁实现节点的插入与遍历,核心逻辑是 “节点非空时执行对应操作”。
2025-12-06 21:32:56
380
原创 动态规划:从「采药」到「人生决策」的递推哲学
状态是动态规划的灵魂。在采药题中,dp[j]代表 “时间 j 内的最大价值”,相当于给每个时间点拍一张 “价值快照”。更复杂的问题可能需要二维状态,比如「背包问题」中的dp[i][j](前 i 个物品,容量 j 的最大价值)。洛谷的采药题,本质是一堂关于「选择」的算法课。当我们学会用dp[j]所有复杂的结果,都是无数个简单选择的累积。最优解不在远方,而在每一个子问题的答案里。下次遇到人生的 “采药” 时刻,不妨试试用dp。
2025-11-27 12:41:48
483
原创 差分:让区间更新从 O (n) 到 O (1) 的魔法
假设有一个原始数组a,我们定义它对应的差分数组diff(差分数组的第一个元素等于原始数组第一个元素)对于i ≥ 1(差分数组第 i 项 = 原始数组第 i 项 - 原始数组第 i-1 项)简单说,差分数组就是原始数组中相邻元素的差值集合。例子原始数组最终。假设原始矩阵是a(初始全 0,因为每个格子的初始覆盖次数是 0),对应的二维差分数组diffdiff[i][j]记录的是以 (i,j) 为起点的 “差分变化”,通过它可以快速推导矩形区域的更新。一维差分。
2025-11-24 21:21:53
744
原创 C 语言回溯算法:从 “走迷宫” 到全排列的探索之旅
很多人觉得回溯难,其实难的不是递归,而是“记住撤销选择”。只要抓住 “选 - 试 - 撤” 的节奏,再配合used数组这类工具标记状态,回溯问题就能迎刃而解。不妨试试把 n 改成 4,运行代码看看结果 —— 你会发现,回溯算法已经帮你把所有排列都 “试” 出来了。这就是算法的魅力:用固定的逻辑,应对无穷的可能。回溯算法的核心是“试探 - 回退”,本质是带状态重置的递归;实现回溯的关键是“做选择→递归→撤销选择”三板斧;C 语言中常用数组(如used)标记状态,确保选择不重复、状态能回退。
2025-11-22 22:10:02
715
原创 Quick Sort:快速排序算法解析
这里定义了quickSort函数,参数arr是待排序的数组,left和right指定了当前要排序的数组区间。当时,说明当前区间只有一个元素或者为空,无需排序,直接返回,这是递归的终止条件。这段 C 语言实现的快速排序代码,清晰展现了快速排序分治、分区、递归的核心流程。通过合理选取基准值、分区交换以及递归处理子区间,实现了对数组的高效排序。
2025-11-16 14:24:58
344
1
原创 C 语言实现五种反转链表的方法解析
int val;// 节点值// 指向下一节点的指针} ListNode;方法时间复杂度空间复杂度特点迭代法O(n)O (1)(常数空间)高效、易理解,推荐使用递归法O(n)O (n)(递归栈)代码简洁,但栈深风险栈法O(n)O (n)(栈 / 数组)利用栈特性,逻辑直观头插法O(n)O(1)构建新链表,插入头部实现就地反转法O(n)O(1)三指针操作,更接近底层实际开发推荐:迭代法,因为它兼顾时间和空间效率,代码逻辑清晰,无递归栈溢出风险。
2025-11-13 00:21:49
835
原创 C语言递归入门:从概念到实战,3个案例吃透核心
递归的本质是 “函数调用自身”,但不是无意义的循环调用,而是像 “俄罗斯套娃” 一样 ——每一层调用都在解决一个更小的子问题,直到遇到 “最小子问题”(终止条件)后,再逐层返回结果,最终得到原问题的答案。举个生活例子:计算 “10 的阶乘”(10!= 10×9×8×…×1),可以拆成 “10×9 的阶乘”,而 “9 的阶乘” 又能拆成 “9×8 的阶乘”,直到 “1 的阶乘”(终止条件:1!= 1),再反向相乘得到结果。这就是递归的核心逻辑。// 链表节点结构int val;// 节点值。
2025-11-12 23:31:46
648
原创 探秘C语言文件操作:从fopen到foclose的幕后故事
日常使用的 r/w/a 等打开方式,默认对应ANSI 模式(也称为文本模式),它是 C 语言标准定义的通用文件操作模式,主要有两个核心特点:自动处理换行符:在 Windows 系统中,代码里写的 \n(换行符)会被自动转换为 \r\n(回车 + 换行);读取文件时,又会将 \r\n 转回 \n,确保代码在不同操作系统(如 Windows、Linux)下都能正常处理文本换行。仅适用于文本文件:像 .txt 文档、.c 源代码这类纯文字文件,用 ANSI 模式读写不会出现问题;
2025-11-08 17:23:04
1001
原创 栈与队列:两种“操作受限”的线性数据结构详解
当需要“回溯”“嵌套”时,用栈(比如函数调用、括号匹配);当需要“顺序处理”“公平调度”时,用队列(比如任务排队)。理解它们的核心差异,不仅能在写代码时“选对结构”,更能帮你理解很多底层原理(比如递归、进程调度)——这也是数据结构的魅力:用“简单规则”解决“复杂问题”。
2025-11-05 13:40:14
1077
原创 C语言文件操作入门
C语言文件操作的核心就是“抓流程、辨模式、选对函数”:记住“打开-读写-关闭”三步,分清 r+/w+/a+ 的差异,根据场景选 fprintf/fgets/fgetc ,再避开几个新手坑,就能应对大部分入门需求。本文所有代码均经过实测,建议大家逐段运行,观察文件内容变化,很快就能吃透。如果想进阶学习“文件行数统计”“批量处理多文件”等场景,欢迎在评论区留言~
2025-11-03 21:55:11
634
原创 轻松掌握的高效算法技巧——双指针
你有没有遇到过这样的情况:想在书架上找两本书,一本在左边,一本在右边,你不会从左到右逐本翻完再找右边的,而是左手拿一本左边的,右手拿一本右边的,慢慢往中间凑;想找数组中两个数的和等于目标值,要是挨个遍历两两组合,太慢了,不如一个指针从开头走,一个从结尾走,快速缩小范围。这就是的核心思路:用两个指针(可以理解为 “两个标记”,在 C 语言中就是数组下标或指针变量)同时在数据结构中移动,通过合理的移动规则,减少遍历次数,提高效率。
2025-11-02 10:56:38
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅