- 博客(81)
- 收藏
- 关注
原创 Day1 项目启动记录(KnowledgeDock)
目标:完成“登录 -> 拿 token -> 管理端接口鉴权放行”,并提供一个可用的前端管理端雏形。
2026-02-02 21:06:32
581
原创 Spring Bean 注入与容器管理:从“怎么交给容器”到“怎么被注入使用”的完整总结
1) 注册阶段:把 BeanDefinition 放进容器(扫描/@Bean/@MapperScan/自动配置…)2) 创建阶段:容器按需创建 Bean(实例化)3) 注入阶段:容器解析依赖并注入(byType/byName)4) 增强阶段:AOP/事务等通过后置处理器织入代理5) 生命周期阶段:初始化回调 → 使用 → 容器关闭销毁总结:Bean 能被注入的前提是:它先通过某种方式注册进容器;Spring 创建 Bean 时会根据依赖关系完成注入,并在生命周期内统一管理初始化、增强与销毁。
2026-01-29 22:04:00
892
原创 苍穹外卖(Sky Take-out)Day 1 学习总结
拦截规则:/admin/**后台所有接口默认需要 JWT 鉴权,只有登录接口不需要 token。
2026-01-29 20:27:00
686
原创 Java 常用数据结构:API + 实现类型 + 核心原理 + 例子 + 选型与性能(完整版)
目标:把“怎么用(API)”和“为什么快/慢(实现原理)”放在同一份文档里。
2026-01-28 21:05:16
1108
原创 阿里云 OSS 注册与配置(从零开通到可用 AK/SK)标准流程文档
适合生产环境:只允许访问某个 bucket 的某些动作(Put/Get/Delete 等)。RAM 控制台 → 权限管理 → 策略 → 创建策略(JSON)写入最小策略(示例见附录 A)将策略授权给该 RAM 用户。
2026-01-27 09:20:03
1270
原创 java开发的三层架构
三层架构让“接待(Controller)→ 决策(Service)→ 搬运(Mapper)”各自专注,系统更清晰、可维护、可测试。数据库搬运工与翻译官。
2026-01-24 17:50:08
388
原创 Lombok的使用
是一个 Java 编译期工具,通过注解(Annotation)在编译阶段自动生成样板代码(如toStringLombok,生成的代码在编译后与手写代码等价。
2026-01-24 11:59:03
800
原创 Java Stream 流(Stream API)详细讲解
Stream 是数据处理工具,不是容器核心思想是流水线 + 函数式编程创建 → 中间操作 → 终止操作合理使用,不要滥用并行流。
2026-01-21 21:05:38
801
原创 Java Collection 体系与使用场景整理
是Java 集合框架(Java Collections Framework, JCF)中最基础的集合接口之一一组元素(element)的抽象集合是否能存元素是否能遍历是否能删除是否包含某元素而不关心是否有顺序是否允许重复是否支持索引声明用接口,实现用具体类Collection:只表示“一堆元素”,用于抽象、解耦、通用逻辑List:当顺序和索引是业务语义的一部分Set:当唯一性是业务约束:当访问顺序受限(FIFO/LIFO)Map:当数据是“键 → 值”关系。
2026-01-19 20:33:33
1172
原创 Java 原始类型(primitive)与包装类(wrapper)详解
本文档按以下结构组织:简明对照表 → 各类型多角度说明(定义、位宽、取值范围、默认值、用途、注意事项)→ 为什么需要包装类(多角度原因)→ 装箱/拆箱的副作用与性能考虑 → 常见陷阱与示例 → 何时使用原始类型/何时使用包装类 → 参考/补充说明。
2026-01-19 20:10:50
706
原创 Java Lambda 表达式
定义:有且仅有一个抽象方法的接口。特征:通常(但不强制)类上会有注解。原理:编译器通过上下文推断,将 Lambda 表达式自动映射到那唯一的一个抽象方法上。// 是函数式接口 (只有一个抽象方法 swimming)// 不是函数式接口 (有两个抽象方法)// 唯一的抽象方法:无参数,无返回值看到方法参数是接口。检查该接口是否只有一个抽象方法。如果是,直接写() -> {}。根据参数个数和代码行数,应用省略规则。
2026-01-17 22:20:02
442
原创 LeetCode 71:简化 Unix 路径(Simplify Path)——栈 / vector
给定一个 Unix 风格的path,请将其化简为规范路径。..
2025-12-15 21:29:01
573
原创 FIR 与 IIR 数字滤波器的区别总结
yn∑k0Mbkxn−kynk0∑Mbkxn−kFIR 只有前向加权求和,没有反馈项,冲激响应在有限长度后变为 0,因此称“有限长”。维度FIRIIR冲激响应有限长无限长结构非递归(无反馈)递归(有反馈)稳定性天然稳定取决于极点位置线性相位易实现严格线性相位通常难严格线性相位阶数/运算量通常更高阶、运算大通常低阶、运算省量化敏感性低高(可能影响稳定)设计路线数字域直接设计常由模拟原型变换。
2025-12-15 21:23:12
892
原创 二叉树的层序遍历
子节点(left/right)如果存在,则入队;,W 为二叉树的最大层宽(队列的最大长度)。作为“队列”的写法,常数更小、性能略优。都会给出完整 C++ 代码和复杂度分析。如果我们只需要“先进先出”,可以用一个。,每个节点只进队、出队各一次。,在大数据量时会略微更快一些。记录该节点的值到当前层向量;创建一行结果,预分配容量为。表示当前队首,访问完之后。继续下一轮,直到队列为空。会有一点额外的常数开销。的经典 BFS 写法;,表示当前层有多少节点;把节点值放进当前层结果;,这是这一层的节点数;
2025-12-08 14:21:33
438
原创 Leetcode-10.正则表达式匹配(暴力 或 记忆暴力)
表示:从s的第i个字符开始的后缀s[i:],是否能匹配模式串从第j个字符开始的后缀p[j:]。也就是把原来的变成了带下标版本的。
2025-12-03 18:10:11
894
原创 克隆图(LeetCode 133)——用数组做映射的 DFS 解法
val = _val;val = _val;给定原图中的一个起点node,要求返回这张图的深拷贝(完全独立的一份图)。
2025-11-30 20:12:50
483
原创 做题调试时遇到的问题,debug的断点的watch变量也会影响结果
cloneGraph代码是对的。错误结果是因为调试器监视表达式里用了mp[node],触发了的“自动插入”行为,导致函数提前。把那些监视表达式删掉就会恢复正常。
2025-11-30 20:03:13
370
原创 LeetCode--130被围绕的区域
给定一个m x n的矩阵board,元素为'X'或'O'被'X'包围的'O'区域要被翻转为'X'与边界联通的'O'被翻转要求:原地修改board。
2025-11-29 18:26:00
385
原创 LeetCode每日一练
题目描述(LeetCode 17):给定一个只包含数字2-9的字符串,每个数字可以映射到一组字母,比如手机九宫格键盘。要求返回所有可能的字母组合。数字与字母的对应关系如下:2 -> abc3 -> def4 -> ghi5 -> jkl6 -> mno7 -> pqrs8 -> tuv9 -> wxyz例如:输入"23"。
2025-11-27 20:55:30
423
原创 复习数据结构中的Graph,并实现模板
在数据结构中,是由一组顶点(Vertex)和一组边(Edge)组成的集合,用来描述“实体之间的关系”。顶点:用来表示对象,例如城市、用户、单词等。边:表示两个顶点之间的“连接关系”,可以是:A → BA — B用一个n × n的二维数组保存边的信息,表示节点i和j之间有边。优点:判断两点是否相连是O(1)缺点:空间复杂度O(n^2),对稀疏图浪费空间为每个顶点维护一条链(或 vector),保存它的所有邻居。优点:空间复杂度接近O(n + m)(m 为边数),适合稀疏图。
2025-11-27 19:41:04
1571
原创 LeetCode:串联所有单词的子串
每一轮中,左右指针都只往前走,整体是 O(n / wordLen) 步。在块序列上做“变形的滑动窗口 + 频率统计”,控制在 O(n) 范围内。如果某个单词在窗口内出现次数比 target 需要的多了,就移动。后面滑动窗口时,会用这个 map 来对比当前窗口里的单词频率。整体时间复杂度大致是 O(n),空间是 O(m) 存单词频率。里找出所有起始下标,使得从这个下标开始的子串,刚好是把。个单词,而且每个单词频率都不超过 target,,每个单词出现一次,不多不少,顺序可以任意。
2025-11-26 22:23:07
285
原创 LeetCode每日一练(3)
这题经典思路是“滑动窗口 + 记录每个字符最后出现的位置”。(适用任何字符集)(更快,但只适用于 ASCII)下面分别给出代码和说明。
2025-11-25 22:04:49
393
原创 LeetCode每日一练(209, 167)
版本,对负数也适用,如果就是这道题的话,就定义一个sum存left到right的全部和就行,大于就移动left,小的话就移动right。返回这两个数的下标(1-based),且保证恰好存在一对解。,所有右侧元素中,随着下标减小,和单调减小;这里的实现不是经典“全正数 + 滑动窗口”的版本,而是。有序数组 + 两数之和,是双指针的典型场景。:说明和偏小,需要增大和 → 左指针右移。:说明和偏大,需要减小和 → 右指针左移。,在其中找出两个数,使得它们的和等于。更好(区间更长,和更小或相等)
2025-11-24 22:06:54
376
原创 主题:std::list<Node>::iterator 和 Node* 的区别
Node*纯粹的裸指针类型,只表示“一块内存的地址”,不知道自己属于哪个容器,也不知道这块内存是不是链表节点。STL 定义的一个迭代器类类型,语法上表现得“像指向Node的指针”,但内部通常保存的是容器节点指针和一些额外信息,用来描述:“在这条上的某一个位置”和Node*本质类型不同Node*:裸指针iterator:类类型,封装了节点指针和容器语义语义不同Node*:只是某个对象的地址iterator:某个容器上的“位置”,属于某个实例使用接口不同迭代器支持 STL 算法、容器成员函数(如。
2025-11-24 21:18:13
1014
原创 Leetcode每日一练(392.125)
不需要回退、不需要动态规划,双指针是最优解。若 s 为空直接返回 true。使用 isalnum 判断字符是否合法,用 tolower 统一大小写比对。整个过程只需一次线性扫描。
2025-11-23 21:19:25
271
原创 NebulaChat:C++ 高并发聊天室服务端
基于 C++17 的高并发聊天室服务端,是一个涵盖现代 C++、Linux 网络编程、MySQL、Redis 的综合项目。
2025-11-22 21:07:33
1011
原创 LeetCode每日一练(189, 122)
可以多次买入和卖出(不能同时持有多股),求最大利润。所以直接把所有“今天比昨天贵”的差价加起来,就是最大利润。都是线性扫描数组,加一点简单的小公式(旋转用。允许多次交易,只要不同时持有多股。备份一份原数组,避免边改边读。,股票用“所有正的差价相加”)。的元素,旋转后应该到位置。二、买卖股票的最佳时机 II。,将数组中的元素向右轮转。,就把这两天的差价加进。核心:备份原数组,用。,额外一份备份数组。
2025-11-22 19:12:46
298
原创 SQL 注入与 Redis 缓存问题总结
攻击者把恶意字符串作为输入,拼接进 SQL 语句中。数据库按“正常 SQL”执行这些内容,造成绕过登录、泄露数据、删表等后果。用户输入直接参与字符串拼接构造 SQL。遇到这种拼接,就说明写法有问题。新代码统一用预处理语句,旧代码至少先做转义。不要拼接 SQL,用预处理语句,旧代码至少先做转义。热点 key 过期瞬间被打爆,用互斥锁或逻辑过期 + 异步刷新。一堆 key 同时过期或 Redis 整体挂掉,用随机过期时间、多级缓存、预热、降级限流。
2025-11-22 19:04:55
1566
2
原创 C++ 中“编译器自动帮我传参”和“我自己写初始化”的本质区别
编译器自动帮你做的,是“默认构造成员”和“用类内默认值”,而不是“自动帮你把业务参数从外面传到里面”。当你不在初始化列表中显式写成员初始化时:类类型成员会调用默认构造有类内初始值的成员会用这个默认值一旦涉及到:同一类型不同配置(不同容量 / 大小 / 线程数)成员没有默认构造函数需要保持类的不变式参数真正要影响内部行为就必须在构造函数的初始化列表里手动传参。推荐的写法是:成员给一个合理的默认值构造函数提供可选参数在复杂类中,通过初始化列表把参数一层层地传。
2025-11-21 18:22:26
649
原创 Leetcode每日一练(80,169,189)
双指针:i 遍历原数组,k 维护写入位置不用计数器 count只需要对比 nums[k−2],逻辑更清晰二、多数元素 —— Boyer-Moore 投票法投票思想:多数元素的数量永远比其它元素多不需要额外空间这是所有解法中时间与空间最优的方案三、旋转数组 —— 三次反转法三次反转是空间最优的方法逻辑简单,面试官非常喜欢不需要额外 temp 数组整体总结题目方法时间复杂度空间复杂度技巧删除重复项 II双指针O(n)O(1)比较 nums[k−2]多数元素。
2025-11-21 18:13:00
303
原创 总结我的小项目里现在用到的Redis
当前和计划中的用途:短信验证码缓存key:value: 6 位数字验证码,字符串TTL: 60 秒用途: 注册、短信登录、找回密码用户信息缓存key 示例→→用途登录时快速根据用户名 / 手机号查到用户 id减少 MySQLSELECT压力统一思想:Redis 只是加速访问的「缓存层」真正的权威数据存储在 MySQL写操作必须以 MySQL 为准,Redis 可以删、可以重新写。
2025-11-19 21:16:18
1515
2
原创 NebulaChat项目构建笔记
裸指针(T*)的问题:忘记delete→ 内存泄漏newdelete分散在各处,不好维护异常、提前 return 时很容易少写delete多个地方持有同一指针时,很容易 double free智能指针的核心思想:RAII(资源在对象生命周期结束时自动释放)。
2025-11-14 21:35:42
742
原创 epoll 事件全集、每个事件的含义、哪些事件在实际服务器中最常见、哪些会组合出现
epoll 返回的 events 是一个,可能包含多个事件组合。
2025-11-14 15:12:15
501
原创 今日内容总结
特点:有类型检查用于“本来就能转换”的情况例子:void* 转成 Connection*,int 转 double 等这里 user 原来就是 Connection*,只是通过 void* 存了一次,转回来用 static_cast 是合理、安全的。wakeup 写错 fd(应该写 evfd_)epoll_ctl 的第一个参数必须是 epfd_SO_REUSEPORT 的宏使用要小心,第二个参数是 SOL_SOCKETstart() 失败时必须把 running_ 还原为 false。
2025-11-13 21:35:44
813
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅