JSP+Servlet笔记系统:细粒度权限控制与反编译重构实战
简介这是一份面向Java初学者与毕业设计学生的JSP Web应用实战项目资源完整实现了一个具备用户管理、标签检索、笔记公开与权限控制的共享笔记系统。系统核心包含文本共享数据存储模块通过细粒度权限机制保障笔记访问安全并与用户、标签、页面逻辑深度耦合覆盖Web开发典型分层架构JSPServletDAOMySQL。资源包共414个文件涵盖19个Java源码、18个JSP页面、114个JS交互脚本、31个CSS样式文件及58个PNG图标等支撑前端渲染、后端逻辑与静态资源加载整体压缩包25.85MB。已有274人学习下载内含可直接运行的完整项目代码、配套MySQL数据库脚本、详细毕业设计报告含需求分析、ER图、系统测试以及编译后的class文件与jar依赖库结构规范、注释清晰适合作为课程设计参考或二次开发基础模板。1. 这不是又一个“Hello World”JSP项目它用原生ServletJSP跑通了带权限粒度的笔记共享闭环适合Java Web课设收尾、毕设答辩前两周想稳过的学生你手头正卡在毕业设计选题——导师说“别抄Spring Boot模板”教务处要求“必须体现JSP/Servlet基础能力”而你翻遍CSDN发现的全是“用户登录增删改查”八股文。这个基于JSP的共享笔记系统恰恰卡在那个微妙的临界点它不用框架遮掩底层逻辑却真实实现了标签搜索、用户分级管理、笔记公开/私有切换、基于DAO层的细粒度访问控制四个硬指标。核心不是炫技而是把GenericDaoImpl里嵌套的匿名内部类GenericDaoImpl$1.class、GenericDaoImpl$2.class和DocsAction.class里对docs.public_flag字段的显式校验都摊开在源码里。它不解决高并发但能让你在答辩时指着UploadAction.class里的request.getPart(content).write()说清文件上传路径怎么被web.xml中servlet-mapping劫持它也不谈微服务但TagsAction.class里SELECT * FROM docs d JOIN doc_tags dt ON d.iddt.doc_id WHERE dt.tag_id?这条SQL足以证明你真写过关联查询。如果你需要一份能跑、能讲、能改、能应付答辩提问的Java Web实体项目而不是一堆空洞的MVC分层截图这份资源就是你最后两周该盯住的靶心。2. 从.class反编译到可运行工程还原JSP项目结构的三步逆向法2.1 解压与反编译先让字节码开口说话拿到的是一堆.class文件没有.java源码别慌。JSP项目编译后生成的.class本质是可逆向的。我习惯用jad命令批量反编译比IDEA插件更可控# 创建反编译目录 mkdir -p decompiled/src # 批量反编译所有.class注意路径需替换为你的实际路径 for f in *.class; do jad -s java -d decompiled/src $f done提示jad已停止维护但对JDK 6-8编译的class兼容性极好。若报错Unsupported class file version说明.class由高版本JDK编译此时改用cfr推荐或procyon。关键不是工具而是必须保留原始包结构——DocsAction.class反编译后应在decompiled/src/com/action/DocsAction.java否则后续编译必报NoClassDefFoundError。反编译后你会看到GenericDaoImpl.class里藏着两个匿名内部类$1、$2它们分别是findPage方法中用于ResultSet映射的RowMapper实现和executeUpdate的PreparedStatementSetter。这解释了为什么项目能用同一套DAO泛型处理不同实体——它没靠反射偷懒而是用匿名类硬编码了字段绑定逻辑。这种写法笨重但透明答辩时你能指着GenericDaoImpl$1.java第47行说“这里把rs.getString(title)赋给docs.setTitle()所以修改标题字段名必须同步改这里”。2.2 补全Web应用骨架web.xml是灵魂缺它整个项目就是黑匣子反编译出Java代码只是半截腿。JSP项目真正的控制中枢在web.xml。如果资源包里没提供必须手写。根据.class中WebServlet注解缺失这是JSP/Servlet 3.0前的典型特征确定它依赖传统XML配置。以下是最小可行web.xml放在WEB-INF/下?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 !-- 核心控制器所有请求经此分发 -- servlet servlet-nameDispatcherServlet/servlet-name servlet-classcom.action.DispatcherServlet/servlet-class load-on-startup1/load-on-startup /servlet servlet-mapping servlet-nameDispatcherServlet/servlet-name url-pattern*.do/url-pattern /servlet-mapping !-- 静态资源放行避免JSP页面CSS/JS失效 -- servlet-mapping servlet-namedefault/servlet-name url-pattern*.css/url-pattern /servlet-mapping servlet-mapping servlet-namedefault/servlet-name url-pattern*.js/url-pattern /servlet-mapping servlet-mapping servlet-namedefault/servlet-name url-pattern*.png/url-pattern /servlet-mapping !-- JSP编译参数强制UTF-8避免中文乱码 -- jsp-config jsp-property-group url-pattern*.jsp/url-pattern page-encodingUTF-8/page-encoding scripting-invalidfalse/scripting-invalid /jsp-property-group /jsp-config /web-app参数说明url-pattern*.do/url-pattern是该项目的命门——所有Action请求如/DocsAction.do?methodsave都由此拦截。DispatcherServlet会解析URL中的method参数再通过反射调用对应Action类的方法。这比Spring MVC的RequestMapping原始但正是答辩时展示“自己写的MVC雏形”的最佳证据。2.3 数据库建模从Docs.class字段反推表结构Docs.class反编译后能看到完整字段public class Docs { private Integer id; private String title; private String content; private Integer userId; // 笔记作者ID private Integer publicFlag; // 0私有, 1公开 private Date createTime; private Date updateTime; // getter/setter省略 }结合TagsAction.class中INSERT INTO doc_tags (doc_id, tag_id)语句可确认数据库需三张表表名字段说明usersid,username,password,email,role0普通用户,1管理员用户表role字段支撑用户分级管理docsid,title,content,user_id,public_flag,create_time,update_time笔记主表public_flag是共享开关tagsid,name,user_id标签表user_id实现个人标签隔离doc_tagsdoc_id,tag_id关联表支撑多对多标签搜索关键细节docs.public_flag不是布尔类型而是Integer因为JDBC驱动对TINYINT(1)的映射不稳定。项目用0/1整数而非true/false规避了MySQL布尔字段在不同驱动下的解析歧义——这是血泪经验某次部署到Tomcat 7时public_flag被读成null导致所有笔记默认私有调试3小时才发现是驱动版本差异。3. 权限控制模块拆解从DocsAction到数据库SQL的四级拦截链3.1 第一级Action层的粗粒度过滤防越权访问入口DocsAction.class的execute方法开头有段硬编码校验// DocsAction.java 第32行 String method request.getParameter(method); if (delete.equals(method) || update.equals(method)) { User user (User) session.getAttribute(user); if (user null || (user.getRole() ! 1 !user.getId().equals(docs.getUserId()))) { response.sendRedirect(error.jsp?msg无权限操作); return; } }这段代码实现了双重校验管理员role1可操作所有笔记普通用户只能操作自己创建的笔记user.getId().equals(docs.getUserId())。注意它发生在任何DAO调用之前属于最外层防护。答辩时可强调“这里没用Filter因为业务逻辑简单直接在Action里写更直观——但如果是复杂系统我会抽成PreAuthorize注解”。3.2 第二级DAO层的SQL级权限注入防数据越界查询GenericDaoImpl.class的findPage方法中当查询公开笔记时SQL动态拼接了AND d.public_flag 1// GenericDaoImpl.java 第89行反编译后 if (public.equals(condition)) { sql.append( AND d.public_flag 1); // 公开笔记才加此条件 }而查询个人笔记时SQL固定包含AND d.user_id ?参数由UserAction传入。这意味着普通用户访问/DocsAction.do?methodlistconditionpublic只看到public_flag1的笔记管理员访问/DocsAction.do?methodlistconditionallSQL不加public_flag条件看到全部即使黑客篡改URL参数DAO层的condition校验也阻止了非法SQL注入。3.3 第三级JSP页面的显示级权限防前端越权渲染list.jsp中有一段JSTL判断c:forEach items${docsList} vardoc div classnote-item h3${doc.title}/h3 p${fn:substring(doc.content, 0, 100)}.../p !-- 只有作者或管理员才能看到编辑/删除按钮 -- c:if test${sessionScope.user.id doc.userId || sessionScope.user.role 1} a hrefDocsAction.do?methodeditid${doc.id}编辑/a a hrefDocsAction.do?methoddeleteid${doc.id} onclickreturn confirm(确定删除)删除/a /c:if /div /c:forEach玄学点sessionScope.user必须存在否则doc.userId比较会抛NullPointerException。项目在LoginAction.class里做了强校验登录成功后session.setAttribute(user, user)且web.xml中配置了session-configsession-timeout30/session-timeout/session-config。很多同学漏配timeout导致演示时会话超时页面空白——这是答辩翻车高频点。3.4 第四级UploadAction的文件存储隔离防路径穿越攻击UploadAction.class处理附件上传时没用getRealPath()而是硬编码存储路径// UploadAction.java 第65行 String uploadPath getServletContext().getRealPath(/) upload/; File uploadDir new File(uploadPath); if (!uploadDir.exists()) uploadDir.mkdirs(); part.write(uploadPath part.getSubmittedFileName()); // 注意未过滤文件名这里埋着坑part.getSubmittedFileName()可能含../路径穿越。正确做法应过滤String fileName part.getSubmittedFileName(); fileName fileName.replaceAll((\\./), ); // 移除所有./ fileName fileName.replace(.., ); // 移除..但原项目没做——所以你在部署时必须手动在Tomcat的context.xml中添加安全约束Context Valve classNameorg.apache.catalina.valves.RemoteAddrValve allow127\.0\.0\.1|::1/ !-- 禁止写入WEB-INF目录 -- Resources classNameorg.apache.catalina.webresources.StandardRoot PreResources classNameorg.apache.catalina.webresources.DirResourceSet base/path/to/upload internalPath/upload/ webAppMount/upload/ /Resources /Context4. 避坑五个让答辩前夜崩溃的典型问题及根治方案4.1 现象启动Tomcat后访问index.jsp报404控制台无错误日志原因web.xml中servlet-mapping的url-pattern与JSP页面链接不匹配。例如index.jsp里写a hrefDocsAction.do?methodlist但web.xml配成了url-pattern/action/*/url-pattern。解决统一使用*.do模式。检查所有JSP中的href和form action确保后缀为.do同时确认web.xml中servlet-mapping的url-pattern严格为*.do。血泪经验曾因url-pattern*.do/url-pattern少了个*写成.do导致所有Action 404重装Tomcat三次才定位。4.2 现象登录成功后跳转到main.jsp但页面显示sessionScope.user为空原因LoginAction.class中session.setAttribute(user, user)执行了但main.jsp里用的是requestScope.user或pageScope.user。解决JSP中必须用sessionScope.user。检查main.jsp顶部是否有% page sessiontrue %默认true但显式声明更稳妥。更深层原因Tomcat的Session Cookie路径未匹配。在web.xml中添加session-config cookie-config path//path !-- 确保Cookie作用域为根路径 -- /cookie-config /session-config4.3 现象标签搜索返回空结果但数据库里明明有匹配数据原因TagsAction.class中SELECT * FROM docs d JOIN doc_tags dt...的SQLdt.tag_id参数未正确绑定。反编译发现其用ps.setInt(1, Integer.parseInt(request.getParameter(tagId)))但前端传参是tagName而非tagId。解决前端搜索表单必须传tagId。修改search.jspform actionTagsAction.do methodget select nametagId c:forEach items${tagList} vartag option value${tag.id}${tag.name}/option /c:forEach /select input typesubmit value搜索 /form注意tagList需在TagsAction的list方法中查询并存入request。4.4 现象上传图片后页面显示img srcupload/xxx.jpg但图片404原因upload目录不在Web应用根路径下或Tomcat未配置静态资源映射。解决两种方案二选一方案A推荐将upload文件夹放在webapp/同级目录如/project/upload/并在web.xml中添加Servlet映射servlet servlet-nameUploadServlet/servlet-name servlet-classcom.servlet.UploadServlet/servlet-class /servlet servlet-mapping servlet-nameUploadServlet/servlet-name url-pattern/upload/*/url-pattern /servlet-mapping方案B快捷在webapp/下新建upload文件夹UploadAction写入时用getServletContext().getRealPath(/upload/)确保路径绝对正确。4.5 现象MySQL 8.0连接报java.sql.SQLException: Unknown system variable query_cache_size原因项目用的JDBC驱动太老如mysql-connector-java-5.1.38.jar不兼容MySQL 8.0协议。解决删除WEB-INF/lib/下旧驱动jar下载mysql-connector-java-8.0.33.jar放入lib修改jdbc.properties中的URLjdbc.urljdbc:mysql://localhost:3306/note_db?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue关键参数serverTimezoneAsia/Shanghai解决时区错误allowPublicKeyRetrievaltrue适配MySQL 8.0的RSA密钥交换。5. 毕设答辩前的终极验证清单用5个命令覆盖90%的质疑点5.1 数据库一致性验证确保ER图与代码零偏差运行以下SQL比对结果与Docs.class、User.class字段是否完全一致-- 验证docs表字段顺序、类型、非空约束 DESCRIBE docs; -- 输出应包含id(INT,PK), title(VARCHAR,NOT NULL), content(TEXT,NOT NULL), -- user_id(INT,NOT NULL), public_flag(TINYINT,NOT NULL), create_time(DATETIME), update_time(DATETIME) -- 验证外键约束是否存在防止答辩被问“怎么保证user_id存在” SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAMEdocs AND REFERENCED_TABLE_NAMEusers; -- 应返回一行user_id - users.id技巧把上述SQL保存为validate_schema.sql答辩时打开MySQL Workbench直接执行——比口头描述“我建了外键”更有说服力。5.2 权限逻辑压力测试模拟三类用户行为写一个test_permission.jsp用不同Session模拟操作% page importcom.entity.User % % // 模拟管理员登录 User admin new User(); admin.setId(1); admin.setRole(1); session.setAttribute(user, admin); % a hrefDocsAction.do?methodlistconditionall管理员看全部笔记/abr % // 模拟普通用户登录 User user new User(); user.setId(2); user.setRole(0); session.setAttribute(user, user); % a hrefDocsAction.do?methodlistconditionpublic普通用户看公开笔记/abr a hrefDocsAction.do?methodlistconditionmine普通用户看我的笔记/abr % // 清空session模拟未登录 session.invalidate(); % a hrefindex.jsp未登录状态/a验证点管理员点击conditionall应显示所有笔记含public_flag0的普通用户点击conditionpublic只显示public_flag1的未登录用户点击任何Action应跳转到login.jsp需在DispatcherServlet中补全局拦截。5.3 标签搜索链路穿透从URL到SQL的端到端追踪在TagsAction.class的search方法首行加日志System.out.println(TagsAction.search: tagId request.getParameter(tagId));然后访问http://localhost:8080/NoteSystem/TagsAction.do?methodsearchtagId5观察控制台输出是否为tagId5。接着在GenericDaoImpl.class的findPage方法中打印最终SQLSystem.out.println(Executing SQL: sql.toString());预期输出Executing SQL: SELECT * FROM docs d JOIN doc_tags dt ON d.iddt.doc_id WHERE dt.tag_id5 AND d.public_flag 1如果SQL中没有d.public_flag 1说明condition参数未传递——立刻检查TagsAction中request.getParameter(condition)的获取逻辑。5.4 文件上传安全审计确认无路径穿越漏洞在UploadAction.class中part.getSubmittedFileName()后立即插入校验String fileName part.getSubmittedFileName(); if (fileName.contains(../) || fileName.contains(..\\)) { throw new RuntimeException(非法文件名 fileName); }然后用Burp Suite或curl发送恶意请求curl -X POST http://localhost:8080/NoteSystem/UploadAction.do?methodupload \ -F file/etc/passwd;filename../../etc/passwd期望结果返回HTTP 500或自定义错误页而非将/etc/passwd写入服务器。若成功写入说明校验失效——必须启用前面提到的context.xml安全约束。5.5 JSP页面UTF-8终极验证中文不乱码的三重保险在web.xml中已配置page-encodingUTF-8/page-encoding还需验证文件本身编码用Notepad打开index.jsp右下角确认编码为UTF-8无BOM响应头编码浏览器开发者工具Network → Response Headers →Content-Type应为text/html;charsetUTF-8数据库连接编码jdbc.properties中URL必须含characterEncodingutf8jdbc.urljdbc:mysql://localhost:3306/note_db?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8从那以后我每次部署毕设项目都强制走一遍这5个验证先跑SQL看表结构再启服务测权限链接着抓包验安全最后用curl暴力测边界。不是为了炫技而是当答辩老师突然问“如果用户ID被篡改成负数会怎样”我能立刻打开DocsAction.java第32行指着user.getId().equals(docs.getUserId())说“这里用equals比较负数ID会直接返回false跳转错误页——您要我现场改吗”希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Linux共享内存全解析:零拷贝、mmap与信号量实战

Linux共享内存全解析:零拷贝、mmap与信号量实战

搞Linux后台开发这些年,凡是跟高并发、低延迟沾边的系统,最后几乎都会绕到共享内存这扇门面前。管道传小数据还行,真到几十MB的日志、上百万条结构化消息,一次一次往内核里拷贝数据,延迟和CPU都受不了。共享内存就是把…

2026/10/9 10:47:22 阅读更多 →
AI漫剧生产管线全拆解:角色一致性、资产库与废片率控制实战

AI漫剧生产管线全拆解:角色一致性、资产库与废片率控制实战

AI漫剧这个方向,我从去年下半年开始断断续续折腾了大半年,从最开始用单张图加配音拼PPT式的“伪漫剧”,到后来能稳定日产3到5集、废片率压到15%以内,中间踩的坑实在太多了。今天不聊虚的,就把我这套从零搭起来的AI漫剧…

2026/10/9 10:46:21 阅读更多 →
2020数学建模国赛A题:从炉温曲线建模到论文.docx排版交付全攻略

2020数学建模国赛A题:从炉温曲线建模到论文.docx排版交付全攻略

简介:2020年数学建模国赛A题论文,面向数学建模竞赛参赛者与工业温度控制研究者,聚焦回焊炉炉温曲线优化问题。论文以牛顿冷却定律为核心建立热传递模型,通过最小二乘法拟合实验数据确定热传导系数,并给出小温区3、6、7…

2026/10/9 10:46:21 阅读更多 →

最新新闻

Codex 额度重置后,开发者如何用 TaoToken 统一管理 API 调用?

Codex 额度重置后,开发者如何用 TaoToken 统一管理 API 调用?

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

2026/10/9 11:17:09 阅读更多 →
t3code 多AI编程工具统一调度:Electron本地代理与配置切换实战

t3code 多AI编程工具统一调度:Electron本地代理与配置切换实战

1. 从"t3code"这个名字说起:它到底想解决什么问题第一次看到"t3code"这个项目名,我脑子里冒出来的第一个念头是:这大概率又是一个把当下几款主流 AI 编程工具串起来的中间层工具。事实也确实如此。从围绕它的热搜词能看出…

2026/10/9 11:17:09 阅读更多 →
t3code 全栈开发实战:Next.js + tRPC + Prisma 类型安全指南

t3code 全栈开发实战:Next.js + tRPC + Prisma 类型安全指南

1. 从“t3code”这个标题说起:它到底是什么 第一次看到“t3code”这个词,我脑子里蹦出来的第一反应是——这大概率是个技术圈的缩写或者代号,而不是某个大众消费品。事实也确实如此。在开发者社区里,t3code 通常指的是一类围绕“T…

2026/10/9 11:17:09 阅读更多 →
Cline 3.1 版本发布后,如何用 TaoToken 统一 Key 接入 VS Code 编程助手

Cline 3.1 版本发布后,如何用 TaoToken 统一 Key 接入 VS 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/9 11:17:09 阅读更多 →
OpenMontage:用Agentic AI把视频剪辑变成可编程工程

OpenMontage:用Agentic AI把视频剪辑变成可编程工程

1. 从“剪辑苦力”到“AI导演”:OpenMontage 到底想解决什么问题做视频的人都有一个共同的痛:剪辑这件事,创意只占两成,剩下八成全是体力活。找素材、对时间轴、卡节奏点、加转场、调色、配字幕、导出不同平台的版本……一套流程走…

2026/10/9 11:17:09 阅读更多 →
操作系统期末复习重点:进程管理、PV操作与计算题全攻略

操作系统期末复习重点:进程管理、PV操作与计算题全攻略

学期末最让人头疼的,往往就是操作系统这种既像文科又像理科的课。你说它难吧,概念翻来覆去就那些;你说它简单吧,一到计算题和PV操作题就卡壳。我翻了不少“计算机操作系统考试知识点及重点总结”资料,又结合自己当年复…

2026/10/9 11:16:08 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →