JWT鉴权过程、存储位置

JWT令牌由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。其中,头部和载荷均为JSON格式,使用Base64编码进行序列化,而签名部分是对头部、载荷和密钥进行签名后的结果。
在这里插入图片描述
在传统的基于会话和Cookie的身份验证方式中,会话信息通常存储在服务器的内存或数据库中。但在集群部署中,不同服务器之间没有共享的会话信息,这会导致用户在不同服务器之间切换时需要重新登录,或者需要引入额外的共享机制(如Redis),增加了复杂性和性能开销。
在这里插入图片描述
而JWT令牌通过在令牌中包含所有必要的身份验证和会话信息,使得服务器无需存储会话信息,从而解决了集群部署中的身份验证和会话管理问题。当用户进行登录认证后,服务器将生成一个JWT令牌并返回给客户端。客户端在后续的请求中携带该令牌,服务器可以通过对令牌进行验证和解析来获取用户身份和权限信息,而无需访问共享的会话存储。
JWT 的缺点是一旦派发出去,在失效之前都是有效的,没办法即使撤销JWT。 黑名单
在这里插入图片描述
服务端可以将JWT令牌通过Cookie发给浏览器,浏览器在请求服务端接口时会自动在Cookie头中带上JWT令牌,服务端对Cookie头中的JWT令牌进行检验即可实现身份验证。但它容易受到CSRF攻击的影响。

解决的方法是通过设置Cookie的SameSite属性为Strict。跨站时不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

Cookie除了易受CSRF攻击还有XSS攻击。黑客可以通过JS脚本读取Cookie中的信息。为了防止这一点,可以设置Cookie的属性为HttpOnly。

有栈协程,无栈协程

有栈协程:每个协程都有自己的独立栈空间。栈是程序运行时用于存储局部变量、函数调用的返回地址等信息的内存区域。在有栈协程中,当协程切换时,它会保存自己的栈状态,包括栈指针、栈中的局部变量等。例如,在一个有栈协程中调用了一个深度嵌套的函数,这些函数的局部变量和调用信息都会在协程的栈上保存。当协程暂停和恢复时,这个栈状态会被完整地保存和恢复,就像一个完整的程序上下文一样。
无栈协程:没有独立的栈空间。它主要依赖于程序的主调用栈。当无栈协程运行时,它会借用当前线程的栈。这意味着无栈协程不能像有栈协程那样进行复杂的嵌套调用,因为它没有自己的栈来保存这些调用信息。例如,在一个无栈协程中,如果进行深度嵌套的函数调用,可能会导致栈溢出,因为这些调用信息都挤在主调用栈上。
在这里插入图片描述

讲一下线程和进程的区别?然后如果设计一个系统,然后它肯定是要多并发去执行,我是怎么去用多线程?

ACID分别指什么?

Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

数据库是怎么去实现他这个持久性?

主要是通过 redolog 来实现事务持久性的,事务执行过程,会把对 innodb 存储引擎中数据页修改操作记录到 redolog 里事务提交的时候,就直接把 redolog 刷入磁盘,即使脏页中途没有刷盘成功, mysql 宕机了,也能通过 redolog 重放,恢复到之前事务修改数据页后的状态,从而保障了数据不丢失。

读已提交会有什么问题

不可重复读、幻读

快速排序的原理,过程

快速排序是一种高效的分治排序算法,平均时间复杂度为O(n log n),最坏情况下为O(n²)(但可通过优化避免)。
选择哨兵,将小于哨兵的数据放在左边,大于等于的放在右边,分割递归排序,然后合并。

IO多路复用

我们还是把视角放到应用B从TCP缓冲区中读取数据这个环节来。如果在并发的环境下,可能会N个人向应用B发送消息,这种情况下我们的应用就必须创建多个线程去读取数据,每个线程都会自己调用recvfrom 去读取数据。那么此时情况可能如下图:
在这里插入图片描述
为了保证消息能及时读取到,那么这些线程自己必须不断的向内核发送recvfrom 请求来读取数据;
能不能提供一种方式,可以由一个线程监控多个网络请求(我们后面将称为fd文件描述符,linux系统把所有网络请求以一个fd来标识),这样就可以只需要一个或几个线程就可以完成数据状态询问的操作,当有数据准备就绪之后再分配对应的线程去读取数据,这么做就可以节省出大量的线程资源出来,这个就是IO复用模型的思路。
在这里插入图片描述

在这里插入图片描述
单个线程就可以同时处理多个网络连接。内核负责轮询所有socket,当某个socket有数据到达了,就通知用户进程。多路复用在Linux内核代码迭代过程中依次支持了三种调用,即SELECT、POLL、EPOLL三种多路复用的网络I/O模型。

epoll和select区别

在这里插入图片描述
在这里插入图片描述

三次握手最后一次失败了会发生什么?

服务端重传第二次握手
在这里插入图片描述

n 个数,从 n 个数里面找出三个数,然后把这三个数的和求绝对值最小。这三个数怎么找?说思路

枚举一个数,双指针另外两个数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89042.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89042.shtml
英文地址,请注明出处:http://en.pswp.cn/web/89042.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人设备遥控器之双向通讯技术篇

无人设备遥控器的双向通讯技术通过整合数据传输与状态反馈机制,实现了遥控器与设备间的高效协同,其核心原理、技术实现及应用场景如下:一、技术原理:双向通信的构建基础双向通讯的核心在于建立一条双向数据通路,使遥控…

百度移动开发面经合集

1、对线程安全的理解线程安全是指在多线程环境下,某个函数、类或数据结构能够正确地处理多个线程的并发访问,而不会出现数据竞争、不一致或其他不可预期的行为。线程安全的实现通常需要考虑以下几点:原子性:操作是不可分割的&…

Wiz笔记二次开发

目前wiz笔记的docker版本停留在1.0.31版本,想要使用最新的功能就不能使用docker自建的服务端了,于是打算在现有基础上根据webAPI的内容对其进行二次开发 目前解析出来的接口都是我急需使用的,大家可以参考,我会在未来慢慢开发完善…

AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐

AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次…

阿里云 Kubernetes 的 kubectl 配置

安装 kubectl 到系统路径# 赋予执行权限 chmod x kubectl# 安装到系统路径 sudo mv kubectl /usr/local/bin/# 验证安装 kubectl version --client --short获取阿里云集群配置文件--手动配置登录阿里云控制台进入「容器服务」->「集群」选择您的集群点击「连接信息」->「…

C++-linux系统编程 8.进程(二)exec函数族详解

exec函数族详解 在Unix/Linux系统中,fork()与exec()函数族是进程控制的黄金组合:fork()创建新进程,exec()则让新进程执行不同的程序。这种组合是实现shell命令执行、服务器进程动态加载任务等核心功能的基础。本文将详细解析exec函数族的原理…

PTL亮灯拣选系统提升仓库运营效率的方案

随着电商、零售、制造等行业的快速发展,仓库的作业效率成为企业竞争力的关键因素之一。传统的拣选方式多依赖人工寻找与确认,不仅耗费时间,还容易出错,严重制约仓库整体运营效率。为了应对日益增长的订单需求与提高拣选准确率&…

LVS三种模式实战

IPVS基本上是一种高效的Layer-4交换机,它提供负载平衡的功能。当一个TCP连接的初始SYN报文到达时,IPVS就选择一台服务器,将报文转发给它。此后通过查看报文的IP和TCP报文头地址,保证此连接的后继报文被转发到相同的服务器。这样&a…

HCIA第二次综合实验:OSPF

HCIA第二次综合实验:OSPF一、实验拓扑二、实验需求 1、R1-R3为区域0,R3-R4为区域1;其中R3在环回地址在区域1; 2、R1、R2各有一个环回口; 3、R1-R3中,R3为DR设备,没有BDR; 4、R4环回地…

深入解析环境变量:从基础概念到系统级应用

目录 一、基本概念及其核心作用 1、基本概念 2、核心作用 二、常见环境变量 三、查看环境变量方法 四、测试PATH 1、对比执行:./project和直接执行project的区别 2、思考:为何某些命令可直接执行而无需路径,但我们的二进制程序却需要…

Spring Boot:DTO 字段 cPlanId 无法反序列化的奇葩问题

本文记录一次在 Spring Boot 项目中,DTO 字段明明有值,反序列化后却是 null 的问题。最终发现并不是常见的 JSON 工具库 Bug,而是隐藏在 setter 命名大小写规则中的坑。💻 背景介绍技术栈如下:Spring Boot:…

文本生成视频的主要开源模型

AI文本到视频生成技术发展迅速,这些模型的“快速”通常指相对于传统视频制作的效率(生成时间从几秒到几分钟,取决于硬件),但实际速度取决于您的计算资源(如GPU)。这些模型大多依赖于深度学习框架…

vscode里面怎么配置ssh步骤

01.ubuntu里面下载几个插件还需要下载插件net-tools02.vscode里面下载插件会生成下面类似电视机的插件(room6)

【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)

文章目录激活函数一、激活函数的分类1. 按“是否线性”分类2. 按“是否饱和”分类(针对非线性激活函数)3. 按“适用层”分类二、常见激活函数及特点(一)非线性激活函数(主要用于隐藏层)1. 饱和激活函数&…

代数——第4章——线性算子(算符)(Michael Artin)

第 4 章 线性算子(Linear Operators) That confusions of thought and errors of reasoning still darken the beginnings of Algebra, is the earnest and just complaint of sober and thoughtful men. (思维混乱和推理错误 仍然使代数的开端变得模糊不清, …

Neo4j Python 驱动库完整教程(带输入输出示例)

Neo4j Python 驱动库完整教程(带输入输出示例) 1. 基础连接示例 输入代码 from neo4j import GraphDatabase# 连接配置 URI "bolt://localhost:7687" USER "neo4j" PASSWORD "password123" # 替换为你的实际密码def t…

Axios 和 Promise 区别对比

Axios 和 Promise 是前端开发中两个不同的概念,尽管 Axios 基于 Promise 实现,但它们的核心定位和功能有显著区别。以下是对比分析: 1. 核心定位与功能Promise 定义:Promise 是 JavaScript 的异步编程方案,用于处理异步…

Git分支管理与工作流详解

前言 分支管理是Git最强大的功能之一,它允许开发者在不影响主代码库的情况下创建独立的工作空间。本文将详细介绍Git分支的操作和常见工作流策略,帮助团队更高效地协作开发。 1. Git分支的基本概念 1.1 什么是分支 在Git中,分支本质上是指…

【flutter】flutter网易云信令 + im + 声网rtm从0实现通话视频文字聊天的踩坑

接了一个国外的项目,项目采用网易云im 网易云信令声网rtm遇到的一些问题这个项目只对接口,给的工期是两周,延了工期,问题还是比较多的 需要全局监听rtm信息,收到监听内容,引起视频通话网易云给的文档太烂,所有的类型推策只能文档一点点推声网的rtm配置网易云的信令,坑太多,比如…

hive/spark sql中unix_timestamp 函数的坑以及时间戳相关的转换

我用的是hive版本是3.1.3,spark版本是3.3.1,它们的unix_timestamp 函数在同样的语句下转换出来的时间戳是完全不同的,如下试验所示1.unix_timestamp 函数的坑上图试验中我同样的计算 2025-07-11 10:00:00 时间点对应的时间戳,但是…