黑马项目一阶段面试58题 苍穹外卖业务逻辑15题

一、员工登录流程

1.前端在登录页面登录,发送请求

2.进入拦截器,拦截器放行所有登录页面的请求

3.进入三层架构,查询用户是否存在,若存在,则加盐加密,返回JWT的token,存放在请求头部。用户不存在,则不能登录。

二、登录验证如何实现的

1.试图访问任意非登录界面,前端发送请求

2.进入拦截器,开始拦截验证JWT。

3.校验成功,则进入访问界面。否则跳到登录界面。

三、项目开发有哪些角色

项目经理

对整个项目分工,负责进度把控。

可能会用到项目管理软件,比如禅道、ones。

除了项目经理,第二牛气的:

产品经理

进行需求调研分析,输出需求调研文档、产品原型。

跟上面领导打交道比较多,但不是领导胜似领导,只是一个岗位名称。意思就是,我出需求,你来实现,是提要求的,所以一般就牛气一点。

(出需求的产品经理,是程序员的天敌)

UI设计师

根据产品原型输出界面效果图。

不一定是小姐姐的哦。

架构师

项目整体架构设计,即项目整体结构的搭建,还有技术选型等。

比如架构是选微服务还是单体,用什么技术,设计什么模块,

以及一些棘手的问题,都是架构师去做。

架构师不一定很牛,有牛逼的也有菜的。有些大公司,有小组,其中就有架构师组。里面的,不一定都是你能佩服到高山仰止的哦~

开发工程师

代码实现。

喏,苦逼打代码的来了。

测试工程师

编写测试用例,输出测试报告。

运维工程师

软件环境搭建,运行项目。

其他

在公司内可能还有其他细化方向,比如还有DBA,即数据库管理员。

他们就只写SQL语句。

四、编辑员工的流程

1.完善之前登录时存储员工id到线程中。

2.完成回显功能,即根据id查询出员工。

3.完成修改功能,即update员工数据。

五、公共字段自动填充实现流程

1.确定使用AOP技术。

2.在com.sky.annotation包下创建自定义注解,比如叫AutoFill

3.用一个枚举类代表更新和新增两种状态,并放入自定义注解中。

4.在com.sky.aspect包下自定义切面类

5.完善切面类的自动填充逻辑,判断更新、新增两种状态,进行不同处理。

6.在mapper中对应的方法上加自定义注解

六、新增菜品的流程

1.实现文件上传。

(1)在配置文件中引入自己的阿里云。

(2)写一个类,比如AliOssProperties,用来读取配置文件。

(3)写一个工具类,用来上传文件。

(4)用一个配置类,比如OssConfiguration,来生成OSS工具类对象。

(5)在三层架构中注入、调用实现文件上传。其中要用UUID随机生成文件名。

2.实现新增菜品的文本细节新增。注意要增入两个表,一个dish,一个dish_flavor。

七、删除菜品的流程

注意业务层分四步:

1.判断是否起售

2.判断是否被套餐关联

3.删除菜品表中数据

4.删除菜品关联的口味数据

八、修改菜品的流程

首先实现根据id查找

然后实现修改

注意修改口味时要先删除原有口味,再单个for循环插入,或多个一起插入。

九、微信登录流程

1.controller层接收前端传过来的授权码code,调用service层,查找授权码是否通过校验。

2.service层校验授权码是否有效,无效则抛出异常;有效,则调用mapper层查询用户。

3.mapper层查找已存在用户并返回service值。

4.service中,若用户存在,直接返回;若不存在,完成用户的自动注册,并返回用户给controller层。

5.controller拿到返回用户,即用户存在或注册好后,封装响应对象,最后返回给前端。

总结3层架构:

controller层:

1.用DTO接收授权码

2.交给service层校验授权码是否有效,拿到返回值用户

3.将返回用户封装给VO,return给前端

service层:

1.准备参数,利用微信第三方,校验授权码是否有效

2.解析响应参数,获取openid。如果为空,说明校验无效,抛异常

3.根据openid,交给mapper查询user列表,如果没有对应的用户,完成自动注册;

4.返回用户

mapper层:

根据openid,查询是否存在用户

十、缓存菜品流程

1.在service层添加代码。添加代码如下:

1.1查询redis。

1.2如果redis中没有数据,则用mapper查询出数据。有则直接跳到1.4步

1.3将mapper查出的数据存入redis。

1.4返回数据

十一、添加购物车流程

1.前端传给controller层菜品/套餐与口味等。

2.controller层交给service层进行添加到购物车。

2.1判断购物车中是否已经存在。调用mapper层,select一下。

2.2如果存在,则只修改数量,交给mapper update一下数量。

2.3如果不存在,则分类添加菜品or套餐给shopcart对象。

2.3.1如果是菜品,查出菜品以及id、图片等

2.3.2如果是套餐,查出套餐以及id、图片等。

2.4添加shopcart对象到数据库,mapper insert进去。

3.mapper层照上操作

十二、用户下单流程

1.查询地址

2.查询购物车

3.封装订单,并添加一条

4.封装订单详情,有可能添加多条

5.清空购物车

6.封装VO并返回

十三、微信支付流程

1.调用微信下单接口;

2.返回预支付交易标识;

3.将组合数据再次签名;

4.推送支付结果;

5.更新订单状态。

十四、来单提醒和用户催单实现流程

来单提醒:

在提交订单的业务层代码里加入WebSocket的注入,然后传输带订单信息的map。

用户催单:

在三层架构里面写催单功能,也用WebSocket来注入、实现双向通信。

十五、导出运营数据实现流程

  1. 读取Excel模版到内存中。

  2. 准备运营数据

  3. 将数据写到Excel模板中。

  4. 将Excel文档响应回浏览器(文件下载)

注意的点

ClassLoader能加载的文件位置

ClassLoader能加载的文件位置在resources下。

放入resources后需要的操作

需要用maven构建管理的complie编译一下,才能保证类加载器ClassLoader加载到。

创建的POI与Office对应的下标

下标中getRow(0)与getCell(1)对应的分别是第一列第2行的数据

相关推荐
Yvemil727 分钟前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp28 分钟前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob41 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder1 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行1 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
Wyang_XXX2 小时前
CSS 选择器和优先级权重计算这么简单,你还没掌握?一篇文章让你轻松通关面试!(下)
面试
星河梦瑾2 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富2 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想2 小时前
JMeter 使用详解
java·jmeter