Java+Vue在线考试系统毕业设计:从环境搭建到防作弊策略
1. 毕业设计选在线考试系统先想清楚要解决什么问题如果你正在为计算机专业的毕业设计选题发愁看到“在线考试系统”这个题目第一反应可能是“这个题目太老了会不会没新意”或者“技术栈看起来就是增删改查能过吗”。我做过也看过不少毕业设计一个项目能不能拿高分题目本身的新旧只是表面关键在于你如何定义问题、拆解需求并用技术文档和代码清晰地呈现你的解决方案。在线考试系统恰恰是一个能很好展示你综合能力的题目它业务逻辑清晰但细节坑点多技术栈成熟但架构设计有讲究功能看似简单但安全性和并发要求不低。这个基于 Java Vue Spring Boot MySQL 的经典组合解决的问题非常具体把传统线下纸质考试流程出题、组卷、考试、监考、阅卷、统计数字化。它适合两类同学一是想踏踏实实做一个功能完整、结构清晰、能讲清楚技术选型和设计思路的项目二是希望项目有足够的扩展性方便在答辩时应对老师的深度提问。最值得你关注的不是“我又实现了一个增删改查”而是如何在一个熟悉的业务场景下处理并发提交、定时任务、权限细分、前后端分离协作这些工程化问题。下面我就按实际开发的顺序带你从零开始把这个系统做扎实并避开那些容易让项目“看起来像玩具”的坑。2. 环境与工具准备别在第一步卡住很多同学的项目跑不起来问题往往出在环境上。这套技术栈Java 17, Spring Boot 3.x, Vue 3, MySQL 8现在已经是主流但版本对齐和工具配置是第一个门槛。2.1 后端开发环境清单后端是系统的基石环境要稳。JDK必须用JDK 17 或更高版本。Spring Boot 3.x 最低要求就是 Java 17。不要在环境变量里留多个版本容易导致java: 警告: 源发行版 17 需要目标发行版 17这类编译问题。安装后在命令行用java -version和javac -version双重确认。Maven管理项目依赖的生命线。建议用 3.8 版本。配置好本地仓库路径并修改settings.xml中的镜像源为阿里云等国内源能极大加快依赖下载速度。IDEIntelliJ IDEA社区版或旗舰版均可。它对 Spring Boot 的支持最好。用 IDEA 新建 Spring Boot 项目时注意勾选Spring Web,Spring Data JPA,MySQL Driver,Lombok这些核心依赖。MySQL版本 5.7 或 8.0。重点不是安装而是安装后的配置。确保服务成功启动并记住 root 密码。新手常遇到安装mysql启动服务报错多半是端口 3306 被占用或者之前安装的 MySQL 未卸载干净。彻底卸载旧版本再重装一次是最快的解决办法。数据库客户端Navicat、DBeaver 或 IDEA 自带的数据库工具都行用于直观地建库、执行 SQL 和查看数据。2.2 前端开发环境清单前端负责用户交互环境要轻快。Node.js版本建议 18。它是 Vue 和包管理工具 npm 的运行环境。安装后同样用node -v和npm -v验证。Vue CLI 或 Vite对于新项目强烈推荐使用Vite作为构建工具创建 Vue 3 项目。它比传统的 Vue CLI 更快、更现代。执行npm create vuelatest按提示创建即可。包管理器npm 或 yarn 都可以。国内同样建议配置淘宝镜像源npm config set registry https://registry.npmmirror.com。IDEVisual Studio Code是前端开发的首选轻量且插件生态丰富。必装插件Volar (Vue 语言支持)、ESLint、Prettier。2.3 项目初始化与连接环境齐备后第一步不是写代码而是把前后端工程创建好并确保它们能“对话”。创建后端工程 在 IDEA 里用 Spring Initializr 创建项目Group 填com.yournameArtifact 填exam-system。依赖选择Spring Web, Spring Data JPA, MySQL Driver, Lombok。生成后用 IDEA 打开。配置数据库连接 打开src/main/resources/application.properties或application.yml配置数据库连接。这是第一个关键配置点。# application.yml 示例 spring: datasource: url: jdbc:mysql://localhost:3306/exam_db?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update # 初期开发用update自动建表。生产环境务必改为none或validate并手动执行SQL脚本。 show-sql: true # 控制台打印SQL调试用 properties: hibernate.format_sql: true执行主启动类如果控制台没有报数据库连接错误且看到类似“Tomcat started on port(s): 8080”的日志说明后端基础环境通了。创建前端工程 在另一个文件夹打开命令行执行npm create vuelatest项目名输入exam-frontend。根据提示选择需要的特性Router, Pinia, ESLint。创建完成后进入目录npm install安装依赖再npm run dev启动开发服务器。通常默认在http://localhost:5173。解决跨域问题 前后端分离开发前端5173端口访问后端8080端口会遇到跨域问题。在后端创建一个配置类解决import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) // 所有接口 .allowedOriginPatterns(*) // 允许所有源生产环境应指定具体前端地址 .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .allowCredentials(true) .maxAge(3600); } }至此你的开发环境已经就绪前后端可以通信了。接下来进入核心功能的设计与实现。3. 数据库设计与核心业务实体建模数据库设计是系统的骨架设计得好后续编码事半功倍。在线考试系统的核心实体并不复杂但关系需要理清。3.1 核心表结构设计不要一上来就建表。先画个简单的ER图理清用户、角色、试卷、试题、考试记录、成绩这些实体之间的关系。这里给出一个最核心的表结构设计思路用户表 (sys_user)字段id, username登录名, password加密存储, real_name, phone, email, avatar, status状态, create_time。核心密码必须用 BCryptPasswordEncoder 等工具加密明文存储是致命安全漏洞。角色表 (sys_role)与用户角色关联表 (sys_user_role)角色表id, role_name (如admin, teacher, student), role_key, description。关联表user_id, role_id。实现用户和角色的多对多关系。这是权限控制的基础。试题表 (exam_question)字段id, question_type题型单选、多选、判断、填空、简答, content题干, optionsJSON格式存储选项如[“A. xxx”, “B. xxx”], answer标准答案客观题存选项如“A”或[“A”, “C”]主观题可为空, analysis解析, subject_id所属科目, difficulty难度, create_by, create_time。关键点options字段用 JSON 类型MySQL 5.7支持或 TEXT 存储便于前端渲染。answer字段根据题型灵活处理。试卷表 (exam_paper)字段id, paper_name, total_score, pass_score, exam_duration考试时长分钟, start_time, end_time, status未发布/已发布/已结束, create_by, create_time。它定义了一次考试的“模板”。试卷-试题关联表 (exam_paper_question)字段id, paper_id, question_id, score本题在本试卷中的分值。实现试卷和试题的多对多关系。一份试卷包含多道题一道题可以被多份试卷引用。考试记录表 (exam_record)字段id, user_id, paper_id, start_time, submit_time, used_time用时, total_score, final_score, status考试中/已提交/已批阅。每次学生开始考试就生成一条记录。考试答案表 (exam_answer)字段id, record_id, question_id, user_answer考生答案, question_score本题得分阅卷后更新。与考试记录是多对一关系。存储考生每道题的作答情况。3.2 使用 JPA 实体类映射在 Spring Boot 中我们使用 JPAHibernate来管理实体和数据库的映射。以User和Question为例// User.java Entity Table(name sys_user) Data // Lombok 注解自动生成getter/setter等 public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; Column(unique true, nullable false) private String username; Column(nullable false) private String password; private String realName; // ... 其他字段及 getter/setter (由 Data 生成) } // Question.java Entity Table(name exam_question) Data public class Question { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; Enumerated(EnumType.STRING) // 将枚举存为字符串 private QuestionType questionType; // 枚举类SINGLE_CHOICE, MULTI_CHOICE, TRUE_FALSE, FILL_BLANK, SHORT_ANSWER Column(columnDefinition TEXT) private String content; Column(columnDefinition JSON) private String options; // 存储为JSON字符串 private String answer; // ... 其他字段 }注意在开发初期spring.jpa.hibernate.ddl-auto设为updateJPA 会根据实体类自动创建或更新表结构。但在项目最终提交或部署前一定要将其改为none或validate并导出正式的 SQL 建表脚本 (schema.sql) 和数据初始化脚本 (data.sql) 放在resources目录下。这是体现工程规范的重要一步。4. 后端 API 开发从用户登录到考试提交后端 API 是系统的发动机。我们采用经典的 Controller-Service-Repository 三层架构。4.1 用户认证与权限控制这是系统的安全门必须做扎实。密码加密 在 Spring Security 配置类中配置一个密码编码器 Bean。Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }用户注册或修改密码时必须调用passwordEncoder.encode(rawPassword)进行加密后再存入数据库。实现登录接口 创建一个AuthController接收用户名和密码。Service 层根据用户名查询用户。使用passwordEncoder.matches(rawPassword, encodedPassword)验证密码。验证通过后生成一个 Token可以用 JWT将用户ID、角色等信息存入 Token返回给前端。切勿在返回信息中包含密码等敏感信息。权限拦截 使用 Spring Security 或自定义拦截器实现。角色权限在 Controller 的方法上使用PreAuthorize(“hasRole(‘TEACHER’)”)或PreAuthorize(“hasAuthority(‘exam:paper:create’)”)注解。操作权限例如老师只能批改自己班级学生的试卷。这需要在 Service 层进行更精细的数据权限校验比如判断当前登录用户ID是否与数据的所有者ID匹配。4.2 核心业务接口开发按照业务模块划分包结构如controller.user,controller.paper,controller.exam。试题管理接口(QuestionController)POST /api/questions新增试题。前端传来 JSON包含题型、题干、选项数组、答案等。Service 层将选项数组转为 JSON 字符串存入。GET /api/questions分页查询试题列表。支持按题型、科目、难度筛选。PUT /api/questions/{id}修改试题。DELETE /api/questions/{id}删除试题逻辑删除加个deleted字段标记更稳妥。试卷管理接口(PaperController)POST /api/papers创建试卷。传入试卷基本信息和一个试题ID及分值的列表。Service 层需要在一个事务内先保存试卷主表再批量保存试卷-试题关联表。GET /api/papers/{id}获取试卷详情包括其下的所有试题及分值。这里涉及联表查询可以在 Repository 中写Query或使用EntityGraph来优化避免 N1 查询问题。考试过程接口(ExamController)POST /api/exam/start学生开始考试。传入试卷ID检查时间、权限后创建一条ExamRecord状态为“考试中”并返回给前端。GET /api/exam/{recordId}学生获取考试试卷内容。根据考试记录ID关联查询出试卷和试题。注意此时返回的试题不应包含标准答案字段。POST /api/exam/submit-answer学生提交一道题的答案。这是一个高频接口。前端定时或答题时触发将recordId,questionId,userAnswer传来。Service 层查找或创建对应的ExamAnswer记录进行保存。这里要考虑并发问题但毕业设计场景下用数据库事务和唯一索引通常可以应对。POST /api/exam/final-submit学生最终交卷。更新ExamRecord的状态为“已提交”计算客观题得分对比标准答案更新ExamAnswer中的question_score和ExamRecord中的客观题总分。主观题得分留待老师批阅。阅卷与统计接口GET /api/teacher/records老师查看待批阅的考试记录列表。POST /api/teacher/mark老师批阅主观题。传入recordId,questionId,score更新对应ExamAnswer的得分并重新计算该考试记录的总分 (final_score)。GET /api/teacher/statistics/{paperId}统计某次考试的平均分、最高分、最低分、分数段分布等。这里会用到 JPA 的聚合查询或直接写原生 SQL。4.3 服务层与事务管理业务逻辑主要写在 Service 层。对于涉及多表写入的操作必须使用Transactional注解保证事务性。例如创建试卷Service RequiredArgsConstructor // Lombok 注解为final字段生成构造函数 public class PaperService { private final PaperRepository paperRepository; private final PaperQuestionRepository paperQuestionRepository; Transactional // 关键保证试卷头和试题关联同时成功或失败 public Paper createPaper(PaperCreateDTO dto, Long creatorId) { // 1. 保存试卷主信息 Paper paper new Paper(); // ... 设置属性 paper.setCreateBy(creatorId); Paper savedPaper paperRepository.save(paper); // 2. 批量保存试卷-试题关联 ListPaperQuestion paperQuestions dto.getQuestionItems().stream() .map(item - { PaperQuestion pq new PaperQuestion(); pq.setPaperId(savedPaper.getId()); pq.setQuestionId(item.getQuestionId()); pq.setScore(item.getScore()); return pq; }).collect(Collectors.toList()); paperQuestionRepository.saveAll(paperQuestions); return savedPaper; } }5. 前端 Vue 3 开发构建用户界面与交互前端负责把后端 API 变成用户可操作的界面。我们使用 Vue 3 的 Composition API 和 Pinia 状态管理。5.1 项目结构与环境配置使用 Vite 创建的项目结构清晰。需要安装几个核心依赖npm install axios pinia vue-router element-plusaxios用于发送 HTTP 请求。piniaVue 官方推荐的状态管理库比 Vuex 更简单。vue-router路由管理。element-plusUI 组件库能快速搭建美观界面。你也可以选择 Ant Design Vue 等。在vite.config.js中可以配置代理解决开发时的跨域问题虽然后端已配置CORS但代理可以统一管理请求路径import { defineConfig } from vite import vue from vitejs/plugin-vue export default defineConfig({ plugins: [vue()], server: { proxy: { /api: { target: http://localhost:8080, // 后端地址 changeOrigin: true, // rewrite: (path) path.replace(/^\/api/, ) // 如果需要重写路径 } } } })5.2 状态管理与请求封装创建 Pinia Store 在src/stores下创建auth.store.js管理用户登录状态和 Token。// src/stores/auth.store.js import { defineStore } from pinia import { ref } from vue import { login as loginApi } from /api/auth import router from /router export const useAuthStore defineStore(auth, () { const token ref(localStorage.getItem(token) || ) const userInfo ref(JSON.parse(localStorage.getItem(userInfo) || {})) const login async (username, password) { const res await loginApi({ username, password }) token.value res.data.token userInfo.value res.data.user // 存储到本地 localStorage.setItem(token, token.value) localStorage.setItem(userInfo, JSON.stringify(userInfo.value)) // 跳转到首页 router.push(/) } const logout () { token.value userInfo.value {} localStorage.removeItem(token) localStorage.removeItem(userInfo) router.push(/login) } return { token, userInfo, login, logout } })封装 Axios 实例 在src/utils/request.js中创建 axios 实例并添加请求拦截器自动携带 Token和响应拦截器统一处理错误。import axios from axios import { useAuthStore } from /stores/auth.store import { ElMessage } from element-plus import router from /router const service axios.create({ baseURL: /api, // 代理前缀 timeout: 10000 }) // 请求拦截器 service.interceptors.request.use( config { const authStore useAuthStore() if (authStore.token) { config.headers[Authorization] Bearer ${authStore.token} } return config }, error { return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response { const res response.data // 假设后端统一返回格式为 { code: 200, data: {}, msg: success } if (res.code ! 200) { ElMessage.error(res.msg || Error) // 如果是未登录或token过期 if (res.code 401) { const authStore useAuthStore() authStore.logout() router.push(/login) } return Promise.reject(new Error(res.msg || Error)) } return res }, error { ElMessage.error(error.message || Request Error) return Promise.reject(error) } ) export default service5.3 核心页面开发登录页 简单的表单调用authStore.login。成功后Token 和用户信息会被存储并跳转。学生考试页面 这是前端最复杂的页面之一。路由/exam/:recordId。加载数据进入页面时根据recordId调用GET /api/exam/{recordId}获取试卷和试题。渲染试题根据questionType动态渲染不同的组件单选、多选、填空输入框等。选项options是一个 JSON 字符串需要JSON.parse()后渲染。答题与保存实时保存每个题目答案变化时可以防抖例如延迟500ms后调用POST /api/exam/submit-answer接口保存。这能防止页面意外关闭导致答案丢失。倒计时根据试卷的exam_duration和考试记录的start_time计算剩余时间用setInterval实现倒计时时间到自动交卷。交卷点击交卷按钮调用POST /api/exam/final-submit提交后跳转到成绩页面。!-- 简化的考试页面组件片段 -- template div v-ifloading加载中.../div div v-else h2{{ paper.paperName }} - 剩余时间{{ formatTime(remainingTime) }}/h2 div v-for(q, index) in questions :keyq.id h3第{{ index 1 }}题 ({{ q.score }}分) {{ q.questionType }}/h3 p{{ q.content }}/p !-- 单选题渲染 -- div v-ifq.questionType SINGLE_CHOICE el-radio-group v-modelanswers[q.id] changedebouncedSave(q.id) el-radio v-for(opt, optIndex) in JSON.parse(q.options) :labelString.fromCharCode(65 optIndex) {{ opt }} /el-radio /el-radio-group /div !-- 其他题型... -- /div el-button typeprimary clickhandleFinalSubmit最终交卷/el-button /div /template script setup import { ref, onMounted, onUnmounted } from vue import { useRoute } from vue-router import { getExamPaper, submitAnswer, finalSubmit } from /api/exam import { ElMessageBox } from element-plus const route useRoute() const recordId route.params.recordId const paper ref({}) const questions ref([]) const answers ref({}) // 存储答案结构{ questionId: userAnswer } const remainingTime ref(0) let timer null const loadData async () { const res await getExamPaper(recordId) paper.value res.data.paper questions.value res.data.questions // 初始化答案如果之前保存过可以从后端获取 // 初始化倒计时... } const debouncedSave _.debounce((questionId) { // 需引入 lodash 或自己实现防抖 saveAnswer(questionId) }, 500) const saveAnswer async (questionId) { await submitAnswer({ recordId, questionId, userAnswer: answers.value[questionId] }) } const handleFinalSubmit async () { try { await ElMessageBox.confirm(确认交卷吗, 提示, { type: warning }) await finalSubmit(recordId) // 跳转到结果页 } catch (error) { // 用户取消 } } onMounted(() { loadData() // 启动倒计时定时器 }) onUnmounted(() { if (timer) clearInterval(timer) }) /script教师管理后台 使用 Element Plus 的Layout、Menu、Table、Form、Dialog等组件搭建。核心是表格数据的增删改查和分页与后端对应接口对接即可。注意表单验证和操作确认提示。5.4 打包与部署开发完成后需要打包部署。前端打包npm run build默认会在dist目录生成静态文件。关于vue 打包 如何加后缀名如给资源文件加哈希Vite 默认已经配置好了。你可以在vite.config.js中通过build.rollupOptions.output进行更细致的配置。后端打包 使用 Maven 打包成可执行的 JAR 文件。mvn clean package -DskipTests在target目录下会生成exam-system-0.0.1-SNAPSHOT.jar。部署方式传统部署将前端dist目录下的文件放到后端的src/main/resources/static目录下Spring Boot 默认提供静态资源服务然后打包成一个 JAR在服务器上用java -jar exam-system.jar运行。这种方式简单但前后端耦合。前后端分离部署推荐前端将dist目录文件部署到 Nginx 或 Apache 等 Web 服务器。后端将 JAR 包部署到服务器使用nohup java -jar exam-system.jar 或 systemd 等方式在后台运行。此时前端需要配置生产环境的 API 地址修改axios的baseURL为后端公网IP/域名后端需要精确配置 CORS 允许的前端地址替换开发时的*。6. 毕业设计提分点与常见问题避坑一个能脱颖而出的毕业设计除了功能完整还需要体现你的思考深度和工程能力。6.1 可以深入挖掘的提分点考试防作弊切屏检测前端监听visibilitychange事件记录切屏次数超过阈值警告或强制交卷。数据可随答案一起提交到后端记录。题目乱序与选项乱序后端组卷时对试题列表和每个选择题的选项进行随机排序生成一个“乱序种子”存入考试记录。前端根据这个种子还原乱序保证每个考生看到的顺序不同。限时答题除了整场考试倒计时还可以为每道题设置最大答题时长需后端支持逻辑。实时通信选做加分项使用 WebSocket 实现考试开始广播、考试结束提醒、教师端实时监控在线考生数、学生端实时显示剩余时间避免前端定时器误差累积。自动化部署与容器化编写 Dockerfile将前后端分别容器化并用docker-compose.yml编排 MySQL、后端、前端服务。这能极大简化部署流程并在答辩中展示你的运维意识。了解jenkins 部署 springboot 几种方式可以在文档中简述 CI/CD 流程即使不实现也表明你关注了工程化实践。性能与缓存热门且不常变的数据如试题分类、科目列表可以使用 Spring Cache如 Redis进行缓存减轻数据库压力。分页查询一定要做并且确保 SQL 有合适的索引。6.2 开发与答辩中常见问题前端跨域问题确保后端 CORS 配置正确且前端请求地址无误。开发时用代理生产环境用 Nginx 反向代理或精确配置 CORS 源。数据库连接失败检查 MySQL 服务是否启动连接字符串、用户名、密码是否正确以及数据库exam_db是否已创建。JPA 关联查询 N1 问题使用EntityGraph或Query中的JOIN FETCH一次性加载关联数据避免循环查询。事务失效确保Transactional注解加在 Service 的 public 方法上且调用方来自类外部Spring 代理机制。自调用会导致事务失效。前端路由刷新 404这是 Vue Router 的 history 模式在非根路径部署时的典型问题。需要在 Nginx 配置中添加try_files $uri $uri/ /index.html;。内存溢出 (OutOfMemoryError)如果处理大批量数据如导出所有考生成绩注意流式读取或分页处理避免一次性加载到内存。调整 JVM 启动参数如-Xmx512m也是一种方法。答辩被问“创新点”不要只说“实现了增删改查”。可以从业务创新如防作弊策略、智能组卷算法、技术创新如使用 WebSocket 实现实时性、用 Docker 容器化部署、体验创新如响应式设计、交卷实时反馈等角度阐述。即使实现得简单有思考过程也能加分。7. 项目文档与源码整理最后一个整洁、规范的项目仓库和文档是给评审老师留下好印象的关键。README.md项目门面。必须包含项目名称与简介。技术栈。系统功能模块图用文字或截图描述。快速开始如何配置环境、导入数据库、启动前后端。这是最重要的部分步骤要清晰。项目结构说明。部署说明。SQL 脚本在docs/sql目录下提供完整的数据库建表脚本 (schema.sql) 和必要的初始数据脚本 (data.sql如管理员账号、科目数据)。配置说明在docs下提供application.yml的生产环境配置示例并说明关键配置项如数据库连接、Redis、文件上传路径等。API 文档可以使用 Swagger/OpenAPI 自动生成。在 Spring Boot 中集成springdoc-openapi-starter-webmvc-ui访问/swagger-ui.html即可。将生成的文档地址或导出文件也放入文档。源码注释关键类、方法、复杂逻辑处添加简明注释。特别是业务核心 Service 层和自定义工具类。答辩 PPT 与演示PPT 结构选题背景、系统目标、技术选型、核心功能演示、数据库设计、关键代码讲解、项目总结与展望。演示准备提前录屏或准备好稳定的演示环境。重点演示用户登录、角色权限差异老师出题/学生考试、完整的考试流程、自动阅卷、成绩统计。确保演示过程流畅避免现场调试。这个项目麻雀虽小五脏俱全。把它做扎实、讲清楚足以支撑起一份优秀的本科毕业设计。最关键的是通过这个过程你能把 Java 后端、Vue 前端、数据库、网络、部署这一套流程真正串起来这是比任何“新颖”题目都更宝贵的经验。

相关新闻

大模型RAG知识库全链路实战:从零构建高性能检索增强生成系统

大模型RAG知识库全链路实战:从零构建高性能检索增强生成系统

这次我们来看一个关于大模型RAG知识库的实战教程项目。这个项目不是单纯的概念讲解,而是聚焦于“全链路优化方案”与“工程级落地实战”,目标是在一周内让你掌握从零到一构建高性能RAG系统的核心能力,避开99%的常见坑点。对于想将大模型与私有…

2026/8/3 10:01:02阅读更多 →
杰理之DAC没有设置为高阻状态【篇】

杰理之DAC没有设置为高阻状态【篇】

void hw_close_dac(void) { memset(JL_ADDA, 0x0, sizeof(JL_ADDA_TypeDef)); SFR(JL_ADDA->DAA_CON2, 15, 1, 1); SFR(JL_ADDA->DAA_CON2, 5, 1, 1); }

2026/8/3 10:01:02阅读更多 →
QwenPaw 2.0.1实战:从对话AI到自动化Agent的工程化构建指南

QwenPaw 2.0.1实战:从对话AI到自动化Agent的工程化构建指南

上周在帮一个朋友处理一个自动化任务时,他提了一个问题:“现在这些AI工具,单次对话都挺聪明,但我想让它每天定时帮我检查邮件、整理摘要、再根据内容生成报告,这一套流程下来,每次都得我手动触发、复制粘贴…

2026/8/3 10:01:02阅读更多 →
基于ARKit与UE5的实时面部动捕方案:从iPhone到虚拟人的表情同步

基于ARKit与UE5的实时面部动捕方案:从iPhone到虚拟人的表情同步

1. 项目概述:从iPhone到UE5虚拟人的表情桥梁 最近在捣鼓一个挺有意思的项目,核心目标就是用你手边的iPhone,实时捕捉你的面部表情,然后驱动UE5里的虚拟人做出完全同步的表情。听起来像是电影特效团队才玩的东西?其实不…

2026/8/3 11:13:28阅读更多 →
UE5蓝图物理交互:用Cable组件与PhysicsConstraint实现动态吊灯

UE5蓝图物理交互:用Cable组件与PhysicsConstraint实现动态吊灯

1. 项目概述:从静态到动态的吊灯交互在UE5里做场景,最怕的就是东西“太死”。一个精心搭建的室内环境,如果所有物件都纹丝不动,总感觉少了点灵魂。尤其是像吊灯这种生活中常见、本身就带有轻微晃动属性的物件,把它做活…

2026/8/3 11:13:28阅读更多 →
5分钟快速优化Switch大气层系统:从新手到高手的终极指南

5分钟快速优化Switch大气层系统:从新手到高手的终极指南

5分钟快速优化Switch大气层系统:从新手到高手的终极指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否曾经因为Switch游戏加载缓慢而感到沮丧?或者因为系统…

2026/8/3 11:13:28阅读更多 →
【大模型LLM学习】RLPR——模型的答案置信度作为Reward

【大模型LLM学习】RLPR——模型的答案置信度作为Reward

1 常用的Reward类型 1.1 基于人类/模型偏好的奖励 代表方法: Bradley-Terry Model, DPO/IPD 隐式奖励工作原理: 收集 (yw,yl)(y_w, y_l)(yw​,yl​) 偏好对(ywy_wyw​ 为优选回复,yly_lyl​ 为劣选回复),训…

2026/8/3 11:13:27阅读更多 →
Unity Addressables在微信小游戏加载性能优化实战

Unity Addressables在微信小游戏加载性能优化实战

1. 项目概述:当Unity Addressables遇上微信小游戏 如果你正在用Unity开发微信小游戏,并且已经引入了Addressables资源管理系统来应对包体大小和热更新的挑战,那么“加载慢”这个问题,大概率已经成为了你项目中的“阿喀琉斯之踵”。…

2026/8/3 11:13:27阅读更多 →
终极指南:如何在Nintendo Switch上轻松安装大气层系统

终极指南:如何在Nintendo Switch上轻松安装大气层系统

终极指南:如何在Nintendo Switch上轻松安装大气层系统 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要解锁你的Nintendo Switch全部潜能,体验海量自制软件和游戏…

2026/8/3 11:11:27阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →