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 级别的日志在控制台。
附加题,该题有一定难度,非必答题。
场景描述:
现有一家加油站,客户来到加油站加油后会到收银台结账。
- 条件:
-
- 加油站油箱有3个,收银台1个。
-
- 用户在每个油箱加油所需的时间是5s,加油期间该油箱被占用,需等当前客户加油结束后才能被下一位客户使用。
-
- 客户如果发现当前油箱排队超过5人,会选择其他队列,当队列都满时直接离开。
-
- 加油结束后才能去结账,假设结账没有时间花销,来结账的人会立即离开。
- 问题: 假设1小时内有100个客户来到这个加油站进行加油,请计算出以下问题。
- 1,基于需求场景,设计实体类对象,无需创建数据库对象
- 2,编写一个方法,模拟以上场景。输出对应内容
- 2.1 请统计出每个收银员服务的客户有多少个
- 2.2 请统计出每个油箱有多少个客户进行加油
- 2.3 如果每2s来一个客人,请计算出5分钟内有多少客人会流失.
- 伪代码亦可