小米训练营-第六次作业
小米训练营-第六次作业 [!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...
RPA任务提交
任务提交 taskCommit1. 方法入口 注解说明@PostMapping("/task/commit"):HTTP POST 请求映射,接收任务提交请求。@Validated(Insert.class):基于分组校验规则对 RpaCommitDTO 进行参数校验。@RequestBody:绑定请求体中的 JSON 数据到 RpaCommitDTO 对象。 参数: rpaCommitDTO:任务提交的请求参数(如应用编码、提交人、文件地址等)。 httpServletRequest:用于获取请求头中的 appKey。 返回值:AjaxResult 统一响应结构(包含任务ID或错误信息)。 2. 动态设置 AppCodereSetAppCode(rpaCommitDTO); 动作:根据策略表动态修改 rpaCommitDTO 中的 appCode。 目的:实现灵活的业务路由(例如灰度发布或环境切换)。 3. 特殊业务路由// 长春1.0特殊处理if...
腾讯CSIG暑期实习
腾讯CSIG暑期实习一面 (60min)3.311. 是否了解Go语言?Go 语言的特点 并发模型: Go 使用 goroutine 和 channel 来实现并发,goroutine 是轻量级的线程,启动和切换的开销非常小。 与 Java 的线程模型相比,Go 的并发更加轻量和高效。 简洁的语法: Go 的语法设计非常简洁,去掉了许多复杂的特性(如继承、泛型等),降低了学习曲线。 与 Java 的冗长语法相比,Go 更加直观和易读。 内存管理: Go 内置了垃圾回收机制(GC),开发者无需手动管理内存。 与 Java 的 GC 类似,但 Go 的 GC 优化更适合短时任务和高并发场景。 标准库: Go 提供了丰富的标准库,包括 HTTP、JSON、数据库连接等,开箱即用。 与 Java 的生态系统相比,Go 的标准库更轻量化,但功能足够强大。 编译速度快: Go 的编译速度非常快,适合快速开发和迭代。 与 Java 的编译速度相比,Go 更加高效。 跨平台支持: Go 支持多种操作系统和架构,可以轻松编译为不同平台的可执行文件。 与 Java...
集合框架
集合框架1. Collection JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)去实现。 Collection 接口是 List和Set接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 集合。 常用方法 int size():获取当前集合中实际存储的元素个数 boolean isEmpty():判断当前集合是否为空集合 boolean equals(Object obj):判断当前集合与obj是否相等。 Object[] toArray():返回包含当前集合中所有元素的数组 int hashCode():获取集合对象的哈希值 Iterator iterator():返回迭代器对象,用于集合遍历 boolean retainAll(Collection coll):对原集合取交集并判断是否存在交集部分 增、删、改、查: 增加 boolean add(E obj):添加元素对象到当前集合中 boolean addAll(Collection...