自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 不用 readline,用原生模块写一个更好的 Node.js 交互式 CLI

文章摘要: 本文记录了作者在Windows终端下使用Node.js的readline模块时遇到的输入渲染问题,包括光标乱跳、字符残留和中文重复打印等。通过分析readline在Windows下的兼容性问题根源,作者提出三种替代方案,最终选择用原生process.stdin和setRawMode自行实现轻量级输入控制器。文章详细展示了如何通过解析转义序列来处理字符输入、退格、方向键移动等交互逻辑,提供了一段可直接运行的代码实现。这种方案相比readline更可控,且避免了跨平台兼容性问题。

2026-06-21 16:53:21 397 2

原创 从零用 TypeScript 写一个 TCP 聊天室(下)——数据持久化、登录验证与管理指令

本文介绍了使用TypeScript开发TCP聊天室的数据持久化和登录验证模块。作者选择JSON文件而非数据库存储,实现了防抖写入、原子写入和自动备份三重防护机制。用户数据通过内存索引加速查询,消息数据采用分桶存储并支持离线消息。登录系统采用bcrypt哈希密码和JWT令牌验证,详细解释了密码安全和认证流程的设计思路。项目通过分层架构实现了高内聚低耦合,为后续功能扩展打下基础。

2026-06-07 15:53:25 324 1

原创 用 TypeScript 从零写一个 TCP 聊天室(上)—— 网络编程入门实战

用TypeScript实现TCP聊天室 - 网络编程实战 摘要 这篇教程详细介绍了如何使用TypeScript和Node.js从零构建一个命令行TCP聊天室系统。文章分为上下两篇,本文聚焦网络通信核心功能实现,包括: 基础架构:基于Node.js的net模块搭建TCP服务端,处理多客户端连接 核心功能:实现昵称认证、多房间聊天、私聊、心跳保活和上下线通知 通信协议:采用JSON行协议(Line-Delimited JSON)定义客户端与服务端的交互格式 模块设计: 服务端管理连接用户和房间 客户端处理用户输

2026-05-31 14:54:37 463

原创 设计原则:里氏替换与接口隔离

摘要:本文介绍了SOLID原则中的里氏替换原则(LSP)和接口隔离原则(ISP)。里氏替换原则要求子类必须能安全替换父类,不改变父类的行为契约,通过TypeScript示例展示了如何避免子类破坏父类承诺。接口隔离原则强调将大接口拆分为小接口,避免实现类被迫编写空方法,通过学校人员管理的案例演示了按需组合小接口的优势。两个原则共同指导开发者构建更健壮、灵活的代码结构:LSP确保继承体系的行为一致性,ISP保证接口粒度的合理性。文章建议在编码时检查子类替换安全性和接口必要性,以实践SOLID原则。

2026-05-26 22:49:25 328

原创 三个原则教你拆分类:单一职责、开闭原则与依赖倒置

写代码最怕需求一变就到处改。下面用 TypeScript 看三个实用原则,帮你把修改范围缩小。每个例子都会先给出修改前的代码,说明问题在哪,再给出修改后的代码,解释每一段在做什么。

2026-05-20 17:11:19 375

原创 从 fetch到操作系统 Socket:TS网络编程入门

本文从TypeScript网络编程实践出发,深入解析了从应用层到传输层的网络通信原理。首先剖析了HTTP协议与fetch API的两阶段模型,解释了流式传输特性与状态码机制。接着探讨了TCP/UDP协议的核心差异,以及Socket作为操作系统接口的作用。文章还对比了WebSocket与HTTP的实时性差异,并揭示了事件循环如何调度异步网络请求。最后提供了类型安全封装、缓存策略、请求取消与超时处理等工程实践方案,帮助开发者构建健壮的网络应用。全文通过层层递进的方式,将抽象的网络协议与具体的编程实践有机结合。

2026-05-17 14:08:04 390

原创 ArkTS 声明式 UI 的本质:状态映射

ArkTS声明式UI的核心机制解析 本文揭示了ArkTS声明式UI开发的本质特征: 描述式编程:build()函数生成UI描述树而非直接操作界面,框架自动处理渲染和更新 状态驱动:@State变量成为可追踪依赖源,修改数据自动触发UI更新 结构复用:@Builder定义UI模板,ForEach处理动态列表,均非传统函数调用 条件渲染:if/else控制UI节点的存在与否,而非简单的显示隐藏 核心思想在于"UI是状态的投影",开发者只需描述状态与界面的映射关系,框架自动完成状态变化到界面更

2026-05-10 14:29:39 425

原创 第十一届西安邮电大学程序设计校赛(ICPC XUPT)题解

本文解析了2026年西安邮电大学程序设计校赛的Problem B"三妖精sayya"。题目要求在平面上找到满足两个距离比例条件的点P,即|PB|/|PA|=k1和|PC|/|PA|=k2。解题思路基于阿波罗尼斯圆原理,通过将几何条件转化为二元二次方程,再解两圆的交点。文章详细推导了当k≠1时的圆方程和k=1时的垂直平分线情况,并提供了C++实现代码,包括特判处理、交点计算等核心算法。代码采用特殊判断机制处理各种边界情况,保证在允许误差范围内找到正确解。

2026-04-27 21:26:44 433

原创 TypeScript 的异步编程核心,理解与c语言差异

摘要:从C语言同步阻塞模型到TypeScript异步编程,核心差异在于执行机制。JavaScript采用事件循环和微任务队列实现非阻塞,async/await将函数切割为微任务片段。事件循环优先执行微任务,后处理宏任务。TypeScript泛型为异步数据提供类型安全,优于any类型。常见陷阱如forEach中的await会导致并发而非串行执行,需改用for...of循环。理解这些机制是编写可靠异步代码的基础。(149字)

2026-04-26 00:08:51 388

原创 c语言转向ts,该如何理解箭头函数?

本文探讨了从C语言函数指针到TypeScript箭头函数的范式转变。C语言中需要显式传递上下文参数(如void*指针)来实现回调,而TypeScript箭头函数通过自动记忆机制,在定义时就捕获了外部变量。这种转变使代码更简洁,但也带来了this绑定的新问题。文章对比了两种语言在函数传参、上下文管理上的差异,并分析了TypeScript中箭头函数、bind方法等解决方案的优势与陷阱,展现了编程语言从显式控制到自动记忆的演化过程。

2026-04-15 13:27:48 334

原创 从C语言到TypeScript:类型系统的进化之路

本文探讨了C语言与TypeScript类型系统的异同,为C开发者提供迁移指南。文章对比了两者在类型声明、接口定义、函数系统、类封装、数据结构等方面的差异,指出TypeScript继承了C的静态类型思想但更加灵活。重点分析了interface与type的区别、函数this绑定问题、类构造函数的现代封装方式,以及联合类型等TS特有概念。同时警告了C开发者可能遇到的陷阱,如const语义差异和交叉类型风险。最后强调TypeScript在保留类型安全的同时提供了现代开发所需的灵活性,是构建大型应用的有力工具。

2026-04-12 14:45:07 389

原创 分层dfs,一种介于dfs与bfs之间的算法

本文探讨了分层搜索算法(迭代加深搜索)在组合优化问题中的应用。该算法巧妙结合了深度优先搜索的内存优势和广度优先搜索的最优性保证,通过逐层增加搜索深度来寻找最小步数解。以LeetCode 279题"完全平方数"为例,文章展示了如何通过构建分层可达性数组,在保证四平方和定理约束下高效求解。这种策略适用于需要最小化操作步数的各类问题,如编辑距离、路径规划等,体现了算法设计中时间与空间复杂度的平衡艺术。

2026-04-06 14:25:49 332

原创 c语言学习者如何零基础转向ts?ts与c语言的显著差异

文章摘要:本文对比了C语言与TypeScript在变量声明、函数定义和运行时行为三个方面的核心差异。在变量层面,C语言的变量是内存占位符,而TypeScript的变量是动态引用;函数方面,C的函数是静态代码块,TypeScript的函数可作为值传递;运行时机制上,C的类型决定内存布局,TypeScript的类型仅是编译时约束。这些差异反映了两种语言的根本理念不同:C关注硬件控制,TypeScript侧重数据流动。理解这些区别有助于程序员更好地适应两种编程范式。

2026-03-29 15:20:17 386

原创 从递归到动态规划:动态规划的入门之路

本文通过三个经典问题展示了动态规划的递进学习路径。从斐波那契数列的递归解法引入,揭示其重复计算的低效性,进而优化为三变量滚动计算;到爬楼梯问题,发现其与斐波那契相同的递推关系,实现空间优化;最后是最长递增子序列问题,突破线性思维,通过维护每个位置的最优解状态,避免显式建图带来的空间浪费。三个案例共同诠释了动态规划的核心:利用子问题重叠特性,用空间换时间,在记忆和计算间寻找平衡。关键在于识别当前状态与历史状态的关系,选择合适的数据结构存储中间结果,避免重复计算。

2026-03-29 15:14:32 375

原创 深入理解邻接表:从存储原理到图搜索算法

本文介绍了邻接表的存储原理及其在图搜索算法中的应用。邻接表通过为每个节点维护一个链表来存储其邻接节点,相比二维数组更节省内存空间。文章以课程安排问题为例,详细讲解了基于邻接表的两种拓扑排序算法:广度优先搜索(BFS)通过入度统计和队列实现,深度优先搜索(DFS)通过状态标记检测环。两种方法都能有效判断依赖关系是否存在环,时间复杂度均为O(V+E)。邻接表和拓扑排序在项目管理、数据处理等实际应用中具有重要意义,能够高效解决依赖关系分析和执行顺序安排问题。

2026-03-22 17:33:36 381

原创 并查集是如何优化好友关系查询的暴力算法的?

并查集是一种高效处理动态连通性问题的数据结构。它通过树形结构维护集合关系,使用路径压缩和按秩合并优化操作效率。初始化时每个元素自成一派,合并操作将两个集合的根节点连接,查询操作通过查找根节点判断连通性。路径压缩技术将查找路径上的节点直接指向根节点,使后续查询接近常数时间复杂度。相比暴力遍历方法,并查集能显著提升大规模关系查询的效率,适用于社交网络、图像处理等场景。该算法实现简洁,但需要注意其适合处理关系只增不减的情况。

2026-03-15 17:35:06 333

原创 快速排序的理解与实践(c语言实现)

快速排序是一种高效的分治排序算法,通过选择基准元素将数组分割为两部分递归排序。C语言中可用qsort函数实现通用排序,其核心是比较函数的设计。文章详细介绍了快速排序原理、C语言实现方法,以及如何使用qsort处理整数、结构体和多级排序等场景,强调了比较函数编写要点和实际应用中的注意事项,为理解和使用快速排序提供了全面指导。

2025-12-14 17:14:05 725

原创 二叉树的前中后序遍历:C语言实现详解

本文详细介绍了二叉树的三种遍历方法:前序、中序和后序遍历的C语言实现。首先定义了二叉树的节点结构,并构建了一棵示例二叉树。通过递归方式实现了三种遍历,分别展示了不同的节点访问顺序(前序:根-左-右;中序:左-根-右;后序:左-右-根)。文章还提供了非递归的中序遍历实现,使用栈结构模拟递归过程。这些遍历方法在二叉树操作中各有用途,如复制结构、排序和内存释放等。学习这些基础遍历方法有助于理解递归思想和为更复杂的树形结构算法打下基础。

2025-12-07 14:52:42 788

原创 前缀和算法是如何优化子矩阵问题的暴力算法的?

前缀和算法通过预计算矩阵的前缀和,将子矩阵求和的时间复杂度从O(n²)优化到O(1)。该方法先构建一个比原矩阵大一圈的前缀和矩阵,利用公式快速计算任意子矩阵的和。相比暴力算法需要四重循环遍历每个子矩阵,前缀和方法显著提升了查询效率,特别适用于大规模矩阵的多次查询场景。C语言实现展示了如何构建前缀和矩阵并利用其快速查询子矩阵和的过程。

2025-11-30 00:45:00 816

原创 kmp算法的c语言实现

KMP算法是一种高效的字符串匹配算法,由Knuth、Morris和Pratt共同发明。相比暴力匹配的O(n*m)时间复杂度,KMP算法通过预处理模式串生成Next数组(记录最长相同前缀后缀长度),将时间复杂度优化为O(n+m)。该算法分为两个阶段:1)计算Next数组;2)利用Next数组进行匹配跳转。当匹配失败时,根据Next值跳过无需重复比较的位置,大幅提高效率。C语言实现中需注意边界条件和Next数组的正确计算。该算法广泛应用于文本搜索等场景,其核心思想对理解算法优化具有重要意义。

2025-11-23 18:43:39 659

原创 力扣206.反转链表|五种解法深度剖析(C语言实现)

方法优点缺点适用场景迭代双指针效率高,空间优,逻辑清晰指针操作需要细心面试首选,生产环境推荐递归代码简洁,思维巧妙栈空间开销,可能溢出理解递归,短链表场景头插法思路直观,易于理解需要构建新链表教学演示,初学者练习三指针移动稳定,易于调试代码稍复杂需要稳定性的场景数组中转避免指针操作空间浪费,有长度限制特殊约束条件下的备选反转链表看似简单,却蕴含着指针操作、递归思维、空间权衡等多个重要编程概念。希望通过这五种解法的详细解析,能够帮助读者真正理解链表操作的精髓。

2025-11-16 12:37:11 867

原创 c语言文件操作——如何写出你第一个项目

本文以学生成绩管理系统为例,详细讲解了C语言文件操作的核心应用。文章首先介绍了系统功能需求,包括学生成绩的录入、打印、修改、保存和读取等操作。系统采用链表结构存储学生信息,定义了包含学号、姓名和成绩的结构体,并实现了链表的动态增长功能。 在技术实现上,文章重点阐述了菜单设计、链表操作和文件读写功能。菜单通过switch-case结构实现功能选择,链表采用头插法进行动态扩展。文件操作部分展示了如何将链表数据以二进制或文本格式保存到文件,以及从文件读取数据重建链表的方法。 该系统完整演示了C语言中结构体、指针、

2025-11-06 19:35:24 1080

原创 双指针算法怎么和DNA的翻译扯上关系的?(合订本)

在这篇博客中,我们介绍了四种双指针算法,有对撞指针,同向指针,快慢指针,移动窗口法,关于对撞指针以及滑动窗口做了详细的介绍。在下一篇博客中,我们将重点介绍二分法,尤其是它的边界问题,这是导致这个算法易懂不易写的重要原因。

2025-10-29 19:49:20 827

原创 双指针算法解读——续

本文详细讲解了双指针算法中的快慢指针应用。首先通过"最长无重复元素的连续子数组"问题阐述了移动窗口法的实现原理,使用快指针扫描数组、慢指针维护无重复子数组边界。接着介绍了快慢指针在判断链表是否有环问题中的应用,通过不同速度的指针移动实现检测。最后简要说明同向指针的另一种用法——查找链表倒数第n个节点。文章通过具体代码示例和图形说明,帮助读者理解双指针算法的实际应用场景和实现细节。

2025-10-29 16:15:32 842

原创 双指针算法怎么和DNA的翻译扯上关系的?

双指针算法通过优化暴力枚举方法,显著提升计算效率。文章重点介绍了两种典型应用:对撞指针用于有序数组元素求和(如寻找和为特定值的元素对),以及滑动窗口解决连续子数组问题(如计算k个连续元素的最大和)。对撞指针通过首尾指针相向移动简化搜索,而滑动窗口则通过动态调整窗口范围高效求解。这两种技巧都能将时间复杂度从O(n²)降至O(n),适用于特定数据结构的优化场景。文中还以接雨水问题为例,展示了双指针在非有序数组中的巧妙应用。

2025-10-25 14:27:46 941

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除