Java

浏览该分类下的所有文章

一次OOM排查实录

日志在运行时被硬截断,排查后发现是 Linux OOM Killer 将进程强制 kill,根因是 2 GB 服务器同时运行 3 个未限制堆大小的 Spring Boot 项目、MySQL 8.0 和监控组件,JVM 默认占用近 3 GB,MySQL 参数又消耗数百 MB,且没有 Swap 作为缓冲。通过为每个 JVM 设置‑Xms/‑Xmx(如 512 M、256 M),调小 MySQL 的 innodb_buffer_pool、max_connections、关闭 performance_schema 并添加 2 GB swap,内存使用降至安全范围,进程不再被 OOM Killer 杀死。经验教训是:小内存机器必须限制 JVM、精简 MySQL 配置并配置 swap,长期方案是迁移数据库或升级机器。

通意千应 - 你的专属AI助手

通意千应是面向企业和个人的AI对话平台,由召田最帅boy独立研发,采用Spring Boot+Vue 前后端分离架构,集成ChatGPT、DeepSeek、Qwen、Llama、Kimi、Gemma、Nemotron 等多模型,并支持模型切换、流式输出、Markdown渲染、代码高亮、深度思考与网络搜索增强。系统基于Spring Security、JWT、MySQL 与 Redis 实现安全认证、会话管理和缓存,加上Thymeleaf 分享页实现免登录链接分享。平台提供完整的用户、会话、消息管理及统计功能,管理员可通过后台仪表盘进行用户、会话、数据安全等运营管理。整体实现一站式、可扩展且安全的企业级AI助手解决方案。

文章解锁功能安全漏洞修复技术记录

博客文章解锁功能原本依赖本地存储 `blog_global_unlocked`,导致用户可通过浏览器 DevTools 修改键值绕过关注公众号的验证码验证,破坏付费与引流策略。为根除此漏洞,方案将关键验证迁移至服务器端,采用 Spring Boot REST 接口配合 Redis 保存解锁状态和一次性令牌,使用多层客户端标识(Cookie、请求头、IP+User‑Agent 指纹)生成唯一 `clientId`。前端通过 Fetch 与服务器查询解锁状态、获取令牌并在页面加载时决定是否解锁;拦截器统一注入 `clientId` 并写入长期 Cookie。令牌采用 MD5(clientId+timestamp+UUID) 生成,具滑动过期和防篡改校验。整体实现保持用户体验流畅,同时实现服务器可控、不可伪造、可追踪的安全解锁机制。

微信公众号API+Redis实现内容访问控制

实现基于微信公众号验证码的文章解锁功能:未关注用户仅能阅读文章前1/3,底部“查看全文”引导关注;关注后发送关键词“博客”即获6位数字验证码,验证码存入Redis(5 分钟有效、单次使用),前端通过 CSS max‑height 与渐变遮罩实现内容截断。用户验证成功后在浏览器 LocalStorage 标记全局解锁状态,实现全站解锁。后端采用 Spring Boot 提供验证码生成/验证 API 与微信消息处理接口,配合 Redis 保存验证码,整体架构为 浏览器 ↔ Spring Boot ↔ Redis ←→ 微信服务器。实现步骤包括 Redis 配置、验证码服务实现、微信接入及前端交互逻辑。

博客文章“部分展示+验证解锁”实现

本文介绍在博客中实现“部分展示+验证解锁”阅读限制的完整方案。通过自动计算文章高度,仅显示前1/3并加底部虚化遮罩,配合“查看全文”按钮触发验证弹窗。用户扫码关注公众号、发送关键词获取验证码,校验成功后在本地存储全局解锁标识,文章平滑展开并显示成功动画。实现核心包括HTML结构划分、CSS变量控制截断高度与过渡、JS负责高度计算、锁定/解锁逻辑及验证码校验。文中还提供响应式布局、全局解锁持久化及后续优化建议,如后端API动态验证码、微信自动回复、有效期控制、数据统计和A/B测试等。

使用Java写简单的网络DDos攻击(仅用于学习)

本文解析一段使用Java线程池和URLConnection实现的简易“DDoS”示例代码,指出其无限循环创建线程池、线程爆炸、资源泄漏、无超时等设计缺陷,强调运行会耗尽本机及目标服务器资源。文中重点警示未经授权的攻击违背《刑法》《网络安全法》并可能承担刑事责任,倡导在合法授权下进行压力测试。最后提供正确的并发请求写法、超时设置、连接复用及使用专业工具等改进建议,呼吁技术向建设性方向发展。

输入QQ号自动获取昵称

实现了在博客评论和回复框输入QQ号后自动获取昵称、头像并填充的功能。采用 uapis.cn 提供的 QQ 信息接口,使用正则校验和 jQuery AJAX 异步请求,失焦时触发。经过多接口对比后选定该稳定接口,并在友情链接/留言板和文章详情页完成集成。实现了前端格式验证、错误日志、跨域支持,并提出缓存、加载提示、备用接口及后端代理等优化建议。该功能简化了评论流程,显著提升用户体验。

SpringBoot实现AI智能评论审核与自动回复

本文介绍基于 Spring Boot 的 AI 智能评论审核与自动回复系统实现方案。系统采用前端展示、Controller、Service、AI 服务四层结构,核心包括本地敏感词预筛选+多模态 AI 深度审核的双层机制、基于状态机的评论流转、支持表情图片的多模态审核以及结合文章上下文的风格化自动回复。通过 Spring @Async 与自定义线程池实现异步处理,提升并发性能并降低用户等待时长,实现评论的快速安全审查和即时智能互动。

AI对话机器人技术实现文档

实现基于 Web 的 AI 对话机器人,嵌入博客文章页面,提供文章上下文的智能问答。核心功能包括打字机逐字显示、生成过程暂停/继续、对话历史本地持久化、快捷预设问题及响应式布局。前端采用原生 HTML5、CSS3、JavaScript,配合 Marked.js 解析 Markdown、Highlight.js 代码高亮、Font Awesome 图标;后端通过 RESTful API 调用 AI 服务,数据存储使用 LocalStorage。系统划分为界面层、交互层、数据层和服务层,采用状态机管理 idle、thinking、generating、paused 等状态。针对打字机与 Markdown 同步、暂停状态持久化、多状态切换不一致等难点,分别实现增量渲染、保存暂停标记和统一状态变量等解决方案。

为博客每日一句添加音频播放功能

为博客底部的“每日一句”添加英文音频播放功能。通过有道词典每日一句API获取 voice URL,后端实现 `/api/daily-quote/voice` 代理接口解决 CORS,前端加入圆形播放按钮、CSS 动画和播放状态反馈,使用 HTML5 Audio 管理播放、暂停及结束事件,并处理 DOM 加载时机和移动端样式适配。实现后,点击按钮即可播放或暂停音频,播放中按钮呈粉色脉冲动画,兼容 PC 与移动端,提升访客的英语学习体验。

使用自定义图片作为Emoji表情的技术实现

本文介绍在 Web 项目中实现自定义图片 Emoji 的完整方案。首先约定表情图片统一存放于 `/static/img/emoji/`,使用有意义的英文或拼音命名。核心 JavaScript 包括:定义路径和名称列表、利用正则 `\[:([a-zA-Z0-9_\-@]+):\]` 将 `[:表情名:]` 替换为 `<img>` 标签、动态生成表情面板并在编辑器中插入图片、提交前再将 `<img>` 转回文本代码。配套的 CSS 负责内联表情、面板布局及悬停效果,HTML 结构由按钮、面板和容器组成,并通过点击、冒泡控制面板显示。进阶可加入 IntersectionObserver 懒加载、localStorage 记录最近使用、分类展示等功能。整体思路是“纯文本存储‑图片展示‑编辑插入‑代码回写”,实现了可扩展、跨平台、风格统一的 Emoji 系统。

博客侧边栏热门文章与最新文章功能实现详解

本文介绍在 Spring Boot + Thymeleaf 项目中为博客文章详情页实现侧边栏的热门文章(浏览量前5)和最新文章(发布时间前3)功能。通过只查询必要字段的 SQL、@Cacheable 缓存,实现一次查询复用;在控制器使用 Java 8 Stream 按浏览量降序排序并截取前5篇,直接取前3篇作为最新文章。前端采用 Thymeleaf 循环渲染,CSS 使用 sticky 定位保持左侧固定,媒体查询实现 PC 端显示、移动端隐藏,并通过颜色、圆点、文字截断等样式提升可读性。整体方案兼顾性能、响应式布局和用户体验。