java偏功能实现的面试题,教你如何做面霸( 六 )


说说微服务生态的各组件的选型(>7)
建议选型爸爸版注册与配置:nacos服务间调用:dubbo/openfeign网关:getway监控:sentinel优点1.还在持续开源 , 未来或许还有其他功能2.nacos比eureka更加强大 , 有命名空间 , 组等功能呢 。3.性能更加优越 。4.中文文档齐全 。
说说对网关的理解(>7)
在没有API网关作为统一出口的情况下 , 需要调用方自己组合各种服务 , 而且容易让调用方感知后端各种服务的存在 , 加入网关后 , 客户端调用服务需要通过网关来进行 , 并且网关可以处理路由 , 安全 , 限流 , 缓存 , 日志 , 监控 , 重试 , 熔断等事务 , 使业务开发更纯净 。
说说对熔断的理解(>7)
由于网络原因或者自身的原因 , 服务并不能保证 100% 可用 , 如果单个服务出现问题 , 调用这个服务就会出现线程阻塞 , 此时若有大量的请求涌入 , Servlet 容器的线程资源会被消耗完毕 , 导致服务瘫痪 。服务与服务之间的依赖性 , 故障会传播 , 会对整个微服务系统造成灾难性的严重后果 , 这就是服务故障的 “雪崩” 效应 。为了解决这个问题 , 业界提出了 熔断器模型 。
在微服务体系中 服务的注册和暴露的过程 (>8)
服务向注册中心发送请求 , 注册中心获取到服务信息后 , 保存在本地 , 当需要服务间需要调用时 , 服务会拉取注册中心的服务列表 , 获取被调用服务信息 , 执行调用 。并且有着心跳的概念 , 及在固定时间内服务向注册中心发送请求 , 表明自己还活着 。
服务间调用如果响应时间过慢造成无响应怎么办(>9)
可以加大调用允许保持连接的时间 , 但是如果是响应过慢 , 对用户体验特别差 , 所以不建议 。所以需要以下1.排查被调用服务器是否有优化余地 , 如sql等 。2.如果是少部分请求 , 加入熔断 , 提升用户体验 , 3.如果允许可以使用异步或者mq 。以异步的方式获取数据 。
mvc(如果简历写过)mvc的原理 (>7)
(1)客户端(浏览器)发送请求 , 直接请求到DispatcherServlet 。(2)DispatcherServlet根据请求信息调用HandlerMapping , 解析请求对应的Handler 。(3)解析到对应的Handler后 , 开始由HandlerAdapter适配器处理 。(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求 , 并处理相应的业务逻辑 。(5)处理器处理完业务后 , 会返回一个ModelAndView对象 , Model是返回的数据对象 , View是个逻辑上的View 。(6)ViewResolver会根据逻辑View查找实际的View 。(7)DispaterServlet把返回的Model传给View 。(8)通过View返回给请求者(浏览器)详细答案请自行百度
介绍一下 (>8)
1. 请求会首先发送到DispatchServlet , 这是spring的前置Servlet , 它会接收请求并转发给spring的MVCcontroller , 也就是业务controller2. DispatchServlet通过HandlerMapping(处理器映射)确定将请求转发给哪个controller , HandlerMapping主要通过请求中的URL确定映射关系的3. DispatchServlet将请求转发给确定的controller之后 , DispatchServlet卸下请求的负载 , controller负责处理这个请求 , 一般会通过调用service层进行业务逻辑处理4. 当controller处理完请求后 , 它会把业务处理结果封装成model , 为了使处理结果的model在页面上更好的展示 , controller还会指定展示model对应的view(比如一个JSP页面) , 当controller确定了model和view之后 , 会把它们以请求的形式再转发给DispatchServlet5. DispatchServlet通过查询ViewResolver(视图解析器)找到view对应的页面6. DispatchServlet最终把model交给页面进行渲染7. 页面对model进行渲染 , 将结果展示到客户端 , 整个请求结束