- 博客(72)
- 收藏
- 关注
原创 three.js 完整笔记
three.js 完整笔记摘要(≤150字): Three.js 是基于 WebGL 的开源 JavaScript 3D 库,可直接在浏览器中创建交互式 3D 内容。核心三要素为场景、相机与渲染器,支持几何体、材质、灯光、动画及模型导入(首选 glTF/GLB)。常用功能包括轨道控制器、光照阴影、射线拾取、性能优化(如 InstancedMesh、LOD)与后期特效。配合 Blender 建模、GLTFLoader 加载,结合 OrbitControls 与 AnimationMixer 可实现复杂交互与骨
2026-10-16 09:11:42
265
原创 Spring WebSocket(STOMP)
Spring WebSocket结合STOMP子协议实现服务端主动向客户端推送实时消息。WebSocket通过HTTP握手升级双向TCP长连接;STOMP提供发布订阅模型,通过destination目的地路由消息。本文包含完整后端配置、广播消息、一对一私聊代码,前端stomp.js示例、SockJS降级、心跳保活,区分内置SimpleBroker与RabbitMQ外部Broker,整理生产踩坑点与面试题,适合实现实时通知、在线聊天、大屏数据推送。
2026-10-13 15:55:41
279
原创 Docker Compose 完整详解
Docker Compose 是单机环境下管理多容器应用的工具,通过 YAML 配置文件定义服务、网络、数据卷等。核心功能包括一键启动/停止多容器,自动创建隔离网络(服务间可通过服务名互访),支持 image(拉取远程镜像)或 build(本地构建)二选一配置。数据持久化使用 volume(Docker 管理)或 bind mount(宿主机目录挂载)。注意:replicas 仅在 Docker Swarm 中生效,单机需手动定义多个 service 实现多实例。推荐使用新版 docker compose
2026-10-13 14:56:36
556
原创 乐观锁(MyBatis-Plus)
乐观锁通过版本号机制防止并发更新丢失,MyBatis-Plus中需在表添加version字段,实体类标注@Version,并注册OptimisticLockerInnerInterceptor插件。仅对带实体的updateById等方法生效,不支持纯Wrapper更新。适用于读多写少场景,高并发下易失败,不适合库存扣减等频繁争抢场景。
2026-10-13 11:32:48
362
原创 MyBatis-Plus 知识点整理
MyBatis-Plus是MyBatis的增强工具,简化持久层开发,实现基础CRUD无需编写SQL。通过@TableName、@TableId、@TableField注解实现实体与数据库映射;Mapper继承BaseMapper获取内置CRUD方法;使用Wrapper(推荐Lambda版)拼接条件;分页需配置插件;支持逻辑删除、自动填充、乐观锁等扩展功能。复杂SQL仍可结合原生XML,兼容性强。
2026-10-13 11:19:09
118
原创 Eclipse Paho 完整详细笔记
Eclipse Paho 是物联网领域事实标准的 MQTT 客户端 SDK,支持多语言(Python、Java、C、Go 等),封装了 QoS、KeepAlive、SSL/TLS、遗嘱消息、保留消息等核心协议特性。采用回调驱动模型,实现设备与 Broker 的高效通信。推荐使用新版 CallbackAPIVersion.VERSION2,支持 MQTT5.0 新特性如 Reason Code、Properties、共享订阅等。关键实践包括:重连后自动订阅、避免回调阻塞、启用持久化会话、合理设置 Client
2026-10-13 10:50:55
460
原创 MQTT笔记
本文系统梳理MQTT协议核心要点:主流版本为MQTT 3.1.1与5.0,后者支持共享订阅、原因码、用户属性等增强功能。核心概念包括会话管理(Clean Start)、主题通配符、保留消息、遗嘱消息及QoS分级(0/1/2)。报文机制基于固定格式,支持心跳保活与安全认证(TLS/ACL)。适用于物联网数据上报、设备控制等场景,不适用于大文件传输或复杂事务处理。对比Kafka与WebSocket,MQTT更适配低带宽、高并发的嵌入式设备通信。
2026-10-12 09:39:47
306
原创 Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系
Spring Integration是基于EIP的企业级消息集成框架,统一使用Message(含头与体)模型实现跨系统数据流转。核心组件包括MessageChannel、Adapter、MessageHandler等。其本身不支持MQTT,需依赖spring-integration-mqtt扩展模块,该模块封装Paho客户端,提供MQTT In/Outbound Adapter,将原始协议消息转换为标准Message并传递至流水线。整体架构中,Paho负责底层通信,spring-integration-mq
2026-10-10 16:15:49
399
原创 OpenCV 学习笔记
本文介绍OpenCV基础应用,涵盖视频读取、图像预处理(灰度化、RGB转换、缩放、高斯模糊)、绘图(画框、加文字)及截图保存。重点强调BGR与RGB通道差异、资源释放必要性,并指出仿真场景下可直接使用内存图像数组替代VideoCapture。代码演示完整流程,适用于目标检测与答辩可视化。
2026-10-08 11:25:54
198
原创 Nginx网关完整知识点
Nginx网关基于Master-Worker架构,1个Master进程管理配置与进程,多个Worker进程(建议等于CPU核心数)单线程处理请求,依托epoll实现高并发。核心能力包括反向代理、负载均衡(轮询/加权/IP哈希)、限流(共享内存计数)、缓存(proxy_cache)、SSL终止等。支持平滑重载,无中断更新配置。优点为高性能、低内存、稳定性强;缺点是动态逻辑弱,仅支持被动健康检查。面试高频点涵盖worker数量、共享内存作用、惊群效应及配置陷阱。
2026-09-24 08:39:13
284
原创 Kafka生产者高可靠机制完整学习笔记
Kafka生产者高可靠配置组合:acks=all + retries=3 + enable.idempotence=true,确保消息至少投递一次且不重复。acks=all保障主副本及所有同步副本写入成功;retries=3实现临时故障自动重试;幂等生产者通过PID+序列号机制,拦截重复消息,防止重试导致的重复写入。配合retry.backoff.ms=500避免重试风暴,delivery.timeout.ms=120000兜底超时。该组合实现生产端不丢不重,达到发送环节的精确一次语义(Exactly On
2026-09-24 08:29:44
263
原创 重试退避(retry backoff)
Kafka生产者通过重试退避机制应对发送失败:retries=3最多重试3次,每次间隔500ms,避免瞬间重试风暴;开启enable.idempotence=true确保重试不产生重复消息;delivery.timeout.ms=120000设置120秒超时兜底,超时后消息进入死信队列(DLQ)并告警,保障系统稳定与消息可靠性。
2026-09-24 08:08:10
205
原创 Kafka全套核心术语
Kafka核心术语涵盖生产者、消费者、Broker集群与ZooKeeper协调服务。消息按Topic逻辑分类,通过Partition物理分片实现高并发,同Key消息保序。每个Partition有Leader与Follower副本保障高可用。消费者组内通过Offset记录消费位置,支持Rebalance动态分配分区。关键机制包括acks确认、消息保留策略、DLQ死信队列及异步发送(CompletableFuture)。这些概念共同支撑Kafka的高性能、可扩展与可靠性。
2026-09-22 23:57:58
632
1
原创 Spring Data MongoDB Repository 对比笔记
Spring Data MongoDB Repository 通过接口方法名自动生成查询,无需XML,继承基础CRUD,实体用注解映射;MyBatis需手写SQL与映射文件,灵活但繁琐。前者适合MongoDB快速开发,后者适用于关系型数据库复杂查询场景。
2026-09-22 23:55:11
115
原创 Kafka & RabbitMQ 死信队列(DLQ)超全整合笔记
本文系统梳理Kafka与RabbitMQ死信队列(DLQ)核心机制,对比二者在原生支持、触发条件、实现方式及适用场景上的差异。RabbitMQ基于DLX原生自动路由死信,配置即用;Kafka则需业务手动捕获异常、管理Offset并投递至指定Topic,灵活性高但侵入性强。总结:RabbitMQ适合轻量延时任务,Kafka适用于高并发流式处理,生产中需结合监控告警、上下文携带与重放补偿,确保异常消息可追溯、可修复、可补偿。
2026-09-22 23:51:11
542
原创 1004 To Buy or Not to Buy - Hard Version
int new_extra = cur_extra; // 记录购买当前商店后的额外量 int new_rest_need = rest_need; // 记录购买后剩余需求 vector<int> temp_need = cur_need; // 临时副本用于回溯 // 购买第i个商店的珠子,更新需求和额外量 for (auto& [color, count] : shop_bead[i]) { if (temp_need[color] > 0) { // 满足部分需求 int
2026-04-08 12:00:17
378
原创 1003 Universal Travel Sites
文章摘要 题目《1003 Universal Travel Sites》要求计算行星站所需的最小容量,以确保所有太空船能够顺利停靠和卸载乘客。该问题可转化为最大流问题,其中行星和卫星作为节点,运输路线作为有向边,容量表示最大乘客运输量。使用Dinic算法求解: 输入处理:将行星名称映射为整数ID,构建邻接表。 分层BFS:确定节点的层次,确保增广路径最短。 DFS增广:沿层次图寻找增广路径并更新流量。 反向边优化:允许流量调整,避免局部最优。 最终输出从源行星到目标行星的最大流值,即行星站的最小容量要求。例
2026-04-08 11:59:15
434
原创 PAT 1002 Business 学习笔记
PAT 1002 Business 问题解析 该问题要求选择多个项目以获得最大利润,每个项目具有利润P、持续时间L和截止日期D。关键点在于项目必须连续完成且不超期。 解题思路 问题分析:转化为带截止时间的01背包问题 核心算法: 按截止日期排序项目 使用动态规划,状态dp[i][j]表示前i个项目在j天内获得的最大利润 优化方案: 采用滚动数组降低空间复杂度 合理设置时间上限 实现要点 项目排序确保截止时间早的优先处理 状态转移考虑三种情况:时间不足、可做项目、超期情况 最终遍历所有时间状态取最大值 该问题
2026-04-04 05:34:09
274
原创 PAT 1001 Battle Over Cities - Hard Version 笔记
PAT 1001 Battle Over Cities - Hard Version 摘要 该题考察在战争背景下,当某个城市被攻占后,如何以最小代价修复高速公路使剩余城市保持连通。输入包含N个城市和M条高速公路信息(每条路有修复代价和使用状态)。核心算法是枚举每个城市被攻占的情况,使用Kruskal算法结合并查集计算剩余城市连通的最小修复代价。具体步骤包括:预处理边(优先使用完好道路),枚举每个城市作为被攻占点,构建最小生成树并统计代价,最终输出需要最关注的城市(修复代价最大的)。若所有城市被攻占后都不需修
2026-04-04 05:31:22
411
原创 选修课(小林选课规划)学习笔记
本文研究了小林选课规划问题:在k个学期内选修n门核心课程,要求每门课程至少被选修一次。通过组合数学分析,将问题转化为集合覆盖计数,并应用容斥原理和二项式定理,得出答案为$(2^k - 1)^n \mod 998244353$。验证了样例的正确性,提供了C++实现代码,并分析了时间/空间复杂度。核心结论可概括为:每门课有$2^k$种选法,排除全不选的情况后,n门课的组合数为$(2^k-1)^n$。该解法高效简洁,时间复杂度为$O(\log k + \log n)$。
2026-04-04 05:24:56
216
原创 取石子游戏 学习笔记
取石子游戏学习摘要 问题描述: Alice和Bob轮流从n个石子堆中取1个或任意质数个石子,取走最后一个石子者胜。Alice先手,判断其必胜策略。 核心规律: 当n是4的倍数时先手必败,否则先手必胜。 证明思路: 基础情况验证(n=0-4) 归纳法证明: 4m:无论取1/2/3都会给对手非4倍数 非4倍数:总能取1/2/3使对手得到4倍数 复杂度: 每组数据O(1)时间判断 记忆口诀: "模四为零Bob赢,模四非零Alice胜" 代码实现: 直接判断n%4即可输出胜负
2026-04-04 05:21:24
384
原创 能源矩阵 完整题解(C++版 核心笔记)
摘要:本文介绍了解决能源矩阵问题的动态规划方法。题目要求在n×n的0/1矩阵中统计所有边长为k的全1正方形数量。核心解法使用动态规划:定义dp[i][j]为以(i,j)为右下角的最大全1正方形边长,状态转移方程为当matrix[i][j]=1时,dp[i][j]等于相邻三个位置最小值加1。通过cnt数组统计边长≥l的正方形数,再用差分计算恰好边长为l的数量。该算法时间复杂度O(n²),适用于n=2000的数据规模。C++实现包含输入优化和下标处理细节,可推广到类似矩阵统计问题。
2026-04-04 05:17:32
325
原创 昆仑山脉山峰海拔还原问题
本文探讨了昆仑山脉山峰海拔还原问题。题目给定n座山峰的观测记录序列a_i,要求还原山峰的海拔关系并输出从低到高的山峰编号。关键解法是利用并查集进行逆序高度分配:从最高山峰开始,为每座山分配比a_i对应山峰更高的第一个可用高度。算法通过路径压缩优化查找过程,时间复杂度O(n),完美适配大数据规模。样例执行过程验证了该方法的正确性,最终输出符合海拔从低到高的编号顺序。该方案高效解决了山峰高度排列问题,适用于n≤10^5的大数据场景。
2026-04-03 21:15:48
238
原创 校验码 笔记
题目要求验证信息传输中的校验码是否正确。给定字符串S(用下划线连接单词)和校验码T,判断S中各单词首字母组成的缩写是否与T匹配。输入多组数据,每组输出Yes/No。核心解法:1)手动遍历S,提取下划线后首字母;2)使用stringstream按_分割单词取首字母。注意cin.ignore()处理输入缓冲区的换行符问题。时间复杂度O(|S|),适用于小规模数据。
2026-04-03 20:31:31
245
原创 C++ size() 与 length() 核心笔记
C++中size()与length()的核心区别与用法总结: length()是字符串专属函数,size()是STL容器通用函数,两者在string类中完全等价; vector/map等容器只能用size(),不能用length(); 原生数组既不能用size()也不能用length(),需用sizeof计算; 使用时必须加括号(),否则会编译错误。 关键记忆点: 字符串两者通用 容器只用size 数组都不支持 正确用法示例: string s = "abc"; // s.size()或
2026-04-03 20:27:59
83
原创 C++ upper_bound / lower_bound 与迭代器 学习笔记
本文介绍了C++中upper_bound和lower_bound函数的使用方法及其与迭代器的关系。主要内容包括:迭代器概念(通用位置标记,适用于所有容器)、两个函数的区别(lower_bound返回第一个≥x的位置,upper_bound返回第一个>x的位置)、四大常用功能(计算≤x、<x、≥x、>x的元素个数)、典型应用场景(统计方案数、判断元素存在)、降序数组的特殊用法(需加greater参数)以及使用口诀。文章强调迭代器是STL通用接口,两个函数都基于二分查找且要求数组已排序。
2026-04-03 20:19:58
170
原创 绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle)
本文介绍了绝版图书购书方案问题的解法。题目要求计算在不超过预算的情况下,购买n本图书的所有可能方案数。由于n≤40但预算可能高达10^9,传统背包算法不适用。采用折半枚举(Meet-in-the-Middle)策略,将图书分成两半,分别枚举所有子集和,再通过排序和二分查找合并结果。这种方法将时间复杂度从O(2^n)降低到O(2^(n/2)),有效解决了大规模数据问题。样例分析展示了8种合法方案,包括不购买的情况。代码实现详细注释了分治、枚举和二分查找的过程。该算法特别适合n较小但m较大的情况。
2026-04-03 19:50:39
440
原创 邻接表 `vector<pair<int, int>>` 超详细完整版笔记
邻接表使用vector<pair<int,int>>存储图结构,基础定义为静态数组graph[MAXN],每个元素graph[u]存储从节点u出发的出边(终点v和边权w)。支持有向图、无向图、重边和自环,存储顺序严格按输入顺序。内存布局为块内连续、块间离散,数据存储在堆上。遍历方式灵活,支持正反向遍历。邻接表相比邻接矩阵更节省空间(O(m)),适合稀疏图,但查询边需O(deg(u))时间。常见操作包括建图、遍历、查询、修改、排序和去重,需注意无向图需存双向边、节点越界和栈溢出等问题。
2026-04-02 16:59:07
434
原创 L2-001 紧急救援
本文介绍了使用Dijkstra算法解决城市紧急救援路径规划问题的两种实现方法。问题要求在最短路径的基础上,同时考虑召集最多救援队数量,并输出路径详情。朴素版Dijkstra适合城市数≤500的情况,通过邻接表存储图结构,维护距离、路径数、救援队数等数组,时间复杂度O(n²)。堆优化版则使用优先队列提升效率,适合更大规模数据。两种方法都包含路径记录和最优解判断逻辑,最终输出最短路径数量、最大救援队数以及具体路径。示例代码完整展示了算法实现细节,包括邻接表构建、松弛操作和路径回溯等关键步骤。
2026-04-02 16:39:14
325
原创 L1-102 兰州牛肉面、 L1-103 整数的持续性、L1-104 九宫格
本文包含三个编程题解:L1-102统计牛肉面销售情况,L1-103计算整数持续性,L1-104验证九宫格规则。L1-102通过记录各品种销量和价格计算总营业额;L1-103通过数字乘积循环计算持续性,找出区间内持续性最长的数;L1-104检查9×9矩阵是否满足行、列和3×3宫格内数字1-9不重复的条件。每个问题都给出了输入输出样例和对应的代码实现。
2026-04-01 17:34:15
564
原创 C++ vector 超全用法整理
本文全面整理了C++ vector容器的使用方法,内容包括:头文件与定义方式、元素访问方法、添加/删除元素操作、大小与容量管理、多种遍历方式、排序/去重/反转等算法操作、查找与比较、二维vector定义以及常用技巧。特别针对刷题场景提供了高效用法建议,如emplace_back原地构造、快速清空内存等。最后附上vector所有成员函数的速查表,可作为开发参考手册使用。全文采用代码示例与文字说明相结合的方式,便于快速掌握vector的核心功能。
2026-04-01 13:24:49
142
原创 L1-101 别再来这么多猫娘了!
本文实现了一个内容审查系统,用于检测和替换文本中的违禁词。系统首先读取N个违禁词和阈值k,然后对待检查文本进行扫描。若违禁词出现次数小于k,则将违禁词替换为"<censored>";否则输出违禁词数量及警告信息。代码通过find()定位违禁词,用replace()实现替换,并采用临时标记"_"避免重复处理。核心函数包括输入处理、字符串查找替换和条件判断,最终根据违禁词数量输出相应结果。
2026-03-29 20:59:44
544
原创 L1-086 斯德哥尔摩火车上的题、L1-087机工士姆斯塔迪奥
本文包含两道编程题解:1) L1-086题要求比较两个数字字符串通过特定算法处理后是否输出相同结果,算法是相邻数字奇偶性相同时取较大值连接成新字符串。2) L1-087题计算BOSS攻击后安全格子数,通过标记被攻击行/列,用公式(总行数-被攻击行数)×(总列数-被攻击列数)求解。两题均给出C++实现代码,涉及字符串处理、数组标记和数学计算等知识点。
2026-03-28 20:21:03
357
原创 L1-012 计算指数、L1-013 计算阶乘和、 L1-014 简单题、 L1-015 跟奥巴马一起画方块、 L1-016 查验身份证
本文摘要介绍了5道基础编程题目及解法: L1-012 计算指数:输入n,输出2^n的值,使用pow函数计算 L1-013 计算阶乘和:计算1!到N!的和,通过循环累加阶乘结果 L1-014 简单题:无输入,直接输出固定字符串 L1-015 画方块:根据边长N和字符C输出正方形,行数取N/2四舍五入 L1-016 查验身份证:检查前17位数字及校验码,使用权重数组和模11验证 所有题目均提供C++代码实现,涉及基础数学运算、循环控制、字符串处理等编程基础知识点。
2026-03-28 13:44:23
619
原创 L1-011 A-B
本文介绍了L1-011 A-B字符串处理题的解题思路和C++实现方法。题目要求从字符串A中删除所有出现在字符串B中的字符。解决方案采用getline读取完整输入字符串,通过unordered_set存储要删除的字符实现O(1)快速查找。代码遍历字符串A,仅输出不在集合中的字符。文章详细讲解了getline函数读取带空格字符串的特性,以及unordered_set的定义、初始化、查找等核心操作,特别强调了范围for循环和迭代器遍历两种方式。该方法高效简洁,适用于处理大规模字符串数据。
2026-03-28 12:42:31
362
原创 最小生成树两种算法对比:Kruskal 与 Prim
本文对比了最小生成树(MST)的两种经典算法:Kruskal和Prim。Kruskal采用边优先策略,通过排序边并利用并查集检测环;Prim采用点优先策略,通过维护顶点集和邻接矩阵逐步扩展。Kruskal适合稀疏图,时间复杂度为O(ElogE);Prim适合稠密图,时间复杂度为O(V²)。两者均基于贪心算法,但实现方式和适用场景不同。文中提供了两种算法的C++实现代码,并详细对比了它们的核心思想、步骤和性能差异。
2026-02-26 12:32:19
962
原创 2-opt
2-opt算法通过数学计算而非视觉判断来优化路径,其核心是交换两条边后若路径缩短则等价于几何交叉。算法严格限定交换不相邻边并反转中间片段,确保路径始终连通而不会分裂。例如,在路径A→B→C→D→E中交换边(A,B)和(C,D)后变为A→C→B→D→E,仍保持单一路径。2-opt的设计规则从数学上保证了优化的有效性和路径的连贯性。
2026-02-10 20:11:11
703
原创 PTA乙级-1002 写出这个数
本文介绍了一个处理超大正整数并输出数字之和拼音的程序。程序通过字符串存储超大数避免数值溢出,计算各位数字之和后转换为汉语拼音输出。关键点包括:1) 使用字符串处理超过整数范围的数字;2) 通过c - '0'将字符转换为数字;3) 采用"非首位前加空格"的格式控制确保输出规范;4) 使用数组实现数字到拼音的高效映射。程序结构清晰,分为输入处理、求和计算和拼音输出三个模块,通过引用传递和常量修饰提升效率和安全性。该方案适用于需要处理超大数字并格式化输出的场景。
2026-02-07 13:34:30
861
原创 C++ 核心知识点全解
本文全面解析C++核心知识点:1)基础语法部分涵盖数据类型、类型限定符、初始化方式、左右值等;2)内存管理重点讲解指针与引用区别、内存五大分区及new/delete机制;3)面向对象编程详细阐述类访问控制、六大特殊成员函数、构造/析构函数、深浅拷贝、移动语义等关键概念。文章采用表格对比、代码示例等方式,系统梳理了C++开发中的核心语法和重要特性,特别强调了现代C++(C++11)引入的列表初始化、移动语义等新特性,为C++开发者提供了清晰的技术参考。
2026-02-07 11:27:29
1374
原创 C++ 核心知识点梳理
本文系统梳理了C++核心知识点,主要包括:基础语法(数据类型、变量、流程控制、函数);面向对象特性(封装、继承、多态);以及C++特有扩展功能(引用、命名空间、智能指针等)。重点阐述了虚函数实现多态的机制、模板泛型编程的优势,以及智能指针如何自动管理内存。文章从基础到高级层层递进,既涵盖C++核心概念,又包含C++11等现代特性,为系统学习C++提供了清晰的知识框架。
2026-02-06 00:35:03
990
C++ 核心知识点全解:从基础到进阶超详细学习笔记(含代码示例)
2026-02-07
Python零基础入门核心笔记+可运行代码(学习参考)
2026-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅