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

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 之后,按照以下步骤验证签名的合法性:

  1. 解析 Header 和 Payload,并从 Header 中获取编码 Signature 所用到的具体的加密算法(HS256/RS256)。在这一步中通过解析 Payload 中可能包含的过期时间可以得知当前 JWT 是否有效;
  2. 重新计算签名:使用相同的加密算法 + Header.Payload + 密钥,重新计算 Signature;
  3. 比对签名:将新生成的签名与 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 的工作原理(流程)是什么?

  1. 登录:用户发送登录凭证(如用户名 + 密码)到服务端;
  2. 生成 Token(由服务端):服务端接收到来自用户发送的凭证之后,对凭证进行验证,然后生成 JWT 回发给用户。
  3. 存储 Token(由客户端):用户客户端(如浏览器)存储 JWT(LocalStorage/Cookie)。
  4. 携带 Token(当客户端再次向服务端发送请求时):后续客户端发送给服务端的请求将在 Authorization: Bearer <token> 中携带 token。
  5. 验证 Token(由服务端):服务端对客户端携带的 token 进行解析,从中解析出签名和 Token 有效期,如果 token 的签名非法,或有效期已过,那么验证失败。否则验证成功,并授权客户端访问资源。
  6. 如果验证成功,之前由服务端分发的 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 的区别?

JWTSession
无状态,数据存储在 Token 当中有状态,数据在服务端存储
适合分布式系统需会话存储集群同步
跨域支持良好依赖 Cookie 域/路径限制
需处理 Token 过期和撤销逻辑直接删除服务端会话即失效

8. 什么是 Refresh Token?它的作用是什么?

Refresh Token 是长期有效的 Token(存储于服务端),由认证服务器在用户首次登录或授权时颁发,专门用于获取新的 Access Token。

作用

  1. Access Token 过期后,客户端用 Refresh Token 申请新的 Token。
  2. 减少 Access Token 的泄露风险(因有效期短)。
  3. 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 进行服务间的安全通信?

  1. 统一认证服务(Auth Service):负责颁发 JWT,各服务信任该服务的签名。
  2. Token 传递:请求到达网关或首个服务时验证 JWT,随后透传 Token 至下游服务。
  3. 权限控制:在 JWT 的 Payload 中声明用户角色和权限,各服务根据此信息授权。
  4. 服务间调用:服务 A 调用服务 B 时,携带原始 JWT 或生成新的服务间 Token。
  5. 防御重放攻击:在 Token 中加入唯一标识或时间戳,服务端记录已经使用的 Token 标识。

15. JWT 的 Payload 应该避免存储哪些类型的用户数据?为什么?

避免存储的数据

  • 敏感信息:因为 JWT Payload 仅 Base64 编码,未加密,易泄露;
  • 过大的数据:增加 Token 体积,影响网络传输性能;
  • 动态变化的数据:Token 一旦签发则无法实时更新,导致数据不一致。

建议存储的数据

  • 用户唯一标识(比如 user_id);
  • 角色、权限;
  • Token 有效期。

16. 除了 JWT 之外,还有哪些鉴权方法?为什么 JWT 更好?

除了 JWT 之外,还包括以下鉴权方法:

Session-Cookie 鉴权

原理

  1. 用户登录后,服务端生成 Session ID 并存储在服务端(如数据库、Redis)。
  2. 通过 Set-Cookie 头部将 Session ID 放松到客户端浏览器。
  3. 后续请求自动携带 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 具有以下优点:

  1. 无状态性:服务端无需存储会话信息,天然适合分布式系统和微服务架构。基于 JWT 无状态的特点,JWT 鉴权降低了服务端的存储压力,避免 Session 同步问题(如 Redis 集群故障)。
  2. 跨域和跨服务支持:JWT 可以通过 HTTP 头部(Authorization: Bearer <token>)轻松跨域传递,适合前后端分离多服务协作场景。
  3. 自包含性:JWT 的 Payload 字段可以直接携带用户信息,减少数据库查询操作。自包含性使得 JWT 适合一次性操作或离线验证。

JWT 的局限性

  1. 无法主动吊销:除非使用黑名单(失去无状态性)或设置 JWT 的短有效期(推荐结合 Refresh Token);
  2. Token 膨胀:Payload 存储过多字段会增加网络负担;
  3. 密钥管理:HS256 共享密钥或 RS256 私钥需要严格保护。

相关文章:

JWT 鉴权常见知识点及参考答案

JWT 鉴权常见知识点及参考答案 最近在 Go Web 项目当中使用到了 JWT 进行鉴权&#xff0c;因此通过这篇文章对 JWT 的原理及相关的知识点进行总结。 文章目录 JWT 鉴权常见知识点及参考答案JWT 签名算法的详细工作流程一. 签名的生成过程二. 签名的验证过程 1. 什么是 JWT&am…...

洛谷题单入门4-P5729 【深基5.例7】工艺品制作-python

输入格式 第一行三个正整数 w,x,h。 第二行一个正整数 q。 接下来 q 行&#xff0c;每行六个整数 输出格式 输出一个整数表示答案。 三维数组直接标记 class Solution:staticmethoddef oi_input():"""从标准输入读取数据"""w, x, h map(…...

【C语言】内存函数详解

个人主页 文章目录 &#x1f3e0;一、memcpy函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 &#x1f680;二、memmove函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 &#x1f3a1;三、memset函数1.函数形式以及功能介绍2.函数的使用 &#x1f389;四、memcmp1.函数形…...

使用Python开发自动驾驶技术:车道线检测模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

HTTP代理的全面解读:什么是HTTP代理?HTTP代理的工作原理

在互联网大潮中&#xff0c;每一个请求和返回数据的背后&#xff0c;都离不开传输协议的支持&#xff0c;而HTTP协议无疑是最熟悉的网络通信基础之一。当我们谈到HTTP代理时&#xff0c;它不仅让浏览网络变得更高效&#xff0c;也为数据采集以及全球性远程任务提供了解决方案。…...

DeepSeek底层揭秘——deepEP

1. 什么是 deepEP&#xff1f; (1) 定义 deepEP (DeepSeek EndPoint) 是 DeepSeek 开源的一款高性能、低延迟的分布式通信库&#xff0c;专为大规模深度学习训练和推理场景设计。它旨在优化分布式计算环境中的通信效率&#xff0c;特别是在节点间数据交换、梯度同步、模型分发…...

内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析

目录 1. Cobalt Strike 在什么情况下会构建内网代理&#xff1f; 2. Cobalt Strike 构建内网代理的主要作用和目的是什么&#xff1f; 3. Cobalt Strike 如何构建内网代理&#xff1f;需要什么条件和参数&#xff1f; 条件 步骤 参数 4. Cobalt Strike 内网代理能获取什…...

【redis】哨兵:人工恢复主节点故障和哨兵自动恢复主节点故障

文章目录 基本概念人工恢复主节点故障操作流程 哨兵自动恢复主节点故障哨兵集 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应…...

【Go 】异常处理

1. Go 语言错误处理基础 Go 语言尽量避免使用异常&#xff0c;推荐使用 返回错误 让调用者处理。Go 语言标准库提供 error 接口&#xff1a;type error interface {Error() string }errors.New("错误信息") 创建错误对象。 package mainimport ("errors"…...

微软纳德拉最新一期访谈

萨提亚纳德拉&#xff1a; 微软的AGI计划与量子突破| 2025.2.20 【文章核心预览&#xff1a;】 1、纳德拉回应AI价格战&#xff1a;效率提升将重塑需求&#xff0c;但关键是能否带动GDP增长至10% 2、微软AI收入130亿美元&#xff0c;4年后目标1300亿&#xff0c;但提醒"…...

WebSocket接入SSL证书

目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时&#xff0c;使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性&#xff0c;还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...

蓝桥杯——嵌入式学习日记

因为lED和LCD共用PC8~PC15引脚&#xff0c;要通过锁存&#xff08;LE&#xff09;和&#xff08;GPIOC->ODR&#xff09;来避免LED和LCD引脚冲突 修改点: main.c中&#xff0c;GPIO初始化引脚后&#xff0c;LE&#xff08;PD2引脚低电平锁存&#xff0c;退出透明模式&…...

第七课:Python基础排序算法与比较排序原理深度解析

比较排序算法是算法领域中的经典内容&#xff0c;其核心思想通过元素间的比较操作确定相对顺序。本文将深入探讨冒泡排序的优化策略、选择排序的变种实现、插入排序的典型应用场景&#xff0c;并通过统计比较次数直观展示算法效率差异。 一、冒泡排序的优化策略 传统冒泡排序存…...

项目流程中关键节点的测试类型

一、全流程测试框架图 #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技术下的硬件与软件协同演进,开启通信新时代

在当今数字化时代&#xff0c;智能设备的普及和人们对实时通信需求的不断增长&#xff0c;推动了嵌入式音视频通信技术的快速发。EasyRTC嵌入式音视频通信SDK凭借其独特的技术特点和应用优势&#xff0c;在嵌入式设备和多平台实时通信领域脱颖而出。 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 # 将新用户加入&#xff0c;此时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图表生成工具,在线数据可视化 一、学术研究&#xff1a;突破传统制图范式 案例1 基因测序热图 用户输入&#xff1a; "绘制差异表达基因热图&#xff0c;行标签为GeneA/B/C&#xff0c;列包含正常组5例、癌症组7例&#xff0c;红色标记上调基因&#xff08;f…...

Jenkins集成Trivy安全漏洞检查指南

要将Jenkins与Trivy集成以实现制品的安全漏洞检查&#xff0c;可以按照以下步骤操作&#xff1a; 安装Trivy 在Jenkins服务器或构建节点上安装Trivy # 使用包管理器&#xff08;如Debian/Ubuntu&#xff09; sudo apt-get install -y wget apt-transport-https gnupg lsb-rel…...

git使用钩子文件出现错误

git的钩子文件出现错误 问题打印&#xff1a;解决办法1.删除本地钩子文件2. 恢复commit-msg钩子3.重新提交工程 问题打印&#xff1a; 无法commit 1 个文件: .git/hooks/commit-msg: 行 1: 未预期的符号 < 附近有语法错误 .git/hooks/commit-msg: 行 1: Your browse does …...

SpringBoot 第二课(Ⅱ)配置嵌入式服务器

目录 一、封装类解读 二、注册Servlet三大组件&#xff08;Servlet、Filter、Listener&#xff09; 自定义这三个组件 WebConfig MyFilter MyListener HelloController hello1.html hello2.html 三、使用外置的Servlet容器 1.一定要确保打包方式是war包 2.将…...

Python学习笔记(6)

Python学习笔记&#xff08;6&#xff09; 第13节课 函数基础1.函数定义与调用2.函数的返回值3.局部变量与全局变量 第13节课 函数基础 对于任何一个知识点&#xff0c;必须讨论的三个问题&#xff1a; &#xff08;1&#xff09;它是啥 &#xff08;2&#xff09;为啥有它 …...

HarmonyOS Next应用架构设计与模块化开发详解

引言 在HarmonyOS Next开发中&#xff0c;合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路&#xff0c;并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...

batman-adv 优化:基于信号强度(RSSI)选择链路

batman-adv 优化&#xff1a;基于信号强度&#xff08;RSSI&#xff09;选择链路 1. 背景介绍 batman-adv&#xff08;Better Approach To Mobile Ad-hoc Networking Advanced&#xff09; 是一种用于无线 Mesh 网络的路由协议。它主要基于 ETX&#xff08;Expected Transmis…...

计算机二级:函数基础题

函数基础题 第一题 rinput("请输入半径&#xff1a;") c3.1415926*r*2 print("{:.0f}".format(c))输出&#xff1a; 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…...

系统思考与心智模式

“问题不是出在我们做了多少&#xff0c;而是出在我们做了什么。” — 赫尔曼凯恩 “一分耕耘一分收获”&#xff0c;这似乎是我们脑海中根深蒂固的心智模式。今天&#xff0c;我在一家餐厅用餐&#xff0c;店员告诉我&#xff0c;打卡收藏可以获得一份小食。没过多久&#xf…...

高考志愿填报管理系统基于Spring Boot SSM

目录 摘要 ‌一、系统需求分析‌&#xff1a; 1.1用户主体分析 1.2 功能需求分析 1.3、非功能需求分析 二、‌技术实现‌&#xff1a; ‌三、结论‌&#xff1a; 摘要 该系统主要实现了&#xff1a;学生信息管理、院校信息查询、专业信息展示、志愿填报模拟、智能推荐管…...

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…...

Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值

在 Qt 中直接使用 drmModeObjectSetProperty 设置 Plane 的 zpos 值需要结合 Linux DRM/KMS API 和 Qt 的底层窗口系统&#xff08;如 eglfs 平台插件&#xff09;。以下是详细步骤和代码示例&#xff1a; 1. 原理说明 DRM/KMS 基础&#xff1a; Plane&#xff1a;负责图层合成…...

springboot milvus search向量相似度查询 踩坑使用经验

1.前提提要&#xff1a;java的pom 版本为&#xff1a;2.4.9 milvus 版本是&#xff1a;2.4.13-hotfix 2.先来工具类方法 /*** 向量搜索* param client* param query* return*/public SearchResp search(NonNull MilvusClientV2 client, NonNull VectorCondition query) {final …...

BFS解决FloodFill算法

1.图像渲染 733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行…...

计算机组成原理

计算机组成原理是计算机科学与技术领域的一门基础课程&#xff0c;它主要研究计算机硬件系统的结构、设计和工作原理。通过学习计算机组成原理&#xff0c;可以深入理解计算机是如何执行程序的&#xff0c;从最底层的角度了解计算机的工作机制。以下是计算机组成原理的一些核心…...

Spring Boot整合SSE实现消息推送:跨域问题解决与前后端联调实战

摘要 本文记录了一次完整的Spring Boot整合Server-Sent Events&#xff08;SSE&#xff09;实现实时消息推送的开发过程&#xff0c;重点分析前后端联调时遇到的跨域问题及解决方案。通过CrossOrigin注解的实际应用案例&#xff0c;帮助开发者快速定位和解决类似问题。 一、项…...

硅基流动:推理加速,告别“服务器繁忙,请稍后再试”

DeepSeek虽然一直热度高涨&#xff0c;但存在一个很直接的问题——“服务器繁忙&#xff0c;请稍后再试”。 一、介绍概况 硅基流动&#xff08;SiliconFlow&#xff09;是北京硅基流动科技有限公司推出的AI基础设施&#xff08;AI Infra&#xff09;平台&#xff0c;成立于202…...

腾讯云DNS和Lego工具结合使用,可以方便地为你的域名自动申请和续期SSL证书。

腾讯云DNS和Lego工具结合使用&#xff0c;可以方便地为你的域名自动申请和续期SSL证书。以下是具体步骤&#xff1a; 1. 准备工作 腾讯云账号&#xff1a;确保你有一个腾讯云账号&#xff0c;并且已经开通了DNS服务。域名&#xff1a;确保你拥有一个域名&#xff0c;并且已经…...

微服务 - 高级篇

微服务 - 高级篇 一、服务治理&#xff08;一&#xff09;服务注册与发现&#xff08;二&#xff09;负载均衡&#xff08;三&#xff09;服务熔断与降级 二、分布式事务&#xff08;一&#xff09;解决方案&#xff08;二&#xff09;最终一致性 三、性能优化&#xff08;一&a…...

【Linux】线程基础

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.背景知识02.线程概念简单使用线程线程调度成本更低 01.背景知识 OS进行内存管理&#xff0c;不是以字节为单位的&#xff0c;而是以内存块为单位的&#xff0c;默认大小为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&#xff1a; 工作原理&#xff1a;netplan读取位于/etc/netplan/目录下的YAML格式的配置文件&#xff0c;这些配置文件描述了网络接口的配置。netplan会将这些配置文件解析并转换为systemd-ne…...

[学成在线]06-视频分片上传

上传视频 需求分析 教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。 教育机构用户在"媒资管理"页面中点击 "上传视频" 按钮。 点击“上传视频”打开上传页面 选择要上传的文件…...

机器视觉场景应用中,有没有超景深的工业镜头

在机器视觉领域,确实存在具有超景深特性的工业镜头,这类镜头通过特殊的光学设计或技术手段,能够显著扩大清晰成像的纵向范围,从而满足复杂检测场景中对多平面物体清晰成像的需求。以下是相关技术要点及典型镜头类型: 1. 远心镜头 远心镜头是超景深镜头的典型代表,其特点包…...

初探 Dubbo Rust SDK打造现代微服务的新可能

一、背景故事&#xff1a;为什么要在微服务中用 Rust&#xff1f; 微服务世界曾是 Java 的天下&#xff0c;后来 Go 异军突起&#xff0c;如今&#xff0c;Rust 凭借其“高性能 安全 零成本抽象”的特性&#xff0c;正在逐步走入服务端核心舞台。 问题随之而来&#xff1a;…...

如何理解响应式编程

思考&#xff1a; 分析Netty与Reactor背压协调策略 用户的问题是关于如何在 Netty 和 Project Reactor 联合使用时处理背压问题&#xff0c;特别是当 Reactor 的处理速度跟不上 Netty 的事件产生速度时该怎么办。这是一个技术性很强的问题&#xff0c;涉及到 Netty 的非阻塞特…...

Python网络编程入门

一.Socket 简称套接字&#xff0c;是进程之间通信的一个工具&#xff0c;好比现实生活中的插座&#xff0c;所有的家用电器要想工作都是基于插座进行&#xff0c;进程之间要想进行网络通信需要Socket&#xff0c;Socket好比数据的搬运工~ 2个进程之间通过Socket进行相互通讯&a…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功能组合的导出表格示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功…...

鸿蒙特效教程10-卡片展开/收起效果

鸿蒙特效教程10-卡片展开/收起效果 在移动应用开发中&#xff0c;卡片是一种常见且实用的UI元素&#xff0c;能够将信息以紧凑且易于理解的方式呈现给用户。 本教程将详细讲解如何在HarmonyOS中实现卡片的展开/收起效果&#xff0c;通过这个实例&#xff0c;你将掌握ArkUI中状…...

如何创建一个socket服务器?

1. 导入必要的库 首先&#xff0c;需要导入Python的socket库&#xff0c;它提供了创建和管理socket连接的功能。 python import socket 2. 创建服务器端socket 使用socket.socket()函数创建一个服务器端的socket对象&#xff0c;指定协议族&#xff08;如socket.AF_INET表示…...

react自定义hook

自定义hook&#xff1a; 用来封装复用的逻辑&#xff0c;&#xff0c;自定义hook是以use开头的普通函数&#xff0c;&#xff0c;将组件中可复用的状态逻辑抽取到自定义的hook中&#xff0c;简化组件代码 常见自定义hook例子&#xff1a; 封装一个简单的计数器 import {useS…...