1. 简单介绍一下微服务班车预约系统
微服务班车预约系统是一种基于微服务架构的班车预定平台,允许公司员工通过系统预约班车、查询班车信息、查看班车状态等功能。系统的核心功能包括:
编辑
- 班车路线和班次管理 :管理员可以在后台进行班车路线的设置与修改,调整班车的发车时间、路线和班车容量等。
编辑 - 班车预约:员工可以选择自己所在的位置、预约需要乘坐的班车,系统会根据位置和时间安排最合适的班车。
- 订单管理 :员工的预约信息会生成订单,用户可以查看订单详情,并且支持订单取消、修改等功能。
编辑 - 智能推荐:系统根据用户的历史预约数据以及班车的当前状态,推荐最优的班车路线和班车。
2. 为什么用Dubbo?
编辑
Dubbo是阿里巴巴开源的一款高性能Java RPC框架,广泛应用于分布式系统中。选择Dubbo的原因主要包括:
- 高性能:Dubbo使用高效的二进制协议,能够支持高并发请求,确保系统的响应速度和性能。
- 服务治理 :Dubbo提供了完善的服务治理机制,包括服务注册与发现、负载均衡、容错处理等功能,能够有效管理微服务架构中的服务间调用。
编辑 - 多协议支持:Dubbo支持多种通信协议,如Dubbo、HTTP、WebService等,能够根据实际需求灵活选择协议。
- 扩展性强:Dubbo具有良好的扩展性,支持自定义协议、序列化方式、过滤器等,方便开发人员根据需求定制功能。
3. 为什么分为四个服务?
在微服务架构中,将系统拆分为多个独立的服务能够带来以下几个优势:
- 解耦:每个服务聚焦于自己的业务领域,减少了系统各模块之间的耦合性。修改某个服务时,不会影响到其他服务,便于维护和扩展。
- 高可用性:如果某个服务出现问题,只会影响到该服务的业务,其他服务依然能够正常工作,提高系统的容错性和稳定性。
- 独立扩展:各个服务可以根据业务需求独立扩展和优化,提升系统的性能和响应能力。
- 技术栈灵活性:不同服务可以使用不同的技术栈和数据库,以满足不同的业务需求。
4. 什么是SSO(Single Sign-On)?
编辑
SSO(单点登录)是一种身份认证机制,允许用户通过一次登录操作便能够访问所有相互信任的应用系统。具体过程是:用户登录某个应用时,SSO认证中心会生成一个认证票据(通常是一个Token),用户在后续访问其他应用时,无需再次登录,只需要携带这个认证票据即可。
编辑
5. 什么是JWT(JSON Web Token)?
JWT(JSON Web Token)是一种轻量级的、用于身份认证和信息交换的标准格式。它由三部分组成:
编辑
- 头部:包含令牌的类型(JWT)和加密算法(如HS256)。
- 有效载荷:包含声明信息,通常是用户的身份信息或其他业务数据。
- 签名:用来验证信息是否被篡改。签名是通过将头部和有效载荷加密后生成的。
JWT的主要优点是传输方式简单,能够在多个服务之间进行安全传输,而且支持自我验证,避免了频繁的数据库查询。
6. SSO、JWT和Redis登录的过程
在一个分布式系统中,SSO、JWT和Redis可以结合起来实现高效的用户登录管理过程:
- 用户登录:用户向认证服务器发送用户名和密码进行登录。
- SSO认证:认证服务器验证用户身份,生成JWT,并将JWT作为访问令牌返回给用户。
- JWT存储:用户将JWT保存在本地(通常是浏览器的cookie中)或者通过HTTP头部发送给后端。
- Redis缓存:为了提高系统性能,认证服务器将JWT的信息存入Redis中,以便快速验证用户的登录状态。
- 用户请求其他服务:当用户访问其他服务时,携带JWT进行身份验证。服务通过Redis缓存或数据库验证JWT的有效性,确保用户身份的真实性。
- 过期处理:JWT通常会设定有效期,过期后需要重新登录获取新的JWT。
7. Redis的5大结构
Redis支持多种数据结构,最常用的5种数据结构包括:
- String(字符串):最基本的数据类型,表示一个字符串。
- List(列表):一个链表结构,支持从两端推送和弹出元素。
- Set(集合):一个无序的集合,支持成员的添加、删除和查找操作。
- Hash(哈希):一个键值对集合,类似于Java中的Map,可以存储对象的多个字段。
- Zset(有序集合):与Set类似,但每个成员都会关联一个分数(score),成员会根据分数排序。
8. Zset的底层结构
Zset(有序集合)的底层实现通常采用**跳表(Skip List)和哈希表(Hash Map)**两种数据结构:
- 跳表:跳表是一个多层的有序链表,能够提供类似平衡树的查询效率(O(log N))。它用于支持Zset中的成员按分数有序排列。
- 哈希表:哈希表用于存储Zset中的成员,成员的值和分数的映射关系也会存储在哈希表中。
通过这两种数据结构,Zset能够高效地支持按分数排序、范围查询、成员排名等操作。
9. 订单自动取消业务逻辑(key过期和延迟队列)
在订单系统中,订单在创建后需要在一定时间内完成支付,如果超过这个时间,系统会自动取消订单。实现这一功能的常见方式是使用Redis的key过期 和延迟队列。
- Key过期:在订单创建时,系统会在Redis中为该订单设置一个过期时间,当超过这个时间,Redis会自动删除该订单的键值,触发订单取消操作。
- 延迟队列 :通过将订单的取消操作加入一个延迟队列中,系统可以在指定时间后自动触发订单取消。延迟队列通常通过Redis的Sorted Set实现,利用其按分数排序的特性,可以设定定时执行的任务。
总结
本篇文章简要介绍了某短视频大厂的面试问题,涵盖了微服务架构、Dubbo框架、SSO、JWT、Redis等技术的应用。通过这些技术的组合,企业能够构建一个高效、可扩展的分布式系统,提升用户体验和系统稳定性。