当前位置: 首页 > news >正文

京东面试题解析:SSO、Token与Redis交互、Dubbo负载均衡等

在京东的技术面试中,除了基本的编程能力外,还会涉及到一些分布式系统的架构和设计问题,尤其是SSO(单点登录)、Dubbo的负载均衡机制、Token和Redis的交互等内容。以下是一些常见的面试问题解析,希望能帮助大家更好地理解和准备这些知识点。

#### 19. SSO是什么?

**SSO(Single Sign-On,单点登录)** 是一种身份验证机制,允许用户只通过一次登录认证后,就可以访问多个应用系统,而不需要在每个系统中重新输入用户名和密码。它的核心是通过统一的认证中心来管理用户的身份信息,并在各个应用间共享身份认证。

- **工作原理**:
1. 用户访问某一应用系统时,系统会将用户重定向到SSO认证中心。
2. 用户在SSO认证中心登录后,认证中心会生成一个认证票据(例如,JWT Token),并将该票据发送回应用系统。
3. 应用系统验证票据后,允许用户访问该系统的资源。之后,用户无需再次登录就可以访问其他已集成SSO的系统。

- **优点**:
- 减少了用户记住多个密码的负担。
- 提高了企业系统的安全性,统一管理认证和权限。
- 提升了用户体验,避免了重复登录。

- **常见实现**:
- 使用OAuth 2.0、JWT、CAS等协议来实现SSO功能。

#### 20. 说一下Token和Redis交互的过程

在分布式系统中,Token通常用于认证和授权,常常与Redis配合使用,以便存储和管理Token。

**Token和Redis交互的基本过程**:

1. **用户登录**:
- 用户通过用户名和密码进行登录,后端通过验证用户信息后,生成一个Token(例如JWT)。

2. **存储Token到Redis**:
- 后端将Token及其关联的用户信息存储在Redis中,通常使用Token作为Key,用户ID或其他信息作为Value。
- Redis可以设置Token的过期时间,确保Token的有效期有限。
```java
jedis.setex("userToken:<Token>", 3600, "<UserData>");
```

3. **验证Token**:
- 每次用户访问受保护的资源时,前端会将Token附带在请求头中传递给后端。
- 后端从请求中提取Token,通过Redis检查Token是否存在并且有效。如果有效,则允许访问,否则返回未授权的错误信息。
```java
String tokenData = jedis.get("userToken:<Token>");
if (tokenData == null) {
return "Unauthorized";
}
```

4. **删除Token**:
- 用户注销时,后端从Redis中删除该Token,确保Token不再有效。
```java
jedis.del("userToken:<Token>");
```

#### 21. Dubbo指定特定的客户端方案

在Dubbo中,客户端可以根据具体的需求指定调用的服务提供者,常用的策略有以下几种:

- **根据标签指定服务提供者**:
- Dubbo支持基于标签的路由机制,可以通过`@DubboReference`注解指定调用某个特定的服务实现。比如,可以指定调用某个特定版本或特定分组的服务提供者。
```java
@DubboReference(version = "1.0.0", group = "group1")
private MyService myService;
```

- **使用自定义的路由规则**:
- Dubbo支持通过自定义路由规则来指定某些特定条件下的服务提供者。例如,可以根据请求的IP、用户的身份等条件来选择不同的服务提供者。
```xml
<dubbo:consumer filter="myRouteFilter" />
```

- **服务的负载均衡和路由**:
- Dubbo还支持在客户端指定负载均衡策略(如随机、轮询、一致性哈希等)来选择服务提供者。

#### 22. Dubbo的负载均衡都有哪些

Dubbo的负载均衡策略用于在多个服务提供者之间分配请求,常见的负载均衡策略有:

1. **随机负载均衡(Random)**:
- 请求随机选择一个服务提供者,适用于服务提供者相对平衡的场景。

2. **轮询负载均衡(Round Robin)**:
- 请求按照顺序轮流分配给不同的服务提供者。每个请求被依次转发到不同的服务实例。

3. **加权轮询负载均衡(Weight Round Robin)**:
- 基于轮询策略,但每个服务提供者的权重不同,权重高的服务提供者会处理更多的请求。

4. **一致性哈希负载均衡(Consistent Hash)**:
- 根据请求的内容(例如用户ID)来决定分配到哪个服务提供者,确保同一请求始终路由到同一服务提供者,适用于有状态的应用。

5. **最少活跃调用负载均衡(Least Active)**:
- 将请求发送到当前处理请求最少的服务提供者,适用于服务负载不均的场景。

6. **自定义负载均衡**:
- 用户可以根据具体的业务需求,实现自定义的负载均衡策略。

#### 23. 实现一下其中一个负载均衡

下面是基于Dubbo的**轮询负载均衡(Round Robin)**的简单实现:

1. **定义负载均衡策略**:
继承`AbstractLoadBalance`类并实现`select()`方法,该方法实现轮询策略:

   ```java
public class MyRoundRobinLoadBalance extends AbstractLoadBalance {
private AtomicInteger counter = new AtomicInteger(0);

       @Override
protected Invoker<?> doSelect(List<Invoker<?>> invokers, URL url, Invocation invocation) {
int index = counter.getAndIncrement() % invokers.size();
return invokers.get(index);
}
}
```

2. **配置Dubbo使用自定义负载均衡策略**:

   在Dubbo的XML配置文件中,指定负载均衡策略为自定义的轮询策略:

   ```xml
<dubbo:consumer loadbalance="com.example.MyRoundRobinLoadBalance"/>
```

   这样,Dubbo就会使用自定义的轮询负载均衡策略来选择服务提供者。

### 结语

京东的面试问题不仅涉及基础的编程知识,还涵盖了分布式系统架构、微服务设计、消息队列等复杂的技术栈。理解SSO、Token与Redis的交互、Dubbo的负载均衡等概念对于面试通过至关重要。

http://www.dtcms.com/a/532507.html

相关文章:

  • 网站建设哪家效益快做百度推广网站排名
  • RabbitMQ -- 高级特性
  • 克隆网站后台asp.net 网站数据库
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十S四)储存服务-Ceph储存
  • 土壤侵蚀相关
  • 花卉网站建设规划书平台推广计划书模板范文
  • 如何使用C#编写DbContext与数据库连接
  • 从一到无穷大 #52:Lakehouse 不适用时序?打破范式 —— Catalog 架构选型复盘
  • 机器学习 (1) 监督学习
  • 从哪里找网络推广公司网站优化 毕业设计
  • Java如何将数据写入到PDF文件
  • 开发板网络配置
  • 14天备考软考-day1: 计组、操作系统(仅自用)
  • 企业网站模板包含什么有什么软件可以做网站
  • .gitignore 不生效问题——删除错误追踪的文件
  • 深度学习优化器详解
  • 做企业公示的数字证书网站wordpress有识图接口吗
  • 中国商标注册申请官网百度蜘蛛池自动收录seo
  • GitHub 热榜项目 - 日榜(2025-10-26)
  • 数据分析:指标拆解、异动归因类题目
  • 做网站需要那些软件设计建网站
  • Gorm(十二)乐观锁和悲观锁
  • neo4j图数据库笔记
  • 网页网站设计公司有哪些网站排名有什么用
  • 泉州做网站优化哪家好微信推广平台哪里找
  • 如何制作收费网站百度收录个人网站是什么怎么做
  • VsCode + Wsl:终极开发环境搭建指南
  • 深度学习——Logistic回归中的梯度下降法
  • 中国住房和城乡建设网网站学习网站大全
  • 【Android】ViewPager2实现手/自动轮播图