同学录系统JavaWeb项目实战:从环境搭建到功能扩展的完整指南
简介这份同学录系统Java Web期末项目源码包面向高校计算机相关专业学生与Java Web初学者用于课程设计参考、期末项目实战及技术栈综合练习。资源包含完整源代码与数据库SQL文件覆盖Servlet、JSP、HTML/CSS/JavaScript、jQuery、Bootstrap及MySQL等前后端技术并涉及MVC架构、Session管理与权限控制等课程设计核心知识点。压缩包共48个文件以java与class文件为主体辅以jsp页面、sql建表脚本、css样式、js脚本及properties、xml等配置文件整体约1021KB结构清晰便于按模块查阅。目前已有4371人学习下载适合需要完整项目案例、数据库初始化脚本与排错思路的学习者参考可帮助理解Java Web项目从数据库设计到前后端协同的完整开发流程提升实际项目开发能力。1. 同学录系统 JavaWeb 期末项目一份能跑通的课程设计参考每年到了期末周总有一批人在群里问「同学录系统 JavaWeb 项目有没有现成的」。这个压缩包就是干这个的——一套完整的同学录管理系统前端页面加后端逻辑全在里面Servlet、JSP、JDBC 这套经典组合数据库用 MySQL。它不是那种只放几张截图糊弄人的半成品而是能直接导入 IDE、配好数据库就能跑起来的完整工程。适合谁正在做 JavaWeb 课程设计、需要一份结构清晰可参考的代码底稿、或者想拿一个真实项目练手 Servlet 请求流转的人。如果你还在纠结用不用 Spring Boot 交作业这份传统技术栈的项目反而更贴合大多数高校课程设计的评分点——老师要看的是你对请求响应链路的理解不是框架的自动配置。2. 拆开压缩包先看什么目录结构与技术栈判定拿到一个 JavaWeb 项目压缩包别急着往 IDE 里拖。先解压用文件管理器把目录树扫一遍五分钟就能判断这项目值不值得花时间。很多同学就是跳过这一步结果导入后一堆红叉再回头找问题反而更费时间。2.1 从目录结构反推技术选型解压后你会看到典型的 Eclipse 动态 Web 项目结构或者带pom.xml的 Maven 结构。两种都常见处理方式不同。先确认根目录下有没有pom.xml有就是 Maven 项目依赖走坐标没有就是传统 Web 项目WEB-INF/lib下应该躺着一排 jar 包。关键目录就这几个src/或src/main/java/Java 源码按包名分层通常能看到dao、service、servlet、entity这几层WebContent/或src/main/webapp/JSP 页面、CSS、JS、图片资源WEB-INF/web.xmlServlet 映射配置这是判断项目新旧程度的重要线索WEB-INF/lib/第三方 jar 包重点看有没有mysql-connector-java和jstl我一般会先打开web.xml扫一眼。如果里面密密麻麻全是servlet和servlet-mapping说明用的是传统配置方式如果几乎空的那八成用了WebServlet注解。两种方式对这个项目的运行没影响但改代码时你得知道去哪找映射关系。2.2 数据库脚本和配置文件定位同学录系统的核心数据无非是用户、班级、留言、相册这几张表。在项目里找.sql文件通常在根目录或者doc/、db/这类文件夹下。找到后先别执行用文本编辑器打开看看建表语句重点关注字段类型和字符集。-- 典型同学录系统的建表语句片段 CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL COMMENT 登录名, password varchar(100) NOT NULL COMMENT 密码, real_name varchar(50) DEFAULT NULL COMMENT 真实姓名, class_id int(11) DEFAULT NULL COMMENT 所属班级, role tinyint(1) DEFAULT 0 COMMENT 0普通用户 1管理员, PRIMARY KEY (id), UNIQUE KEY username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这段建表语句透露了几个信息密码字段长度 100说明可能存的是 MD5 或 SHA 哈希而不是明文role字段区分了普通用户和管理员意味着系统有权限控制逻辑字符集是utf8mb4能存 emoji比老项目的utf8规范。执行脚本前先确认你的 MySQL 版本5.7 和 8.0 在驱动类和连接串上有差异这个后面会细说。配置文件一般在src/根目录下名字可能是db.properties、jdbc.properties或c3p0-config.xml。打开它你会看到数据库连接四要素驱动类、URL、用户名、密码。这四个值就是你要改的地方改成自己本机的配置。提示如果项目里没有独立的配置文件数据库连接信息可能硬编码在某个DBUtil.java或BaseDao.java里用全局搜索找jdbc:mysql就能定位。3. 环境搭建与数据库初始化从零到能登录环境这一步是翻车重灾区。我见过太多人卡在「驱动版本不对」或者「时区报错」上折腾一下午连登录页都进不去。下面按顺序走每一步都有明确的验证点。3.1 JDK、Tomcat、MySQL 版本对齐先确认三件套版本。这个项目是传统 JavaWeb 技术栈JDK 8 是最稳的选择JDK 11 以上可能会遇到javax.servlet包名迁移的问题Jakarta EE 9 之后javax变成了jakarta。Tomcat 用 8.5 或 9.0 都行别用 Tomcat 10原因同上。MySQL 建议 5.7 或 8.0。如果你本机已经装了 8.0不用降级但要换驱动包。判断方法很简单看WEB-INF/lib下的mysql-connector-java版本号。5.1.x 的驱动类名是com.mysql.jdbc.Driver8.0.x 的是com.mysql.cj.jdbc.Driver。连接串也不一样# MySQL 5.7 连接串 jdbc:mysql://localhost:3306/tongxuelu?useUnicodetruecharacterEncodingutf8 # MySQL 8.0 连接串多了时区和 SSL 参数 jdbc:mysql://localhost:3306/tongxuelu?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalseserverTimezone这个参数是 8.0 驱动必须的不写就报The server time zone value ... is unrecognized。useSSLfalse是关掉 SSL 警告本地开发用不上加密连接。这两个参数是血泪经验记不住就存到备忘录里。3.2 导入 SQL 脚本并验证数据打开命令行或者 Navicat 这类工具先建库再导表CREATE DATABASE tongxuelu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE tongxuelu; SOURCE /path/to/your/project.sql;SOURCE命令后面的路径换成你实际存放 SQL 文件的位置。执行完用SHOW TABLES;确认表都建好了再SELECT * FROM user LIMIT 5;看看有没有初始账号。很多同学录项目会预置一个管理员账号用户名密码通常是admin/123456或者admin/admin在 SQL 文件的 INSERT 语句里能找到。如果导入时报Unknown character set: utf8mb4说明你的 MySQL 版本太老5.5 以下把建表语句里的utf8mb4全部替换成utf8再执行。反过来如果导入后中文显示成问号检查连接串里的characterEncoding参数和数据库的字符集是否一致。3.3 在 IDE 中配置项目并启动以 Eclipse 为例IDEA 操作类似菜单路径不同File→Import→Existing Projects into Workspace选中解压后的项目根目录。导入后如果项目图标上有红叉看Problems视图的报错信息。最常见的红叉原因是 jar 包路径没对上。传统 Web 项目在 Eclipse 里需要手动配置 Build Path右键项目 →Build Path→Configure Build Path→Libraries→Add JARs把WEB-INF/lib下的所有 jar 加进去。Maven 项目就简单了右键 →Maven→Update Project自动拉依赖。接下来配置 Tomcat 服务器。在Servers视图新建一个 Tomcat 实例把项目添加进去。启动前最后检查一遍db.properties里的连接信息确认数据库名、用户名、密码都对。启动服务器浏览器访问http://localhost:8080/项目名/能看到登录页就成功了一半。注意如果访问 404先检查项目的 Context Root 是什么。Eclipse 默认用项目名作为路径IDEA 可能在Application context里设了别的值。在 Tomcat 的server.xml或者 IDE 的部署配置里能找到。4. 核心功能模块拆解登录、留言与权限控制项目跑起来只是第一步真正要理解的是代码怎么组织的。同学录系统的功能不复杂但麻雀虽小五脏俱全Servlet 的请求转发、JSP 的数据渲染、Session 的状态管理、过滤器的权限拦截这些课程设计要考的点它都有。4.1 登录流程与 Session 管理登录是最基础的链路也是理解整个请求流转的入口。从前端表单提交开始到后端验证再到 Session 写入和页面跳转每一步都有讲究。// LoginServlet.java 核心逻辑 WebServlet(/login) public class LoginServlet extends HttpServlet { private UserDao userDao new UserDao(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username request.getParameter(username); String password request.getParameter(password); // 密码做 MD5 处理后再比对与数据库存储格式保持一致 String md5Pwd MD5Util.encode(password); User user userDao.findByUsernameAndPassword(username, md5Pwd); if (user ! null) { HttpSession session request.getSession(); session.setAttribute(currentUser, user); session.setAttribute(role, user.getRole()); response.sendRedirect(request.getContextPath() /index.jsp); } else { request.setAttribute(msg, 用户名或密码错误); request.getRequestDispatcher(/login.jsp).forward(request, response); } } }这段代码有几个关键点。request.getParameter拿的是表单字段值字段名必须和 JSP 里input name...一致不一致就是 null。密码比对前做了 MD5 编码说明数据库里存的是哈希值如果你手动往数据库插了一个明文密码的测试账号登录会失败。sendRedirect和forward的区别也值得注意登录成功用重定向防止刷新页面重复提交登录失败用转发保留 request 域里的错误提示信息。Session 是登录状态的核心载体。session.setAttribute(currentUser, user)把用户对象存进去后续页面通过session.getAttribute(currentUser)判断是否已登录。这里有个常见坑Session 默认 30 分钟过期调试时如果频繁重启 TomcatSession 会丢失表现为「刚登录就跳回登录页」。这不是代码 bug是正常行为。4.2 留言板功能与 JSP 数据渲染留言板是同学录系统的核心交互模块涉及表单提交、数据库插入、列表查询和 JSP 遍历渲染。这条链路走通了其他增删改查功能都是同样的套路。// MessageServlet.java 处理留言的提交与列表查询 WebServlet(/message) public class MessageServlet extends HttpServlet { private MessageDao messageDao new MessageDao(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 查询当前用户所在班级的所有留言按时间倒序 User currentUser (User) request.getSession().getAttribute(currentUser); if (currentUser null) { response.sendRedirect(request.getContextPath() /login.jsp); return; } ListMessage messages messageDao.findByClassId(currentUser.getClassId()); request.setAttribute(messageList, messages); request.getRequestDispatcher(/message.jsp).forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); // 必须在 getParameter 之前调用 String content request.getParameter(content); User currentUser (User) request.getSession().getAttribute(currentUser); Message msg new Message(); msg.setUserId(currentUser.getId()); msg.setContent(content); msg.setCreateTime(new Date()); messageDao.insert(msg); response.sendRedirect(request.getContextPath() /message); } }request.setCharacterEncoding(UTF-8)这行必须放在所有getParameter之前否则 POST 提交的中文会乱码。这是 JSP/Servlet 开发里最经典的坑之一很多人调了半天以为是数据库字符集问题其实根源在这里。GET 请求的中文乱码则需要在 Tomcat 的server.xml里给 Connector 加URIEncodingUTF-8。JSP 页面用 JSTL 的c:forEach遍历messageListc:forEach items${messageList} varmsg div classmessage-item span classauthor${msg.realName}/span span classtimefmt:formatDate value${msg.createTime} patternyyyy-MM-dd HH:mm//span p classcontent${msg.content}/p /div /c:forEachfmt:formatDate需要引入 JSTL 的 fmt 标签库在 JSP 顶部加% taglib prefixfmt urihttp://java.sun.com/jsp/jstl/fmt %。如果页面报The absolute uri ... cannot be resolved说明jstl.jar和standard.jar没放进WEB-INF/lib。4.3 权限过滤器与管理员功能同学录系统通常有普通用户和管理员两种角色。普通用户能看留言、发留言、改自己资料管理员多一个删除留言、管理用户的权限。这种场景用 Filter 做统一拦截最合适。// AuthFilter.java 登录拦截与角色校验 WebFilter(/*) public class AuthFilter implements Filter { // 不需要登录就能访问的路径 private static final String[] WHITE_LIST {/login, /login.jsp, /register, /css/, /js/}; public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; String uri request.getRequestURI(); String path uri.substring(request.getContextPath().length()); // 白名单路径直接放行 for (String white : WHITE_LIST) { if (path.startsWith(white)) { chain.doFilter(req, resp); return; } } // 非白名单路径检查 Session HttpSession session request.getSession(); if (session.getAttribute(currentUser) null) { response.sendRedirect(request.getContextPath() /login.jsp); return; } // 管理员路径额外校验角色 if (path.startsWith(/admin) !Integer.valueOf(1).equals(session.getAttribute(role))) { response.sendRedirect(request.getContextPath() /index.jsp); return; } chain.doFilter(req, resp); } }这个过滤器的逻辑分三层白名单放行、登录校验、角色校验。WebFilter(/*)表示拦截所有请求所以白名单必须包含登录页和静态资源否则 CSS 和 JS 也会被拦截页面样式全丢。path.startsWith(/admin)是约定管理员功能的 URL 前缀都以/admin开头如果你的项目里管理员页面路径不一样这里要跟着改。提示Filter 的执行顺序由web.xml里的filter-mapping顺序决定或者用WebFilter时按类名字母序。如果项目里还有编码过滤器确保它排在 AuthFilter 前面否则中文参数在权限校验时就已经乱码了。5. 避坑排查从 404 到乱码的六个真实问题这一章列的都是我在帮人看这个项目时实际遇到过的问题按「现象 → 原因 → 解决」整理。你如果卡住了先在这里对号入座大概率能省下不少搜索时间。5.1 启动报 ClassNotFoundException: com.mysql.jdbc.Driver现象Tomcat 启动时控制台抛异常提示找不到 MySQL 驱动类。原因驱动 jar 包没有放到WEB-INF/lib下或者放的是 8.0 版本的驱动但配置文件里写的还是旧驱动类名。解决确认WEB-INF/lib下有mysql-connector-java-x.x.x.jar。如果是 8.0 的包把db.properties里的driver改成com.mysql.cj.jdbc.Driver连接串加上serverTimezone参数。5.2 页面 404但 Tomcat 启动没报错现象浏览器访问项目路径显示 404Tomcat 日志里没有异常。原因Context Root 不对或者web.xml里 Servlet 映射路径和访问路径不一致。解决在 IDE 的 Tomcat 部署配置里看项目的Path值通常是/项目名。访问时用http://localhost:8080/那个Path/。如果 Path 是/直接访问http://localhost:8080/。另外检查WebServlet(/xxx)里的路径和 JSP 表单的action是否匹配。5.3 登录后刷新页面就退出登录现象能正常登录但刷新一次页面或者点一个链接就跳回登录页。原因Session 丢失。可能是浏览器禁用了 Cookie或者 Tomcat 重启导致 Session 序列化失败。解决先检查浏览器 Cookie 设置。如果用的是 Chrome 无痕模式关掉无痕再试。Tomcat 重启丢 Session 是正常现象开发阶段可以接受生产环境需要配 Session 持久化。另外确认session.setAttribute和session.getAttribute用的 key 完全一致大小写敏感。5.4 中文留言显示成问号或乱码现象提交的中文留言存到数据库变成???或者页面显示乱码。原因三个环节的字符集没对齐——JSP 页面编码、request 编码、数据库和连接串编码。解决按顺序检查。JSP 顶部加% page contentTypetext/html;charsetUTF-8 %Servlet 里request.setCharacterEncoding(UTF-8)放在第一行数据库连接串加characterEncodingutf8建库时用utf8mb4。四个地方都对了乱码问题基本绝迹。5.5 修改代码后刷新页面没变化现象改了 JSP 或 Java 代码重启 Tomcat 后页面还是旧的。原因浏览器缓存了旧页面或者 IDE 没有重新编译 Java 类。解决先强制刷新浏览器CtrlF5。如果还不行在 IDE 里Project→Clean重新编译再重启 Tomcat。Eclipse 有时候不会自动编译修改过的 Java 文件需要手动触发。5.6 数据库连接池报 Too many connections现象运行一段时间后报错提示连接数超限。原因每次数据库操作都新建连接且没有关闭连接泄漏。解决检查 DAO 层的代码确保Connection、PreparedStatement、ResultSet都在finally块里关闭。如果项目用了连接池比如 C3P0 或 Druid检查配置文件里的maxPoolSize是否设得太大本地开发设 10 就够了。6. 二次开发与功能扩展把课程设计变成能讲清楚的作品项目能跑通、能登录、能留言交作业已经够了。但如果你想让这个同学录系统在答辩时更有说服力或者单纯想借它练手有几个方向可以扩展。这些改动都不大但能让你在讲项目时说出「我做了什么」而不是「我下载了什么」。6.1 把密码存储从 MD5 换成 BCryptMD5 在课程设计里够用但它不安全是常识。换成 BCrypt 只需要加一个依赖、改两行代码答辩时就是一个加分项。// 引入 jBCrypt 后注册和登录的密码处理改为 import org.mindrot.jbcrypt.BCrypt; // 注册时生成哈希 String hashed BCrypt.hashpw(plainPassword, BCrypt.gensalt()); // 登录时校验 if (BCrypt.checkpw(inputPassword, storedHash)) { // 密码正确 }BCrypt 每次生成的哈希值都不同因为加了随机盐但checkpw能正确比对。数据库密码字段长度要改成 60 以上因为 BCrypt 哈希是 60 个字符。这个改动涉及注册和登录两个 Servlet加上数据库字段修改半小时能搞定。6.2 用 AJAX 改造留言提交现在的留言提交是表单 POST 后整页刷新体验比较原始。改成 AJAX 异步提交页面不刷新就能看到新留言答辩演示效果会好很多。// message.jsp 里的 AJAX 提交逻辑 function submitMessage() { const content document.getElementById(content).value.trim(); if (!content) { alert(留言内容不能为空); return; } fetch(message, { method: POST, headers: {Content-Type: application/x-www-form-urlencoded}, body: content encodeURIComponent(content) }).then(res { if (res.redirected) { // 后端返回重定向说明 Session 过期 window.location.href res.url; } else { location.reload(); // 简单处理刷新列表 } }); }后端 Servlet 不用大改doPost里把sendRedirect改成返回 JSON 或者直接返回 200 状态码就行。前端用fetch发请求注意Content-Type要设成application/x-www-form-urlencoded否则request.getParameter拿不到值。encodeURIComponent处理中文内容防止特殊字符截断请求。6.3 加一个简单的分页查询留言多了以后一页显示全部会卡加个分页是常规优化。核心就是 SQL 的LIMIT子句加两个参数起始偏移量和每页条数。-- 第 pageNo 页每页 pageSize 条 SELECT * FROM message WHERE class_id ? ORDER BY create_time DESC LIMIT ?, ?;// MessageDao.java 分页查询方法 public ListMessage findByClassIdWithPage(int classId, int pageNo, int pageSize) { int offset (pageNo - 1) * pageSize; String sql SELECT * FROM message WHERE class_id ? ORDER BY create_time DESC LIMIT ?, ?; // ... 执行查询设置 offset 和 pageSize 参数 }JSP 页面底部加翻页链接把pageNo作为参数传给 Servlet。总页数用SELECT COUNT(*)算出来。这个功能代码量不大但涉及 SQL 参数绑定和前端传参答辩时能讲的东西不少。6.4 答辩前必做的一次完整走查最后说一个习惯。每次改完代码准备提交或者答辩前我会强制走一遍完整流程注册新用户 → 登录 → 发一条留言 → 退出 → 用管理员账号登录 → 删除那条留言 → 确认普通用户看不到删除按钮。这一套走下来权限控制、Session 管理、数据库读写全验证了。有一次就是在这个走查里发现管理员删除功能没做权限校验普通用户直接拼 URL 也能删差点在答辩时翻车。从那以后我每次交付前都强制走一遍这个流程不管项目多小。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

生物医学文献检索 AI 工具怎么选型终裁:能用/不能用与分层验收

生物医学文献检索 AI 工具怎么选型终裁:能用/不能用与分层验收

千笔-AIWritePaper https://www.aiwritepaper.com 生物医学检索 AI 工具越来越多,馆员课上的第一句话往往不是「哪个最好」,而是「它到底在搜什么」。本文依据 MSK Library 课程 Navigating AI Tools for Searching the Biomedical Literature (03/25/2…

2026/10/11 3:11:25 阅读更多 →
协程:从用户态线程到Java并发编程的核心概念

协程:从用户态线程到Java并发编程的核心概念

协程这个话题,在技术社区里的讨论热度一直很高,但能把“协程到底是什么”说明白的人却不多。有人觉得它跟线程差不多,有人说是“用户态线程”,还有人直接问出那个经典问题:Java 到

2026/10/11 3:11:25 阅读更多 →
单片机毕设选题推荐:基于ESP32的智能垃圾桶舵机开盖与声光报警装置设计 基于单片机的红外感应垃圾桶自动控制系统设计(031101)

单片机毕设选题推荐:基于ESP32的智能垃圾桶舵机开盖与声光报警装置设计 基于单片机的红外感应垃圾桶自动控制系统设计(031101)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/11 3:10:25 阅读更多 →

最新新闻

零成本AI副业:一条链接撬动第一桶金的完整实操

零成本AI副业:一条链接撬动第一桶金的完整实操

近两年"AI 副业"这四个字已经快被说烂了,各种动辄几千上万的训练营、私教课满天飞。但以我实操过十几个项目、在内容社区持续输出半年多的经验来看,AI 副业真正落地最稳的第一步,恰恰不是什么复杂系统,而是"一条链…

2026/10/12 5:55:29 阅读更多 →
MCLDNN:面向真实射频信号的多通道深度调制识别网络

MCLDNN:面向真实射频信号的多通道深度调制识别网络

简介:本资源是面向深度学习与无线通信领域研究者的自动调制识别(AMR)实战项目,聚焦于高维调制信号(如16-QAM、64-QAM)的精准分类问题,适用于具备Python编程基础及PyTorch/TensorFlow经验的研究生…

2026/10/12 5:55:29 阅读更多 →
从Excel到Spring Boot:员工考勤系统实战与踩坑复盘

从Excel到Spring Boot:员工考勤系统实战与踩坑复盘

从一张Excel考勤表说起。前年某部门的同事抱着厚厚一叠打印出来的考勤明细找我,说每个月手工核对迟到早退、请假调休要折腾三天,问能不能搞个系统自动算。我接手之后才发现,springboot员工考勤系统这种项目看着遍地都是教程,真要做…

2026/10/12 5:55:29 阅读更多 →
Android Studio国内镜像配置全攻略:一步解决SDK、Gradle下载慢

Android Studio国内镜像配置全攻略:一步解决SDK、Gradle下载慢

很多朋友学 Android 开发,第一关不是 Kotlin 语法,而是把 Android Studio 环境装起来。我这些年帮人排查过太多次环境问题,发现大多数人并不是操作步骤错了,而是下载和同步依赖时走的默认源在国外,从国内访问又慢又容易…

2026/10/12 5:55:29 阅读更多 →
哪些办公 AI 能从需求分析到最终交付完整完成任务

哪些办公 AI 能从需求分析到最终交付完整完成任务

很多企业在选择办公AI时容易陷入误区,只看单次问答的生成质量,忽略了从需求拆解、信息调研、多步骤执行到产出可交付成果的全链路能力。普通对话类AI只能完成单点内容生成,而具备智能体能力的办公AI,才可以承接完整业务任务&#…

2026/10/12 5:55:29 阅读更多 →
Doris JSON数组解析优化:从正则切分到JSONB+EXPLODE的实践

Doris JSON数组解析优化:从正则切分到JSONB+EXPLODE的实践

1. 这个版本优化到底解决了什么问题1.1 日志场景里的 JSON 数组字段做数仓的人大概率都有过这种经历:上游埋点日志为了省事,把一个事件的所有上下文全塞进一个大 JSON 字段里,其中一定会有个数组字段,比如用户浏览商品列表、曝光位…

2026/10/12 5:54:29 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器: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 阅读更多 →