系统设计面试题

主题 链接
Java基础知识 面试题
Java集合容器 面试题
Java并发编程 面试题
Java底层知识 面试题
Java常用框架 面试题
计算机网络 面试题
数据库 面试题
RabbitMQ 面试题
Redis 面试题
Elasticsearch 面试题
Zookeeper 面试题
系统设计 面试题

系统设计

系统鉴权

参考微信公众平台的接口授权方式,采用一个授权中心来统一管理。 被调用者拥有一个 systemId,由系统生成;调用者拥有唯一的 appId 和 appSecret,调用者通过 appId 和 appSecret 向授权中心请求一个 accessToken

分布式ID分发器

UUID

原理:包括网卡MAC地址、时间戳、随机数、时序等元素生成
优点:本地生成ID,不需要进行远程调用,时延低,性能非常高,扩展性好
缺点:空间占用较多,不能生成递增有序的数字,没有业务含义

数据库主键自增

优点:简单方便,有序递增,方便排序和分页
缺点:分库分表麻烦,受限于数据库的性能,数据库宕机服务不可用,简单递增容易暴露信息

Redis

原理:Incr,IncrBy原子性增加
优点:性能比数据库好,能满足有序递增
缺点:可能会出现ID重复和不稳定

雪花算法

原理:1bit:一般是符号位,不做处理;41bit:用来记录时间戳;10bit用来记录机器ID;12bit:循环位
优点:高性能高可用:生成时不依赖于数据库,完全在内存中生成;ID自增:存入数据库中,索引效率高
缺点:依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成id冲突或者重复

分布式锁

Redis分布式锁

利用Redis的setnx命令、或者set带参数命令(高版本redis),解锁时利用lua脚本将删除命令和判断超时的命令原子化(不判断超时,可能删除了其它人的锁)
RedLock、Redission

Zookeeper分布式锁

利用Zookeeper的顺序临时节点,临时节点删除则释放锁
在节点上绑定监听器,实现非阻塞锁
将客户端信息写入节点,实现可重入锁

数据库

利用数据库的行锁
优点:实现简单
缺点:性能问题、锁的失效、需要不断重试、非重入锁

单点登录

参考链接

权限管理

用户(用户组)、角色、权限(权限组)
角色继承、角色与组织架构关联、角色隔离
页面权限、操作权限、数据权限、权限期限、权限委托、多租户权限设计
通过注解+拦截器实现比较好

秒杀系统

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值