请简单介绍一下你们的项目?
黑马头条是一款资讯类信息平台,项目采用当下火热的微服务+大数据技术架构实现,对海量信息进行搜集,通过系统计算分类,获取最新最热新闻资讯,通过大数据分析用户喜好精确推送咨询新闻。
你们项目的技术架构是怎样的?
整体架构采用前后端分离解决方案
前端基于nodejs使用vue.js相关技术栈
后端基于Springboot+SpringCloud微服务架
技术结构图
包括前端(Weex、Vue、Echarts、WS)、网关(GateWay)、DevOps(单元测试、代码规范)
服务层中包括中间件(Kafka)、索引、微服务、大数据存储等重难点技术
你们Springboot及SpringCloud使用的版本?
SpringBoot 2.3.9
SpringCloud Hoxton.SR8
你是如何理解前后端分离开发的?
项目基于前后端分离的架构进行开发,前后端分离架构总体上包括前端和服务端,通常是多人协作开发
- 对于后端java工程师:把精力放在设计模式,spring+springmvc,linux,mysql事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构,弹性计算架构,微服务架构,java性能优化,以及相关的项目管理等等。
- 对于前端工程师:把精力放在html5,css3,vuejs,webpack,nodejs,Google V8引擎,javascript多线程,模块化,面向切面编程,设计模式,浏览器兼容性,性能优化等等。
前后端分离开发流程
- 需求分析
梳理用户的需求,分析业务流程
- 接口定义
根据需求分析定义接口,定义出接口文档
- 服务端和前端并行开发
服务端:依据接口文档进行服务端接口开发
前端:根据用户需求开发操作界面,并根据接口文档制作mock数据,进行测试
- 前后端集成接口联调
最终前端调用服务端接口完成业务
- 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
SpringMVC接收参数的注解有哪些?
@RequestBody 当前端在请求体中传入的是json对象时
@RequestParam 当前端在请求中传入的是key=value参数时
@PathVaribale 当前端在请求中传入参数在路径上时 /user/101你们的接口文档是如何定义的?
前台后台程序员项目前期会讨论确认接口信息
接口定义格式
接口的描述
接口的访问路径: GET /user/list
请求参数:
请求参数类型
响应参数类型 application/json
响应内容: Result { code msg data }你们项目的数据库设计情况? 你是否有独立设计过数据库?
黑马头条项目采用的分库分表设计,因为业务比较复杂,后期的访问量巨大,为了分摊数据库的压力,整个项目用的不只是一个数据库。其中核心库有6个,每一个数据库解决的是一个业务点,非常接近与实际项目设计。
6个核心数据库,70多张表
按照业务垂直分库
基于原型,使用PowerDesginer工具进行数据库建模,设计完毕后可以直接生成建表语句能否说出SpringBoot的自动装配原理?
项目中是否自定义过starter起步依赖,如何定义?
全局异常的统一配置
小刀文档的统一配置
- 在heima-leadnews-basic 模块下,右键创建子工程 heima-knife4j-spring-boot-starter, 并引入依赖
- 在heima-leadnews-basic —> heima-knife4j-spring-boot-starter下 创建Swagger配置文件
- 在heima-leadnews-basic —> heima-knife4j-spring-boot-starter 资源目录resources文件夹下添加META-INF/spring.factories 文件
heima-leadnews-services 下的pom中,加入该 knife4j通用配置依赖 ,所有的微服务即可使用api文档生成功能
项目中异常是怎么处理的?
@ControllerAdvice
controller增强注解
@ExceptionHandler(Exception.class)
全局异常处理器
@ExceptionHandler(CustomException.class)
自定义异常处理器定义一个通用的统一异常处理类
2. @ControllerAdvice
3. 定义处理方法 @ExceptionHandler(捕获异常的类型.class)
4. 在这个类中可以定义多个@ExceptionHandler处理不同的异常项目中注册中心的作用?配置中心的作用?
注册中心的作用:
服务注册
- 服务发现
- 状态监控
配置中心的作用:
共享配置
多个微服务需要相同的配置,可以单独创建一个配置文件微服务
如: data-id: share-feign.yml
其他服务想用这个共享配置:
spring:cloud:nacos:config: # 配置中心地址配置shared-configs: # 共享配置- data-id: share-feign.ymlgroup: DEFAULT_GROUPrefresh: false
项目中api网关的作用?
网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 网关来做,这样既提高业务灵活性又不缺安全性,典型的架构图如图所示:
优点如下:
- 安全 ,只有网关系统对外进行暴露,微服务可以隐藏在内网,通过防火墙保护。
- 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
- 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
- 减少了客户端与各个微服务之间的交互次数
- 易于统一授权。
总结:微服务网关就是一个系统,通过暴露该微服务网关系统,方便我们进行相关的鉴权,安全控制,日志统一处理,易于监控的相关功能。
