当前位置: 首页 > news >正文

黑马项目一阶段面试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行的数据

相关文章:

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

一、员工登录流程 1.前端在登录页面登录,发送请求 2.进入拦截器,拦截器放行所有登录页面的请求 3.进入三层架构,查询用户是否存在,若存在,则加盐加密,返回JWT的token,存放在请求头部。用户不…...

C++学习笔记总结练习: 字符串类MyString的实现

MyString是一个自定义的字符串类&#xff0c;它封装了一些常见的字符串操作和功能。下面是一个简单的MyString类的实现示例&#xff1a; #include <iostream> #include <cstring>class MyString { private:char* m_data; // 用于存储字符串的字符数组int m_length…...

测试人进阶技能:单元测试报告应用指南

为什么需要单元测试 从产品角度而言&#xff0c;常规的功能测试、系统测试都是站在产品局部或全局功能进行测试&#xff0c;能够很好地与用户的需要相结合&#xff0c;但是缺乏了对产品研发细节&#xff08;特别是代码细节的理解&#xff09;。 从测试人员角度而言&#xff0…...

非2的幂次的ASTC纹理格式尺寸对带宽的影响

1&#xff09;非2的幂次的ASTC纹理格式尺寸对带宽的影响 2&#xff09;​C#端如何处理xLua在执行DoString时候死循环 3&#xff09;如何制定美术规范或者各个模块的指标 4&#xff09;如何处理Lua的io.open出现中文路径 这是第348篇UWA技术知识分享的推送&#xff0c;精选了UWA…...

Java设计模式之策略模式

1. 策略模式介绍 1、根据它来避免 if-else 或 switch 分支判断&#xff0c;避免使用多重条件转移语句&#xff1b; 2、支持“开闭原则”&#xff0c;可以在原有基础上选择行为方法&#xff0c;同时允许增加行为方法。 2. 策略模式结构类 ① 接口或抽象类&#xff1a;自定义接口…...

IPv4分组

4.3.1 IPv4分组 IP协议定义数据传送的基本单元——IP分组及其确切的数据格式 1. IPv4分组的格式 IPv4分组由首部和数据部分&#xff08;TCP、UDP段&#xff09;组成&#xff0c;其中首部分为固定部分&#xff08;20字节&#xff09;和可选字段&#xff08;长度可变&#xff0…...

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化&#xff0c;本篇就来介绍下JMeter的参数化如何去实现。 参数化&#xff1a;录制脚本中有登录操作&#xff0c;需要输入用户名和密码&#xff0c;假如系统不允许相同的用户名和密码同时登录&#xff0c;或者想更好的模拟多个用户来登录系统。 这个时…...

“深入探索JVM内部机制:解密Java虚拟机的工作原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解密Java虚拟机的工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;解密其工作原理。我们将介绍JVM的基本组成部分、类加载过程、内存管理和垃圾回收、即时编译器等关键概…...

C++超基础语法

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…...

位运算相关题目:下一个数、整数转换、配对交换

题目1&#xff1a;下一个数 给定一个正整数&#xff0c;找出与其二进制表达式中1的个数相同且大小最接近的那两个数&#xff08;一个略大&#xff0c;一个略小&#xff09;。 示例&#xff1a; 输入&#xff1a;num 2&#xff08;或者0b10&#xff09; 输出&#xff1a;[4,…...

【数据结构】链表常见题目

文章目录 链表合并两个有序链表反转链表复制带随机指针的链表环形链表环形链表II相交链表移除链表元素链表中倒数第k个节点链表分割链表的回文结构链表的中间节点旋转链表链表排序链表求和 (逆序求)链表求和II (正序求)重排链表奇偶链表反转链表II <==> 链表内指定区间反…...

多家企业加入即将在2024年发射的量子卫星SpeQtral-1任务

近日&#xff0c;总部位于新加坡的量子通信技术公司SpeQtral宣布将与纳米航空电子公司NanoAvionics和卫星光子学公司Mbryonics合作执行即将到来的SpeQtral-1量子密钥分发&#xff08;Quantum Key Distribution, QKD&#xff09;卫星任务。NanoAvionics被选为卫星平台提供商&…...

shell脚本基础

目录 前言 一、概述 &#xff08;一&#xff09;、shell脚本基础概念 &#xff08;二&#xff09;、shell的类型 二、Shell变量 &#xff08;一&#xff09;、组成 1.变量名 2.变量值 &#xff08;二&#xff09;、类型 1.系统内置变量&#xff08;环境变量&#xff09; 2.自定…...

创建maven的Springboot项目出现错误:Cannot access alimaven

创建maven的Springboot项目出现错误&#xff1a;Cannot access alimaven 1&#xff09;问题2) 分析问题3&#xff09;解决问题 1&#xff09;问题 创建maven的Springboot项目出现错误&#xff1a; Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…...

神经网络基础-神经网络补充概念-32-神经网络与大脑

概念 神经网络&#xff08;Neural Networks&#xff09;是受到生物神经系统启发而设计的机器学习模型&#xff0c;用于处理和学习复杂的数据模式。尽管神经网络的设计和工作原理与大脑有一些相似之处&#xff0c;但它们并不完全相同&#xff0c;以下是神经网络和大脑之间的一些…...

linux自动填充密码及提示信息

背景&#xff1a;需要自动创建nvc的登录密码 sudo apt-get install expect expect 是由Don Libes基于Tcl&#xff08;Tool Command Language &#xff09;语言开发的&#xff0c;主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互…...

IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)

EDA工具的使用涵盖了芯片的功能设计、综合、验证、物理设计等环节&#xff0c;更是被称作“芯片设计的工作母机”。下面就来为大家具体介绍一下常见的EDA工具。&#xff08;需要EDA虚拟机安装资源文末可领取~&#xff09; 什么是EDA&#xff1f; EDA是电子设计自动化&#xf…...

Zabbix配置通用的TCP/IP:port监控项

我们经常的用接口&#xff0c;比如说FTP、HTTP、DNS、数据库接口&#xff0c;都可以用IP:PORT方式探测其是否存活&#xff0c;那么我们去繁就简&#xff0c;就简单监控一下IP&#xff1a;PORT吧&#xff01; 1、新建主机&#xff1a; 填入主机名称、群组、Agent可以不填&…...

【RocketMQ】SpringBoot集成RocketMQ

SpringBoot集成RocketMQ 首先依旧是引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以编写发送不同类…...

思腾云计算

思腾合力受邀参加第七届世界智能大会&#xff0c;届时在会上展出思腾合力 AI 服务器。诚挚邀请与会者来思腾展位&#xff08;S10-B04&#xff09;参观与交流&#xff0c;领取七彩虹电竞机械键盘与鼠标、正版NVIDIA信仰尺、公牛魔方智能USB插座、超大桌面鼠标垫等精美礼品。 由天…...

前端面试:【HTML】语义化标签、表单、媒体元素

HTML&#xff08;超文本标记语言&#xff09;是构建网页内容的基础&#xff0c;它通过一系列标签来描述页面的结构和内容。在这篇文章中&#xff0c;我们将探讨HTML的基础知识&#xff0c;包括语义化标签、表单和媒体元素。 语义化标签&#xff1a;赋予内容更多意义 语义化标签…...

2024浙大MBA/MEM/MPA四个月冲刺备考策略

近期收到很多考生的咨询&#xff1a;距离联考就仅剩四个多月的时间&#xff0c;这个管理类联考的难度如何&#xff1f;主要考些什么内容&#xff1f;现在才开始备考还有希望上岸浙大吗&#xff1f;是不是要等到明年在开始备考比较合适&#xff1f;那么今天在这里小立老师就跟大…...

Element通过v-for循环渲染的form表单校验

需求&#xff1a;有个表单信息是v-for渲染的&#xff0c;例如下图&#xff0c;通过循环遍历实现新增和删除模块&#xff0c;按照平时的写法实现校验&#xff0c;是不能实现我们想要的效果&#xff0c;根据这个需求&#xff0c;我找到了一个解决方法 1.HTML <el-form ref&qu…...

精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周

2023年8月18日&#xff0c;由ATC汽车技术会议主办&#xff0c;上海市集成电路行业协会支持的“2023ATC汽车电子与软件技术周”在上海市圆满落幕。迪捷软件上海参展之行圆满收官。 ▲开幕式 本次峰会汇聚了整车厂、汽车零部件集团、软硬件方案提供商、软件工具供应商、软件测试…...

树莓派的自启动与桌面应用程序

目录 1 打开终端自启动 .bashrc 2 触发时机较早的开机自启动rc.local 3 桌面应用程序 4 触发时机较晚的的开机自启动 autostart 1 打开终端自启动 .bashrc .bashrc的程序也可以在开机时进行自启动&#xff0c;但是每一次打开终端时同样会运行一遍&#xff0c;所以只需…...

RabbitMQ面试题

1. 什么是MQ MQ 就是消息队列。是软件和软件进行通信的中间件产品 2. MQ的优点 异步处理 - 相比于传统的串行、并行方式&#xff0c;提高了系统吞吐量。 应用解耦 - 系统间通过消息通信&#xff0c;不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量…...

Kubernetes二进制部署方案

目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书&#xff08;所有主机操作&#xff09; 2.3.2、生成 Server 证书&#xff08;所有主机&#xff09; 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …...

Android 13 开启关闭飞行模式

一.背景 由于客户定制的Settings里面需要开启和关闭飞行模式,所以需要实现此功能。 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_android 自动开启无障碍服务_龚礼鹏的博客…...

C++学习笔记总结练习:EffectiveSTL

文章目录 使用STL库的55条建议1.慎重选择容器的类型2.不要试图编写独立于容器的代码3.确定容器中的对象拷贝正确且高效4.调用empty判断是否为空&#xff0c;而不是size5.区间成员函数优于与之对应单元素成员函数6.如果容器中包含了通过new操作创建的指针&#xff0c;切记在容器…...

SQL Developer中的Data Redaction

SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图&#xff0c;右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS&#xff0c;Redact User是HR。虽然SYS具备所有权限&#xff0c;但还是报以下错误。其实这个错误是针…...