面试合集(一)| python开发

1.Cookie、Session、Token是什么以及他们的区别

核心结论:Cookie是客户端存储工具,Session是服务器的状态存储机制,Token是加密的身份凭证(客户端存储),三者的核心区别在于存储位置状态依赖,直接影响系统的可扩展性。Session和Token是API/Web 系统中两种核心的身份认证机制,

什么是Session (会话)?

核心定义:Session是服务器存储的用户登录状态,本质是键值对集合(如存储用户ID、登录时间以及角色)

工作流程

用户登录 → 服务器验证 → 用户创建Session(存储用户状态) → 返回Sesion ID(通常存在cookie中)
↓
用户后续请求 → 自动携带cookie中的Session ID → 服务器通过Session ID查询登录状态 → 服务器处理请求
↓
用户退出登录 → 服务器删除对应的Session → 用户身份失效

关键特点

存储位置:核心数据(用户状态)存储在服务器(内存、Redis、MySQL等),客户端只存储Session ID(通常存储在Cookie里)
状态依赖:服务器必须存储Session数据,属于“有状态认证”
优点:安全(核心数据不暴露给客户端)、实现简单
缺点

  • 可扩展性差:服务器集群部署时,需要同步Session数据,否则更换服务器后会重新登录。
  • 依赖Cookie:客户端禁用Cookie时,Session会失效
  • 可能占用服务器资源:用户量大时,Session存储会消耗服务器内存或数据库资源。

什么是 Token (令牌)?

核心定义:服务器生成的“加密字符串”,本质是“包含用户身份信息的凭证”,服务器不存储审核状态,所有需要的用户信息(如用户ID、角色、过期时间)都加密在Token中,客户端自己保存。

工作流程

用户登录 → 服务器验证 → 服务器用密钥加密用户信息(ID、过期时间) → 生成Token返回客户端
↓
用户后续请求 → 客户端在请求头携带Token → 服务器用密钥解密Token → 验证有效性(是否过期、签名是否正确) → 确认身份后处理请求
↓
用户退出登录 → 客户端直接删除本地存储的Token → 身份失效(服务器端无需操作)

关键特点

存储位置:核心数据加密后存在客户端(LocalStorage、SessionStorage、APP本地缓存等),服务器不存储任何状态;
状态依赖:服务器无状态(不存用户信息),属于无状态认证
优点:可扩展性强,不依赖Cookie,轻量高效;
缺点
–安全性依赖:密码泄露导致Token伪造,需要要个保密;
–需要设置合理时间:过长导致安全风险,过短需要用户频繁登录;
–无法主动作废:Token生成后,过期前始终有效;

2. JWT是什么?如何实现的?

核心定义

JWT(JSON Web Token)是基于JSON的轻量级身份认证令牌,核心是将用户信息(如ID、角色)加密为字符串,供客户端存储和传递,服务器端通过解密验证身份,无需存储会话状态。

核心组成

本质是由3段base64编码的JSON字符串拼接,结构为Header、Payload、Signature。
Header:声明加密算法和令牌类型,格式{“alg”:“HS256”,“typ”:“JWT”},编码可逆;
Payload:存储用户的核心信息和标准声明,自定义字段用户ID、角色、权限等非敏感数据,编码可逆;
Signature:验证令牌未被篡改,是JWT的核心,编码不可逆依赖密钥Secret Key;

工作流程

1.用户登录:客户端提交用户名/密码到服务器(如 POST /api/login);
2.令牌生成:服务器通过验证后,按照上述结构生成JWT令牌,返回给客户端;
3.身份验证:客户端后续请求时,在请求头中携带令牌(格式:Authorization:Bearer<JWT>);
4.令牌验证:服务器接收后,按以下步骤进行验证:
			- 拆分Header、Payload、Signature;
			- 用密钥和Header中的加密算法,重新计算签名,与Signature对比;
			- 校验Payload中的exp字段,判断令牌是否过期;
			- 验证通过后,提取Payload中的用户信息,处理后续业务逻辑;

3.谈谈对 RESTful API 设计的理解

核心定义

遵循 REST 架构风格设计的接口规范,核心是 以资源为中心,利用HTTP方法(POST、PUT、GET、DELETE等)来操作资源,实现无状态、可缓存、可扩展的接口交互。

核心本质

  1. 资源是核心:接口操作的对象是资源(如用户、商品、订单等),每个资源都有唯一标识符URL,URL只描述资源是什么,不包含操作动作(如删除、查询);
  2. HTTP语言是工具:用HTTP自带的方法表示对资源的操作,不用额外定义接口用途,提高API的可理解性;
  3. 无状态是基础:服务器不存储客户端的会话状态,每次请求都包含完整的认证信息,便于系统横向扩展;
  4. 合理利用状态码:200 OK(查询 / 更新成功)、201 Created(创建成功)、204 No Content(删除成功)、400 Bad Request(参数错误)、401 Unauthorized(未登录)、403 Forbidden(无权限)、404 Not Found(资源不存在)、500 Internal Server Error(服务器异常)、503 Service Unavailable(服务暂不可用)

4.FastAPI 、Django、Flask框架之间的定义及区别

5.Python 并发编程核心原理

6.解释 Python 中的深拷贝(deepcopy)和浅拷贝(shallow copy)的区别,分别在什么场景下使用?

7.谈谈 Python 的垃圾回收机制(GC),主要采用哪些策略?

8.什么是微服务架构?它和单体架构的区别是什么?微服务之间如何实现通信?

9.如何用 Redis 实现分布式锁?需要注意哪些问题?(如死锁、锁超时)

10.Redis 的核心数据结构有哪些?(String、Hash、List、Set、Sorted Set)分别适合什么场景?如何用 Redis 实现缓存穿透、缓存击穿、缓存雪崩的解决方案?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ansheng1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值