JWT 鉴权常见知识点及参考答案
JWT 鉴权常见知识点及参考答案
最近在 Go Web 项目当中使用到了 JWT 进行鉴权,因此通过这篇文章对 JWT 的原理及相关的知识点进行总结。
文章目录
- JWT 鉴权常见知识点及参考答案
- JWT 签名算法的详细工作流程
- 一. 签名的生成过程
- 二. 签名的验证过程
- 1. 什么是 JWT?它的结构是什么?
- 2. JWT 的工作原理(流程)是什么?
- 3. JWT 的优缺点?
- 4. 如何防止 JWT 被篡改?
- 5. JWT 应该存储在客户端哪里?Cookie 还是 LocalStorage?
- 什么是 Cookie?什么是 LocalStorage?二者对比?
- Cookie
- 什么是 CSRF 攻击?
- LocalStorage
- Cookie 与 LocalStorage 的关键区别
- JWT 存储建议
- 拓展:何时使用 Cookie 和 LocalStorage
- 6. 如何实现 JWT 的主动失效?
- 7. JWT 和 Session 的区别?
- 8. 什么是 Refresh Token?它的作用是什么?
- 9. JWT 可能的安全风险有哪些?如何防御?
- 10. 什么场景适合使用 JWT?什么场景不适合?
- 11. JWT 的 Payload 可以被解密吗?
- 12. 如何选择 HS256 和 RS256?
- 13. JWT 中的签名算法 HS256 和 RS256 有什么区别?在什么场景下应该选择哪种算法?
- 14. 如何在微服务架构中使用 JWT 进行服务间的安全通信?
- 15. JWT 的 Payload 应该避免存储哪些类型的用户数据?为什么?
- 16. 除了 JWT 之外,还有哪些鉴权方法?为什么 JWT 更好?
- Session-Cookie 鉴权
- OAuth 2.0 / OpenID Connect(OIDC)
- 为什么 JWT 更好?
- JWT 的局限性
在开始正式深入知识点之前,我们需要先回顾一下 JWT 的工作原理:
JWT 签名算法的详细工作流程
一. 签名的生成过程
步骤一:拼接 Header 和 Payload
分别对 JWT 的 Header(保存所使用的加密算法及 Token 类型【也就是 JWT】) 和 Payload(包括一些标识用户个人信息的字段)进行 Base64Url 编码,得到两个字符串。用 .
连接两个字符串,形成待签名的原始数据:
base64UrlEncode(Header) + "." + base64UrlEncode(Payload)
步骤二:使用密钥和算法生成签名
基于 Header 中指定的算法(如 HS256 或 RS256),用密钥对拼接后的原始数据进行加密,生成签名:
HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload),SecretKey
)
// OR
RSASHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload),PrivateKey
)
步骤三:组合完整的 JWT
对生成的签名使用 Base64Url 编码,并与 Header.Payload
通过 .
拼接,得到完整的 JWT:
Header.Payload.Signature
上面三个部分均通过 Base64Url 编码,Signature 在编码前还进行了加密。
二. 签名的验证过程
服务端接收到来自客户端的 JWT 之后,按照以下步骤验证签名的合法性:
- 解析 Header 和 Payload,并从 Header 中获取编码 Signature 所用到的具体的加密算法(HS256/RS256)。在这一步中通过解析 Payload 中可能包含的过期时间可以得知当前 JWT 是否有效;
- 重新计算签名:使用相同的加密算法 +
Header.Payload
+ 密钥,重新计算 Signature; - 比对签名:将新生成的签名与 JWT 中的签名进行对比。一致则 Token 未被篡改,验证通过;否则 Token 可能被篡改,验证不通过。
下面我们来看一些与 JWT 相关的问题。
1. 什么是 JWT?它的结构是什么?
JWT(JSON Web Token)是一种开放标准(RFC 7519),是用于在网络间安全传输声明(Claims)的轻量级对象。
JWT 的结构包括:
- Header:用于描述加密算法(如 HS256、RS256)和 Token 类型(如 JWT);
- Payload:存放实际数据(如用户 ID 和过期时间);
- Signature:对 Header 和 Payload 进行签名,防止篡改。
2. JWT 的工作原理(流程)是什么?
- 登录:用户发送登录凭证(如用户名 + 密码)到服务端;
- 生成 Token(由服务端):服务端接收到来自用户发送的凭证之后,对凭证进行验证,然后生成 JWT 回发给用户。
- 存储 Token(由客户端):用户客户端(如浏览器)存储 JWT(LocalStorage/Cookie)。
- 携带 Token(当客户端再次向服务端发送请求时):后续客户端发送给服务端的请求将在
Authorization: Bearer <token>
中携带 token。 - 验证 Token(由服务端):服务端对客户端携带的 token 进行解析,从中解析出签名和 Token 有效期,如果 token 的签名非法,或有效期已过,那么验证失败。否则验证成功,并授权客户端访问资源。
- 如果验证成功,之前由服务端分发的 JWT 通常存储着用户的 ID,那么服务端在此时就可以得知这条请求客户端的个人信息,服务端可以对这种信息进行存储,以在处理一次 HTTP Request 期间使用用户信息。
3. JWT 的优缺点?
优点
- 无状态:服务端无需存储会话信息,适合分布式系统。
- 跨域支持:适用于微服务或跨域场景(如 OAuth2)。
- 自包含:Payload 可包含用户信息,从而减少数据库查询操作。
缺点
- 无法主动失效:除非设置短有效期或额外逻辑(如黑名单)。
- 性能问题:Token 较大会增加网络开销。
- 安全性依赖存储:客户端存储不当被 XSS 攻击窃取。
4. 如何防止 JWT 被篡改?
- 签名机制:服务端用密钥生成签名,任何篡改都会导致签名不匹配。
- 强算法:避免使用
none
算法,优先使用 HS256 / RS256。 - 密钥保护:确保密钥不被泄露。
5. JWT 应该存储在客户端哪里?Cookie 还是 LocalStorage?
在回答这个问题之前,我们先来了解一下 Cookie 和 LocalStorage。
什么是 Cookie?什么是 LocalStorage?二者对比?
Cookie
定义
Cookie 是由服务器生成并发送到客户端(比如浏览器)的小型文本文件,用于存储会话信息、用户偏好数据等。每次客户端向服务器发送请求时,Cookie 会自动附加在 HTTP 头部当中。
特点
- 存储容量:单个 Cookie 约 4 KB,每个域名下最多允许约 20 ~ 50 个 Cookie。
- 生命周期:分为会话 Cookie 和持久 Cookie。前者在浏览器关闭时失效,后者通过 Expires 或 Max-Age 设置过期时间。
- 作用域:Domain 指定哪些域名可以访问 Cookie,Path 限制 Cookie 在特定路径下有效。
- 安全性:仅通过 HTTPS 传输(Secure);禁止 JavaScript 访问,避免 XSS 攻击(禁止 JS 访问的特性就是 HTTPOnly);SameSite:限制跨站携带 Cookie,防御 CSRF 攻击。
用途
- 保存用户登录状态(如 Session ID 或 JWT)。
- 追踪用户行为(用于广告定向)。
- 保存个性化设置(如语言、主题)。
什么是 CSRF 攻击?
CSRF(跨站请求伪造)攻击是一种利用用户已登录的身份,在用户不知情的情况下,诱使其执行非预期操作的网络攻击方式。
LocalStorage
定义
LocalStorage 是 HTML5 提供的浏览器本地存储 API,属于 Web Storage 规范。数据以键值对形式永久存储在客户端,除非手动清楚或通过代码清楚。
特点
- 存储容量:约 5 ~ 10 MB。
- 生命周期:永久存储,除非用户清楚浏览器缓存或开发者主动删除。
- 作用域:遵循同源策略,仅同域名、协议、端口的页面可访问。
- 安全性:无自动加密,数据明文存储。易受 XSS 攻击:JavaScript 直接读写 LocalStorage。
用途
- 存储客户端非敏感数据(如用户界面配置)。
- 缓存静态资源信息(如图片、脚本)。
- 单页应用(SPA)的持久化管理。
Cookie 与 LocalStorage 的关键区别
JWT 存储建议
Cookie
- 优点:支持 HTTPOnly 和 Secure 标志,防止 XSS 攻击。
- 缺点:可能受 CSRF 攻击。
LocalStorage
- 优点:容量大,同源策略保护。
- 缺点:易受 XSS 攻击直接读取,因为 LocalStorage 不经加密明文存储在客户端。
推荐
使用 Cookie 更安全,但需要结合防御策略(如 SameSite 属性,从而避免 CSRF)。
拓展:何时使用 Cookie 和 LocalStorage
- Cookie:用于需要会话管理、身份验证,且需要重视安全性的场景。
- LocalStorage:存储纯客户端数据(如 UI 主题)、大容量非敏感信息,或需长期保存的数据。
6. 如何实现 JWT 的主动失效?
- 黑名单机制:服务端维护一个失效了的 Token 列表(缺点是牺牲了 JWT 的无状态性,无状态性指的是服务端不需要对 JWT 进行存储)。
- 短期 Token:设置短有效期,搭配 Refresh Token 续期。
- 版本控制:用户登出时更新密钥或用户 Token 的版本号。
7. JWT 和 Session 的区别?
JWT | Session |
---|---|
无状态,数据存储在 Token 当中 | 有状态,数据在服务端存储 |
适合分布式系统 | 需会话存储集群同步 |
跨域支持良好 | 依赖 Cookie 域/路径限制 |
需处理 Token 过期和撤销逻辑 | 直接删除服务端会话即失效 |
8. 什么是 Refresh Token?它的作用是什么?
Refresh Token 是长期有效的 Token(存储于服务端),由认证服务器在用户首次登录或授权时颁发,专门用于获取新的 Access Token。
作用
- Access Token 过期后,客户端用 Refresh Token 申请新的 Token。
- 减少 Access Token 的泄露风险(因有效期短)。
- Refresh Token 仅用于获取新的 Access Token,不直接访问业务接口。服务端可吊销 Refresh Token 强制用户重新登录。
9. JWT 可能的安全风险有哪些?如何防御?
风险
- XSS 攻击窃取存储在 LocalStorage 当中的 Token。
- 弱加密算法(如使用 HS256 但密钥强度不足)。
- Payload 中存储敏感信息(如密码)。
防御
- 使用 HTTPOnly Cookie + CSRF Token。
- 选择 RS256 替代 HS256,前者是非对称加密。
- 避免在 Payload 中存放敏感数据。
10. 什么场景适合使用 JWT?什么场景不适合?
适合
- 跨服务认证(如微服务间调用)。
- 第三方授权(如 OAuth2)。
- 一次性验证(如密码重置链接)。
不适合
- 需要实时吊销权限(如后台强制踢人)。
- 传输敏感信息(需要配合 JWE 加密)。
- 客户端无法安全存储 Token 时不适合使用 JWT。
11. JWT 的 Payload 可以被解密吗?
Payload 使用 Base64URL 编码,可以直接解码,但未被加密。如果需要保密,需要使用 JWE(JSON Web Encryption)。
12. 如何选择 HS256 和 RS256?
- HS256 使用共享密钥,适合单体服务;
- RS256 使用公私钥,适合多服务场景。
13. JWT 中的签名算法 HS256 和 RS256 有什么区别?在什么场景下应该选择哪种算法?
HS256
- 使用对称加密,服务端和客户端共享同一个密钥生成和验证签名。
- 优点:计算速度快,适合单体服务架构。
- 缺点:密钥需要严格保护,若泄露则系统完全暴露。
RS256
- 使用非对称加密,服务端用私钥签名,客户端用公钥验证。
- 优点:公钥可公开分发,适合多服务协作(如微服务、第三方认证)。
- 缺点:计算开销大。
场景
- 单体服务:HS256。
- 分布式系统或需公钥验证的场景:RS256。
14. 如何在微服务架构中使用 JWT 进行服务间的安全通信?
- 统一认证服务(Auth Service):负责颁发 JWT,各服务信任该服务的签名。
- Token 传递:请求到达网关或首个服务时验证 JWT,随后透传 Token 至下游服务。
- 权限控制:在 JWT 的 Payload 中声明用户角色和权限,各服务根据此信息授权。
- 服务间调用:服务 A 调用服务 B 时,携带原始 JWT 或生成新的服务间 Token。
- 防御重放攻击:在 Token 中加入唯一标识或时间戳,服务端记录已经使用的 Token 标识。
15. JWT 的 Payload 应该避免存储哪些类型的用户数据?为什么?
避免存储的数据
- 敏感信息:因为 JWT Payload 仅 Base64 编码,未加密,易泄露;
- 过大的数据:增加 Token 体积,影响网络传输性能;
- 动态变化的数据:Token 一旦签发则无法实时更新,导致数据不一致。
建议存储的数据
- 用户唯一标识(比如 user_id);
- 角色、权限;
- Token 有效期。
16. 除了 JWT 之外,还有哪些鉴权方法?为什么 JWT 更好?
除了 JWT 之外,还包括以下鉴权方法:
Session-Cookie 鉴权
原理
- 用户登录后,服务端生成 Session ID 并存储在服务端(如数据库、Redis)。
- 通过 Set-Cookie 头部将 Session ID 放松到客户端浏览器。
- 后续请求自动携带 Cookie,服务端通过 Session ID 验证用户身份。
特点
- 有状态:服务端需维护 Session 存储。
- 安全性依赖 Cookie 属性。
适用场景
传统单服务架构,需严格控制会话状态的系统(如银行后台)。
OAuth 2.0 / OpenID Connect(OIDC)
原理
- OAuth 2.0 专注于授权(如第三方应用访问用户资源)。
- OIDC 在 OAuth 2.0 基础上扩展,提供身份认证功能(返回用户信息的 ID Token)。
- 用户通过授权服务器(如 Google、GitHub)登录,获取 Access Token 访问资源。
特点
- 适合第三方集成。
- 复杂:涉及多个角色(资源服务器、授权服务器、客户端)。
适用场景
跨平台应用、第三方服务授权。
为什么 JWT 更好?
JWT 并非在所有场景下都是最佳选择,但是相较于上述认证方式,JWT 具有以下优点:
- 无状态性:服务端无需存储会话信息,天然适合分布式系统和微服务架构。基于 JWT 无状态的特点,JWT 鉴权降低了服务端的存储压力,避免 Session 同步问题(如 Redis 集群故障)。
- 跨域和跨服务支持:JWT 可以通过 HTTP 头部(
Authorization: Bearer <token>
)轻松跨域传递,适合前后端分离和多服务协作场景。 - 自包含性:JWT 的 Payload 字段可以直接携带用户信息,减少数据库查询操作。自包含性使得 JWT 适合一次性操作或离线验证。
JWT 的局限性
- 无法主动吊销:除非使用黑名单(失去无状态性)或设置 JWT 的短有效期(推荐结合 Refresh Token);
- Token 膨胀:Payload 存储过多字段会增加网络负担;
- 密钥管理:HS256 共享密钥或 RS256 私钥需要严格保护。
相关文章:
JWT 鉴权常见知识点及参考答案
JWT 鉴权常见知识点及参考答案 最近在 Go Web 项目当中使用到了 JWT 进行鉴权,因此通过这篇文章对 JWT 的原理及相关的知识点进行总结。 文章目录 JWT 鉴权常见知识点及参考答案JWT 签名算法的详细工作流程一. 签名的生成过程二. 签名的验证过程 1. 什么是 JWT&am…...
洛谷题单入门4-P5729 【深基5.例7】工艺品制作-python
输入格式 第一行三个正整数 w,x,h。 第二行一个正整数 q。 接下来 q 行,每行六个整数 输出格式 输出一个整数表示答案。 三维数组直接标记 class Solution:staticmethoddef oi_input():"""从标准输入读取数据"""w, x, h map(…...
【C语言】内存函数详解
个人主页 文章目录 🏠一、memcpy函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 🚀二、memmove函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 🎡三、memset函数1.函数形式以及功能介绍2.函数的使用 🎉四、memcmp1.函数形…...
使用Python开发自动驾驶技术:车道线检测模型
友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...
HTTP代理的全面解读:什么是HTTP代理?HTTP代理的工作原理
在互联网大潮中,每一个请求和返回数据的背后,都离不开传输协议的支持,而HTTP协议无疑是最熟悉的网络通信基础之一。当我们谈到HTTP代理时,它不仅让浏览网络变得更高效,也为数据采集以及全球性远程任务提供了解决方案。…...
DeepSeek底层揭秘——deepEP
1. 什么是 deepEP? (1) 定义 deepEP (DeepSeek EndPoint) 是 DeepSeek 开源的一款高性能、低延迟的分布式通信库,专为大规模深度学习训练和推理场景设计。它旨在优化分布式计算环境中的通信效率,特别是在节点间数据交换、梯度同步、模型分发…...
内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
目录 1. Cobalt Strike 在什么情况下会构建内网代理? 2. Cobalt Strike 构建内网代理的主要作用和目的是什么? 3. Cobalt Strike 如何构建内网代理?需要什么条件和参数? 条件 步骤 参数 4. Cobalt Strike 内网代理能获取什…...
【redis】哨兵:人工恢复主节点故障和哨兵自动恢复主节点故障
文章目录 基本概念人工恢复主节点故障操作流程 哨兵自动恢复主节点故障哨兵集 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应…...
【Go 】异常处理
1. Go 语言错误处理基础 Go 语言尽量避免使用异常,推荐使用 返回错误 让调用者处理。Go 语言标准库提供 error 接口:type error interface {Error() string }errors.New("错误信息") 创建错误对象。 package mainimport ("errors"…...
微软纳德拉最新一期访谈
萨提亚纳德拉: 微软的AGI计划与量子突破| 2025.2.20 【文章核心预览:】 1、纳德拉回应AI价格战:效率提升将重塑需求,但关键是能否带动GDP增长至10% 2、微软AI收入130亿美元,4年后目标1300亿,但提醒"…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...
蓝桥杯——嵌入式学习日记
因为lED和LCD共用PC8~PC15引脚,要通过锁存(LE)和(GPIOC->ODR)来避免LED和LCD引脚冲突 修改点: main.c中,GPIO初始化引脚后,LE(PD2引脚低电平锁存,退出透明模式&…...
第七课:Python基础排序算法与比较排序原理深度解析
比较排序算法是算法领域中的经典内容,其核心思想通过元素间的比较操作确定相对顺序。本文将深入探讨冒泡排序的优化策略、选择排序的变种实现、插入排序的典型应用场景,并通过统计比较次数直观展示算法效率差异。 一、冒泡排序的优化策略 传统冒泡排序存…...
项目流程中关键节点的测试类型
一、全流程测试框架图 #mermaid-svg-LmUdhLObstSpThwP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LmUdhLObstSpThwP .error-icon{fill:#552222;}#mermaid-svg-LmUdhLObstSpThwP .error-text{fill:#552222;strok…...
EasyRTC嵌入式音视频通信SDK:WebRTC技术下的硬件与软件协同演进,开启通信新时代
在当今数字化时代,智能设备的普及和人们对实时通信需求的不断增长,推动了嵌入式音视频通信技术的快速发。EasyRTC嵌入式音视频通信SDK凭借其独特的技术特点和应用优势,在嵌入式设备和多平台实时通信领域脱颖而出。 1、轻量级设计与高性能 Ea…...
机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?
作为机器视觉工程师,参加机器视觉展会不仅是了解行业前沿技术的窗口,也是拓展专业网络、寻找解决方案的重要机会。以下是结合展会信息和工程师视角的综合建议: 一、聚焦技术趋势与创新应用 参与技术论坛与研讨会 展会同期的技术论坛是获取行业洞见的核心渠道。例如: 上海展…...
重温Ubuntu 24.04 LTS
用户调整 # 创建新用户 sudo adduser newusername # 设置新用户的密码 sudo passwd newusername # 将新用户添加到 sudo 组 sudo usermod -aG sudo newusername # 修改ssh访问权限 sudo nano /etc/ssh/sshd_config # 将新用户加入,此时root将无法访问 AllowUsers n…...
新版 eslintrc 文件弃用 .eslintignore已弃用 替代方案
1.进入eslint.config.mjs文件 2.import { defineConfig, globalIgnores } from "eslint/config"; 引入globalIgnores 3.配置 defineConfig([ ... globalIgnores([ "config/*", ".husky", ".local", "public/*", ".…...
优化 SQL 语句方向和提升性能技巧
优化 SQL 语句是提升 MySQL 性能的关键步骤之一。通过优化 SQL 语句,可以减少查询时间、降低服务器负载、提高系统吞吐量。以下是优化 SQL 语句的方法、策略和技巧: 一、优化 SQL 语句的方法 1. 使用 EXPLAIN 分析查询 作用:查看 SQL 语句的执行计划,了解查询是如何执行的…...
数据可视化革命!「图表狐」五大行业新范式:从科研论文到商业决策的AI进化论
图表狐 - AI图表生成工具,在线数据可视化 一、学术研究:突破传统制图范式 案例1 基因测序热图 用户输入: "绘制差异表达基因热图,行标签为GeneA/B/C,列包含正常组5例、癌症组7例,红色标记上调基因(f…...
Jenkins集成Trivy安全漏洞检查指南
要将Jenkins与Trivy集成以实现制品的安全漏洞检查,可以按照以下步骤操作: 安装Trivy 在Jenkins服务器或构建节点上安装Trivy # 使用包管理器(如Debian/Ubuntu) sudo apt-get install -y wget apt-transport-https gnupg lsb-rel…...
git使用钩子文件出现错误
git的钩子文件出现错误 问题打印:解决办法1.删除本地钩子文件2. 恢复commit-msg钩子3.重新提交工程 问题打印: 无法commit 1 个文件: .git/hooks/commit-msg: 行 1: 未预期的符号 < 附近有语法错误 .git/hooks/commit-msg: 行 1: Your browse does …...
SpringBoot 第二课(Ⅱ)配置嵌入式服务器
目录 一、封装类解读 二、注册Servlet三大组件(Servlet、Filter、Listener) 自定义这三个组件 WebConfig MyFilter MyListener HelloController hello1.html hello2.html 三、使用外置的Servlet容器 1.一定要确保打包方式是war包 2.将…...
Python学习笔记(6)
Python学习笔记(6) 第13节课 函数基础1.函数定义与调用2.函数的返回值3.局部变量与全局变量 第13节课 函数基础 对于任何一个知识点,必须讨论的三个问题: (1)它是啥 (2)为啥有它 …...
HarmonyOS Next应用架构设计与模块化开发详解
引言 在HarmonyOS Next开发中,合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路,并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...
batman-adv 优化:基于信号强度(RSSI)选择链路
batman-adv 优化:基于信号强度(RSSI)选择链路 1. 背景介绍 batman-adv(Better Approach To Mobile Ad-hoc Networking Advanced) 是一种用于无线 Mesh 网络的路由协议。它主要基于 ETX(Expected Transmis…...
计算机二级:函数基础题
函数基础题 第一题 rinput("请输入半径:") c3.1415926*r*2 print("{:.0f}".format(c))输出: Type Error第二题 a7 b2 print(a%2)输出 1第三题 ab4 def my_ab(ab,xy):abpow(ab,xy)print(ab,end"\n") my_ab(ab,2)prin…...
系统思考与心智模式
“问题不是出在我们做了多少,而是出在我们做了什么。” — 赫尔曼凯恩 “一分耕耘一分收获”,这似乎是我们脑海中根深蒂固的心智模式。今天,我在一家餐厅用餐,店员告诉我,打卡收藏可以获得一份小食。没过多久…...
高考志愿填报管理系统基于Spring Boot SSM
目录 摘要 一、系统需求分析: 1.1用户主体分析 1.2 功能需求分析 1.3、非功能需求分析 二、技术实现: 三、结论: 摘要 该系统主要实现了:学生信息管理、院校信息查询、专业信息展示、志愿填报模拟、智能推荐管…...
[深度学习]图像分类项目-食物分类
图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…...
Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
在 Qt 中直接使用 drmModeObjectSetProperty 设置 Plane 的 zpos 值需要结合 Linux DRM/KMS API 和 Qt 的底层窗口系统(如 eglfs 平台插件)。以下是详细步骤和代码示例: 1. 原理说明 DRM/KMS 基础: Plane:负责图层合成…...
springboot milvus search向量相似度查询 踩坑使用经验
1.前提提要:java的pom 版本为:2.4.9 milvus 版本是:2.4.13-hotfix 2.先来工具类方法 /*** 向量搜索* param client* param query* return*/public SearchResp search(NonNull MilvusClientV2 client, NonNull VectorCondition query) {final …...
BFS解决FloodFill算法
1.图像渲染 733. 图像渲染 - 力扣(LeetCode) 1.题目解析 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行…...
计算机组成原理
计算机组成原理是计算机科学与技术领域的一门基础课程,它主要研究计算机硬件系统的结构、设计和工作原理。通过学习计算机组成原理,可以深入理解计算机是如何执行程序的,从最底层的角度了解计算机的工作机制。以下是计算机组成原理的一些核心…...
Spring Boot整合SSE实现消息推送:跨域问题解决与前后端联调实战
摘要 本文记录了一次完整的Spring Boot整合Server-Sent Events(SSE)实现实时消息推送的开发过程,重点分析前后端联调时遇到的跨域问题及解决方案。通过CrossOrigin注解的实际应用案例,帮助开发者快速定位和解决类似问题。 一、项…...
硅基流动:推理加速,告别“服务器繁忙,请稍后再试”
DeepSeek虽然一直热度高涨,但存在一个很直接的问题——“服务器繁忙,请稍后再试”。 一、介绍概况 硅基流动(SiliconFlow)是北京硅基流动科技有限公司推出的AI基础设施(AI Infra)平台,成立于202…...
腾讯云DNS和Lego工具结合使用,可以方便地为你的域名自动申请和续期SSL证书。
腾讯云DNS和Lego工具结合使用,可以方便地为你的域名自动申请和续期SSL证书。以下是具体步骤: 1. 准备工作 腾讯云账号:确保你有一个腾讯云账号,并且已经开通了DNS服务。域名:确保你拥有一个域名,并且已经…...
微服务 - 高级篇
微服务 - 高级篇 一、服务治理(一)服务注册与发现(二)负载均衡(三)服务熔断与降级 二、分布式事务(一)解决方案(二)最终一致性 三、性能优化(一&a…...
【Linux】线程基础
🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.背景知识02.线程概念简单使用线程线程调度成本更低 01.背景知识 OS进行内存管理,不是以字节为单位的,而是以内存块为单位的,默认大小为4kb&…...
WHAM 人体3d重建部署笔记 vitpose
目录 视频结果: docker安装说明: conda环境安装说明: 依赖项: 依赖库: 安装 mmpose,mmcv 下载模型权重: 算法原理, demo脚本 报错inference_top_down_pose_model: 测试命令: 视频结果: wham_smpl预测结果 git地址: GitHub - yohanshin/WHAM WHAM: Recons…...
netplan是如何操控systemd-networkd的? 笔记250324
netplan是如何操控systemd-networkd的? netplan通过以下方式操控systemd-networkd: 工作原理:netplan读取位于/etc/netplan/目录下的YAML格式的配置文件,这些配置文件描述了网络接口的配置。netplan会将这些配置文件解析并转换为systemd-ne…...
[学成在线]06-视频分片上传
上传视频 需求分析 教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。 教育机构用户在"媒资管理"页面中点击 "上传视频" 按钮。 点击“上传视频”打开上传页面 选择要上传的文件…...
机器视觉场景应用中,有没有超景深的工业镜头
在机器视觉领域,确实存在具有超景深特性的工业镜头,这类镜头通过特殊的光学设计或技术手段,能够显著扩大清晰成像的纵向范围,从而满足复杂检测场景中对多平面物体清晰成像的需求。以下是相关技术要点及典型镜头类型: 1. 远心镜头 远心镜头是超景深镜头的典型代表,其特点包…...
初探 Dubbo Rust SDK打造现代微服务的新可能
一、背景故事:为什么要在微服务中用 Rust? 微服务世界曾是 Java 的天下,后来 Go 异军突起,如今,Rust 凭借其“高性能 安全 零成本抽象”的特性,正在逐步走入服务端核心舞台。 问题随之而来:…...
如何理解响应式编程
思考: 分析Netty与Reactor背压协调策略 用户的问题是关于如何在 Netty 和 Project Reactor 联合使用时处理背压问题,特别是当 Reactor 的处理速度跟不上 Netty 的事件产生速度时该怎么办。这是一个技术性很强的问题,涉及到 Netty 的非阻塞特…...
Python网络编程入门
一.Socket 简称套接字,是进程之间通信的一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间要想进行网络通信需要Socket,Socket好比数据的搬运工~ 2个进程之间通过Socket进行相互通讯&a…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功能组合的导出表格示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功…...
鸿蒙特效教程10-卡片展开/收起效果
鸿蒙特效教程10-卡片展开/收起效果 在移动应用开发中,卡片是一种常见且实用的UI元素,能够将信息以紧凑且易于理解的方式呈现给用户。 本教程将详细讲解如何在HarmonyOS中实现卡片的展开/收起效果,通过这个实例,你将掌握ArkUI中状…...
如何创建一个socket服务器?
1. 导入必要的库 首先,需要导入Python的socket库,它提供了创建和管理socket连接的功能。 python import socket 2. 创建服务器端socket 使用socket.socket()函数创建一个服务器端的socket对象,指定协议族(如socket.AF_INET表示…...
react自定义hook
自定义hook: 用来封装复用的逻辑,,自定义hook是以use开头的普通函数,,将组件中可复用的状态逻辑抽取到自定义的hook中,简化组件代码 常见自定义hook例子: 封装一个简单的计数器 import {useS…...