每日十题八股-2025年1月9日

1.如果客户端禁用了cookie,session还能用吗?
2.如果我把数据存储到 localStorage,和Cookie有什么区别?
3.什么数据应该存在到cookie,什么数据存放到 Localstorage
4.JWT 令牌和传统方式有什么区别?
5.JWT 令牌都有哪些字段?
6.JWT 令牌为什么能解决集群部署,什么是集群部署?( 答上来了)
7.jwt的缺点是什么?
8.JWT 令牌如果泄露了,怎么解决,JWT是怎么做的?
9.前端是如何存储JWT的?
10.为什么有HTTP协议了?还要用RPC?

1.如果客户端禁用了cookie,session还能用吗?

默认情况下禁用 Cookie 后,Session 是无法正常使用的,因为大多数 Web 服务器都是依赖于 Cookie 来传递 Session 的会话 ID 的。服务器将生成的 Session ID 通过响应的方式发送给客户端,使用 SetCookie 命令,将用户的 Session ID 保存在 Cookie 中,通常是一个名为 JSESSIONID 的 Cookie。
URL 中携带 SessionID: 可以通过 URL 重写的方式将 Session ID 添加到所有的 URL 中。服务器生成 Session ID 后,将其作为 URL 的一部分传递给客户端,客户端在后续的请求中将 Session ID 带在 URL 中。服务器端需要相应地解析 URL 来获取 Session ID,并维护用户的会话状态。
隐藏表单字段传递 SessionID: 将 Session ID 添加到 HTML 表单的隐藏字段中。在每个表单中添加一个隐藏的字段,保存 Session ID,客户端提交表单时会将 Session ID 随表单数据一起发送到服务器,服务器通过解析表单数据中的 Session ID 来获取用户的会话状态。

2.如果我把数据存储到 localStorage,和Cookie有什么区别?

在这里插入图片描述
5. 安全性:Cookie 的安全性较低,因为 Cookie 在每次 HTTP 请求中都会自动发送到服务器,存在被窃取或篡改的风险。而 LocalStorage 的数据仅在浏览器端存储,不会自动发送到服务器,相对而言更安全一些。

3.什么数据应该存在到cookie,什么数据存放到 Localstorage?

如果数据需要长期存储且不与服务器交互,localStorage 更合适;如果数据需要在客户端与服务器之间共享,Cookie 更合适。

4.JWT 令牌和传统方式有什么区别?

在这里插入图片描述

5.JWT 令牌都有哪些字段?

头部载荷签名。JSON格式,BASE64编码序列化,然后签名是对头部和在和加密。
在这里插入图片描述

6.JWT 令牌为什么能解决集群部署,什么是集群部署?

由于JWT令牌是自包含的(包含所有必要的身份验证和会话信息),服务器可以独立地对令牌进行验证,而不需要依赖其他服务器或共享存储。这使得集群中的每个服务器都可以独立处理请求,提高了系统的可伸缩性和容错性。

集群部署是指将多个计算机或服务器通过网络连接起来,形成一个统一的系统,用于提高应用的可用性、扩展性和容错能力。通过集群部署,多个节点共同工作,处理请求和任务。这样,即使某个节点发生故障,其他节点仍然可以继续工作,保证系统的稳定运行。集群部署通常用于负载均衡和高可用性场景,比如 Web 服务、数据库等。它通过将请求分发到不同的节点,实现负载的均衡,避免单点故障,从而提升整体性能和可靠性。

7.jwt的缺点是什么?

JWT 一旦派发出去,在失效之前都是有效的,没办法即使撤销JWT。
在这里插入图片描述

8.JWT 令牌如果泄露了,怎么解决,JWT是怎么做的?

短期有效期:设置较短的有效期(例如 15 分钟),这样即使令牌泄露,攻击者的有效操作时间也很短。
刷新令牌:使用短期有效的访问令牌和长期有效的刷新令牌。访问令牌过期后,客户端可以通过刷新令牌获取新的访问令牌,刷新令牌的泄露风险相对较小。
使用黑名单:服务器可以维护一个令牌的黑名单,将泄露的令牌添加到黑名单中。在接收到令牌时,先检查令牌是否在黑名单中,如果在则拒绝操作。这种方法需要服务器维护黑名单的状态,对性能有一定的影响,但可以有效地保护泄露的令牌不被滥用。
使用 HTTPS:确保令牌在传输过程中通过 HTTPS 加密,防止中间人攻击或被窃取。

9.前端是如何存储JWT的?

客户端收到服务器返回的 JWT,可以储存在 Local Storage 里面,也可以储存在Cookie里面,还可以存储在Session Storage里面。下面将说明存在上述各个地方的优劣势:基本就是在存储容量和安全方面抉择。
在这里插入图片描述
在这里插入图片描述

10.为什么有HTTP协议了?还要用RPC?

项目没涉及,应该不会问到。
在这里插入图片描述

### 常见技术面试问题及答案 #### 1. Java 基础知识 **问题:解释Java中的多态性。** 答案:多态性是指允许不同类的对象对同一消息作出响应的能力。多态性主要通过方法重载(编译时多态)和方法重写(运行时多态)来实现。在运行时多态中,父类引用可以指向子类对象,调用方法时会根据实际对象类型来决定执行哪个方法。 ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } public class TestPolymorphism { public static void main(String[] args) { Animal myAnimal = new Dog(); // Upcasting myAnimal.sound(); // Outputs "Dog barks" } } ``` #### 2. 数据结构与算法 **问题:解释快速排序的基本思想。** 快速排序的基本思想是选择一个基准元素,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比基准元素小,另一部分记录的关键字均比基准元素大,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的[^1]。 ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j < high; j++) { if (arr[j] <= pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } public static void main(String[] args) { int[] arr = {10, 7, 8, 9, 1, 5}; quickSort(arr, 0, arr.length - 1); for (int num : arr) { System.out.print(num + " "); } } } ``` #### 3. 系统设计 **问题:如何设计一个高并发的Web应用?** 设计高并发的Web应用需要考虑多个方面,包括但不限于负载均衡、缓存机制、数据库优化、异步处理等。负载均衡可以通过Nginx或HAProxy来实现,将请求分发到多个服务器上。缓存机制可以使用Redis或Memcached来减少数据库的压力。数据库优化包括索引优化、读写分离等。异步处理可以通过消息队列如RabbitMQ或Kafka来解耦系统组件,提高系统的响应速度和吞吐量。 #### 4. 编程实践 **问题:解释Java中的垃圾回收机制。** Java的垃圾回收机制是自动管理内存的一种方式,它负责回收不再使用的对象所占用的内存空间。垃圾回收器会定期检查哪些对象是可达的(即仍然被引用的对象),哪些对象是不可达的(即不再被引用的对象)。不可达的对象会被标记为垃圾,并在后续的垃圾回收过程中被清除。Java提供了多种垃圾回收算法,如标记-清除算法、复制算法、标记-整理算法等,不同的垃圾回收器适用于不同的应用场景。 #### 5. 分布式系统 **问题:解释CAP定理。** CAP定理指出,在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三个特性最多只能同时满足两个。一致性意味着所有节点在同一时间看到相同的数据;可用性意味着每个请求都能得到响应,但不保证是最新的数据;分区容忍性意味着即使网络分区存在,系统仍能继续运行。根据不同的业务需求,可以选择牺牲其中一个特性来实现其他两个特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值