JWT令牌验证
一、JWT 验证方式详解
JWT(JSON Web Token)的验证核心是确保令牌未被篡改且符合业务规则,主要分为以下步骤:
1. 令牌解析与基础校验
收到客户端传递的 JWT 后,首先按 .
分割为三部分:Header
、Payload
、Signature
。
Header
:解析算法(如HS256
)和令牌类型(固定为JWT
)。Payload
:解析标准声明(如exp
过期时间、iat
签发时间)和自定义声明(如用户 ID)。
2. 签名验证(防篡改)
签名是 JWT 的核心安全屏障。验证逻辑:
- 使用
Header
中指定的算法(如 HMAC SHA256),用服务端保存的密钥对Header.Base64UrlEncode() + "." + Payload.Base64UrlEncode()
重新计算签名。 - 对比新计算的签名与 JWT 中的
Signature
,若不一致则令牌无效(可能被篡改)。
3. 声明校验(业务规则)
验证 Payload
中的声明是否符合业务要求:
exp
(Expiration Time):令牌过期时间戳,需满足当前时间 < exp
(考虑时钟偏差,如 ±300秒)。iat
(Issued At):令牌签发时间,需满足iat ≤ 当前时间
。iss
(Issuer):令牌签发者,需与服务端配置的签发者(如https://your-domain.com
)一致。aud
(Audience):令牌接收方,需与当前服务身份(如user-service
)匹配。- 自定义声明:如用户角色(
role
)、权限(permissions
)等,按业务需求验证。
4. 令牌状态校验(可选)
对于需要主动失效的令牌(如用户注销),需维护一个黑名单(如 Redis),验证时检查令牌是否在黑名单中(适用于需要严格控制令牌生命周期的场景)。
二、后端 Java 示例(Spring Boot + JJWT)
以下是基于 Spring Boot 的 JWT 生成与验证接口实现,使用 JJWT 库(Java JWT 工具)。
1. 依赖配置
在 pom.xml
中添加 JJWT 依赖:
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.5</version><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.5</version><scope>runtime</scope>
</dependency>
2. JWT 工具类(核心逻辑)
import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;@Component
public class JwtUtils {// 从配置文件读取密钥和过期时间(示例:密钥为 "your-256-bit-secret",过期时间 30分钟)@Value("${jwt.secret}")private String secret;@Value("${jwt.expire}")private long expire;// 生成 JWTpublic String generateToken(String userId) {Date now = new Date();Date expireDate = new Date(now.getTime() + expire * 1000); // 转换为毫秒Map<String, Object> claims = new HashMap<>();claims.put("userId", userId); // 自定义声明claims.put("role", "user"); // 自定义角色return Jwts.builder().setClaims(claims) // 自定义声明.setIssuer("your-domain") // 签发者(iss).setIssuedAt(now) // 签发时间(iat).setExpiration(expireDate) // 过期时间(exp).signWith(SignatureAlgorithm.HS256, secret) // 签名算法+密钥.compact();}// 验证 JWT 并解析声明public Claims validateToken(String token) {try {return Jwts.parser().setSigningKey(secret) // 使用相同密钥验证.parseClaimsJws(token) // 解析 JWT.getBody();} catch (ExpiredJwtException e) {throw new RuntimeException("令牌已过期");} catch (UnsupportedJwtException e) {throw new RuntimeException("不支持的令牌类型");} catch (MalformedJwtException e) {throw new RuntimeException("令牌格式错误");} catch (SignatureException e) {throw new RuntimeException("签名验证失败(可能被篡改)");} catch (IllegalArgumentException e) {throw new RuntimeException("令牌为空");}}
}
3. 接口示例(生成与验证)
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;@RestController
@RequestMapping("/auth")
public class AuthController {@Resourceprivate JwtUtils jwtUtils;// 模拟登录接口:返回 JWT@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {// 实际业务中需校验用户名密码(示例直接通过)return jwtUtils.generateToken("123"); // 用户 ID 为 123}// 验证令牌接口(示例)@PostMapping("/validate")public String validate(@RequestHeader("Authorization") String token) {// 提取 Bearer 令牌(去掉 "Bearer " 前缀)String actualToken = token.replace("Bearer ", "");try {Claims claims = jwtUtils.validateToken(actualToken);return "验证成功!用户 ID:" + claims.get("userId");} catch (Exception e) {return "验证失败:" + e.getMessage();}}
}
三、前端/客户端示例(Uniapp、WPF、Qt)
以下示例演示客户端如何携带 JWT 调用后端验证接口(假设后端地址为 http://localhost:8080
)。
1. Uniapp(Vue 跨端框架)
<template><view><button @click="login">登录获取 Token</button><button @click="validateToken">验证 Token</button><text>{{ result }}</text></view>
</template><script>
export default {data() {return {token: null,result: ""};},methods: {// 登录获取 Tokenasync login() {const res = await uni.request({url: "http://localhost:8080/auth/login",method: "POST",data: { username: "test", password: "123" }});this.token = res.data;this.result = "Token 获取成功:" + this.token;},// 验证 Token(携带到请求头)async validateToken() {if (!this.token) {this.result = "请先登录获取 Token";return;}const res = await uni.request({url: "http://localhost:8080/auth/validate",method: "POST",header: { Authorization: `Bearer ${this.token}` }});this.result = res.data;}}
};
</script>
2. WPF(.NET 桌面应用)
using System;
using System.Net.Http;
using System.Windows;namespace WpfJwtDemo {public partial class MainWindow : Window {private string _token;private readonly HttpClient _httpClient = new HttpClient();public MainWindow() {InitializeComponent();_httpClient.BaseAddress = new Uri("http://localhost:8080/");}// 登录获取 Tokenprivate async void LoginButton_Click(object sender, RoutedEventArgs e) {var formData = new FormUrlEncodedContent(new[] {new KeyValuePair<string, string>("username", "test"),new KeyValuePair<string, string>("password", "123")});var response = await _httpClient.PostAsync("auth/login", formData);_token = await response.Content.ReadAsStringAsync();ResultText.Text = "Token获取成功:" + _token;}// 验证 Token(携带到请求头)private async void ValidateButton_Click(object sender, RoutedEventArgs e) {if (string.IsNullOrEmpty(_token)) {ResultText.Text = "请先登录获取 Token";return;}_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", _token);var response = await _httpClient.PostAsync("auth/validate", null);var result = await response.Content.ReadAsStringAsync();ResultText.Text = result;}}
}
3. Qt(C++ 跨平台框架)
#include <QApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrlQuery>
#include <QMessageBox>class JwtDemo : public QObject {Q_OBJECT
public:JwtDemo(QObject *parent = nullptr) : QObject(parent) {manager = new QNetworkAccessManager(this);connect(manager, &QNetworkAccessManager::finished, this, &JwtDemo::onRequestFinished);}// 登录获取 Tokenvoid login() {QUrl url("http://localhost:8080/auth/login");QUrlQuery query;query.addQueryItem("username", "test");query.addQueryItem("password", "123");QNetworkRequest request(url);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");manager->post(request, query.toString(QUrl::FullyEncoded).toUtf8());}// 验证 Token(携带到请求头)void validateToken(const QString &token) {QUrl url("http://localhost:8080/auth/validate");QNetworkRequest request(url);request.setRawHeader("Authorization", "Bearer " + token.toUtf8());manager->post(request, ""); // 空 body}private slots:void onRequestFinished(QNetworkReply *reply) {if (reply->error() == QNetworkReply::NoError) {QString result = reply->readAll();if (reply->url().path() == "/auth/login") {currentToken = result;QMessageBox::information(nullptr, "成功", "Token获取成功:" + result);} else if (reply->url().path() == "/auth/validate") {QMessageBox::information(nullptr, "验证结果", result);}} else {QMessageBox::critical(nullptr, "错误", "请求失败:" + reply->errorString());}reply->deleteLater();}private:QNetworkAccessManager *manager;QString currentToken;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);JwtDemo demo;// 模拟点击登录(实际需绑定UI事件)demo.login();// 假设登录后验证(实际需等待登录完成)QTimer::singleShot(2000, [&demo]() {if (!demo.currentToken.isEmpty()) {demo.validateToken(demo.currentToken);}});return app.exec();
}#include "main.moc" // 需包含 moc 文件(Qt 元对象编译)
四、关键说明
- 密钥安全:后端密钥(
jwt.secret
)需严格保密,避免硬编码在代码中(建议通过配置中心或环境变量获取)。 - 过期时间:
exp
需根据业务场景设置(如用户登录态建议 30分钟~1天,敏感操作建议更短)。 - 客户端处理:前端需将 JWT 存储在
localStorage
(Web)、SecureStorage
(移动端)或注册表
(桌面端)中,避免明文存储。 - 跨域问题:若前端与后端不同域,需在后端配置 CORS(跨域资源共享)。
相关文章:
JWT令牌验证
一、JWT 验证方式详解 JWT(JSON Web Token)的验证核心是确保令牌未被篡改且符合业务规则,主要分为以下步骤: 1. 令牌解析与基础校验 收到客户端传递的 JWT 后,首先按 . 分割为三部分:Header、Payload、S…...
Go语言 GORM框架 使用指南
在 Go 语言社区中,数据库交互一直是开发者们关注的重点领域,不同开发者基于自身的需求和偏好,形成了两种主要的技术选型流派。一部分开发者钟情于像sqlx这类简洁的库,尽管其功能并非一应俱全,但它赋予开发者对 SQL 语句…...
c#车检车构客户管理系统软件车辆年审短信提醒软件
# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能:车辆年审前一个月给客户发年审短信提醒…...
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
Go 支持将函数当作值来使用,也允许定义匿名函数,并通过闭包实现对外部变量的捕获与持续访问。这一特性使函数式编程风格在 Go 中成为可能。 一、什么是匿名函数? 匿名函数是没有名字的函数,可以定义后立即调用,或赋值…...
兰亭妙微:用系统化思维重构智能座舱 UI 体验
兰亭妙微设计专注于以产品逻辑驱动的界面体验优化,服务领域覆盖AI交互、智能穿戴、IoT设备、智慧出行等多个技术密集型产业。我们倡导以“系统性设计”为方法论,在用户需求与技术边界之间找到最优解。 此次智能驾驶项目,我们为某车载平台提供…...
Flowbite 和 daisyUI 那个好用?
Flowbite 和 daisyUI 都是基于 Tailwind CSS 的组件库,它们各有特色,选哪个更好用,取决于你的项目需求和设计偏好。 简要结论 对比项daisyUIFlowbite上手难度简单,类名即组件略复杂(多用 HTML 结构)Vue 支…...
中间网络工程师知识点5
1.PKI证书主要用于确保主体公钥的合法性 2.VLAN帧的最小帧长是64字节,其中表示帧优先级的字是PRI 3.WIFI6是2.4GHZ和5GHZ频段的,理论吞吐量最高可达9.6Gbps,遵从协议802.11ax,支持完整版的MU-MIMO 4.在大型无线网络中,AP通过DHCP option43端口来获取AC的IP地址 5.项目…...
二、数据模型
二、数据模型 数据模型回顾 数据模型(Data Model) 是信息领域采用的模型将现实世界的各种事物以及事物之间的联系,表示为数据以及数据之间的联系是对现实世界数据特征的抽象和模拟用来描述数据、组织数据和操作数是数据库系统的核心和基础 …...
获取淘宝店铺所有商品信息接口数据指南
在电商运营和数据分析中,获取淘宝店铺的商品信息是常见的需求。淘宝开放平台提供了丰富的 API 接口,方便开发者获取商品的详细信息,包括商品列表、商品详情、销量等。本文将详细介绍如何从零开始获取淘宝店铺的所有商品信息,包括注…...
目标检测工作原理:从滑动窗口到Haar特征检测的完整实现
目标检测探索指南 🔍 目标检测就像是一位细心的侦探!我们需要在图像中寻找并定位特定的目标,就像侦探在现场搜寻线索一样。让我们一起来探索这个充满挑战的图像处理领域吧! 目录 1. 什么是目标检测?2. 滑动窗口检测3.…...
【LUT技术专题】针对降噪优化的通道感知轻量级LUT算法:DnLUT
DnLUT:Ultra-Efficient Color Image Denoising via Channel-Aware Lookup(2025 CVPR) 专题介绍一、研究背景二、DnLUT方法2.1 Pairwise Channel Mixer2.2 Rotation Non-overlapping Kernel(L型卷积) 三、实验结果四、总…...
支持同步观看的媒体服务器GhostHub
简介 什么是 GhostHub ? GhostHub 是一个基于滑动界面的媒体服务器,旨在实现实时同步、聊天和隧道分享。它允许用户快速共享和浏览媒体内容,无需复杂的配置或帐户。 主要特点 零配置: 即开即用,无需安装或创建帐户。滑动浏览: 提…...
告别 pip:使用 uv 加速你的 Python 包管理
使用 uv:更快的 Python 包管理工具 随着 Python 生态的演进,包管理工具也在不断升级迭代。uv 是 Astral(同样维护 ruff 的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip、pip-tools、pipx 与 virtualenv 等传统工具,…...
使用glsl 来做视频矫正
描述、优点 使用glsl来代替opencv的undistort 和 鱼眼矫正,并且最后使用opencv的LUT给glsl 来使用,来达到加速的目的,并且做到和opencv 一模一样的效果,达到实时视频的加速矫正。 优点: 没有cuda,也可以做到实时视频矫正,包含各类板子和amd的cpu,intel核显 矫正的基本作…...
【VSCode】快捷键合集(持续更新~)
一、基础编辑操作 注释/取消注释 Ctrl /:快速注释或取消注释当前行或选中行。ctrlshift/:块注释 代码格式化 • Shift Alt F:格式化整个文档,统一代码风格。 行操作 • Alt ↑/↓:向上/向下移动当前行。 • Shi…...
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
使用 MATLAB 对城市雨季防洪排污问题进行建模与仿真,需要结合数学模型、工程经验和 MATLAB 的数值计算、数据可视化及优化工具。以下是详细的步骤指南,包含实际案例和代码示例: 一、问题分析与建模框架 1. 问题拆解 • 核心目标: …...
由浮点数x的位级表示求其整型值
由浮点数x的位级表示,得到浮点数的十进制表示,在超过32位整型数的表示范围时,返回0X80000000;在32位整型数的表示范围内时,返回强制转化为整型的值。舍入时采用向0舍入。 程序代码 typedef unsigned long int float_…...
【Qt】Qt常见控件的相关知识点
1.close退出槽函数 2.设置快捷键,QMenu 。 适用&字母就能设置快捷键,运行qt程序,最后就可以按Alt对应的字母进行快捷操作。 3.QMenuBar内存泄露问题 如果ui已经自动生成了menubar,我们再次生成一个新的菜单栏,而…...
数据结构*优先级队列(堆)
什么是优先级队列(堆) 优先级队列一般通过堆(Heap)这种数据结构来实现,堆是一种特殊的完全二叉树,其每个节点都满足堆的性质。如下图所示就是一个堆: 堆的存储方式 由于堆是一棵完全二叉树,所以也满足二…...
Windows本地化部署Dify完整指南
Windows本地化部署Dify完整指南 作者:朱元禄 版权声明:本文为朱元禄原创文章,转载请注明出处及作者信息 关键词:Dify部署,Windows安装Dify,Dify本地化,Dify教程,Dify配置,朱元禄 一、Docker Desktop安装与配置 1.1 下载Docker De…...
全局异常处理:如何优雅地统一管理业务异常
在软件开发中,异常处理是保证系统健壮性的重要环节。一个良好的异常处理机制不仅能提高代码的可维护性,还能为使用者提供清晰的错误反馈。本文将介绍如何通过全局异常处理和业务异常统一处理来编写更加优雅的代码。 一、传统异常处理的痛点 1.1 典型问…...
AI517 AI本地部署 docker微调(失败)
本地部署AI 计划使用OLLAMA进行本地部署 修改DNS 访问github 刷新缓存 配置环境变量 OLLAMA安装成功 部署成功 计划使用docker进行微调 下载安装docker 虚拟化已开启 开启上面这些 准备下载ubuntu docker ragflow dify 用git去泡...
C++(初阶)(十八)——AVL树
AVL树 AVL树概念实现AVL树的结点插入插入方法 平衡因子更新更新停止条件旋转右单旋左单旋左右双旋右左双旋 遍历AVL平衡检测 完整代码 概念 1,AVL树是最先发明的⾃平衡⼆叉查找树,AVL树是⼀颗⾼度平衡搜索⼆叉树, 通过控制高度差去控制平衡。…...
2022河南CCPC(前四题)
签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…...
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
将 x 减到 0 的最小操作数 一、题目链接二、题目三、题目解析四、算法原理五、编写代码六、时空复杂度 一、题目链接 将 x 减到 0 的最小操作数 二、题目 三、题目解析 以示例1为例: 四、算法原理 像"题目解析"中正面删除并修改数组元素的操作太困难&…...
电机试验平台:创新科技推动电动机研究发展
电机试验平台是电机制造和研发过程中不可或缺的重要设备,其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大,对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...
linux-软件的安装与部署、web应用部署到阿里云
一、软件安装方式概述 CentOS安装软件的方式主要包括: - 源码安装 - rpm安装(二进制安装) - yum安装(在线安装) 1.源码安装: 源码包是指C等语言所开发的源代码文件的一个压缩包,通常压缩为.…...
Qt Widgets模块功能详细说明,基本控件:QLabel(一)
一、基本控件(Widgets) Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QLabel 1.1、概述 (用途、继承关系) QLabel 是 Qt 框架中用于显示文本、图像或动画的控件,属…...
Ubuntu 安装 squid
1. 安装Squid及工具 Debian/Ubuntu sudo apt update sudo apt install squid apache2-utils CentOS/RHEL sudo yum install squid httpd-tools 2. 创建用户名密码文件 创建密码文件(首次使用 -c 参数,后续添加用户省略) sudo htpasswd…...
中药药效成分群的合成生物学研究进展-文献精读130
Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝,也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种…...
芯片生态链深度解析(三):芯片设计篇——数字文明的造物主战争
【开篇:设计——数字文明的“造物主战场”】 当英伟达的H100芯片以576TB/s显存带宽重构AI算力边界,当阿里平头哥倚天710以RISC-V架构实现性能对标ARM的突破,这场围绕芯片设计的全球竞赛早已超越技术本身,成为算法、架构与生态标准…...
Echart地图数据源获取
DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...
【C++ - 仿mudou库one thread one loop式高并发服务器实现】
文章目录 项目介绍项目模块和服务器主要设计模式项目主要流程前置知识1.bind函数2.定时器任务TimerTask和时间轮思想TimerWheel3.正则表达式4.通用型容器Any类 服务器设计模式1)单Reactor单线程模式2)单Reactor多线程模式3)多Reactor多线程模…...
本地缓存更新方案探索
文章目录 本地缓存更新方案探索1 背景2 方案探索2.1 初始化2.2 实时更新2.2.1 长轮询2.2.1.1 client2.2.2.2 server 本地缓存更新方案探索 1 背景 大家在工作中是否遇到过某些业务数据需要频繁使用,但是数据量不大的情况,一般就是几十条甚至几百条这种…...
Java—异常体系
Java的异常体系是Java语言中用于处理程序运行过程中可能出现的错误的机制。通过异常处理,程序可以在遇到问题时自动反馈,从而避免程序崩溃。Java异常体系中包含两大类:错误(Error)和异常(Exception)。 一、错误(Error)…...
深度学习(第3章——亚像素卷积和可形变卷积)
前言: 本章介绍了计算机识别超分领域和目标检测领域中常常使用的两种卷积变体,亚像素卷积(Subpixel Convolution)和可形变卷积(Deformable Convolution),并给出对应pytorch的使用。 亚像素卷积…...
5.15 学习日志
1.SST(总平方和)、SSR(回归平方和)、SSE(残差平方和)之间的关系。 在使用线性回归模型时,经常提到的统计量MSE(Mean Squared Error、均方误差):是 SSE 的平均…...
重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
模型介绍 gte-multilingual-reranker-base 模型是 GTE 模型系列中的第一个 reranker 模型,由阿里巴巴团队开发。 模型特征: Model Size: 306MMax Input Tokens: 8192 benchmark 关键属性: 高性能:与类似大小的 reranker 模型…...
计算机发展的历程
计算机系统的概述 一, 计算机系统的定义 计算机系统的概念 计算机系统 硬件 软件 硬件的概念 计算机的实体, 如主机, 外设等 计算机系统的物理基础 决定了计算机系统的天花板瓶颈 软件的概念 由具有各类特殊功能的程序组成 决定了把硬件的性能发挥到什么程度 软件的分类…...
【通用智能体】Search Tools:Open Deep Research 项目实战指南
Open Deep Research 项目实战指南 一、项目运行方式(一)运行环境要求(二)运行方式(三)传统本地运行(四)Docker 容器运行 二、操作步骤(一)使用搜索功能&#…...
nodejs 文件的复制
在 Node.js 中,文件复制操作可以通过多种方式实现,具体取决于文件大小、性能需求以及是否需要保留文件元数据(如权限、时间戳等)。以下是几种常见的文件复制方法及其示例代码: 1. 使用 fs.copyFile(简单高…...
GO语言学习(三)
GO语言学习(三) GO语言的独特接口可以实现内容和面向对象组织的更加方便,我们从这里来详细的讲解接口,让大家感受一下interface的魅力 interface定义 首先接口是一组方法签名的组合,我们通过接口来实现定义对象的一…...
高频面试题(含笔试高频算法整理)基本总结回顾61
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
C++:C++内存管理
C 内存分区 C 内存分为 5 个主要区域: 栈 (Stack):存储局部变量、函数参数和返回地址。由编译器自动分配和释放,效率高但空间有限。 堆 (Heap):动态分配的内存区域,需手动管理(new/delete 或 malloc/free…...
目标跟踪相关综述文章
文章年份会议/引用量IFObject tracking:A survery20067618Object Tracking Methods:A Review2019554Multiple object tracking: A literature review20201294Deep learning for multiple object tracking: a survey2019145Deep Learning for Visual Tracking:A Comprehensive S…...
JavaScript【6】事件
1.概述: 在 JavaScript 中,事件(Event)是浏览器或 DOM(文档对象模型)与 JavaScript 代码之间交互的一种机制。它代表了在浏览器环境中发生的特定行为或者动作,比如用户点击鼠标、敲击键盘、页面…...
Python训练打卡Day26
函数专题1:函数定义与参数 知识点回顾: 函数的定义变量作用域:局部变量和全局变量函数的参数类型:位置参数、默认参数、不定参数传递参数的手段:关键词参数传递参数的顺序:同时出现三种参数类型时 到目前为…...
通俗版解释CPU、核心、进程、线程、协程的定义及关系
通俗版解释(比喻法) 1. CPU 和核心 CPU 一个工厂(负责干活的总部)。核心 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。 2. 进程 进程 一家独立运营的公司(比如一家…...
微积分基本规则及示例解析
微积分中的基本规则是构成微积分理论和应用的基石。以下是一些微积分中的基本规则,我将用简单的例子来解释它们,以便小学生也能理解。 1. **极限规则**: - 常数的极限:\(\lim_{x \to a} c c\) - 例如,\(\lim…...
Baklib知识中台构建企业智能服务新引擎
知识中台构建智能服务新范式 随着企业数字化转型进入深水区,传统知识管理模式的局限性日益显现——分散的文档系统、低效的信息检索以及割裂的业务场景,严重制约着组织效能的释放。在此背景下,Baklib提出的知识中台解决方案,通过…...