day01

思考面试提问:

请简单介绍一下你们的项目?
  • 资讯,新闻,头条相关的项目
  • toc 面向互联网用户
  • 类似于今日头条,通过微服务的技术,为用户提供最新,最热点的热门资讯

你们项目的技术架构是怎样的?

你们项目的技术架构是怎样的?
  • Nginx:接受用户请求,将请求反向代理到网关
  • nginx: 接收用户请求 将请求反向代理到网关
  • gateway: api网关,将请求路由到微服务
  • nacos:注册中心,配置中心
  • feign:服务调用
  • ribbon:负载均衡器
  • sentinel、hystrix:微服务保护
  • SSM:SpringMVC、Spring、MyBatisPlus
  • mysql、mogoDB、redis、oss、elasticsearch
  • 分布式事务seata、分布式锁redisson 、分布式调度xxljob、消息队列rabbitmq、分布式日志ELK

你们Springboot及SpringCloud使用的版本?
  • Springboot:2.3.9
  • SpringCloud:hoxton.SR8

你是如何理解前后端分离开发的?
  1. 前后端根据需求梳理业务,产出API接口文档
  2. 前后端基于接口文档并行开发

    1. 前端:基于接口文档生成mock数据,按照需求实现页面效果
    2. 后端:基于接口文档,提供接口实现,调用postman测试接口
  3. 前后端联调

    1. 前端将调用地址改为后端网关地址,实现后台真实数据的调用
    2. 测试整体功能
    3. 出现问题,谁的问题谁去改

你们后端接口是如何测试的?
  • postman进行接口测试
  • Swagg
  • knif4j

SpringMVC接收参数的注解有哪些?
  1. @RequestBody :当前端在请求体中传入的是json对象时
  1. @RequestParam :当前端在请求体中传入的是key=value参数时
  1. @PathVaribale:当前端在请求体中传入的参数在路径上 /user/101

你们的接口文档是如何定义的:
  1. 1. 接口描述
  2. 2. 请求路径
  3. 3. 请求方式
  4. 4. 请求参数类型
  5. 5. 请求参数
  6. 6. 响应参数类型:application/json
  7. 7. 响应参数:{
  8. code:状态码
  9. msg:提示信息
  10. data:数据
  11. }

你们项目的数据库设计情况? 你是否有独立设计过数据库?
  • 采用了分库的设计,按照业务进行拆分,每个微服务都访问独立的数据库

  • 6个数据库 , 70张表

能否说出SpringBoot的自动装配原理?

META-INF/spring.factories

key:EnableAutoConfiguration 

1. 去重
2. 排除指定配置
3. 按照条件注解筛选配置

@ConditionalOnClass(rabbitTemplate.class)

项目中是否自定义过starter起步依赖,如何定义?

  • 全局异常的统一配置

  • 小刀文档的统一配置

项目中异常是怎么处理的?
@ControllerAdvance    
contrller增强注解

@ExceptionHandler(Exception.class)
全局异常处理器

@ExceptionHandler(CustomException.class)
自定义异常处理器

项目中注册中心的作用?

共享配置:
        多个微服务需要相同的配置  可以单独创建一个配置文件微服务
            如:  data-id: share-feign.yml

        其它微服务想用这个共享配置:
                share-configs:  引入共享配置
                - data-id: share-feign.yml
                group: DEFAULT_GROUP
                refresh: 是否热更新

项目中api网关的作用?
filters: 

    stripPrefix: 去除前缀的过滤器   1

  http://localhost:6001/admin/api/v1/channel/list

  http://localhost:9001/admin/api/v1/channel/list
  ==> 去除前缀: /admin
  http://localhost:9001/api/v1/channel/list