日常练习

今天主要在写操作系统进程调度模拟的代码,用的是C语言,在Linux环境下编译运行。最开始定义了进程结构体,包含进程ID、到达时间、运行时间和优先级几个字段。先实现了先来先服务(FCFS)算法,用一个队列保存进程,按到达时间排序后依次执行,并计算每个进程的完成时间、周转时间和带权周转时间。调试时发现,如果到达时间相同,程序会随机执行其中一个,后来加了一个按PID排序的规则解决这个问题。接着实现了短作业优先(SJF)的非抢占版本,这里需要每次在就绪队列里找剩余运行时间最短的进程,我用了遍历查找的方式,时间复杂度稍高,但逻辑简单。测试时用了一组六个进程的样例,输出结果与教材例题一致,验证了正确性。

下午在做数据库实验,内容是索引优化。用MySQL创建了一张订单表,包含订单ID、用户ID、商品ID、下单时间、金额等字段,并插入了十万条测试数据。先用无索引的方式查询某个用户的所有订单,耗时大约0.7秒。然后在用户ID字段上加普通索引,再执行同样的查询,时间降到了0.2秒左右。随后尝试联合索引(用户ID,下单时间),用EXPLAIN查看执行计划,发现查询类型从ALL变成了range,扫描行数明显减少。还测试了覆盖索引的效果,只查询索引包含的字段时,性能提升更明显。过程中注意到,如果查询条件中使用了函数或者进行了类型转换,索引可能会失效,这一点在实验报告中需要特别说明。

晚上写Spring Boot项目里的商品查询接口。Controller层接收一个分页参数和商品分类ID,调用Service层方法查询数据库并返回JSON数据。这里用MyBatis的动态SQL写了查询语句,可以根据分类ID是否为空决定是否拼接条件。测试接口时,用Postman发送GET请求,发现分页参数如果传错会导致SQL异常,于是在Controller层加了参数校验,确保页码和每页数量都大于零。同时配置了全局异常处理,捕获参数非法的情况并返回统一的错误码和提示信息。最后补充了接口的Swagger文档,添加了参数说明和返回示例,方便前端对接。

今天还刷了一道LeetCode中等题,题目是合并两个有序链表。最开始用递归的方式写,逻辑比较直观,但担心递归深度过大会导致栈溢出,于是又写了一个迭代版本,用两个指针分别遍历两个链表,把较小的节点接到结果链表中。测试了多个用例,包括一个链表为空的情况,都能正确返回结果。

posted @ 2026-05-11 15:11  老汤姆233  阅读(6)  评论(0)    收藏  举报