小米训练营-大作业
小米训练营-大作业 [!NOTE] 背景 BMS系统是智能化管理及维护各个电池单元,防止电池出现过充电和过放电、延长电池的使用寿命、监控电池状态的系统。在BMS系统中存在大量电池各种信号的规则管理以及监控,良好的是处理信号,并且根据规则,生成相关预警信息,能够极大提升用户体验。为此需要大家完成一套支持规则配置、信号预警的系统,来解决电池各种突发情况和提升用户体验。 1. 技术方案1.1 系统设计 技术栈:Java17 + SpringBoot2.6.13 + SpringCloudAlibaba3.1.9 + RocketMQ5.3.2 + Nacos2.5.1 + caffeine2.9.3 + Redis2.6.9 + MySQL5.7 1.2 数据库表设计 共由两个数据库:signal库和warn库 signal库只用来存放信号信息、并根据carId分signal_info_0和signal_info_1表。 warn库用来存放车辆、规则、预警信息,分为car_info表、rule_info表、warn_info表。 create table...
小米训练营-第七次作业
小米训练营-第七次作业1. 流程图展示 2. 代码展示/** * @ClassName: PayrollTask * @Package: cn.yomigaeri.xiaomi.task * @Description: * @Author Yomigaeri * @Create 2025/6/3 18:04 * @Version 1.0 */@Servicepublic class PayrollTask { @Autowired private EmployeeMapper employeeMapper; @Autowired private PayrollProcessingService payrollProcessingService; //每个月15号 @Scheduled(cron = "0 0 12 15 * ?") public void processPayrollIntern() { //1. 在员工表中查询为实习生的员工 ...
小米训练营-第六次作业
小米训练营-第六次作业 [!NOTE] 请设计基于Spring boot、Mybaits实现一个简化版的分表查询功能,要点解释: 不可采用sharding-jdbc实现,可以基于 Mybaits 拦截器实现、也可以基于JDBC实现 共两个库db0、db1,其中每个库两张表user_0、user_1 累计4张表 实现根据用户id的查询和插入逻辑 ⭐实现基于用户email的模糊查询 1. Mybatis 的 TableRoutingInterceptor 实现 根据以上三个数值,对userId取模后的值进行分库分表。 分库逻辑: 分表逻辑: @Overridepublic Object intercept(Invocation invocation) throws Throwable { // 获取调用参数 Object[] args = invocation.getArgs(); MappedStatement ms = (MappedStatement) args[0]; Object parameter =...
小米训练营-第五次作业
小米训练营-第五次作业读取文件的内容,每行是一个 json,通过 RocketMQ 发送数据到队列 实现思路:调用接口,读取resource下的hotel_data.txt文件,解析文件并转化成Hotel类,并向RocketMQ发送消息 具体代码: package cn.yomigaeri.xiaomi.controller;import cn.yomigaeri.xiaomi.entity.po.Hotel;import cn.yomigaeri.xiaomi.entity.po.Result;import cn.yomigaeri.xiaomi.producer.Producer;import com.fasterxml.jackson.databind.ObjectMapper;import lombok.RequiredArgsConstructor;import org.springframework.core.io.Resource;import org.springframework.core.io.ResourceLoader;import...
小米训练营-第四次作业
小米训练营-第四次作业基本任务(60分):参考Spring Boot 快速开发 Dubbo 服务本地完成一个dubbo服务的启动 技术选型:Spring Boot + Nacos + Dubbo 运行结果展示: nacos: Spring Boot: 满分任务(100分):本地能启动两个dubbo并能进行调用 将项目拆分成两个工程,分别是provider和consumer 加分任务(120分):调用至少一个他人的dubbo服务 通过jar包调用他人的dubbo服务
小米训练营-第二次作业
小米训练营-第二次作业1. 建表语句create table `position`( `id` bigint not null auto_increment, `name` char(20) not null, `status` tinyint, `gmt_created` datetime, `gmt_modify` datetime, primary key (`id`), unique index `uk_name` (`name`));create table `employee`( `id` bigint not null auto_increment, `name` varchar(255) not null, `gender` tinyint, `phone` varchar(64), `email` varchar(255), `birth_date` ...
小米训练营-第一次作业
小米训练营-第一次作业1. 分析问题 给定以下简化版的订单处理代码片段,找出可能导致性能问题和内存泄漏的代码逻辑,并说明原因。 回答:性能问题 1.1 在这当中,使用orderList作为锁监视器,虽然保证了线程安全,但会导致高并发下线程阻塞严重。引文每个订单提交都需要获取锁,导致并发处理能力受限。可以使用如类似CopyOnWriteArrayList的并发容器或者采用CAS + volatile。 回答:内存泄漏 1.2 orderList和statisticsMap都是静态变量,和类初始化时被创建,也只有当类被回收才会被回收。作为处理数据的类,该类可能会一直存在,那orderList和statisticsMap就可能会造成内存持续增长。 同时,orderList每满1000的时会创建新的实例对象,而之前的实例对象中还保存着order实例,且被其他类所引用,所以不会被GC回收。 1.3 这里虽然调用shutdown方法关闭线程池,但是在之前的操作中可能会存在异常,或者关闭线程池时出现异常,可能会导致线程池无法被正常关闭,导致内存泄漏。 2....
工程模式vs策略模式
工厂模式(Factory Pattern) vs 策略模式(Strategy Pattern) 1. 工厂模式(Factory Pattern)核心思想: 将对象创建逻辑与使用逻辑解耦,通过统一的接口创建对象,隐藏具体实现类的实例化过程。 典型场景// 工厂类public class AnimalFactory { public static Animal createAnimal(String type) { if ("dog".equals(type)) { return new Dog(); } else if ("cat".equals(type)) { return new Cat(); } throw new IllegalArgumentException("未知动物类型"); }}// 使用方Animal...
Excel处理方法
Excel处理方法1.高效数据结构选择1.1HashMap/HashSet 适用场景:主键唯一且需要快速查找(如ID匹配、数据合并)。 实现方式:将小表数据预加载到内存,通过主键构建HashMap<Key, Entity>,比对时直接通过O(1)复杂度查询。 示例: Map<String, Entity> smallTableMap = smallTableList.stream() .collect(Collectors.toMap(Entity::getId, Function.identity()));for (Entity entity : largeTableList) { Entity matched = smallTableMap.get(entity.getId()); // 执行比对或合并操作} 2. 流式读取与分批次处理2.1 逐行读取 使用ReadListener逐行处理数据(EasyExcel特性),避免全量加载到内存。 示例: // 自定义监听器实现增量处理public...