基于Java的汉字学习辅助系统毕业设计:从需求到部署全流程解析
每年三四月一到后台咨询毕业设计的消息就会多起来问得最多的就是有没有一个题目既不太难又能把前后端、数据库、部署全流程都练到我一般会回答去做一个学习类小程序最好选“汉字学习”这个方向。这次要拆解的就是一个非常典型的“基于Java的汉字学习辅助系统”毕业设计后端用 Java 技术栈前端是小程序端核心要解决的需求非常明确——查字、学字、练字、测字一条完整的学习闭环。下面我就把这套系统的需求分析、技术选型、数据库设计、后端接口、前端实现、核心算法以及部署测试整个链路掰开讲准备做类似题目的同学可以直接把它当实操地图来用。1. 项目定位与需求拆解1.1 这到底是一个什么系统先说清楚它不是什么。汉字学习辅助系统不是传统意义上那种只有查询框的“电子字典”也不是一个纯展示型的静态内容网站。它是一个有用户体系、有学习行为记录、有复习调度、有测验判分闭环的完整应用。我在帮同学评估这类题目的时候最怕看到的就是把“汉字学习系统”做成四个模块的 CRUD 大杂烩汉字管理、用户管理、公告管理、系统管理。这种项目做完页面确实能跑但答辩老师问一句“你的系统到底解决了学习者的什么问题”当场就卡壳了。真正的汉字学习系统核心应该是“学习链路”用户进来后能学到东西系统能感知学习进度并能根据遗忘规律安排复习。所以一开始就要把定位想清楚。目标用户可以是低年级学生、留学生也可以是有识字需求的成年人。这三类人有一个共同点需要反复与汉字产生交互才能记住。系统要做的事情就是替他们记住“学过什么、学得怎么样、什么时候该复习”。1.2 核心用户场景把用户场景一条条列出来功能边界自然就清晰了今日学习场景用户打开首页系统根据历史学习进度推荐“今天该学哪些新字、哪些旧字该复习”点进学习卡片完成学习后自动记录进度。查字场景遇到陌生汉字通过拼音、部首或关键词搜索快速获取拼音、笔画数、部首、释义、组词和例句。测验场景学完一批字后进入测验系统出题用户作答自动判分并记录正确率。错题与复习场景答错的字进入错题本系统根据错题次数和复习算法安排后续再现。打卡与统计场景用户坚持学习获得连续打卡天数在个人中心看到累计学习量和掌握量。这些场景看起来简单但每一个都会直接决定后面数据表的字段和接口的粒度。比如“今日学习场景”需要一张按天生成的学习计划接口“错题与复习场景”需要一张带错误次数统计的错题表“打卡场景”需要一张按用户和日期做唯一约束的记录表。1.3 功能范围怎么收敛毕设最忌讳的就是贪大。我当时给自己定了一个 MVP 功能清单只做核心链路功能模块优先级说 明用户登录P0小程序授权登录换取用户唯一标识汉字库查询P0拼音、部首、关键词搜索汉字学习详情P0拼音、笔画画笔顺、部首、释义、组词、例句每日学习计划P0新字推荐 到期复习字推荐简易测验P0三种基础题型自动判分错题本P1错题记录与再次复习连续打卡P1学习激励与统计展示笔画动画P1使用 Canvas 展示笔顺写字比对P2简化为笔顺选择加描红覆盖判定语音朗读P2通过预置音频或在线合成实现至于实时语音评测、AI 图像识别判字、社区分享这类功能全部划到“二期”。这样做的核心好处是核心链路非常完整代码量可控答辩时有得讲。而且只要核心链路通了后面想加亮点功能就是在稳定的地基上加盖而不是推倒重来。2. 技术选型与架构设计2.1 后端为什么选 Java这个话题我每次都要重点讲。毕设不要求做成工业级系统但它需要体现工程化思维。Java 生态在这条赛道上几乎是“标准答案”Spring Boot 脚手架成熟MyBatis-Plus 把单表 CRUD 的业务代码压缩到很短再加上 Java 是很多学校教学的主力语言答辩时老师追问底层机制你心里不会发虚。还有一点很现实Java 相关的学习资料和排错资料全网最多。出个 bug 一搜就是一片解决方案这对毕设时间紧张的同学来说价值比框架本身还大。小程序端的技术栈选择也很关键但如果你的前提是“后端必须用 Java”那架构就会自然收敛成Java 后端提供接口小程序端消费接口前后端分离。2.2 技术栈明细层级选型用途后端框架Spring Boot 2.7.x快速搭建接口服务ORMMyBatis-Plus 3.5.x单表 CRUD、分页、条件构造数据库MySQL 8.0业务数据存储缓存Redis登录 token 与热点数据缓存工具库Hutool、Lombok简化编码前端小程序原生框架页面与交互调试Postman / ApiPost接口自测部署云服务器 Nginx打包发布关于小程序用原生框架还是 uni-app我说一下实际结论如果只做一个端用原生就好。原生框架的语法在官方文档里有完整参照调试工具对真实机型的模拟最准。uni-app 适合你后续想同时出 App 或 H5 的场景但代价是多一层编译链路、踩坑面更大毕设周期里不划算。2.3 后端分层架构Controller → Service → Mapper 三层是标准写法关键是统一规范。我建议额外补两层约束第一统一返回结构。所有接口都返回同一个 Result 对象前端不管调什么接口解析逻辑都写一份就够了public class ResultT { private Integer code; private String msg; private T data; // 构造方法、getter/setter 省略 }第二统一异常处理。用 RestControllerAdvice 捕获业务异常和系统异常出错了也返回同一个结构不让堆栈直接暴露给前端。再配一个登录拦截器统一做 token 校验。这套组合下来接口层会非常干净所有鉴权逻辑都收敛在一个位置而不是每个 Controller 里写一遍“取 token、查用户”。评审老师翻代码的时候看到这种规范度印象分会好很多。2.4 数据库设计要点核心表我控制在六张用户表、汉字表、学习记录表、复习记录表、错题表、打卡表。这里直接给建表语句重点看注释和索引设计CREATE TABLE user_info ( id bigint NOT NULL AUTO_INCREMENT, open_id varchar(64) NOT NULL COMMENT 小程序用户唯一标识, nickname varchar(64) DEFAULT NULL, avatar_url varchar(512) DEFAULT NULL, created_at datetime DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY uk_open_id (open_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; CREATE TABLE character_info ( id bigint NOT NULL AUTO_INCREMENT, character varchar(8) NOT NULL COMMENT 汉字本体, pinyin varchar(16) DEFAULT NULL COMMENT 拼音无音调, pinyin_tone varchar(16) DEFAULT NULL COMMENT 带音调拼音, radical varchar(8) DEFAULT NULL COMMENT 部首, total_strokes int DEFAULT NULL COMMENT 笔画数, stroke_order json DEFAULT NULL COMMENT 笔顺编码数组, meaning varchar(255) DEFAULT NULL COMMENT 释义, example_words json DEFAULT NULL COMMENT 组词数组, example_sentence varchar(255) DEFAULT NULL COMMENT 例句, level int DEFAULT NULL COMMENT 难度等级, created_at datetime DEFAULT NULL, PRIMARY KEY (id), KEY idx_character (character), KEY idx_pinyin (pinyin) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT汉字表; CREATE TABLE study_record ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL, character_id bigint NOT NULL, status tinyint DEFAULT 0 COMMENT 0-学习中 1-已掌握, mastery tinyint DEFAULT 0 COMMENT 掌握度 0-100, study_count int DEFAULT 0 COMMENT 学习次数, review_count int DEFAULT 0 COMMENT 复习次数, review_date date DEFAULT NULL COMMENT 下次复习日期, last_study_time datetime DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY uk_user_char (user_id, character_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT学习记录表;有几个细节特别重要。第一所有表都必须是 utf8mb4 编码否则中文乱码会在导入这一步先给了你一个下马威。第二stroke_order 字段存的是笔顺编码数组不是渲染数据。前端拿到编码之后映射成画法即可后端不承担笔画动画细节。第三study_record 上的uk_user_char唯一索引非常关键这保证了同一个用户同一个字只有一条学习记录后续所有进度更新都是“存在就更新、不存在就插入”的 upsert 模式。很多新手在这里踩坑——不建唯一索引学一次插一条最后统计“掌握量”时全是重复数据只能写一堆奇怪的 SQL 去清洗。3. 后端核心模块实现3.1 汉字库数据怎么来、怎么导汉字库是整个系统的地基。我的建议是使用公开整理的汉字数据源比如常见字表的 CSV 或 JSON不要自己手工录入。拿到数据后先做清洗字段对齐、去重、校正多音字尤其是 meaning 和 example_words 这两个字段最容易出现空值或格式不统一。导入策略分两步先在本地建一张临时导入表把原始数据原样倒进去再写一次性“清洗 转换”脚本把处理好的数据批量插入正式表数组字段用 MySQL 的 JSON 函数处理。这时候要记得如果直接用 SQL 文件导入文件本身必须是 UTF-8 编码连接参数里要带characterEncodingutf8。我印象最深的一个坑是在一台默认编码不是 UTF-8 的环境上导入数据中文全部变成问号最后查出来是连接串少了一个useUnicodetrue。这种问题不致命但特别浪费晚上时间。3.2 登录接口与鉴权小程序登录的标准流程前端调用登录 API 拿到临时 code传给后端后端拿 code 换取用户唯一标识 openId拿到 openId 后先查用户表不存在就创建用户然后签发一个自定义 token 返回前端。毕设阶段不用引入重型鉴权框架自己写一个拦截器就够这样反而能让老师看到你理解鉴权流程本身。核心代码如下Component public class LoginInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token request.getHeader(Authorization); if (token null || token.isEmpty()) { throw new BusinessException(未登录); } Long userId (Long) redisTemplate.opsForValue().get(TOKEN_ token); if (userId null) { throw new BusinessException(登录已过期); } UserContext.set(userId); return true; } }Token 过期时间我设置为 7 天存在 Redis 里value 是 userId。这样做的好处是后端服务无状态应用重启不丢登录态。每次请求带着 token前端在拦截器中统一校验遇到 401 就跳回登录页。这一套虽然简单但是“无状态鉴权”这个概念在答辩时是很好的加分点。3.3 每日学习计划生成这是后端最核心的业务逻辑也是整个系统最有“学习系统灵魂”的地方。思路是每天为用户生成一张学习清单由两部分组成一部分是新字一部分是到期复习字。新字推荐的简单做法从用户没学过、且 level 与当前进度匹配的汉字中按 id 排序取固定数量。比如一次 5 个新字。复习字推荐的简单做法从 study_record 中找出review_date 当前日期且status ! 已掌握的字按 review_date 升序排取 10 个。public LearnPlanDTO buildDailyPlan(Long userId) { Integer currentLevel getUserLevel(userId); ListCharacterInfo newChars characterMapper.selectNewChars(userId, currentLevel, NEW_WORD_COUNT); ListStudyRecord reviewList studyRecordMapper.selectDueReview(userId, LocalDate.now(), REVIEW_WORD_COUNT); return LearnPlanDTO.builder() .newChars(newChars) .reviewChars(reviewList) .build(); }这里有个细节计划接口返回的不能只是一个汉字列表而应该带“推荐理由”比如这个字是“新学”、那个字是“第 3 次复习”。前端在首页就能把新学和复习渲染成不同样式用户一眼看懂今天该做什么。这个交互设计成本极低但对“学习系统”的感知提升非常大。3.4 测验与错题闭环测验模块最简单可靠的题型就是四选一看汉字选拼音、看拼音选汉字、看汉字选释义。出题时从近期学习记录里抽字干扰项从同级别的其他汉字中随机生成。提交设计成一次性提交整组答案后端统一判分逐题记录对错答错的字写入错题表。public SubmitResultVO submitExam(ExamSubmitDTO dto) { ListAnswerItem items dto.getAnswers(); int correctCount 0; for (AnswerItem item : items) { boolean correct validateAnswer(item); if (correct) { correctCount; } else { wrongBookService.record(item.getCharacterId(), item.getQuestionType()); } } return SubmitResultVO.of(correctCount, items.size()); }错题表每次新增时更新错误次数和最近错误时间查询时按错误次数倒序。下一步错题会自动进入复习清单——只要在生成学习计划的时候把错题本里的字也纳入“到期复习字”的候选中。这个设计把测验、错题、复习串成一个闭环而不是三个孤立模块。答辩时讲这个闭环比讲十个页面都有说服力。3.5 打卡与统计打卡表的设计核心是“一天最多一条记录”用(user_id, check_date)建唯一索引。连续天数的计算不建议用定时任务去补而是查询时从今天往前逐日判断最多查 30 条记录成本可以忽略。统计接口返回累计学习字数、已掌握字数、今日学习时长、连续打卡天数。个人中心把这些数字展示出来学习激励就有了抓手。需要特别注意跨天边界用户晚上 11 点打卡和凌晨 0 点打卡不能简单用系统当前时间判断要统一以后端服务器时间为准避免用户手机时间不准导致的打卡异常。4. 小程序前端实现4.1 页面与导航结构tabBar 我设置四个主页面首页学习计划、学习汉字详情、测验、我的。另外再加两个二级页面查字搜索页和错题本页一共六个页面。pages/index/index今日计划卡片、打卡入口pages/learn/learn汉字详情页携带 characterId 参数进入pages/exam/exam四选一测验页pages/mine/mine统计信息、错题本入口pages/search/search拼音/部首/关键词查字pages/wrong/wrong错题列表与重练页面跳转关系是首页的学习卡片可以跳学习详情页错题本和搜索结果也可以跳学习详情页。所以 learning 页是整个前端核心它只依赖一个 characterId 参数其他页面全部复用。4.2 学习详情页的核心交互学习详情页自上而下布局大字号的汉字展示、带音调拼音与读音按钮、部首与笔画数信息、笔顺动画区、释义与例句、组词卡片、学习完成按钮。笔顺动画我采用的方案是 Canvas 逐笔绘制不搞复杂的 SVG 字形 path。具体做法是把田字格抽象成 20x20 的网格每个汉字预先在数据里记录每一笔的序号、起始坐标、走向类型横、竖、撇、捺、折。前端拿到 stroke_order 的编码后按编码逐笔在 Canvas 上连线绘制再配一个动画时间轴控制每笔的出现时间。这个方案的优点是数据量非常小、绘制逻辑简单缺点是字形不可能像打印体那么精美。但作为毕设完全够用而且答辩时你还能讲清楚“我是如何用结构化数据描述笔顺的”这比直接甩一个动画文件有技术含量得多。4.3 写字练习先想清楚边界很多同学一上来就想要“手写识别”这个方向我劝你慎重。汉字 OCR 识别在毕设周期里做起来非常吃时间而且很容易做成一个调第三方接口的壳子核心逻辑一点没学到。我当时的简化方案是“笔顺选择 描红覆盖判定”双层结合。系统给出一个字用户先按正确顺序依次点选笔顺选项选项里混入干扰项全部点对才算过关同时用户可以在 Canvas 上用手指描红描红轨迹与预置骨架做覆盖度比对达到 80% 就算通过。覆盖度比对不需要机器学习骨架有 N 个关键坐标点判断用户轨迹经过了多少个点的附近区域做一个比例计算即可。这个设计既保留了“写”的交互感又不会让项目失控。千万别在毕设里给自己挖“训练手写识别模型”的大坑。4.4 网络层与请求封装前端请求封装是很多新手容易写乱的地方。我的建议是封装一个统一的 request 方法所有接口都走它const request (url, method, data) { return new Promise((resolve, reject) { wx.request({ url: BASE_URL url, method: method, data: data, header: { Authorization: wx.getStorageSync(token) || }, success: (res) { if (res.data.code 0) { resolve(res.data.data); } else { if (res.data.code 401) { // 登录过期跳转登录页 wx.navigateTo({ url: /pages/login/login }); } reject(res.data); } }, fail: reject }); }); };然后把所有接口按模块封装成 api 对象页面里只需要import { charApi, studyApi } from ../../api就能调用。这个习惯看起来不起眼但代码整洁度会提升一大截。我见过的很多毕设代码页面里堆满了 wx.request 原生命令维护起来全是重复代码任何一个接口出问题都要全局搜索。5. 核心算法与学习机制5.1 记忆曲线复习落到数据上的简化版如果说这个系统一定要有一个“技术亮点”我首推这里的复习调度设计。教科书级的做法是实时计算遗忘曲线但对一个小程序来说太重了。我的方案是固定间隔复习学完一个字的第 1 天、第 3 天、第 7 天、第 15 天、第 30 天各安排一次复习。实现上不需要真正去算曲线只需要在学习记录表里维护一个 review_date 和 review_countpublic LocalDate getNextReviewDate(int reviewCount) { int[] intervals {1, 3, 7, 15, 30}; if (reviewCount intervals.length) { return LocalDate.now().plusDays(90); } return LocalDate.now().plusDays(intervals[reviewCount]); }每次复习完成review_count 加一review_date 更新为下一次复习日期。查询“今日复习字”就是一条简单 SQLWHERE review_date CURDATE()。注意复习间隔不是从“学习那天”开始算而是从“上一次复习日期”开始算。这才叫间隔复习。很多实现把这两个概念搞混结果新字和复习字全挤在第一天第二天就无字可学整个复习节奏完全失效。5.2 形近字与易错字推荐形近字是汉字学习的高频难点比如“人”和“入”、“日”和“目”。我为此建了一张易混字对表存两个汉字和相似原因。查询时做两件事用户学习某个字时把它的易混字一并返回提醒对比用户测错某个字时把它的易混字也加入待复习队列。这种“关联学习”的数据量不大但带来的学习路径优化非常明显比纯随机推荐有说服力得多。答辩时讲这个交互逻辑老师会认为你不仅实现了功能还考虑了“学习效率”这是一个很关键的加分视角。5.3 难度分级与自适应我在汉字表里加了 level 字段按常见识字表分成 1-6 级。用户注册后默认从 1 级开始每日计划的新字按当前级别取。我还做了一个最简单的自适应策略当用户在当前级别已掌握的字数超过该级别字数的 80%自动解锁下一级。这个“自适应”听起来高级实际就是一次分组统计加一个阈值判断代码量很小。但它在产品层面上让用户感受到学习路径是“有版本推进”的。更稳妥的做法是把这个阈值做成配置常量答辩时明确说“未来这里可以替换成更科学的推荐策略”体现扩展思考。6. 测试、部署与上线避坑6.1 后端接口自测清单我给自己列过一份接口自测清单照着跑一遍基本能覆盖主要风险点登录接口同一个临时 code 重复使用是否会出错token 过期后访问业务接口是否被正确拦截计划生成新用户第一次生成计划时学习表里没有任何记录SQL 是否仍然正常执行测验提交提交空答案、重复提交同一份答卷是否会重复加分或重复记错题错题本同一个汉字多次答错错误次数是否正确累加而不是插入多行打卡当天重复打卡、跨天打卡的处理是否符合预期这些用例不需要写自动化测试用 Postman 手动跑一遍配合边界值输入基本就够。但有一点要注意把请求记录和重点用例保存下来。答辩演示时直接打开 Postman 现场调接口比截屏讲 PPT 的现场感强太多了。6.2 小程序端的典型问题小程序开发和网页开发的坑不在同一条路上。最常见的三个坑第一是域名校验。开发阶段可以勾选不校验合法域名但上线前必须把后端接口换成 HTTPS并把域名加入小程序后台的合法域名列表否则真机预览时所有请求都会失败。这个问题我见过太多人忽略一直等到要提审才慌张。第二是 Canvas API 的版本差异。老语法和新版 Canvas 2D 接口不兼容如果代码里用了旧写法一部分用户手机上会直接白屏。解决办法是锁一个最低基础库版本并在 app.json 里声明所需的基础库版本。第三是隐私协议。现在的审核对隐私非常敏感如果小程序要使用用户头像昵称必须在首次启动时弹出隐私提示并在后台配置隐私保护指引。否则提交审核会直接被打回。我的做法是首页首次加载时弹一个简单的说明弹窗用户同意后再走登录流程。6.3 部署上线流程部署链路不复杂但每一步都有讲究。本地用 Maven 把 Spring Boot 项目打成 jar传到云服务器服务器装好 JDK 和 MySQL先导入表结构再导入汉字数据然后用 Nginx 监听 443 端口把请求反向代理到 Spring Boot 的 8080 端口并配置 HTTPS 证书。后端配置有三件事要特别注意数据库密码绝不能写在代码里要使用系统环境变量注入跨域配置只对必要来源开放别图省事写 allowAllOrigins如果服务器内存只有 2GMySQL 的 buffer pool 要调小否则 Spring Boot 和 MySQL 同时跑很容易内存溢出。6.4 上线后的几个注意点第一日志。上线后必须保留日志文件用 logback 按天滚动。用户反馈某个字打不开时日志里一眼就能看出是数据问题还是接口问题不用反复让用户截图。第二慢查询。汉字搜索如果直接写LIKE %偏旁%数据量上来后会非常慢。我给搜索接口做了分级策略优先精确匹配再按拼音前缀搜索最后才做模糊匹配并且分页限制在 20 条以内。这个策略在数据量一万量级下完全够用。第三静态资源。笔顺编码和音频文件如果每次都由后端接口现场计算压力不小。音频我放到对象存储笔顺数据在前端字典里预置为静态 JSON后端接口只返回标识数据。这样一来即使接口被高频调用后端压力也很小。7. 做完这个项目后我最想强调的几件事7.1 答辩前把技术亮点整理成三句话做这类毕设技术难度本身不是最大的门槛最大的门槛是“自己骗自己”——页面做出来了、接口能跑了就以为做完了。实际上答辩能不能拿高分关键看你能不能把学习闭环讲清楚。我建议把技术亮点压缩成三句话一是基于间隔重复的复习调度设计二是通过唯一索引加 upsert 保证学习数据一致性三是前后端通过统一返回结构与 token 鉴权完成无状态通信。这三句话比背十页 PPT 都有用而且每一句背后都有对应的代码支持。7.2 给后来人的时间规划建议如果你拿到这个题目别慌。先花一周把需求清单和表结构定死再花两周把后端接口全部调通接着花两周把小程序页面接上最后留一周做测试和部署。一个月的节奏非常从容。我个人真实的体会是做一个能真正让使用者产生学习动力的汉字学习小程序这种成就感比答辩的分数更值得。那些在测试阶段反复调整复习间隔参数的夜晚才是这个项目最值钱的收获。

相关新闻

接雨水四种解法精讲:动态规划、双指针与单调栈全覆盖

接雨水四种解法精讲:动态规划、双指针与单调栈全覆盖

力扣hot100刷到第99题“接雨水”,这题我前后在面试里见过多次,自己也踩过不少坑。它表面是一道数组题,实际上把动态规划、双指针、单调栈三个高频考点全串起来了。适合正在刷hot100的算法学习者,也适合面试前一晚想快速过一遍经典…

2026/10/12 8:28:57 阅读更多 →
三星云照片检索全指南:手机端与网页端高效查找与异常排查

三星云照片检索全指南:手机端与网页端高效查找与异常排查

手机里的照片越积越多,想在三星云里翻出半年前那张关键的截图,却在相册里划了半天也找不到——这种场景我遇到过太多次了。不是照片丢了,而是大多数人根本不知道三星云里的照片该怎么“检索”。三星云检索照片这件事,看起来就是在…

2026/10/12 8:29:03 阅读更多 →
英伟达入职不到2年直升VP?35岁前滑雪运动员牵头23亿GPU抵押贷款成接班人

英伟达入职不到2年直升VP?35岁前滑雪运动员牵头23亿GPU抵押贷款成接班人

英伟达入职不到2年直升VP?35岁前滑雪运动员牵头23亿GPU抵押贷款成接班人 近期脉脉上一则用户讨论引发关注:原帖用户讨论称,一位35岁前跨界滑雪运动员入职不到2年越级直升VP,转折点在于牵头23亿美金GPU抵押贷款。该个人样本展示了以…

2026/10/12 8:29:10 阅读更多 →

最新新闻

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:44:39 阅读更多 →
GoWind Admin:内置微服务接口聚合的企业级全栈中后台框架

GoWind Admin:内置微服务接口聚合的企业级全栈中后台框架

1. 项目概述:这套全栈中后台框架到底解决什么问题做中后台开发这么多年,我最大的感受是:大部分企业项目真正花时间的不是业务逻辑本身,而是那些“看起来很简单、做起来全是坑”的基础设施——登录鉴权、权限路由、菜单管理、用户角…

2026/10/12 10:44:39 阅读更多 →
不加班也能持续成长:AI工程师的高效学习与时间管理实战指南

不加班也能持续成长:AI工程师的高效学习与时间管理实战指南

先给自己泼一盆冷水:作为一名在职AI工程师,你大概率已经发现一个扎心的事实——技术栈更新快到你还没把上一套框架吃透,新一代大模型又已经刷屏了。GitHub上每天上百个新仓库冒出来,ArXiv上论文刷得比朋友圈还勤快。如果不持续学习…

2026/10/12 10:44:39 阅读更多 →
cProfile报错ProfilerNotRunningError:原因、排查与正确用法

cProfile报错ProfilerNotRunningError:原因、排查与正确用法

1. 报错现场:一个看似“莫名其妙”的性能分析异常先看一段触发了这个报错的代码:import cProfileprof cProfile.Profile() # 注意:这里没有调用 prof.enable() 或 prof.enable() 在别处被调用了但没有生效 # ... 执行需要分析的代码 ... pro…

2026/10/12 10:44:39 阅读更多 →
基于SSM与MySQL的网上选课系统设计与实现

基于SSM与MySQL的网上选课系统设计与实现

1. 网上选课系统的核心需求与设计思路先说结论:网上选课系统的本质,就是把传统教务场景里的人工选课流程搬到线上,让"课程资源分配"这件事变得更透明、更高效。听起来简单,但真正动手写代码之前,如果不对需求…

2026/10/12 10:44:39 阅读更多 →
Spring @Required 注解废弃解析:依赖注入校验演进与构造器注入迁移

Spring @Required 注解废弃解析:依赖注入校验演进与构造器注入迁移

1. 一个被遗忘的注解,为什么还值得聊Required这个注解,如果你是从 Spring Boot 时代入行的,大概率没见过它,甚至在 IDE 里敲出来会发现它上面压着一道醒目的删除线。它属于那种"存在于文档里、消失在代码里"的元老级 AP…

2026/10/12 10:43:37 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →