新闻详情

新闻详情

首页 / 资讯中心 / 详情

Spring Boot+MyBatis高校在线考试系统完整项目实战与部署

发布时间:2026/9/30 3:04:39来源:尧图网络
Spring Boot+MyBatis高校在线考试系统完整项目实战与部署
最近很多同学在准备毕业设计问我有没有现成的完整项目可以参考。说实话每年计算机专业毕业设计选题里在线考试系统绝对是最经典的方向之一。这次就把我手上这套Java高校在线考试系统的完整实现思路和技术细节拆开来讲。项目本身用的是Spring Boot MyBatis这套主流Java技术栈包含题库管理、自动组卷、在线答题、自动评分、成绩统计这些核心模块另外还配套了Python爬虫抓题库、数据可视化大屏、小程序端等扩展玩法适合做计算机毕业设计也适合拿来练手写简历项目。无论你是Java新手还是有点基础想搞个完整项目这篇文章都能给你一套能直接复现的方案。1. 项目整体设计与选题价值1.1 为什么在线考试系统是毕业设计“常青树”每年计算机专业毕业设计选题在线考试系统总能占一席之地。原因很简单它业务逻辑清晰覆盖了软件开发中最常见的一批知识点——用户登录、角色权限、增删改查、状态流转、事务处理、并发控制。这些恰恰是毕业生简历里最需要展示的核心能力。在线考试系统不像电商系统那样业务复杂也不像管理系统那样单纯堆砌CRUD它是典型的“中间复杂度”项目。学生作为考生要登录、选课、进入考试、答题、交卷、查分教师要维护题库、创建考试、设置规则、阅卷、导出成绩管理员要管用户、管学科、管公告。三个角色互相配合把权限控制、数据关联和业务流程串得清清楚楚。更关键的是它扩展性强。同一个系统往深了做可以加分布式缓存、消息队列、限流降级往宽了做可以接小程序、APP、数据可视化大屏。所以就算到了新工科、人工智能流行的今天在线考试系统依然能在毕业设计里保持高热度。评审老师看重的不是技术多新而是你能不能把完整业务讲清楚、做扎实。1.2 技术选型以Java为主多语言扩展的意义这套系统主技术栈是Java方向的主流组合Spring Boot作为后端框架MyBatis作为持久层框架MySQL存储数据前端使用Thymeleaf模板引擎加Bootstrap搭建页面。如果有一定前端基础也可以把页面层换成Vue Element UI做成前后端分离架构。选择Spring Boot的原因很直接它简化了大量配置内嵌Tomcat项目可以用java -jar直接启动部署起来比传统的SSH框架轻太多。对做毕业设计的同学来说Spring Boot的学习曲线相对友好遇到问题搜索到的资料也最多。MyBatis之所以选它而不选Spring Data JPA是因为在线考试系统里有大量自定义SQL比如随机组卷、统计考试成绩分布、连表查询学生答题明细。用MyBatis可以把SQL写得很明确后期优化SQL时也更可控。但如果你想在毕业答辩时体现“技术广度”这套项目还可以带出Python、小程序、爬虫等扩展内容。我的做法是用Python写一个爬虫脚本从公开题库网站搜集选择题清洗后生成指定的JSON格式再导入到系统题库中用Flask做一个简单的数据分析接口读取MySQL中的成绩数据返回给前端大数据展示页面用ECharts实现成绩分布、及格率、学科对比等可视化图表用uni-app打包一个简单的学生端小程序调用后端已有的考试接口。这种设计并不改变主系统的技术架构但能明显提升项目的完整度和答辩亮点。毕竟在简历上写“掌握了Java Web开发”和写“熟悉Java Web开发并能用Python做数据采集、用ECharts做可视化”是两个量级。1.3 系统功能模块全景图在线考试系统的功能可以按照角色划分成三大模块。管理员端负责基础数据维护包括学院管理、专业管理、班级管理、教师账号审核、学生账号管理、系统公告发布。管理员不直接参与考试业务但所有角色和基础数据都由这里统一下发。教师端是业务核心主要功能有五块题库管理维护单选、多选、判断、填空、简答五类题目支持按知识点和难度检索考试管理创建考试、设置考试时间、考试时长、总分、及格分选择考试班级组卷策略手工选题、随机组卷、按题型比例抽题阅卷管理客观题自动判分主观题简答题人工打分支持批量通过成绩分析查看单场考试的平均分、最高分、最低分、合格率并导出Excel。学生端功能相对聚焦查看待参加的考试列表进入考试后进行答题支持一题一答和题号跳转有倒计时提醒提交试卷后立刻查看客观题得分考试结束后可以回顾错题并查看正确答案。整个业务流程是管理员创建基础数据和账号教师导入试题并创建考试学生参加考试并提交系统自动判分和教师阅卷后成绩回写到学生端。这套流程从设计到实现基本覆盖了高校期中期末考试的完整闭环。2. 核心功能拆解与数据库设计2.1 用户角色与权限设计在线考试系统存在三类角色权限边界必须清晰。我没有引入Spring Security这类重量级框架而是自己实现了一套基于拦截器的权限控制方案因为毕业设计阶段把原理讲清楚更重要。具体做法是登录成功后把用户ID和角色ID存入Session。然后写一个AuthInterceptor在进入Controller前拦截请求通过request的URI前缀判断是否需要特定角色才能访问。比如/admin/**只允许管理员/teacher/**只允许教师/student/**只允许学生。这样做的好处是权限逻辑直观答辩时容易解释调试也方便。数据库层面设计了三张核心表sys_user存放用户ID、登录名、密码MD5加密、姓名、角色ID、状态sys_role角色ID、角色名称、角色编码sys_permission权限ID、权限名称、URL地址、角色ID。如果项目想做得更规范可以只保留一张用户表再加一张角色-菜单关联表。但毕业设计阶段三张表足以说明RBAC基于角色访问控制的思想。这里有一个小经验不要把密码明文存在数据库里。我前几版开发时图省事直接存明文后来被同学拿去演示时出了尴尬场景——打开数据库就能看到所有人的密码。后来改用MD5加盐虽然在安全上也不算极致但答辩时至少能说“我考虑了基础安全设计”。2.2 题库管理与组卷策略题库表是整套系统的地基。核心表question字段包括题目ID、题目内容、选项A/B/C/D、正确答案、题型1单选、2多选、3判断、4填空、5简答、知识点ID、难度系数1简单、2中等、3困难、分值、创建教师ID、创建时间。组卷策略决定了一套试卷是否合理。最简单的实现是随机组卷也就是教师指定题目数量、每种题型的个数、难度分布系统从题库中随机抽取。常用的算法是带条件的随机抽样先根据题型过滤题目再按难度比例计算每种难度需要抽几道使用ORDER BY RAND() LIMIT ?从对应难度数据集中抽取对多道题目标记exam_question关联到本场考试。但这套方案在高并发下会有隐患如果同时有很多教师组卷随机抽题会带来一定性能压力。解决办法是在题库表增加一个last_used_time字段组卷时偏向抽取近期未使用过的题目或者在代码里用List随机打乱后取前N条避免每次都走数据库随机函数。我更推荐在Java代码里做随机而不是完全依赖SQL的ORDER BY RAND()。因为后者在题库数据量超过几万条时排序性能明显下降。实际做法是查询符合条件的题目ID列表在内存里用Collections.shuffle打乱再截取需要的数量。2.3 考试过程与防作弊策略考试过程中最容易翻车的是“答案丢失去”。学生答题不是一次提交全部而是每做一题就通过AJAX把答案传到后端暂存。所以后端必须提供一个保存答案的接口接收examId questionId 选中答案然后保存到student_answer表。断网、误关页面的情况也要考虑。我实现了一个“重进恢复”的逻辑学生重新进入考试页面时加载该学生本场考试的所有已答记录把每道题的状态回显在页面上。配合倒计时倒计时时间存到Redis或数据库表不依赖浏览器端计时器避免学生修改本地时间。防作弊是答辩时的亮点之一。我在系统里做了下面几件事切屏检测页面监听visibilitychange事件一旦发现学生切出页面超过5秒就记录一次最多允许3次超过后强制交卷题目顺序随机每个学生进入考试时试题顺序由后端随机打乱选项顺序随机对于选择题选项顺序也是临时随机生成IP记录保存学生登录IP和交卷IP便于教师核查异常提交时间限制交卷时间以服务器时间为准考试时间结束自动交卷。这些策略都不复杂但组合起来效果不错。答辩时老师最关心“你怎么防止学生作弊”你把这套策略讲清楚基本就是加分项。2.4 数据库表结构一览用一张表把核心表列出来方便参照设计表名说明关键字段sys_user用户表id, login_name, password, role_id, real_name, statussys_role角色表id, role_name, role_codequestion题库表id, subject_id, type, content, option_a, option_b, option_c, option_d, answer, knowledge_point, difficulty, scoreexam考试表id, exam_name, subject_id, class_ids, start_time, end_time, duration, total_score, pass_score, statusexam_question考试题目关联表id, exam_id, question_id, question_order, scorestudent_answer学生答题表id, exam_id, student_id, question_id, answer_content, is_correct, scoreexam_record考试记录表id, exam_id, student_id, start_time, submit_time, ip_address, cut_screen_count, objective_score, subjective_score, total_score关于“考试记录表”和“学生答题表”的关系一个学生参加一场考试会先创建一条exam_record表示这场考试的开始提交后更新submit_time和各项得分。student_answer则保存这个学生在本次考试中对每道题的作答内容。两张表通过exam_id student_id关联。这里提醒一下字段命名尽量统一使用下划线风格Java实体类使用驼峰命名MyBatis配置里开启map-underscore-to-camel-casetrue能省掉大量as别名少踩很多坑。3. 关键技术实现与实操要点3.1 Spring Boot MyBatis 后端搭建项目结构我习惯按常见的分层结构来组织com.exam ├── controller ├── service ├── mapper ├── entity ├── config ├── interceptor └── common启动类走Spring Boot标准写法核心配置在application.yml里。数据源配置要注意时区问题serverTimezoneAsia/Shanghai必须加否则本地连MySQL 8.x会报错。MyBatis配置里建议开启驼峰映射和日志输出spring: datasource: url: jdbc:mysql://localhost:3306/exam_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver thymeleaf: cache: false mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations配置后SQL都写在XML文件里便于整理和复用。启动项目后控制台会打印SQL和参数调错题时特别有用。很多同学在写查询时遇到“查到了但对象属性为null”的问题基本都是没开驼峰映射。Service层写业务逻辑时事务注解不能漏。创建考试、批量生成exam_question、初始化exam_record这类多个写操作都要加上Transactional(rollbackFor Exception.class)。否则中途报错可能出现考试已创建但题目没绑定上去的脏数据。3.2 前端页面设计与交互逻辑前端页面我用的是Thymeleaf模板加Bootstrap没有特意做前后端分离。因为在线考试系统的页面交互不算特别复杂服务端渲染更容易把控。核心页面有四类登录页登录表单验证码校验学生考试中心待考列表、已考列表、成绩查看、错题回顾在线答题页左侧是题号导航栏右侧是当前题目内容底部是上一题/下一题/交卷按钮右上角显示倒计时教师管理后台题库列表、考试管理、成绩报表、公告管理。答题页的倒计时是前端交互的重头戏。我用JavaScript实现了一个简单的倒计时器let totalSeconds 7200; // 由后端下发的考试时长单位秒 let timer setInterval(function() { if (totalSeconds 0) { submitExam(); clearInterval(timer); return; } let hour Math.floor(totalSeconds / 3600); let minute Math.floor((totalSeconds % 3600) / 60); let second totalSeconds % 60; $(#countdown).text(hour : minute : second); totalSeconds--; }, 1000);但这里有个坑纯前端倒计时是可以被改的所以后端必须在交卷时再校验一次时间超时自动交卷。我的后端实现是在提交试卷接口里先读取当前服务器时间如果大于考试结束时间就不接受新的答案保存直接按已保存的答案强制结算。前后端双重校验才能真正保证公平。答题过程中的AJAX保存也很重要。我采用“选中答案后立即发送不等待交卷”的策略。这样即使学生最后忘记点交卷服务器也有最新的答题记录。当然这会增加请求频率一个学生一场考试可能触发几十次保存但对单台服务器来说完全扛得住。3.3 核心代码实现自动组卷与自动评分自动组卷是教师端最核心的功能。我以一个随机组卷的Service方法为例public ListExamQuestion generateExamQuestions(Exam exam, ExamRule rule) { ListExamQuestion result new ArrayList(); // rule包含单选题数量、多选题数量、判断题数量、简单题数量以及难度比例 // 分别从题库中按题型查询 for (Integer type : rule.getTypeList()) { ListQuestion pool questionMapper.selectByType(exam.getSubjectId(), type); // 按难度比例分组 MapInteger, ListQuestion groupedByDifficulty pool.stream() .collect(Collectors.groupingBy(Question::getDifficulty)); for (Map.EntryInteger, ListQuestion entry : groupedByDifficulty.entrySet()) { Integer difficulty entry.getKey(); ListQuestion questions entry.getValue(); int needCount rule.getCountByDifficulty(type, difficulty); Collections.shuffle(questions); for (int i 0; i Math.min(needCount, questions.size()); i) { ExamQuestion eq new ExamQuestion(); eq.setExamId(exam.getId()); eq.setQuestionId(questions.get(i).getId()); eq.setScore(questions.get(i).getScore()); result.add(eq); } } } return result; }这里的关键点是“先分组再随机”保证了不同难度的题目占比符合预期。如果不做难度分组直接在整个题库里随机很容易抽出一套全是简单题或者全是难题的试卷教师看到会被骂。自动评分方面客观题单选、多选、判断、填空在交卷时逐题比对question.answer字段和student_answer.answer_content。多选题的比对要注意选项顺序我在存答案时按固定顺序如“A,B,C”排序后存储比对前也做排序避免因顺序不同误判。简答题这类主观题系统不自动打分而是生成待阅卷列表教师进入阅卷页面对每道题人工打分。打分结果回写到student_answer.score字段最后和客观题得分相加得到总成绩。3.4 数据可视化与报表导出成绩分析页面如果只是表格答辩时视觉冲击力不够。我接入了ECharts在管理后台展示三类图表成绩区间分布柱状图统计各个分数段人数各班级平均分对比柱状图多次考试趋势折线图。实现方式比较直接后端提供一个/teacher/exam/statistics接口返回统计好的JSON数据前端用echarts.init渲染。比如成绩分布SQL可以写成SELECT CASE WHEN score 60 THEN 0-59 WHEN score 70 THEN 60-69 WHEN score 80 THEN 70-79 WHEN score 90 THEN 80-89 ELSE 90-100 END AS score_range, COUNT(*) AS count FROM exam_record WHERE exam_id #{examId} GROUP BY score_range;这种SQL在答辩时非常容易讲解因为逻辑清晰。ECharts的配置就是常规的bar和line不复杂但视觉上直接拉升项目完成度。报表导出我用的是Apache POI。有同学在热词里问“Java POI Word能生成图表吗”顺便说一句POI不仅能操作Word也能操作Excel和PowerPoint。在这套系统里我用POI生成成绩单Excel包含学生姓名、学号、班级、客观题分、主观题分、总分、排名。导出接口接收考试ID查询后逐行写入Excel并下载。注意导出数据量大的时候建议分批查询避免一次加载太多导致内存溢出。Python爬虫给题库做数据补充是另一个加分项。比如从一些公开题库网站抓取Java基础选择题清洗后生成如下格式的JSON再通过管理后台的“导入题库”功能批量录入[ { type: 1, content: Java中定义常量使用的关键字是, optionA: const, optionB: final, optionC: static, optionD: private, answer: B, knowledgePoint: Java基础, difficulty: 1, score: 2 } ]爬虫部分我用的是requests加BeautifulSoup页面结构变了抓不到就手动下载数据包。这里要提醒一句抓取公开数据注意遵守目标网站的使用条款毕设用的话建议抓取法律法规允许的公开内容把握好度。4. 完整源码获取与项目部署实践4.1 源码结构使用说明这套完整源码已经打包好了获取方式见文章末尾。源码里包含了初始化SQL脚本、前端页面、后端代码以及额外的Python爬虫脚本、小程序端目录和可视化大屏目录。解压后大概结构如下exam-system/ ├── sql/ │ └── exam.sql ├── backend/ │ ├── src/main/java │ ├── src/main/resources │ └── pom.xml ├── frontend/ │ ├── templates │ └── static ├── spider/ │ └── question_spider.py ├── mini-program/ │ └── pages └── visualization/ └── dashboard.html使用前先阅读README.md里面写了环境版本要求JDK 1.8、Maven 3.6、MySQL 5.7或8.0。SQL脚本里默认创建了exam_db数据库和初始管理员账号测试账号也直接写在README里。有一个细节要留意不同电脑的MySQL密码不一样所以application.yml里的数据库密码需要根据实际情况修改。如果MySQL版本是8.x还需要确认驱动依赖的版本pom.xml里我用的mysql-connector-java版本是8.0.26兼容性没有问题。4.2 本地环境搭建与部署步骤我在本地从零部署这套系统完整步骤可以浓缩成七步安装JDK 1.8并配置环境变量命令行验证java -version安装MySQL创建数据库并导入sql/exam.sql脚本安装Maven配置阿里云镜像加速依赖下载用IDEA打开backend目录等待Maven自动导入依赖修改application.yml里的数据库账号密码运行ExamApplication主类看到“Started ExamApplication”表示启动成功浏览器访问http://localhost:8080用管理员账号登录。这中间最容易出问题的是第4步。IDEA打开Maven项目时会默认使用内置的JDK如果版本不对会报UnsupportedClassVersionError。解决办法是在IDEA的Project Structure里把SDK切换到1.8。另外Maven首次下载依赖可能很慢配置阿里云镜像能明显提速。部署过程中还有一个高频坑端口被占用。默认8080端口如果被其他程序占用了启动会失败。我一般直接改端口在application.yml里加server: port: 8081然后访问http://localhost:8081。或者找出占用端口的进程杀掉Windows下用netstat -ano | findstr 8080命令查看PID再在任务管理器里结束对应进程。4.3 演示准备与答辩策略源码跑通只是第一步答辩演示同样重要。我的经验是准备一套“演示脚本”把重点功能按顺序走一遍控制在10分钟以内。演示顺序建议为管理员登录展示用户列表和基础数据维护教师登录演示创建题库随手添加几道题创建一个新考试设置考试时间选择随机组卷策略确认生成的试卷题目分布合理切换到学生账号进入考试页面答题并提交展示自动判分结果再切回教师账号查看成绩统计图表导出Excel最后展示可视化大屏或者小程序端作为扩展亮点。答辩时被问到最多的三个问题要提前准备好“试题怎么防止学生拷贝或作弊”——讲切屏检测、题目随机、IP记录“自动评分怎么处理主观题”——讲主观题人工阅卷客观题自动比对“如果几百个学生同时交卷系统扛得住吗”——讲数据库连接池、简单并发控制以及可以优化的方向。5. 常见问题与避坑经验5.1 开发过程中最常踩的坑我在写这套系统时踩了不少坑挑几个高频率的分享出来。第一个坑是数据库连接串的时区问题。本地MySQL是8.0驱动也升级了但连接串里没加serverTimezone启动时直接报The server time zone value Öйú±ê׼ʱ¼ä...。解决方法就是前面写的在URL末尾加上serverTimezoneAsia/Shanghai。第二个坑是MyBatis返回的Map键名变成下划线。如果直接用Map接收select结果键名默认是数据库字段名也就是total_score而不是totalScore。前端JS需要用下划线取数据容易混乱。我后来在SQL里写别名AS totalScore保持统一。更推荐的做法是定义VO类收拢字段。第三个坑是前后端分离时的跨域问题。如果前端单独跑在localhost:8081后端跑在8080AJAX请求会出现跨域。可以写一个全局CORS配置类或者在Controller上加CrossOrigin。毕业设计建议写全局配置省得每个接口都加注解。第四个坑是学生重复提交试卷。前端点击交卷后按钮没禁用学生连点几次后端生成了多条exam_record。解决办法是交卷接口里用exam_id student_id做唯一索引第二次提交直接返回“已经交卷”。这些坑在开发和测试阶段会遇到提前了解能让调试过程顺畅很多。5.2 性能优化与并发处理方案在线考试系统的并发压力不会特别大但既然答辩老师爱问我整理了一些可落地的优化方案。首先是数据库层面给exam_record表的(exam_id, student_id)加唯一索引既可以防重复交卷也能加速查询给student_answer表的(exam_id, student_id, question_id)加组合索引解决答题明细查询慢的问题给question表的(subject_id, type)加普通索引组卷时按学科和题型过滤会快很多。其次是缓存层面题库数据基本是读多写少可以用Redis缓存常用学科的题目ID列表组卷时先查缓存缓存未命中再查数据库。考试次数不多的场景下不引入Redis也能跑但引入Redis可以作为一个亮点写进文档里。最后是交卷接口的并发控制。我使用的是乐观锁方案exam_record表加一个version字段更新总分时检查version如果版本号变了说明有其他请求已提交放弃本次更新。代码比较简单Update(UPDATE exam_record SET total_score #{totalScore}, version version 1 WHERE id #{id} AND version #{version}) int updateScoreWithVersion(ExamRecord record);如果updateScoreWithVersion返回0说明并发冲突重新查询最新记录再处理。5.3 如何扩展Python爬虫、小程序与APP很多同学拿到这套系统后想加点“别人没有的东西”。推荐三个方向。一是Python爬虫扩展题库。我之前用requests写了一个爬虫脚本从公开题库网站按“Java基础”“数据结构”等关键词抓题。抓到的数据经过清洗后转成JSON放到项目的spider/目录下再用管理后台的导入功能批量录入。这样题库量可以从几百道扩展到几千道演示组卷时效果更好。抓取时注意控制请求频率加time.sleep(1)避免给对方服务器带来压力。二是小程序端。学生端如果用uni-app重写可以调用后端已有的/api/exam/list和/api/exam/submit接口实现一个移动端在线考试入口。不需要重新写后端只要保证接口返回JSON数据即可。考虑到答辩时间和精力我更推荐只做“查看考试列表 成绩查询”两个页面作为移动场景的补充。三是数据可视化大屏。单独做一个dashboard.html用ECharts展示整体考试情况比如参加人数、各科平均分、合格率、试题正确率等。大屏数据可以通过后端提供的统计接口获取也可以定时读取数据库。演示时用大屏页面作为“管理员驾驶舱”视觉冲击力很强是很多答辩老师会额外关注的点。如果还想做APP最省力的方案是用H5套壳也就是用uni-app或者HBuilderX把前端页面打包成Android安装包。真正原生的Android开发花时间多毕业设计阶段不太划算。写在最后这套系统前前后后我改过三版。第一版是纯JSP Servlet第二版换成了Spring Boot MyBatis第三版补上了爬虫、小程序和数据可视化。说实话在线考试系统最值得钻研的不是增删改查而是组卷策略和防作弊这两块业务逻辑。你把这两个点想透代码写起来反而顺理成章。如果你打算拿它做毕业设计我的建议是先跑通主流程再挑一个模块往深了做。源码是起点不是终点。拿到完整代码后一定要自己跑一遍改一改理解每一个关键接口为什么这么设计。只有能讲清楚每一行代码背后的逻辑这个项目才算真正属于你答辩自然也能底气十足。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Windows 上 Codex CLI 与 CC Switch 配置 DeepSeek API 实战指南 2026/10/1 2:12:46

Windows 上 Codex CLI 与 CC Switch 配置 DeepSeek API 实战指南

1. 为什么要在 Windows 上折腾 Codex CLI 加 CC Switch 这套组合在 Windows 上把 AI 编程助手跑起来,很多人第一反应是装个桌面客户端或者用网页版。但如果你像我一样,日常大量时间泡在终端里,就会觉得来回切窗口特别割裂。Codex CLI 这类终端…

阅读更多 →
Pogo Pin压缩裕量的Python量化检测与产线闭环实践 2026/10/1 2:12:46

Pogo Pin压缩裕量的Python量化检测与产线闭环实践

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

阅读更多 →
优先级反转全解析:从RTOS协议到裸核编程的隐蔽陷阱 2026/10/1 2:12:45

优先级反转全解析:从RTOS协议到裸核编程的隐蔽陷阱

优先级反转这词,做嵌入式或者实时系统的人多少都听过,但真正把它吃透、能讲清楚来龙去脉的人其实不多。尤其当你从RTOS切回裸核编程,或者反过来从裸核切到RTOS时,这个问题会以各种变形冒出来,让人防不胜防。今天我就把…

阅读更多 →
GESP C++一级:17个语法基元与计算机思维启蒙 2026/10/1 2:12:45

GESP C++一级:17个语法基元与计算机思维启蒙

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

阅读更多 →
马德拉酒入门:从航海传奇到不朽的氧化风格 2026/10/1 2:12:39

马德拉酒入门:从航海传奇到不朽的氧化风格

第一次在里斯本老城一家不起眼的酒吧里喝到马德拉酒(Madeira)时,我一度以为这瓶酒坏了。入口是相当明显的氧化气息,像老雪利,又带着一股焦糖、坚果和微微的酸度在舌面上拉锯了很久。酒保不紧不慢地告诉我,这…

阅读更多 →
Transformers实战指南:从预训练模型加载到文本生成 2026/10/1 2:12:38

Transformers实战指南:从预训练模型加载到文本生成

1. 为什么我上手第一件事,是放弃自己训练、转向下载预训练模型1.1 我最初的思路完全跑偏了先还原一下我自己的经历。早期做 NLP 项目的时候,我以为所谓的"掌握 Transformers",就是要从零把注意力机制搭出来,再拿自己的语…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉