某短视频大厂的真实面试解析与总结(一)

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可以结合起来实现高效的用户登录管理过程:

  1. 用户登录:用户向认证服务器发送用户名和密码进行登录。
  2. SSO认证:认证服务器验证用户身份,生成JWT,并将JWT作为访问令牌返回给用户。
  3. JWT存储:用户将JWT保存在本地(通常是浏览器的cookie中)或者通过HTTP头部发送给后端。
  4. Redis缓存:为了提高系统性能,认证服务器将JWT的信息存入Redis中,以便快速验证用户的登录状态。
  5. 用户请求其他服务:当用户访问其他服务时,携带JWT进行身份验证。服务通过Redis缓存或数据库验证JWT的有效性,确保用户身份的真实性。
  6. 过期处理:JWT通常会设定有效期,过期后需要重新登录获取新的JWT。

7. Redis的5大结构

Redis支持多种数据结构,最常用的5种数据结构包括:

  1. String(字符串):最基本的数据类型,表示一个字符串。
  2. List(列表):一个链表结构,支持从两端推送和弹出元素。
  3. Set(集合):一个无序的集合,支持成员的添加、删除和查找操作。
  4. Hash(哈希):一个键值对集合,类似于Java中的Map,可以存储对象的多个字段。
  5. Zset(有序集合):与Set类似,但每个成员都会关联一个分数(score),成员会根据分数排序。

8. Zset的底层结构

Zset(有序集合)的底层实现通常采用**跳表(Skip List)哈希表(Hash Map)**两种数据结构:

  • 跳表:跳表是一个多层的有序链表,能够提供类似平衡树的查询效率(O(log N))。它用于支持Zset中的成员按分数有序排列。
  • 哈希表:哈希表用于存储Zset中的成员,成员的值和分数的映射关系也会存储在哈希表中。

通过这两种数据结构,Zset能够高效地支持按分数排序、范围查询、成员排名等操作。

9. 订单自动取消业务逻辑(key过期和延迟队列)

在订单系统中,订单在创建后需要在一定时间内完成支付,如果超过这个时间,系统会自动取消订单。实现这一功能的常见方式是使用Redis的key过期延迟队列

  1. Key过期:在订单创建时,系统会在Redis中为该订单设置一个过期时间,当超过这个时间,Redis会自动删除该订单的键值,触发订单取消操作。
  2. 延迟队列 :通过将订单的取消操作加入一个延迟队列中,系统可以在指定时间后自动触发订单取消。延迟队列通常通过Redis的Sorted Set实现,利用其按分数排序的特性,可以设定定时执行的任务。

总结

本篇文章简要介绍了某短视频大厂的面试问题,涵盖了微服务架构、Dubbo框架、SSO、JWT、Redis等技术的应用。通过这些技术的组合,企业能够构建一个高效、可扩展的分布式系统,提升用户体验和系统稳定性。

相关推荐
JavaGuide3 小时前
中兴开奖了,拿到了SSP!
后端·面试
绝无仅有3 小时前
腾讯MySQL面试深度解析:索引、事务与高可用实践 (二)
后端·面试·github
IT_陈寒3 小时前
SpringBoot 3.0实战:这套配置让我轻松扛住百万并发,性能提升300%
前端·人工智能·后端
JaguarJack3 小时前
开发者必看的 15 个困惑的 Git 术语(以及它们的真正含义)
后端·php·laravel
Victor3564 小时前
Redis(91)Redis的访问控制列表(ACL)是如何工作的?
后端
努力进修4 小时前
Rust 语言入门基础教程:从环境搭建到 Cargo 工具链
开发语言·后端·rust
Victor3564 小时前
Redis(90)如何配置Redis的身份验证?
后端
程序员爱钓鱼5 小时前
Python编程实战 - 函数与模块化编程 - 参数与返回值
后端·python·ipython
程序员爱钓鱼5 小时前
Python编程实战 - 函数与模块化编程 - 局部变量与全局变量
后端·python·ipython