# hg-helix-laboratory **Repository Path**: _being/hg-helix-laboratory ## Basic Information - **Project Name**: hg-helix-laboratory - **Description**: HG Helix Laboratory - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 65 - **Created**: 2023-03-21 - **Last Updated**: 2023-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hg-helix-lib ## 介绍 HG Helix Library ## 环境准备说明 * 安装 JDK17 * 安装 IntelliJ Idear (社区版本也可以) * 安装 Git * 安装 Maven * 安装 MySQL客户端软件; * 有 gitee 账户; ## 实验说明 第一步 :请按照 [环境准备说明](#环境准备说明) ,提前准备好开发环境,这里已经假设您已经准备好开发环境 第二步,请用您的账户从 ``` https://gitee.com/helixworld/hg-helix-laboratory ``` 代码仓库,Fork 基础代码; 第三步: 导入项目后,请按照 [开发任务描述](#开发任务描述) 进行功能开发,时间为2小时,期间可以进行上网查询资料;在开发过程中请按照,[代码结构](#代码结构) 和 [开发规范](#开发规范) 。 时间到后,请使用gitee 提交 Merge Request , 提交之前 Fork 的 项目上。 ### 代码结构 * controller 请在这里定义 REST API * service 请在这里定义业务逻辑 * dao 请在 dao 包创建 Mybatis Mapper; * converter 请使用 mapstruct 进行 VO 和 Entity 转换 * entity 请在 entity 包建 Mybatis Entity Bean,并使用 lombok * vo 请在 vo 包创建 创建 VO 对象,并使用 lombok ### 开发规范 * 请尽量按照阿里开发规范来编写程序; * 程序及数据库命名规则可以参见您以前的。 ### 开发任务描述 #### 业务背景: 我们正在开发一个权限管理系统,您的任务编写一个用户管理功能。 * 我们用户主要包含如下信息: | 属性 | Description | | -- | ----------- | | id | 用户id | | username | 用户名 | | age | 用户年龄 | | salt | 盐值 | | salary | 用户收入 | | phone |电话号码 | | email | 电子邮箱 | | gender | 性别:0-女,1-男 | | avatar | 头像 | | created_user | 创建人 | | created_time | 日志-创建时间 | | modified_user | 日志-最后修改执行人 | | modified_time | 日志-最后修改时间 | #### 开发任务 ### 开发任务A 请完成如下功能开发: * 1,基于用户信息,完成数据库设计, 表面可以使用:hg_demo_user_info ; * 2,基于您用户的数据库设计,请实现对用户的增删改查的 REST API 开发,暂时不考虑分页; * 3,获取数据库中最近创建100条数据,然后用 Java 实现如下功能: * 3.1 根据用户性别分组,并分别打印出每个组的用户信息,打印用户名,年龄,手机号,性别 * 3.2 根据用户手机号进行排序 * 3.3 过滤 用户年龄大于 30 岁的男性用户; * 3.4 获取用户收入最低和最高的用户 * 3.5 获取用户的平均收入 * 3.6 获取用户的所有收入 * 3.7 根据用户名字去重 * 3.8 根据年龄和性别进行分组,并打印这样分组每一条数据,打印用户名,收入,手机号 * 4, 请选择一种您熟悉的 Bean Validation 框架,并对 REST API 的 添加,修改接口中的 手机、邮件 信息进行验证 * 5, 请添加 Logback 日志组件,并在 REST API 中打印一个 INFO 级别的日志在控制台。 ### 开发任务B 请完成如下功能开发: * 1,基于用户信息,完成数据库设计 ; * 2,基于您的用户信息的数据库设计,请在 hg-helix-laboratory-demo 项目中,实现查询用户薪水是1000元的 REST API,注意这个API是返回多条的; * 3,请在 hg-helix-laboratory-openfeign 项目中,调用 hg-helix-laboratory-openfeign 的 REST API, 这个API 在 第2步实现的; 从这个 API 中并获取 100条数据,然后用 Java 实现如下功能: * 3.1 根据用户性别分组,并分别打印出每个组的用户信息,打印用户名,年龄,手机号,性别 * 3.2 根据用户手机号进行排序 * 3.3 过滤 用户年龄大于 30 岁的男性用户; * 3.4 获取用户收入最低和最高的用户 * 3.5 获取用户的平均收入 * 3.6 获取用户的所有收入 * 3.7 根据用户名字去重 * 3.8 根据年龄和性别进行分组,并打印这样分组每一条数据,打印用户名,收入,手机号 * 4, 请选择一种您熟悉的 Bean Validation 框架,并对 REST API 的 添加,修改接口中的 手机、邮件 信息进行验证 * 5, 请添加 Logback 日志组件,并在 REST API 中打印一个 INFO 级别的日志在控制台。 ### 附加题,该题有一定难度,非必答题。 场景描述: 现有一家加油站,客户来到加油站加油后会到收银台结账。 * 条件: * 1. 加油站油箱有3个,收银台1个。 * 2. 用户在每个油箱加油所需的时间是5s,加油期间该油箱被占用,需等当前客户加油结束后才能被下一位客户使用。 * 3. 客户如果发现当前油箱排队超过5人,会选择其他队列,当队列都满时直接离开。 * 4. 加油结束后才能去结账,假设结账没有时间花销,来结账的人会立即离开。 * 问题: 假设1小时内有100个客户来到这个加油站进行加油,请计算出以下问题。 * 1,基于需求场景,设计实体类对象,无需创建数据库对象 * 2,编写一个方法,模拟以上场景。输出对应内容 * 2.1 请统计出每个收银员服务的客户有多少个 * 2.2 请统计出每个油箱有多少个客户进行加油 * 2.3 如果每2s来一个客人,请计算出5分钟内有多少客人会流失. * 伪代码亦可