文章目录

  • 1、面试题
  • 1.1 微服务的优点是什么,缺点是什么?
  • 1.2 在什么情况下用springcloud alibaba,什么情况下用dubbo
  • 1.3 高并发,高性能,高可用必须用微服务吗?
  • 1.4分布式id的解决方案
  • 1.5 框架的高扩展如何实现
  • 1.6 超卖,如何减库存,如何下订单
  • 2、随笔


1、面试题

1.1 微服务的优点是什么,缺点是什么?

商城的项目,有很多模块,商品管理,用户管理,营销管理,订单管理,开发人员多了,有200个开发人员在一起开发,每个微服务可以独立上线,每个微服务可以使用不同的技术。开发规模大了,开发人员多,必须用微服务。

缺点是性能低了

1.2 在什么情况下用springcloud alibaba,什么情况下用dubbo

微服务的颗粒度 微服务性能问题_微服务的颗粒度

内部调用用dubbo,允许别的公司调用用spring cloud alibaba

1.3 高并发,高性能,高可用必须用微服务吗?

微服务的颗粒度 微服务性能问题_微服务的颗粒度_02

微服务是为了解决团队中开发人员多的问题,

独立部署,上线,不同的模块能使用不同的技术,一个模块部署成一个集群,高可用,一个模块的集群全宕机了,不影响别的模块

1.4分布式id的解决方案

主键自动加1存在的问题是什么?

user表主键是自动加1,对手中午12点注册,每天中午12点注册一个帐号。看到自己的编号 100,200,400

对手能看到很多商业机密

用程序获取你的所有数据

item/getinfo?id=1

axios for(id=1;999999999){}

分库分表

服务器1 users表id从1开始

服务器2 users表id从1开始

微服务的颗粒度 微服务性能问题_java_03

一台db 1万/s

数据库集群 3万/s

redis 集群 30万/s

分段,一次准备好1万个id

id组成 时间+随机数+序号(00000001-99999999)

1.5 框架的高扩展如何实现

dubbo,springmvc,spring,mybatis 框架

框架是工具类,实现了通用功能

mybatis实现了连接数据库,查询sql,缓存,

框架通过扩展调用程序员写的代码

写框架,必须实现高扩展

1,框架中申明接口,抽象类,普通类

2,注解 @Restcontroller @Service,@Mapper

3,动态代理,调代理对象。InvocationHandler.invoke()

4,spi

baidu jdbc spi, duboo spi, springboot spi,spring cloud spi

5,责任链设计模式

微服务的颗粒度 微服务性能问题_mybatis_04

Aspect,Interceptor/plugin

6,

订单模块
class OrderServiceImpl
{
    createOrder(Order oder){
        保存数据库
            积分
            优惠卷
            风控系统
            区域限制
    }
}

开闭原则

允许增加功能,不允许修改代码

解决方法

1,aop,拦截器,过滤器 都要修改订单模块代码

2,mq

微服务的颗粒度 微服务性能问题_spring_05

1.6 超卖,如何减库存,如何下订单

微服务的颗粒度 微服务性能问题_java_06

超卖解决方法是在redis中执行lua脚本,实现原子性

如何下订单,分三步,1,lua减库存,2,订单进延迟队列 3,回库

2、随笔

超卖解决方法是在redis中执行lua脚本,实现原子性

如何下订单,分三步,1,lua减库存,2,订单进延迟队列 3,回库