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

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等技术的应用。通过这些技术的组合,企业能够构建一个高效、可扩展的分布式系统,提升用户体验和系统稳定性。

相关推荐
盖世英雄酱5813618 小时前
Java 组长年终总结:靠 AI 提效 50%,25 年搞副业只赚 4k?
后端·程序员·trae
+VX:Fegn089519 小时前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
code bean19 小时前
Flask图片服务在不同网络接口下的路径解析问题及解决方案
后端·python·flask
+VX:Fegn089520 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
努力的小郑20 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
颜淡慕潇21 小时前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
Victor35621 小时前
Hibernate(28)Hibernate的级联操作是什么?
后端
Victor35621 小时前
Hibernate(27)Hibernate的查询策略是什么?
后端
飞鸟真人1 天前
Redis面试常见问题详解
数据库·redis·面试
superman超哥1 天前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制