你的项目是做什么业务的?
家政服务,我的项目是一个家政o2o平台。o2o(Online To Offline)是将线下商务的机会与互联网的技术结合
什么商业模式:
项目涉及哪些角色?
本项目涉及如下角色:
家政需求方:通过用户端小程序完成在线预约下单、支付、评价、投诉、退款等操作。
家政服务人员:通过服务端APP完成在线接单、结算等操作。
家政服务公司:通过机构端完成在线接单、派单、投诉处理、结算等操作。
平台方:通过管理端完成服务人员管理、机构管理、订单管理、财务管理等操作,一笔完成的订单,结算时按照分成比例平台进行抽成。
说下你的项目的业务流程?
平台包括四个端:用户端(小程序)、服务端(app)、机构端(PC)、运营管理端(PC)。
-
用户通过平台在线下单、支付
-
家政服务人员和家政公司通过平台抢单
-
抢单成功服务人员去现场服务,平台跟进整个服务过程(服务前、服务中、服务后)。
-
服务完成后用户进行评价以及售后、退款等。
-
运营人员通过管理端完成服务人员管理、机构管理、订单管理等业务。
你的项目包括哪些模块?
服务管理:对家政服务项目进行管理,最后在指定区域上架服务后用户可在当前区域购买。
下单支付:用户通过小程序完成下单支付,进入小程序首页查询服务,用户选择服务,下单并支付
抢单:服务人员和机构进行抢单。首先服务人员和机构设置接单范围、服务技能、开启抢单开关,然后进入抢单界面进行抢单。
派单调度:平台根据撮合匹配算法通过任务调度将订单和服务人员进行撮合匹配,促进成交。
订单管理:对订单的生命周期进行管理,包括创建订单、取消订单、删除订单、历史订单等。
服务人员管理:对服务人员的信息、认证等进行管理。
企业管理:对机构的信息、认证进行管理。
客户管理:对c端用户的信息、用户的状态等信息进行管理。
营销管理:对优惠券活动进行管理。
你的项目用的什么架构?
项目是基于Spring Cloud Alibaba框架构建的微服务项目,采用前后端分离模式进行开发。
平台共包括四个端:运营端(PC)、服务端(APP)、机构端(PC)、用户端(小程序)。
网关我们用的SpringCloudGateWay网关,最前边是Nginx进行负载均衡。
服务层我们划分了运营基础服务、客户管理服务、公共服务、订单管理服务、抢单服务、派单服务、支付服务等微服务。
服务层用到了Nacos、XXL-JOB、RabbitMQ、Elasticsearch、Canal、Sentinel等中间件。
数据层用的是MySQL数据库,使用ShardingShphere进行分库分表,使用TiDB分布式数据库存储历史订单数据,还用到了消息队列RabbitMQ、Redis缓存及Elasticsearch等中间件。
画一下架构图
说说你的项目吧?
从以下几个方面进行项目介绍:
1、项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。
2、项目的核心业务流程或业务模块
3、项目的架构是什么
4、个人的工作职责,详细说明自己负责的模块,包括模块的设计,所用到的技术方案,以及所遇到的问题和解决方案。
我最近参与的项目是我们公司自研的家政服务o2o项目(因为后续还可能经常需要维护,需求变更等等,所以我们公司选择了自研),项目包括四个端:用户端(小程序)、服务端(app)、机构端(PC)、运营管理端(PC),运维人员在某个区域进行上架某个服务,然后用户才可以在该区域对某个服务进行下单,运维人员还可以对人员进行管理。用户通过平台选择所在的区域服务,然后在线下单、支付,家政服务人员或者机构通过平台抢单,平台也会自动派单给服务人员,服务人员接到订单根据预约时间去现场服务,服务完成后用户进行在线评价,以及售后、退款等业务。 项目是基于Spring Cloud Alibaba框架构建的微服务项目,包括了运营基础服务、客户管理服务、订单管理服务、抢单服务、派单服务、优惠券服务、统计服务、评价服务等服务,系统还使用Redis、MQ、XXL-JOB、Elasticsearch、Canal、MongoDB等中间件。
我在这个项目中进行了。。。的开发
设计一个接口需要设计哪些内容?
共7个方面:
-
HTTP请求方法
-
接口路径
-
请求参数类型
-
请求参数内容
-
响应结果类型
-
响应结果状态码
-
响应结果内容
如何去定义一个接口?
我们使用的是SpringBoot定义Controller方法,接口设计包括7个方面,定义controller方法根据接口设计的内容进行定义:
Mybatis-Plus有几种主键生成策略?
-
AUTO:基于数据库的自增主键
-
NONE: 不设置id生成策略
-
INPUT:用户手工输入id
-
ASSIGN_ID:雪花算法生成id(可兼容数值型与字符串型)
-
ASSIGN_UUID:以UUID生成算法作为id生成策略
@Resource 和 @Autowired有什么区别?
如何开发controller方法?
- 首先根据接口设计或接口文档定义controller方法。
- 在controller类中注入service,在controller方法中调用service方法进行业务处理。
- 得到service方法的返回值封装与客户端要的数据格式进行返回。
- 遇到问题需要通过断点调试的方式在controller、service中打断点进行调试。
项目的分页查询是怎么实现的?
mybatis plus 自带的 前后端联调都调些什么,怎么进行前后端联调?
如何开发一个接口?
首先根据产品原型设计接口,再根据接口设计去定义接口,请求参数有哪些,返回数据有哪些,并生成接口文档,前后端依据接口文档进行开发。
具体编码的过程通常先编写mapper接口,再实现service方法,最后编写controller方法。
每层的编码都会进行单元测试。
和前端约定后待双方都完成本模块的编码后进行前后端联调
如何开发一个接口的service方法?
service方法负责业务处理,是一个接口的核心,开发一个service方法需要注意以下几点:
接口职责要单一,一个接口不能过多的承担责任。
注意事务控制,对于更改数据库的操作要加@Transactional注解。
接口参数定义要简单明了,能用简单类型不要使用自定义类型。
对于增、删、改接口一定要做入参校验,其它接口根据情况而定。
接口的参数与返回值避免与其它框架耦合,比如:分页查询我们使用的是com.github.pagehelper分页插件,使用插件查询得到Page对象,Page类型是插件提供,避免service方法返回Page类型而是用我们自定义的类型PageResult对Page对象的数据进行封装返回,这样就避免Controller与pagehelper分页插件的耦合。
接口的异常处理怎么实现的?
mapper异常及service异常都抛给controller,controller方法的异常由异常处理器统一对异常进行处理。
我们抛出的异常是自定义异常类型,自定义的异常类型都继承了CommonException类型,在异常处理器中对此类型的异常进行处理。
通过@RestControllerAdvice注解加@ExceptionHandler注解实现,具体的原理是当controller抛出异常由DispatcherServlet统一拦截处理,再根据异常类型找到@ExceptionHandler标识方法去执行该方法进行异常处理。
异常处理器的源码在framework中,如下图:
注意:企业中代码不熟悉是因为工具类和文件结构让你不熟悉,一定要看别人写的模仿着写
比如你写个分页,先不要用自己的技术写,你先看看别人的代码是怎么写的
一个新项目中有一个自定义的分页的工具类,首先你找到别人的代码,复制过来比着写
函数式接口
函数式接口是只有一个抽象方法的接口
使用 一般是 () ->... s->s.get...