文章目录
1、面试题
1.1 微服务的优点是什么,缺点是什么?
商城的项目,有很多模块,商品管理,用户管理,营销管理,订单管理,开发人员多了,有200个开发人员在一起开发,每个微服务可以独立上线,每个微服务可以使用不同的技术。开发规模大了,开发人员多,必须用微服务。
缺点是性能低了
1.2 在什么情况下用springcloud alibaba,什么情况下用dubbo
内部调用用dubbo,允许别的公司调用用spring cloud alibaba
1.3 高并发,高性能,高可用必须用微服务吗?
微服务是为了解决团队中开发人员多的问题,
独立部署,上线,不同的模块能使用不同的技术,一个模块部署成一个集群,高可用,一个模块的集群全宕机了,不影响别的模块
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开始
一台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,责任链设计模式
Aspect,Interceptor/plugin
6,
订单模块
class OrderServiceImpl
{
createOrder(Order oder){
保存数据库
积分
优惠卷
风控系统
区域限制
}
}
开闭原则
允许增加功能,不允许修改代码
解决方法
1,aop,拦截器,过滤器 都要修改订单模块代码
2,mq
1.6 超卖,如何减库存,如何下订单
超卖解决方法是在redis中执行lua脚本,实现原子性
如何下订单,分三步,1,lua减库存,2,订单进延迟队列 3,回库
2、随笔
超卖解决方法是在redis中执行lua脚本,实现原子性
如何下订单,分三步,1,lua减库存,2,订单进延迟队列 3,回库