项目介绍

145 阅读5分钟

自我介绍: 面试官您好,我叫xx,就读于江西财经大学软件与物联网工程学院,专业是软件工程,目前是一名大三在校学生,对技术始终保有热爱。

你简历的两个项目,实现了哪些功能,怎么实现的?

第一个项目伙伴汇功能有:

用户模块:用户登录注册退出。修改用户信息,修改标签,按照标签来搜索用户,首页根据标签推荐用户。 队伍模块:用户可以加入退出创建队伍,修改队伍信息。查看所有队伍。

第一个项目 伙伴汇

创表

我首先设计一张用户表,包含用户id、账号、密码、头像、姓名、性别、电话、标签、和是否为管理员、是否删除、创建时间等基础字段。再使用mybatisX根据用户表生成对应实体类。

密码加密存储

在注册时为了安全,数据库不能明文储存密码,我使用了MD5算法将密码和定义的一个盐值连接进行加密再保存到数据库中。用户登录功能我将密码和盐值连接使用同样的算法进行加密和数据库进行比对。若登录成功就将用户信息保存到session域中,我使用了Redis共享session。将session数据储存到Redis中,只需要引入 Redis 和 spring-session-data-redis 依赖,然后在配置文件中指定 Redis 的地址和 session 的 store-type 为 redis,就能够在分布式多机场景下保证获取登录用户信息的一致性。

标签修改推荐

我还实现了用户修改标签和信息,根据标签搜索用户。系统推荐标签相似用户,使用了最小编辑距离算法。Redis 缓存首页高频访问的用户信息列表来提高接口响应速度。

队伍功能

队伍功能,设计队伍表,包含对于id,队伍类型,队伍人数,队伍创建人等等信息。使用mybatisX根据队伍表生成对应实体类,实现队伍的增删查改。我再设计了一张用户队伍关系表,表示用户与队伍的信息。原来加入退出队伍。为了防止用户重复加入队伍,我使用了Redisson 分布式锁来实现操作互斥。

另外,我使用了Spring Scheduler 定时任务和Redisson 分布式锁来实现预缓存,提高第一次访问请求的响应速度。此外我还使用了Knife4j和Swagger自动生成接口文档。

第二个项目MYGO-接口开放平台功能有:

用户登录注册,查看并调用接口,管理员进行用户管理和接口管理,用户管理就是基本的用户增删改查,接口管理就是接口的增删改查和接口上线和下线。还有对接口数据的统计功能。

设计了一张用户表,含用户id,账号密码姓名性别是否为管理员密钥和密匙创建时间是否逻辑删除, 接口表 含接口id 接口名称 接口描述 接口地址 接口请求类型,接口响应类型接口参数创建时间是否逻辑删除是否上下线 用户接口关系表 含接口id和用户id 用户调用接口次数和剩余调用接口次数。

这个项目一共有五个模块

yuapi-backend:后端服务,提供用户、接口等基本操作。 yuapi-common:项目公共模块,包含一些公用的实体类和服务接口。 yuapi-gateway:api网关,后端的入口,作服务转发、用户鉴权、统一日志、服务接口调用计数,统一业务处理。 yuapi-interface:平台提供的接口服务(可更新扩展) yuapi-client-sdk:客户端 SDK,封装了对各 API 接口的调用方法。

用户调用接口,在后端服务收到接口调用id,在数据库查询出接口信息,创建一个sdk根据反射调用接口方法,sdk包含密钥密匙字段,为了接口调用安全,使用了签名认证算法,这个算法是签名生成方法密匙和请求参数进行加密得到的结果和秘钥和一个随机数和当前时间戳放入请求头中,在把请求打入到网关中。网关首先进行用户鉴权,取出秘钥找出用户查出密匙使用签名生成方法比对签名。通过就查询用户接口表是否还有调用次数,有就去路由转发到真正的接口访问地址并返回结果到后端服务,后端服务返回结果给前端,网会还会对返回结果进行日志处理和调用接口次数+1;

首先管理员创建接口后通过核心业务后端(api-backend)保存到数据库中。用户调用某个接口时,在自己的项目中引入客户端 SDK(api-client-sdk)并通过一行代码发起调用,请求会首先发送到 API 网关(api-gateway)进行用户的鉴权和接口调用统计,然后将请求转发到实际的 API 接口(api-interface)

签名认证算法:为了接口的调用安全,我使用到了签名认证算法,首先在用户注册之后会生成一个唯一的密钥对(accesskey和secretkey)保存在数据库中,客户端请求时会将请求参数和secretkey进行签名,签名加密算法使用MD5,然后网关通过请求头获取用户标识,在从数据库中找对应的密钥对,并使用相同的签名认证算法生成签名,然后和请求的签名进行比较,若一致,则可以进行后续操作

此外我还使用aop来判断是否为管理员,使用了Knife4j和Swagger自动生成接口文档。在网关使用Dubbo RPC框架实现系统间的高性能接口调用;