news 2026/10/10 21:00:26

Spring Boot网上图书商城毕设全流程详解:从数据库到部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot网上图书商城毕设全流程详解:从数据库到部署

又到了一年一度的毕业设计季节,群里满是“求一个图书商城毕设”“Spring Boot项目跑不起来”“数据库连不上怎么办”之类的求助。坦白说,像“网上图书商城”这种题目,几乎是计算机毕业设计里的常青树,市面上也确实流传着各种版本的“程序+源码+数据库”资源包。但我知道大多数人拿到的所谓源码,往往连开发环境都跑不起来,更不要提理解里面的业务逻辑、应对答辩追问。如果你正在被这个题目折磨,或者想认真把这类Spring Boot项目吃透,这篇东西应该能帮到你。

我不打算给你一份“照着敲完就能交差”的说明书,而是从实际做一个Spring Boot网上图书商城的完整流程出发,把选题价值、技术选型、功能拆解、数据库设计、调试部署、论文写作整个链路都过一遍。里面有不少细节,是我自己当初踩坑踩出来的,也是答辩时最容易被人抓住不放的地方。文章里我会直接给出可用的建表SQL、核心接口示例和部署命令的参考写法,你可以边看边对照自己手头的环境。

1. 为什么说网上图书商城是Spring Boot毕设的黄金选题

1.1 需求边界清晰,功能链路完整

每年毕业设计选题,老师最怕的就是学生选一个需求特别发散、或者完全没法落地的题目。比如“智能校园生活平台”,听着很唬人,真要问你要做哪些功能、几个角色、怎么演示,很多人自己都说不清。“网上图书商城”这类题目的好处在于,它天然有一条完整的电商业务链:用户浏览图书、加入购物车、生成订单、处理库存、后台管理图书分类,甚至还能延伸到支付模拟、数据统计、权限管理。需求边界很清楚,单人完成的周期也可控。

这条业务链对技术栈的覆盖也非常合适。你至少会用到Spring Boot来搭接口,用到关系型数据库存用户和订单,用到前端页面来做交互,再配上登录校验和事务处理。换句话说,一个图书商城做完,你对Java Web开发的主线知识也就有了一个整体认知。相比那种只写几个CRUD接口的“管理系统”,图书商城的业务关联性更强,答辩时能讲的东西也多得多。

1.2 同质化严重,细节才是拉开差距的地方

也需要诚实提醒你:正因为这个题目太常见,每年每个班基本都有三五个“图书商城”。这会带来一个麻烦——如果你的项目只是把网上的通用源码跑起来,连代码结构都讲不清楚,答辩老师一眼就能看出来。相反,如果你在细节上做了加法,比如订单状态机、库存防超卖、精确分页搜索、合理的权限分层,哪怕功能总量跟别人差不多,提问时也能明显更站得住脚。经验是:这类老题目,不是不能做,而是必须做出可解释的技术增量。后面我会专门讲哪些地方值得加这点“增量”。

2. 技术选型与项目初始化:先把开发环境搞到能跑

2.1 版本怎么选:Spring Boot 2.7还是3.x

拿到项目的第一件事,不是急着看代码,而是确认它的Spring Boot版本。目前网上流传的教程和开源商城,大部分都是基于Spring Boot 2.x写的,最常见的是2.7.x。对于毕业设计,我个人的建议是尽量选择2.7.x而不是3.x,原因很现实:Spring Boot 3要求JDK 17起步,许多老教程里的第三方整合包还停留在javax命名空间,换到3.x需要改动不少import,而2.7基于javax且兼容JDK 8,也就是学校机房和绝大多数教程的默认环境。如果你确信用的是JDK 17,可以选3.x,但别在毕设阶段跟自己过不去。

新建项目或导入已有源码时,最终需要确认的是JDK版本、Maven版本、依赖仓库三者的匹配。经常看到有人折腾半天跑不起来,最后发现是IDEA里Project Structure的SDK和pom.xml里指定的版本对不上。我用的是IDEA 2024,创建Spring Boot项目时直接用Spring Initializr生成,再手动把版本号调到2.7.18。核心pom依赖大概长这样:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>

2.2 包结构与分层:别把Controller写成万字长文

不管你的源码是下载的还是自己搭的,包结构都应该保持清晰,这也是答辩老师一定会看的东西。我习惯的划分是controller、service、mapper、entity(或者pojo)、config、common几个主包。controller只负责接收参数和返回结果,service里面放业务逻辑,mapper(如果是MyBatis)负责数据库交互。很多同学图省事,把业务代码统统塞进Controller,项目是能跑,但论文没法写,答辩时老师问“你这个业务逻辑在哪一层”,你根本答不上来。

再说一下持久层选型。Spring Boot官方虽然主推Spring Data JPA,但我的经验是,在毕设项目里MyBatis-Plus反而更顺手。它既保留了SQL可控能力,又提供内置的CRUD方法,写分页只需要一个Page对象,极大减少样板代码。要是你用的是纯MyBatis,那每个实体都要手写Mapper XML,工作量会大不少。用MyBatis-Plus的时候,分页记得加PaginationInnerInterceptor,不然你在IPage里传了页码也没有分页效果。这个坑我当年踩过,查了半天数据总是全量返回。

2.3 数据库连接与项目启动配置

开发环境里最容易出问题的是application.yml配置,尤其是数据库地址、账号、密码、时区。一个典型的MySQL配置如下:

server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/book_mall?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 redis: host: localhost port: 6379 mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true

有几个要特别注意的地方:MySQL 8.x必须用com.mysql.cj.jdbc.Driver,如果写成了com.mysql.jdbc.Driver会直接启动失败;serverTimezone必须设置,否则你本地跟MySQL时间换算会报异常;如果项目里配了Redis而你本地没有安装Redis,启动的时候也会报连接失败,很多网上下载的商城项目都带了Redis缓存,拿到源码时先看一眼依赖和配置,别让它成为第一个坑。

3. 核心功能模块拆解:图书商城到底要写多少东西

3.1 前台用户端的接口与页面

一个能撑起毕设的图书商城,前台至少需要这些功能:用户注册登录、图书分类展示、图书搜索(按书名、作者、分类)、图书详情页、购物车管理、订单提交与结算、订单列表与详情、个人信息修改。逐个说,登录方案到后面再细聊;图书展示菜单栏按二级分类筛;搜索建议直接用MyBatis-Plus的Like条件,配合Page分页,就能满足答辩要求;购物车本质上是当前用户的图书清单,可以放在数据库表里,也可以用Redis实现,但我建议你存在数据库里面,因为演示时刷新页面数据还在,逻辑也更好解释。

核心接口示例,删减版如下:

@RestController @RequestMapping("/api/book") public class BookController { @Resource private IBookService bookService; @GetMapping("/page") public Result page(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer categoryId) { Page<Book> page = bookService.queryBookPage(pageNum, pageSize, keyword, categoryId); return Result.success(page); } @GetMapping("/detail/{id}") public Result detail(@PathVariable Integer id) { return Result.success(bookService.getById(id)); } }

这里我用IBookService而不是BookService接口名,是因为MyBatis-Plus的Service接口规范。你手头的源码如果不叫这个名字,关系也不大,关键是理解分层逻辑:控制器只负责接受请求、调用服务、返回统一的结果对象,真正拼SQL的条件拼接放到service里实现。

3.2 后台管理端:没它项目少了灵魂

图书商城的管理端通常包括:分类管理(增删改查)、图书管理(上架、下架、库存修改)、订单管理(发货、查看详情)、用户管理(列表、禁用)、数据统计(销售排行、图书分类占比)。做管理端时,我的建议是跟前台复用同一套后端接口,只是用拦截器或权限来控制访问。比如管理员修改库存的接口路径是/api/admin/book/update,前台普通用户没有这个权限。

后台页面的形式可以选FreeMarker或Thymeleaf服务端渲染,也可以做成Vue独立项目再构建后放进Spring Boot。多数商城毕设用的是Vue + Element UI,由Axios请求后端接口处理数据。如果你对前端不熟也来不及学,那用Thymeleaf模板直接渲染后台页面其实更稳,毕竟少了一层跨域和构建问题。我最初用的前后端分离方案,部署的时候构建了一份前端dist放进Spring Boot的resources/static,跑起来效果跟以后端渲染是一样的,只是要注意前端项目的api地址得写成相对路径,不然上线后请求会指向localhost。

3.3 登录认证:Shiro、Security还是拦截器

登录认证这个点,几乎是答辩必问。网上图书商城比较常见的方案有三种:Spring Security、Apache Shiro、自定义拦截器 + Session/JWT。Spring Security虽然功能全面,但是配置复杂,出了错排查半天,不适合赶工期的毕设。Shiro的配置相对简单,但近年用的项目没那么多了,答辩时也可能被追问“为什么选Shiro而不是Security”,你得能圆回来。其实对图书商城这种角色简单的系统,我推荐小程序轻量方案:登录成功后把用户信息放到Session,写一个HandlerInterceptor拦截未登录的请求,管理员接口再单独检查role字段。

不过你要是想让自己看起来更“现代”,用JWT无状态登录也可以。简单说就是登录接口比对完用户名密码后,生成一个包含用户ID和角色的token返回给前端,前端每次请求在请求头里带token,后端用一个拦截器解析token并设置当前线程的用户上下文。毕设不需要考虑token注销和续期,所以实现成本很低。下面是一个拦截器示例:

public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("Authorization"); if (token == null || token.isEmpty()) { response.setStatus(401); return false; } try { Claims claims = JwtUtil.parse(token); request.setAttribute("userId", claims.get("userId")); return true; } catch (Exception e) { response.setStatus(401); return false; } } }

4. 数据库设计:别让表结构在答辩时“裸奔”

4.1 核心表结构与字段规划

数据库是整个项目的根基,也是论文里占据篇幅最多的内容。网上图书商城再简单也至少要包含六张表:用户表、图书分类表、图书表、购物车表、订单表、订单项表。有条件的话可以再加一张轮播图表、公告表或者收货地址表。先说用户表,字段包括id、username、password、nickname、phone、email、avatar、role、status、create_time。密码存储我建议加盐哈希,至少用BCrypt加密,不要用MD5这种能直接撞库的算法,否则论文安全一章拿不出手。

图书表是核心业务表,我给出一个可用的建表脚本参考:

CREATE TABLE `book` ( `id` int NOT NULL AUTO_INCREMENT, `book_name` varchar(200) NOT NULL COMMENT '书名', `author` varchar(100) DEFAULT NULL COMMENT '作者', `publisher` varchar(100) DEFAULT NULL COMMENT '出版社', `isbn` varchar(50) DEFAULT NULL COMMENT 'ISBN', `price` decimal(10,2) NOT NULL COMMENT '售价', `original_price` decimal(10,2) DEFAULT NULL COMMENT '原价', `cover` varchar(255) DEFAULT NULL COMMENT '封面图片URL', `description` text COMMENT '图书简介', `category_id` int NOT NULL COMMENT '分类ID', `stock` int NOT NULL DEFAULT '0' COMMENT '库存', `sales` int NOT NULL DEFAULT '0' COMMENT '销量', `status` tinyint NOT NULL DEFAULT '1' COMMENT '上架状态:1上架 0下架', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_category` (`category_id`), KEY `idx_book_name` (`book_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书表';

价格字段必须用decimal,不能用float或double,这个点论文里一定要写一句“避免浮点精度误差”,很加分。库存字段是int足够,并且下单时要配合条件更新,这一点后面单独说。

4.2 订单表与订单项表:为什么要拆成两张

购物车提交后,会产生订单数据。订单的主表存一次购买的全局信息,比如订单号、用户ID、总金额、状态、收货人、联系电话、收货地址、下单时间;而订单项表存的是该订单下每本书的购买明细,包括图书ID、书名快照、单价、数量、小计。拆成两张的核心原因是:一张订单往往对应多本图书,如果只建一张订单表,就会大量出现相同的订单号重复行,既难维护也没法清晰表达“一对多”的关系。

订单状态字段我建议直接用int或者varchar保存枚举,比如0待付款、1待发货、2待收货、3已完成、4已取消。代码侧定义一个OrderStatus常量类,后端根据状态值做分支流转,前端页面再根据状态值显示不同的按钮和文案。比你直接在代码里散落各种魔法数字要规范得多。

4.3 库存扣减与数据库事务

图书商城的库存和订单操作必须放到同一个事务里,否则会出现“订单生成了但库存没扣”或者“库存扣了订单却没了”这种数据不一致问题。在Service方法上加上@Transactional注解,同时利用乐观锁思路扣减库存,SQL应该写成这样:

UPDATE book SET stock = stock - 1, sales = sales + 1 WHERE id = #{bookId} AND stock > 0;

这里的关键是必须有stock > 0这个条件。如果更新影响的行数为0,说明库存不足,直接抛出业务异常,回滚整个下单流程。这种写法比先select再判断库存更可靠,也天然规避了并发超卖问题。答辩的时候老师如果问“高并发下怎么办”,你抛出这个条件更新示例,已经比大多数人强了。要是还有余力,可以提一句“也可以用Redis预扣库存,但毕业设计不需要做那么重,能解释清楚数据库层的防超卖即可”。

数据库初始化方面,建议你准备一个完整的schema.sql并放在项目根目录,论文的数据库设计章节也需要这些建表语句。我还会在项目里加上spring.sql.init.mode=always配合schema.sql来建表,但要注意它不是自动同步已有数据库的,跑二次验证时最好先drop库再启动,或者用Flyway进行版本化控制。对毕设而言手写SQL脚本足够了,重点是保证别人拿到你的源码和SQL脚本后,能在一台干净机器上直接跑通。

5. 从Debug到Deploy:本地调试和服务器部署链路

5.1 本地跑通项目的标准动作

无论你是从GitHub、CSDN还是其他渠道拿到源码,本地复现的路径都差不多。首先用IDEA以Maven项目方式打开源码目录,等待依赖下载完成,这个过程可能很慢,建议配置阿里云Maven镜像。然后初始化数据库:创建一个空的数据库,把项目的sql文件导入。接着修改application.yml里的数据库账号密码,最后启动主类。如果你卡在“端口被占用”,用netstat -ano | findstr 8080查一下占用进程,直接将其结束;如果卡在“数据库连接失败”,优先检查MySQL服务是否启动、用户名密码是否匹配。

IDEA调试还有一个高频坑:lombok不生效,提示找不到getter或setter方法。解决办法是安装IDEA的Lombok插件,并且确保Annotation Processing设置里的Enable annotation processing是勾上的。很多网上下载的项目用了一堆Lombok简化代码,一旦注解处理器没开启,整个项目都会红一片。另一个常见的坑是热部署配置了spring-boot-devtools,但IDEA的自动编译没开启,改了Java代码不生效。建议你通过Ctrl+F9手动触发编译,或者把Build时的Build project automatically打开,DevTools会自动重启应用。

5.2 把前端项目整合进Spring Boot里

如果你做的是前后端分离,前端构建产物要能直接被后端服务访问,有几种方式。最简单粗暴的是把Vue打包后的dist目录中的所有文件复制到Spring Boot的src/main/resources/static目录下,这样Spring Boot会把它当作静态资源处理,localhost:8080访问时直接能看到页面。需要注意,前端里所有接口请求的baseURL一定要写成相对路径,比如/api开头的路径,而不能写死了http://localhost:8080。因为上线后你的前端和后端都在同一个域名端口下,写死地址会导致部署后请求寻址出错。

部署包内如果要同时容纳API和前端页面,Maven打包时不要把dist漏掉。有一种比较稳妥的做法是,把dist放在src/main/resources/static下,然后正常使用mvn clean package -DskipTests,这样生成的JAR就是一个完整可运行的系统。你在论文里对部署过程的描述也会非常清晰:“前端build后并入静态资源目录,前后端同端口部署”。这比你在服务器上额外跑一个Nginx托管前端、再用反向代理到Spring Boot要容易讲,也少一个故障点。

5.3 部署到Linux服务器:JAR包还是WAR包

教科书里经常讲外置Tomcat部署WAR包,但实际毕设部署,我更推荐直接用Spring Boot内置Tomcat运行JAR包。操作流程很简单:先在本地执行mvn clean package -DskipTests,得到target目录下的.jar文件;然后把它上传到服务器;最后通过如下命令启动:

nohup java -jar book-mall-0.0.1-SNAPSHOT.jar --server.port=8080 > app.log 2>&1 &

如果要开机自启,可以在/etc/systemd/system下面写一个服务文件,比如:

[Unit] Description=Book Mall Application After=syslog.target network.target [Service] User=root ExecStart=/usr/bin/java -jar /opt/book/book-mall.jar Restart=on-failure [Install] WantedBy=multi-user.target

然后执行systemctl daemon-reload和systemctl enable book-found即可。服务器上的MySQL数据库也可能需要远程授权,通常你会把项目里的数据库连接地址改成服务器IP,如果连接不上,检查服务器安全组或防火墙是否放行了3306端口。这里我不建议在生产环境里用root账号跑服务,最好创建一个普通用户。

5.4 部署之后必查的三个地方

第一次部署成功并不代表结束了,我在给同学做环境支持的时候,发现部署后最容易出现三类问题。第一是上传的图片不显示:你如果用的是本地上传文件,默认路径指向了项目的绝对路径,部署到服务器后路径变了,图片404。最简单的处理方式是加一个自定义映射,把访问的/upload/**路径映射到服务器的/opt/book/upload目录。第二是注册登录后Session丢:如果你用Session保持登录态,要注意JAR包部署重启后会清空Session,这是正常的,不是Bug。第三是日志里出现中文乱码,启动命令加上-Dfile.encoding=utf-8可以缓解,但更保险的做法是Linux系统字符集本身设置为UTF-8。

6. 联调测试与答辩追问:这几个场景必须能扛住

6.1 并发下单、重复提交与幂等

网上图书商城这种系统,答辩时被问得最多的就是“如果两个人同时买最后一本书会怎么样”。哪怕你前面没做高并发设计,也得能说出方案。我在前面已经给了条件更新的SQL,这是数据库层的保证。除了超卖,重复提交也是一个经典问题。用户快速点了两次“提交订单”,就可能有两条一模一样的订单。最轻量的解法是在前端点完按钮后置灰,但这只能防手抖,防不了接口重复调用。后端可以考虑用订单号唯一索引加上状态判断,或者在创建订单前查一下是否存在毫秒级相同内容订单。更规范的思路是使用Redis做幂等标记:下单前生成一个token,提交时删除token成功才算有效。为了在答辩时展示亮点,我建议至少在代码里留一层这个机制。

6.2 搜索分页与数据量问题

图书商城的图书数量不会特别大,但你要让分页、搜索逻辑变得完整可讲。MyBatis-Plus的分页插件要注册为Bean,这样Page参数才能自动拼接limit和count查询。搜索时记得对关键字做空值判断,并且优先考虑组合条件查询。例如:

LambdaQueryWrapper<Book> wrapper = new LambdaQueryWrapper<>(); wrapper.like(StringUtils.hasText(keyword), Book::getBookName, keyword) .eq(categoryId != null, Book::getCategoryId, categoryId) .eq(Book::getStatus, 1) .orderByDesc(Book::getSales);

这段代码不仅实现了搜索,还包含了分类过滤、上下架过滤和销量排序,答辩时可以直接说“我们用了条件构造器动态拼装SQL,避免了手动拼接字符串存在的SQL注入风险”。如果答辩老师问SQL注入,你还能补一句“MyBatis的#{}参数预编译本身就防注入,配置文件里写SQL时避免直接用${}就可以了”,这一块就很稳了。

6.3 事务回滚与测试演示

毕业设计测试章节最好有具体的测试用例,而不是写“系统测试通过”。你可以现场演示一个场景:伪造一个异常,比如在订单创建方法中模拟抛出RuntimeException,观察数据库里是否同时出现了订单记录和库存扣减记录的回滚现象。只要你在service方法上加了@Transactional,这个演示就会非常漂亮。答辩时的经典对话是:老师问“你怎么验证事务生效”,你直接打开IDEA控制台、重现一下异常、再查询数据库给他看,比任何嘴上解释都有效。建议你把这种演示截图放进论文里,效果绝对好过那些“测试结果如表所示”的流水账。

7. 论文与答辩:把代码讲成一套完整故事

7.1 论文结构怎么和项目模块对应

毕设论文一般都有规定模板,但大方向是一样的:绪论、相关技术、需求分析、系统设计、系统实现、系统测试、总结与展望。很多同学写论文的时候把代码贴一大段进去,这是大忌。论文里每个图、每个表都要能说清楚“为什么”。比如数据库设计一章,至少要有一个总的ER图,把用户、图书、订单、购物车之间的关联画出来;每个表要有字段说明表格,内容要和实际SQL完全对应,不能出现表里没有的字段。

系统设计和系统实现章节最好对应到代码包结构:设计章节讲模块划分和数据流转,实现章节讲具体页面和接口功能。这样答辩老师翻论文的时候,很容易就把你写的文档和项目代码对应起来。我的做法是论文里放核心Controller的接口清单表,标注方法、路径、参数、返回值,一共三四十个接口列出来,本身就占了不少篇幅,而且全是干货。

7.2 现场答辩的高频问题准备

论文写得好,答辩还是得张嘴聊。下面几个问题几乎是网上图书商城必问的,建议提前准备好书面回答:为什么用Spring Boot?为什么要拆分订单表和订单项表?用户密码为什么不能用明文?库存是怎么保证不超卖的?如果用户支付后又取消订单,库存怎么恢复?前端页面访问很慢,你会怎么排查?第一问考察你对框架核心的认知,至少说出自动配置和约定优于配置;第二问就是一对多关系设计;第三问说哈希加盐就够;第四问就是前面的条件更新;第五问是状态机与库存回补;第六问可以讲静态资源扔CDN、数据库加索引、检查慢查询日志这些常规思路,其实并不要求你真的做过,但你要说得有条理。

7.3 源码整理与README:让别人十分钟跑起来

最后非常现实的一点:你交上去的源码包,如果不是你自己从零写的,至少要把它整理成“对别人也友好”的样子。项目根目录放一个README.md,写清楚JDK版本、MySQL版本、Maven配置方式、数据库导入方法、启动步骤、默认账号密码。数据库脚本单独放一个目录,不要和代码混在一起。这样不仅方便老师检查,也方便你一个月后自己再看这份代码时能快速想起当初是怎么部署的。

我见过太多人拿到一个打包好的毕设压缩包后,解压出来目录乱成一团,既没有说明也没有SQL脚本,连哪个文件是启动入口都要猜半天。你要是认真整理过这些,答辩时的“项目完整性”印象分会高不少。顺便说一句,整理源码的过程,也是你通读一遍代码逻辑的过程,靠这个办法临时抱佛脚熟悉项目,效果远好于背网上那些千篇一律的项目介绍。

做完这个图书商城之后,我最大的体会是:毕业设计其实主要不是看你写了多少行代码,而是你能不能把系统从需求到表结构再到每个功能的实现逻辑讲成一个闭环。网上图书商城这个题目看着普通,但只要你把事务、库存、权限、部署这些东西真正理透,它就是一份非常扎实的作品。哪怕你拿到的是一份现成的源码,也值得自己动手从头搭一遍数据库、重新梳理一遍接口,用这种方式把别人的代码变成自己的底气和知识储备。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 21:00:10

红绿灯目标检测数据集:1000张图+三格式标签+YOLO训练全流程

简介&#xff1a;面向目标检测学习与实战训练的YOLO红绿灯数据集&#xff0c;包含1000张真实场景高质量图片&#xff0c;数据场景丰富&#xff0c;覆盖不同路口、时间段与拍摄角度&#xff0c;能较好支撑交通灯检测算法的训练与评估。使用LabelImg软件完成人工标注&#xff0c;…

作者头像 李华
网站建设 2026/10/10 21:00:03

day36算法练习:质数判定、字符串处理与排序的细节优化

这一天的挑战有点意思——三道题放在一块儿&#xff0c;其实正好覆盖了编程里三个最基础也最容易出问题的环节&#xff1a;数学逻辑、字符串处理、还有集合操作。质数、翻译字符串、分割数字并排序&#xff0c;听起来都是入门题&#xff0c;但真上手写的时候&#xff0c;你会发…

作者头像 李华
网站建设 2026/10/10 20:57:01

LR-ASPP + MobileNet v3:道路图像语义分割的轻量化实战与PyTorch实现

简介&#xff1a;面向道路场景图像语义分割任务&#xff0c;这份资源提供了一套基于轻量级分割网络与迁移学习的实战工程。利用预训练权重微调&#xff0c;在道路分割数据集上仅训练10个轮次&#xff0c;验证集平均交并比即达到0.98&#xff0c;效果显著&#xff0c;适合希望快…

作者头像 李华
网站建设 2026/10/10 20:53:38

Linux文本处理三剑客:grep、sed与awk实战解析

Linux 文本处理工具&#xff0c;这三个词组合在一起&#xff0c;可能第一反应是“这有什么好讲的&#xff0c;不就是 grep、sed、awk 嘛”。但如果你真在服务器上排查过 800MB 的日志文件&#xff0c;被满屏的报错刷到眼花&#xff0c;或者需要从一段接口返回里精确抠出某个字段…

作者头像 李华
网站建设 2026/10/10 20:53:09

中外儿童背诵内容对比:中国娃吟诗作对,外国娃背什么?

最近刷到好几个短视频&#xff0c;一边是中国三岁半的萌娃穿着小汉服&#xff0c;奶声奶气地背《将进酒》&#xff0c;背到“天生我材必有用”还配了个握拳的小动作&#xff1b;另一边是外国小朋友围坐一圈&#xff0c;在老师带领下念法语数字歌&#xff0c;或者一本正经地背诵…

作者头像 李华
网站建设 2026/10/10 20:52:22

微信小程序校园社交开发实战:云开发+SpringBoot混合架构与避坑指南

简介&#xff1a;这份PDF文档是2021年中国高校计算机大赛微信小程序应用开发赛中南赛区二等奖作品“约在南华校园”的完整说明资料&#xff0c;面向参赛学生、小程序开发者及对校园兴趣社交产品感兴趣的学习者。文档围绕一款服务华中地区高校学生的轻量级社交平台展开&#xff…

作者头像 李华