文章
96
标签
116
分类
7
首页
统计
  • 标签
  • 分类
  • 归档
关于
暮色之狐
搜索
首页
统计
  • 标签
  • 分类
  • 归档
关于

暮色之狐

Redis通关手册(二):概率数据结构
发表于2026-07-14|后端
Redis的概率数据结构提供对计数、频率和排名等统计量的近似值,而不是精确值。使用近似的优点是它们对于许多常见用途来说是足够的,但计算起来却更加高效。它们有时还有其他优点,例如模糊处理时间、位置和其他敏感数据。 Bloom filter布隆过滤器是一种概率性数据结构,用于检查一个元素是否在集合中。 布隆过滤器是 Redis 开源中的一个概率性数据结构,它允许你使用一个非常小的固定大小的内存空间来检查一个元素是否在集合中。布隆过滤器不是存储集合中的所有元素,而是只存储元素的哈希表示。这种设计以牺牲部分精度为代价,换来了极高的空间效率和查询速度。 布隆过滤器有一个重要特性:它可以保证“元素不在集合中”的判断是绝对正确的;但对“元素在集合中”的判断,只能给出一个估计值——也就是说,每 N 个“存在”的回答中,可能会有 1 个是错误的。 虽然这种不确定性听起来有点奇怪,但在计算机科学中非常实用。因为否定回答能阻止许多昂贵的后续操作。例如: 检查用户名是否已被占用 检查信用卡号是否被报告为被盗 检查用户是否已经看过某条广告 应用场景检查用户名是否已被占用(SaaS、内容发布平台) 用户...
Redis通关手册(一):基本数据类型
发表于2026-07-13|后端
Redis 是一个数据结构服务器。其核心是提供了一系列原生数据类型,可帮助您解决从缓存、队列到事件处理等各种各样的问题。以下是对常用的数据类型的简要描述,并提供指向更详细概述和命令参考的链接。 StringsRedis的字符串类型是最基本的数据类型,字符串存储字节序列,包括文本、序列化的对象和二进制数组。它们通常用于缓存,但还支持额外的功能,比如可以使用string实现计数器并执行位运算。 使用 SET 和 GET 命令是我们设置和检索字符串值的方式。请注意,如果键已经存在,即使键关联的是非字符串值, SET 也会替换任何已经存储在键中的值。所以 SET 执行的是赋值操作。 12345> SET bike:1 DeimosOK> GET bike:1"Deimos" 值可以是各种类型的字符串(包括二进制数据),例如你可以在一个值中存储一个 jpeg 图像。值的大小不能超过 512 MB。 SET 命令有一些有趣的选项,这些选项作为附加参数提供。例如,我可以要求 SET 如果键已存在则失败,或者相反,只有当键已存在时才成功: 1234> s...
踩坑实录:接口正常Feign调用字段值为空
发表于2026-05-26|后端
Feign字段取不到值问题解析Postman直接调用接口时数据正常,但通过Feign调用时字段值却为null。起初怀疑是Feign配置问题,经过排查后才发现问题出在字段命名上——mName这类单字母驼峰命名被Jackson按规范推断为MName,导致大小写不匹配。 这种约定冲突比技术难点更难防范,耗费了半小时才搞清楚原因。 问题现象接口返回的客户信息如下: 1234{ "mName": "51石雷", "cAddr": "张东路1387号"} 对应的实体类定义为: 12345@Datapublic class CustomerInfo { private String mName; private String cAddr;} 从表面上看,字段名与JSON中的键值一一对应,似乎没有问题。然而,实际测试发现mName和cAddr的值始终为null,而其他字段则正常。 问题排除首先排除了接口本身的问题。通过Postman直接调用接口,数据...
踩坑实录:读写分离导致批量删除逻辑问题
发表于2026-05-16|后端
最近在帮同事review代码时,发现一段逻辑看似正常但执行结果却不符合预期的代码,特此记录问题排查过程。 原始代码实现12345678910111213141516171819202122@Overridepublic void clearExpireOrder(LocalDate expireDate) { log.info("开始清理过期订单, 过期日期: {}", expireDate); int batchSize = 200; long totalDeletedCount = 0; while (true) { List<ExposureOrder> expireOrders = this.list(Wrappers.<ExposureOrder>lambdaQuery() .select(ExposureOrder::getId).le(ExposureOrder::getAdEndDate, expireDate.a...
Java应用启动慢、接口超时、频繁Full GC?别再把锅甩给JVM了!
发表于2026-04-29|后端
💡TIP一次线上扩容实验,揭开隐藏在@RefreshScope背后的性能杀手 问题现场:扩容反而引发告警风暴最近,我们的服务在业务高峰进行一次常规扩容,新增了两个POD。本以为能平滑分担流量,结果启动后不久,P1级别接口超时告警和频繁Full GC告警接连爆发。 从监控图可以清晰看到: 新启动的POD在刚接收流量的前几分钟,接口平均耗时飙升到秒级; JVM的Full GC次数陡增,Old区几乎被打满; 运行几分钟后,一切又逐渐恢复正常。 这种现象并非第一次出现,我们注意到应用启动时也会出现类似的现象。扩容或者重启变成“陪葬”,到底是谁在作祟? 结论先行:@RefreshScope的滥用团队没有止步于表象,而是深入Spring Cloud源码,并结合Demo进行复现,最终锁定了“真凶”——**@RefreshScopel滥用**。 @RefreshScope的初始化“陷阱”在我们的应用中,大量Controller、Service类上都标注了@RefreshScope,初衷是为了实现Nacos配置的热更新。然而,这个注解的初始化行为却暗藏玄机: 普通Bean:...
零代码经验,我用Claude Code搓出的生产力工具
发表于2026-04-22|软件工具
SmartScribe:一个让AI自动帮你整理笔记的Obsidian插件。支持6大AI平台,一键生成标题、标签、分类、摘要,还能智能优化写作。 这个项目的特殊之处不在于功能——在于它的代码100%由Claude Code生成。作者是一个后端程序员,一行前端代码都没写。 为什么要做这个项目痛点:笔记整理是道坎我用Obsidian写了3年笔记,积累了很多篇文章。但整理成了最大的负担: 标签混乱:今天用 #工作,明天用 #work,后天用 #项目,搜索时永远不全 分类困难:一篇笔记该放哪个文件夹?纠结5分钟,最后扔根目录 标题随意:随手记的笔记,标题经常是”临时记录”、”想法”,过两周自己都不记得是什么 摘要缺失:长篇笔记没有摘要,笔记发布博客时总结摘要很烦 试过手动整理,坚持不了一周。也试过其他插件,要么功能太死,要么功能不能完全支持我的需求。 契机:AI能读懂我的笔记了我开始尝试让AI帮我整理单篇笔记——把内容贴过去,让它生成标题、标签、分类、摘要。 效果出奇地好。AI不仅能理解内容,还能根据已有笔记的命名习惯给出建议。 但流程太麻烦:复制 → 打开浏览器 → 粘贴到对话框 →...
容器化后内存告警不断?日志“写爆”了Page Cache!
发表于2026-04-16|系统运维
💡Tip服务在虚拟机上跑得好好的,容器化上 K8s 后却频繁触发内存超限告警,甚至 OOM Kill?堆内存才用了不到 10%,Pod 内存却飙到 80% 以上,到底是什么情况?本文将层层拆解,揭开容器内存暴涨的真相。 诡异的现象:JVM 很健康,Pod 却要“撑爆”了Java 服务容器化部署到 Kubernetes 后,Pod 内存使用率持续缓慢上升,频繁超过 80%,甚至触发 OOM 导致 Pod 重启。 资源配置如下: 123456789resources: requests: memory: 2200Mi cpu: 1000m limits: memory: 3000Mi cpu: 3000m JAVA_OPTS='-Xmx2000m' 按理说,JVM 堆内存只占 2000Mi,Pod limit 给了 3000Mi,还有近 1G 的空间给堆外、Metaspace 等,应该足够富裕。可为什么内存会超限呢? 排查过程:堆内存正常,堆外也正常,那内存去哪了?首先排查 JVM 堆内存进入容器,用 jhsd...
Harness Engineering 究竟是什么
发表于2026-04-15|软件设计
💡TIPHarness Engineering 究竟是什么?不是又一个AI营销概念,而是AI从能说会道迈向能干成事的关键分水岭!本期深度拆解AI工程演进的三层核心:Prompt Engineering(让模型听懂你)、Context Engineering(让模型看到该看的信息)、Harness Engineering(让模型按目标完成任务)。为什么调用同样的模型,不同的AI Agent表现却天差地别?答案不在模型参数中,而在包裹模型的那套工程框架,这就是Harness Engineering ,它不是锦上添花的优化,而是决定AI能否落地生产的基础设施。 AI系统落地过程中,一个日益凸显的核心问题是:Agent的稳定性不仅取决于模型本身。真正决定AI Agent能否稳定工作的因素,往往不是模型,而是包裹模型的工程系统。 大语言模型的本质是什么?——高维概率预测说白了,大语言模型就是一个巨大的参数文件,平时它静静的躺在硬盘中,只有你将它加载到显存里,套上一层API再加一个聊天界面,它才会变成ChatGPT、Claude或者某种AI编程助手,无论它被包装成什么产品,...
Claude Code 通关手册(七):推荐 5 个 Hooks,代码质量提升 3 倍
发表于2026-04-13|软件工具
💡TIP这是Claude Code通关手册的第八篇,推荐5个实用的Hook,代码质量提升 3 倍 上周三下午,我让 Claude Code 帮我重构一个老模块。 它干得挺快,噼里啪啦一顿输出。我切出去喝了口水,回来一看——它正准备把我一个还没有提交git的源文件直接覆盖掉。 手抖着点了“拒绝”,后背全是冷汗。 那一刻我突然意识到:不是 Claude 坏,是我太信任它了。 每次它问“我可以执行这个命令吗?”我都点“允许”,点多了就麻了。它要 rm -rf 我也点,它要改 .env 我也点——我把 AI 当成了不会犯错的神,但它只是个能力很强的实习生。 我翻了一遍 Claude Code 的文档,又刷了创始人 Boris 的 X。他分享了自己在用的几个 hooks,我全抄下来,砍掉一半,最后剩下 5 个。装上之后,Claude 还是那个 Claude,但我再也没怕过它。 Hook 到底是什么?3 秒钟理解你每次让 Claude 跑命令、改文件,它都会弹窗问你“行不行?”——这就是最后一道防线。 Hook 就是在弹窗之前或之后,自动跑一段你写好的脚本。 你想让它自动...
Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南
发表于2026-04-12|软件工具
💡Tip这是Claude Code通关手册第七篇,这一篇让我们学习ClaudeCode的新功能Skills,从“每次重新教”到“一次封装,处处复用”,这才是 AI 助手的正确打开方式 先来一个扎心的场景你已经能够熟练的使用Claude Code:权限设置、CLAUDE.md、自定义命令、子代理、MCP……Claude Code 被你调教得越来越顺手。 但你有没有遇到过这种情况: 让 Claude 帮你 review 一段代码,它给出了一些建议——有些很中肯,有些完全不符合你们团队的习惯。你又得补充:“我们团队 review 代码时,重点关注可维护性和测试覆盖,性能问题先放一放,除非有明显的瓶颈。” 它记住了,这次 review 按你的要求来了。但下次你又让它 review,它又忘了这些约定。 更让人抓狂的是,你明明已经把代码审查规范写在了 CLAUDE.md 里,但它还是经常漏掉重点。问题出在哪? 你缺的不是“规范”,而是 “技能”。 CLAUDE.md 是规则(“应该做什么”),Skills 是能力(“应该怎么做”)。 规则是死的,技能是活的——它包含了工作流...
Claude Code通关手册(六):MCP协议完全指南
发表于2026-04-11|软件工具
💡TIP这是Claude Code通关手册的第六篇,上一篇我们为Claude Code配置了专家团队,这一篇我们为他装上外部设备,让他从本地助手转变成互联网平台。 一个很形象的比喻:没有配置MCP的Claude Code就像是一个被关在房间里的天才。 它聪明、高效——能处理你扔给它的所有文件,却够不着外面世界的任何东西。你没法让它“去 GitHub 捞一下那个 Issue 的详情”,没法让它“看一眼最新的 API 文档长什么样”,更别提“进数据库里查一条记录”。它只能靠几个月前训练好的知识来猜,而软件世界每天都在变。 一旦接上 MCP,这道墙就消失了。 它开始具备“触角”——能直接读取 GitHub 上的讨论,能实时翻阅官方文档的最新版本,能连上你的数据库执行查询,甚至能跟你的项目管理工具、监控平台对话。 这不只是加几个功能,而是从离线助手到在线协作平台的本质跃迁。 MCP 是什么?——30 秒用“USB 接口”讲明白MCP 全称 Model Context Protocol(模型上下文协议),是 Anthropic 在 2024 年底推出的开源标准。 这个名字...
Claude Code通关手册(五):组建你的AI专家团队,子代理系统
发表于2026-04-10|软件工具
💡Tip这是Claude Code通关手册的第五篇,这一篇将把“万能助手”变成一支专业队伍,各司其职、并行作战,这才是 Claude Code 的正确打开方式 先来看一个熟悉的场景你面对一个复杂的任务,突然萌生了这样的想法: “要是能有个专门负责探索代码库的助手,再有个专门审查代码的专家,还有个专注写测试的工程师,大家各司其职、同时开工,那该多爽?” ——这不是天方夜谭,这正是 Claude Code 子代理(Subagent)的核心价值。 什么是子代理?简单说,子代理就是给 AI 指定一个专门的角色。不再说“帮我搞定所有事”,而是明确告诉它:“你现在是测试员”、“你负责安全审查”、“你是重构专家”。 在技术层面上,每个子代理都是一个拥有独立上下文窗口的专用 AI 实例。当你在 Claude Code 主对话中下达任务时,Claude 可以判断该任务是否适合委派给某个子代理,由子代理独立完成后将结果摘要返回主对话。 为什么需要子代理?Claude Code功能确认很强大,但是在实际使用的过程中就会发现当我们让Cladue Code执行一些复杂的任务时并没有得到很...
1234…8
gloamfox
君子以顺德,积小以高大。
文章
96
标签
116
分类
7
Follow Me
公告
此博客为记录工作学习总结所用,供网友阅读参考,如有侵权,请通知我,我会核实后进行处理。
最新文章
WSL自定义路径安装Ubuntu2026-09-14
把Git Bash的提示符搬到Linux上,用了就回不去了2026-09-08
Git多账户配置终极指南2026-09-08
把字段从 TIMESTAMP 改成 DATETIME,线上直接炸了!2026-09-02
自建网盘不香吗?Docker 一键部署 Seafile ,告别会员费,你的文件你做主!2026-08-19
分类
  • 前端7
  • 后端25
  • 思维模型3
  • 系统运维28
  • 计算机基础3
  • 软件工具24
  • 软件设计6
标签
JSON Beszel 事件驱动 Redis 激活 笔记管理 LaTeX 计算机结构 终端配置 企业级 Git Linux Hexo 自我提升 CDN Feign 多路复用 文件同步 管理平台 Seafile 网络配置 Windows 缓存 图片优化 决策分析 JUnit Claude Code Spring 服务注册 数据编码 Java Ubuntu VPN 数据库 进制转换 设计模式 技术学习 系统运维 jsDelivr Jenkins
归档
  • 九月 2026 4
  • 八月 2026 10
  • 七月 2026 12
  • 五月 2026 2
  • 四月 2026 15
  • 三月 2026 23
  • 二月 2026 1
  • 一月 2026 1
网站信息
文章数目 :
96
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By gloamfox框架 Hexo 7.3.0|主题 Butterfly 5.5.4
鲁ICP备2026017338号-1
搜索
数据加载中