自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go 错误处理

error如果只需要简单的字符串,errors.New就够了。但有时需要携带更多信息,可以自定义结构体实现error接口:Code int​级别是否可恢复典型场景处理方式error是文件不存在、网络超时返回error值,调用者处理panic是(通过 recover)数组越界、向 nil map 写入recover捕获,或者让它崩溃fatal否配置错误、关键资源缺失os.Exit,无法恢复Go 的错误处理哲学是“把错误当作普通值”。理解好errorpanic和fatal。

2026-06-14 16:16:04 239

原创 Go 的类型系统

Go 是一门静态强类型语言,这意味着变量的类型在编译时确定且不会改变,同时编译器会严格检查类型匹配。这种设计虽然少了一些动态语言的灵活性,但换来了代码的清晰、安全和高性能。本文将梳理 Go 类型系统的主要特点。

2026-06-07 15:29:01 272

原创 Go 迭代器

简单说,你可以编写一个生成器函数,它接收一个回调(通常命名为yield),然后在内部将元素逐个传给yield。之后,这个函数就可以直接放在for range后面使用。// 一个简单的整数序列迭代器for i := 0;i < n;i++ {if!yield(i) {return​// 输出 0 1 2 3 4yield返回bool:返回true表示继续迭代,返回false表示提前终止(对应循环中的break。

2026-05-31 16:56:58 234

原创 Go 泛型笔记

写一个求和函数,如果只支持int再写一个支持float64的,逻辑完全一样,只是类型不同。为每个类型重复写一份代码显然不合理。用反射(any+ 类型断言)可以解决,但代码繁琐、性能差、编译时失去类型检查。。

2026-05-24 16:50:18 365

原创 Go 基本接口

接口定义一组行为规范(方法签名),不提供实现。实现是隐式的:一个类型只要拥有接口要求的所有方法,它就自动实现了该接口。接口变量可以保存任何实现该接口的具体值,调用方法时会自动派发到实际类型的方法。空接口(any可以保存任意类型的值,常用于接收未知类型的参数。接口比较会先比类型再比内容,不可比较的类型会 panic。接口是 Go 语言实现多态和解耦的核心工具。它不关心你“是什么”,只关心你“能做什么”。这正是行为抽象的精髓。

2026-05-17 17:10:18 346

原创 Go 函数式选项模式

函数式选项模式是 Go 社区自发形成的一种惯用法,它利用了闭包、可变参数、函数类型等特性,完美解决了多参数构造函数的难题。如果遇到可选参数多、未来可能扩展的结构体,不妨试试这个模式。

2026-05-10 15:49:08 390

原创 Go 语法基础笔记

Go 中的字符串是只读的,这意味着你无法直接修改一个字符串中的某个字符。// s[0] = 'H' // 这行会编译报错为什么这样设计?因为字符串在很多场景下是作为常量使用的,不可变性带来了安全性:你可以放心地把字符串传递给多个函数,不用担心它会被意外修改。

2026-04-26 16:55:49 316

原创 双指针经典题目

双指针(Two Pointers)是算法题中最常用的技巧之一。它的核心思想是使用两个指针,以不同的策略(如同向、相向、一快一慢等)移动,优化时间复杂度。本文通过三道 LeetCode 经典题目快慢指针两指针方向相反(链表环检测)对撞指针两指针方向相同(三数之和、四数之和)类型适用场景核心要点快慢指针链表环检测、链表中点、倒数第K个节点利用速度差或起始位置差对撞指针有序数组的 N 数之和、两数之和根据当前和与目标值的大小关系移动滑动窗口子数组、子串问题维护一个满足条件的窗口,左右边界同向移动。

2026-04-13 22:42:07 388

原创 背包问题入门

和。

2026-04-06 13:45:30 504

原创 字典树 (Trie)

​#define ALPHABET_SIZE 26 // 假设只处理小写字母​// 字典树节点结构// 子节点指针数组// 是否为单词结尾} TrieNode;​// 创建新节点i++) {

2026-03-30 21:57:33 348

原创 动态规划入门

记住之前的结果,用来解决后面的问题。

2026-03-29 18:44:11 315

原创 贪心算法入门

贪心算法是一种“”的算法思想。。

2026-03-22 16:52:26 322

原创 回溯算法基本内容

本质:回溯 = 深度优先搜索(DFS)+ 状态重置。实现方法:确定参数结束条件单层逻辑backtrack 函数内部是 for 循环,循环体内是“做选择 -> 递归 -> 撤销选择”三步曲。剪枝:在递归前或for循环中,通过条件判断提前终止或跳过一些分支,是优化回溯算法的关键。牢记:回溯时一定要“撤销选择”,让状态恢复到原来的样子。

2026-03-14 23:38:58 305

原创 二叉树的层序遍历

int val;// 假设最多100个节点int front;// 队首下标int rear;// 队尾下标​// 初始化队列​// 入队​// 出队​// 判断队列是否为空。

2026-03-08 18:25:01 374

原创 前缀和算法

对于原数组arr,我们构造一个前缀和数组prefix(边界条件,方便计算)换句话说,prefix[i]表示原数组前i个元素的和。前缀和还可以扩展到二维数组(矩阵):// 二维前缀和构建i <= rows;j++) {​// 计算子矩阵和。

2025-12-07 18:20:34 791

原创 二叉树基础知识

/ 二叉树节点的C语言定义int val;} TreeNode;

2025-11-30 18:29:09 881

原创 滑动窗口算法

滑动窗口算法是一种常用的数组/字符串处理技巧,它通过维护一个窗口(通常是连续的子数组或子串)来高效解决一系列问题。这种算法能够将某些暴力解法的时间复杂度从O(n²)降低到O(n),在处理子串、子数组问题时特别有效。

2025-11-23 18:49:37 939

原创 栈与队列的实现

插入与删除操作都在栈顶。

2025-11-12 07:29:04 986

原创 C语言 文件操作

FILE* file = fopen("C:\\Users\\OMEN\\Desktop\\新建 文本文档.txt", "w");write_array(arr, size, "C:\\Users\\OMEN\\Desktop\\新建 文本文档.txt");printf("成功写入 %d 个学生信息到文本文件: %s\n", count, filename);printf("成功从文本文件读取 %d 个学生信息\n", *count);printf("无法打开文件!printf("无法打开文件!

2025-11-09 17:57:10 581

原创 链表基本用法

include <stdlib.h> //记得包含头文件​/*定义*/int val;//用于存放数据//用于指向下一节点} LN;​//创建节点函数if(node!= NULL){​//使用函数初始化节点链表基本操作:增删改查。

2025-11-02 18:54:31 689

原创 二分法思想与运用

二分法(Binary Search)是一种在中通过每次比较将搜索范围减半从而快速定位目标的算法。:数据必须有序(单调)数学原理曾在高中学过,与这里这个是一样的。

2025-11-02 18:46:15 391

原创 双指针算法

双指针的核心思想是使用两个指针,以不同的策略(如同向、相向、一快一慢等)移动,从而将原本需要多重循环的问题,优化为单次遍历。若两指针方向相反,则称为 对撞指针。若两指针方向相同,则称为 快慢指针。

2025-11-02 18:45:06 276

原创 结构体数组和结构体指针

结构体类型是一种构造类型,它同简单类型(int、float 和 char 等)一样,也可以定义指针变量,定义方式也一样。例如int id;int score;/*定义结构体变量 s 和结构体指针变量 p ,并将结构体变量 s 的地址赋给指针 p */

2025-10-26 19:09:48 862

原创 大小端相关知识

大小端(Endianness),也叫做字节序,它描述的是多字节数据 (如整数,浮点数等) 在内存中如何存储的。即数据的"高位"和"低位"字节在内存地址中的排列顺序。

2025-10-26 19:08:16 772

空空如也

空空如也

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

TA关注的人

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