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

Token与axios拦截器

目录

一、Token 详解

1. Token 的定义与作用

2. Token 的工作流程

3. Token 的优势

4. Token 的安全实践

5. JWT 结构示例

二、Axios 拦截器详解

1. 拦截器的作用

2. 请求拦截器

3. 响应拦截器

4. 拦截器常见场景

5. 移除拦截器

三、完整代码示例

四、总结

五、axios高级配置

1. 全局默认配置

2. 创建实例(隔离配置)

3. 取消请求

4. 并发请求

5. 文件上传

6. 文件下载

六、XSS(跨站脚本攻击)

1. 攻击原理

2. 攻击示例

3. 防御措施

七、CSRF(跨站请求伪造)

1. 攻击原理

2. 防御措施

八、Token 在防御中的应用

1. Token 类型

2. 安全实践

3. JWT 安全增强

九、总结


一、Token 详解

1. Token 的定义与作用

Token(令牌)是用于在客户端和服务器之间安全传递用户身份信息的一种凭证,通常用于身份验证和授权流程。

  • 核心作用

    • 身份验证(Authentication):验证用户身份(如登录状态)。

    • 授权(Authorization):授予用户访问特定资源的权限(如 API 端点)。

  • 常见类型

    • JWT(JSON Web Token):最流行的无状态令牌格式,包含头部、载荷和签名。

    • OAuth2 Token:用于第三方授权(如使用 Google 登录)。

    • Session Token:传统有状态会话标识(如 Session ID)。


2. Token 的工作流程
1. 用户登录 → 服务器验证凭据 → 生成 Token → 返回给客户端
2. 客户端存储 Token(如 localStorage、Cookie)
3. 客户端发起请求时携带 Token(通常通过 HTTP 头)
4. 服务器验证 Token → 授权访问资源

3. Token 的优势
  • 无状态性:服务器无需存储会话信息(适合分布式系统)。

  • 跨域支持:易于在多个服务间传递用户身份(如微服务架构)。

  • 安全性:可通过签名(JWT)或加密防止篡改。


4. Token 的安全实践
  • 存储方式

    • 推荐:使用 httpOnlySecureSameSite=Strict 的 Cookie(防 XSS)。

    • 次选localStorage 或 sessionStorage(需防范 XSS)。

  • 传输方式

    • 通过 Authorization 请求头传输(如 Bearer <token>)。

  • 过期时间

    • 设置短期有效的 Token(如 15 分钟),配合 Refresh Token 续期。


5. JWT 结构示例
Header:  {"alg": "HS256", "typ": "JWT"}
Payload: {"sub": "user123", "exp": 1620000000}
Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

二、Axios 拦截器详解

1. 拦截器的作用

拦截器允许在请求发送前或响应返回后,统一添加逻辑(如添加 Token、处理错误)。

2. 请求拦截器
axios.interceptors.request.use(config => {// 请求发送前的处理(如添加 Token)const token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;},error => {// 请求错误处理return Promise.reject(error);}
);
3. 响应拦截器
axios.interceptors.response.use(response => {// 响应成功处理(状态码 2xx)return response.data; // 直接返回数据,简化后续处理},async error => {// 响应错误处理(状态码非 2xx 或网络错误)const originalRequest = error.config;// Token 过期且未重试过 → 尝试刷新 Tokenif (error.response?.status === 401 && !originalRequest._retry) {originalRequest._retry = true;try {const newToken = await refreshToken(); // 刷新 TokenlocalStorage.setItem('token', newToken);originalRequest.headers.Authorization = `Bearer ${newToken}`;return axios(originalRequest); // 重试原请求} catch (refreshError) {logout(); // 刷新失败 → 跳转登录页return Promise.reject(refreshError);}}// 其他错误统一处理return Promise.reject(error);}
);

4. 拦截器常见场景
  • 自动添加 Token:统一为所有请求添加 Authorization 头。

  • Token 过期自动刷新:401 错误时刷新 Token 并重试请求。

  • 统一错误处理:网络错误、服务器错误等全局捕获。

  • 加载状态管理:显示/隐藏全局加载动画。


5. 移除拦截器
const requestInterceptor = axios.interceptors.request.use(...);
const responseInterceptor = axios.interceptors.response.use(...);// 移除拦截器
axios.interceptors.request.eject(requestInterceptor);
axios.interceptors.response.eject(responseInterceptor);

三、完整代码示例

1. Token 管理 + Axios 拦截器

// 封装 Axios 实例
const api = axios.create({baseURL: 'https://api.example.com',
});// 请求拦截器:添加 Token
api.interceptors.request.use(config => {const token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;},error => Promise.reject(error)
);// 响应拦截器:处理 Token 过期
api.interceptors.response.use(response => response.data,async error => {const originalRequest = error.config;// Token 过期且未重试过if (error.response?.status === 401 && !originalRequest._retry) {originalRequest._retry = true;try {const newToken = await refreshToken();localStorage.setItem('token', newToken);originalRequest.headers.Authorization = `Bearer ${newToken}`;return api(originalRequest);} catch (refreshError) {logout();return Promise.reject(refreshError);}}// 其他错误处理return Promise.reject(error);}
);// 刷新 Token 的函数
async function refreshToken() {const refreshToken = localStorage.getItem('refreshToken');const response = await axios.post('/auth/refresh', { refreshToken });return response.data.token;
}// 退出登录
function logout() {localStorage.removeItem('token');localStorage.removeItem('refreshToken');window.location.href = '/login';
}

四、总结

  • Token:身份验证与授权的核心凭证,需安全存储和传输。

  • Axios 拦截器:实现全局请求/响应逻辑(如 Token 管理、错误处理),提升代码复用性和可维护性。

  • 最佳实践

    • 使用 httpOnly Cookie 存储 Token(防 XSS)。

    • 短期 Token + Refresh Token 提升安全性。

    • 拦截器中处理 Token 刷新避免并发问题。


五、axios高级配置

1. 全局默认配置
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = 'Bearer token123';
axios.defaults.timeout = 5000; // 超时时间(毫秒)
2. 创建实例(隔离配置)
const api = axios.create({baseURL: 'https://api.example.com',timeout: 3000
});api.get('/data'); // 使用实例发送请求
3. 取消请求

使用 CancelToken(旧版):

const source = axios.CancelToken.source();axios.get('/data', {cancelToken: source.token
}).catch(error => {if (axios.isCancel(error)) {console.log('请求被取消:', error.message);}
});// 取消请求
source.cancel('用户手动取消');

使用 AbortController(新版,推荐):

const controller = new AbortController();axios.get('/data', {signal: controller.signal
}).catch(error => {if (error.name === 'CanceledError') {console.log('请求已取消');}
});// 取消请求
controller.abort();
4. 并发请求
const request1 = axios.get('/data1');
const request2 = axios.get('/data2');axios.all([request1, request2]).then(axios.spread((res1, res2) => {console.log(res1.data, res2.data);}));
5. 文件上传
const formData = new FormData();
formData.append('file', fileInput.files[0]);axios.post('/upload', formData, {headers: { 'Content-Type': 'multipart/form-data' }
});
6. 文件下载
axios.get('/download', {responseType: 'blob' // 指定响应类型为二进制流
}).then(response => {const url = window.URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.setAttribute('download', 'file.pdf');document.body.appendChild(link);link.click();
});

六、XSS(跨站脚本攻击)

1. 攻击原理
  • 定义:攻击者向网页注入恶意脚本(JavaScript、HTML、CSS),当其他用户访问该页面时,脚本在用户浏览器执行,窃取数据或劫持会话。

  • 类型

    • 存储型 XSS:恶意脚本永久存储在目标服务器(如论坛评论)。

    • 反射型 XSS:恶意脚本通过 URL 参数反射到页面(如钓鱼链接)。

    • DOM 型 XSS:前端 JavaScript 动态修改 DOM 时触发漏洞。

2. 攻击示例
// 用户输入未过滤,直接渲染到页面
用户评论内容:<script>stealCookie()</script>
3. 防御措施
  • 输入过滤与转义

    • 对用户输入的内容进行 HTML 转义(如 < → &lt;)。

    • 使用安全的库(如 DOMPurify)清理 HTML。

  • Content Security Policy(CSP)

    Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com
    • 限制页面只能加载指定来源的脚本、样式等资源。

  • 设置 HttpOnly Cookie

    • 防止 JavaScript 通过 document.cookie 读取敏感 Cookie。

    // 服务器设置 Cookie
    Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict

七、CSRF(跨站请求伪造)

1. 攻击原理
  • 定义:攻击者诱导用户访问恶意页面,该页面自动向目标网站发起请求(利用用户已登录的 Cookie)。

  • 示例

    <!-- 恶意页面中的图片标签 -->
    <img src="https://bank.com/transfer?to=attacker&amount=1000">
2. 防御措施
  • CSRF Token

    • 服务器生成随机 Token 嵌入表单或请求头,验证请求的合法性。

    <form action="/transfer" method="POST"><input type="hidden" name="csrf_token" value="随机值">
    </form>
  • SameSite Cookie

    • 限制 Cookie 仅在相同站点请求中发送。

    Set-Cookie: sessionId=abc123; SameSite=Strict; Secure
    • Strict:完全禁止第三方 Cookie。

    • Lax:允许安全导航(如链接跳转)携带 Cookie。

    • None:允许所有请求携带 Cookie(需配合 Secure)。

  • 验证请求来源

    • 检查 Origin 或 Referer 头部是否来自合法域名。


八、Token 在防御中的应用

1. Token 类型
  • CSRF Token:防御 CSRF 攻击,确保请求来自合法页面。

  • JWT(JSON Web Token):用于无状态身份验证,包含签名防篡改。

2. 安全实践
  • 存储方式

    • CSRF Token:存储在服务器 Session 或加密 Cookie 中。

    • JWT:通过 httpOnly + Secure Cookie 存储,或前端存储但结合短期有效期。

  • 传输方式

    • CSRF Token:嵌入表单隐藏字段或请求头(如 X-CSRF-Token)。

    • JWT:通过 Authorization: Bearer <token> 请求头传输。

3. JWT 安全增强
  • 签名验证:使用强加密算法(如 HS256、RS256)。

  • 有效期控制:设置短期有效的 exp 字段,配合 Refresh Token 续期。

  • 黑名单机制:注销时使特定 Token 失效。


九、总结

  • XSS 防御核心:防止恶意脚本注入,隔离用户输入与代码执行。

  • CSRF 防御核心:确保请求来源合法,阻断伪造请求。

  • Token 安全:结合存储安全(HttpOnly)、传输安全(HTTPS)和有效期管理。

综合防御策略:

攻击类型防御措施
XSS输入过滤 + CSP + HttpOnly Cookie + 避免 innerHTML 直接渲染用户输入。
CSRFCSRF Token + SameSite Cookie + 验证请求来源。
Token 安全使用 HTTPS + 安全存储(HttpOnly Cookie) + 短期有效 + 签名验证。

相关文章:

Token与axios拦截器

目录 一、Token 详解 1. Token 的定义与作用 2. Token 的工作流程 3. Token 的优势 4. Token 的安全实践 5. JWT 结构示例 二、Axios 拦截器详解 1. 拦截器的作用 2. 请求拦截器 3. 响应拦截器 4. 拦截器常见场景 5. 移除拦截器 三、完整代码示例 四、总结 五、…...

windows上安装Jenkins

1. 下载windows版 jenkins安装包 2. 配置本地安全策略 在 Windows 11/10 上打开本地安全策略。 Secpol.msc 或本地安全策略编辑器是一个 Windows 管理工具&#xff0c;允许您在本地计算机上配置和管理与安全相关的策略。 安全设置-》本地策略-》用户权限分配-》作为服务登录…...

鸿蒙NEXT开发文件预览工具类(ArkTs)

import { uniformTypeDescriptor } from kit.ArkData; import { filePreview } from kit.PreviewKit; import { FileUtil } from ./FileUtil; import { AppUtil } from ./AppUtil; import { WantUtil } from ./WantUtil;/*** 文件预览工具类* 提供文件预览、加载、判断等功能。…...

【WPF-VisionMaster源代码】应用OpenCVSharp仿Vision Master页面开发的软件源代码

一、目的&#xff1a;开放WPF-VisionMaster源代码 二、简介 WPF-Vision Master 视觉处理软件源码 WPF-Vision Master是基于WPF-Control的UI框架与OpenCVSharp计算机视觉库联合&#xff0c;并参考Vision Master界面开发的视觉处理软件。该平台深度融合WPF强大的界面控制能力和Op…...

软件研发过程中的技术债

引言&#xff1a;数字时代的“技术利息” 在金融领域&#xff0c;债务是推动发展的杠杆&#xff1b;而在软件开发中&#xff0c;技术债&#xff08;Technical Debt&#xff09;却是一把双刃剑。据行业调查显示&#xff0c;70%的软件项目存在技术债&#xff0c;其中超过半数团队…...

鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析

一、项目初始化与环境准备 1. 创建鸿蒙工程 src/main/ets/ ├── api/ │ ├── api.ets # 接口聚合入口 │ ├── login.ets # 登录模块接口 │ └── request.ets # 网络请求核心封装 └── pages/ └── login.ets # 登录页面逻辑…...

重新定义“边缘”:边缘计算如何重塑人类与数据的关系

在数字化浪潮中&#xff0c;云计算曾是科技界的宠儿&#xff0c;但如今&#xff0c;边缘计算正在悄然改变游戏规则。它不仅是一种技术进步&#xff0c;更是对人类与数据关系的一次深刻反思。本文将探讨边缘计算如何从“中心化”走向“分布式”&#xff0c;以及它如何在效率、隐…...

Flink CDC 出现错误码 1236 和 SQL 状态 HY000 的原因及解决方法

Flink CDC 出现错误码 1236 和 SQL 状态 HY000 的原因及解决方法 常见原因 server-id 冲突:当多个 Flink CDC 任务连接同一个 MySQL 实例,且使用了相同的 server-id 时,会导致该冲突。因为 MySQL 服务器通过 server-id 来区分不同的从服务器,如果多个 Flink CDC 任务使用相…...

如何解除Excel只读状态?4种方法全解析

在日常办公中&#xff0c;我们经常会遇到Excel文件被设置为只读模式的情况。只读模式可以防止文件被意外修改&#xff0c;但在需要编辑时&#xff0c;解除只读模式就显得尤为重要。下面小编分享退出Excel只读方式的4种方法&#xff0c;让你能够轻松编辑工作表。 方法1&#xf…...

深度学习与 Flask 应用常见问题解析

在深度学习和 Flask 应用开发过程中&#xff0c;我们常常会遇到一些关键的知识点和容易混淆的问题。下面我们就来对这些问题进行详细的解析。 一、卷积神经网络&#xff08;CNN&#xff09;常用层 在定义卷积神经网络时&#xff0c;有一些常用的层&#xff1a; Conv2D&#x…...

零浪费,最高效率:通往0%废品率的道路

在工业自动化领域&#xff0c;努力实现废品率为 0% 是最大的挑战之一。这意味着不生产任何有缺陷的产品 —— 从而减少浪费、降低成本&#xff0c;并提高客户满意度。尽管实现这一目标颇具雄心壮志&#xff0c;但企业可以采取几个步骤来改进自身流程&#xff0c;以达成这一目标…...

【c++深入系列】:new和delete运算符详解

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “生活不会向你许诺什么&#xff0c;尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去&#xff0c;终有一天&…...

基础(测试用例:介绍,测试用例格式,案例)

目录 测试用例介绍 测试用例编写格式 案例 测试用例介绍 用例&#xff1a;用户使用软件的案例场景 测试用例&#xff1a;是为测试项目而设计的测试执行文档 测试用例的作用&#xff1a; 防止漏测是实施测试的标准可以作为测试工作量的评估 测试用例编写格式 用例编号 用例…...

MCP协议,.Net 使用示例

服务器端示例 基础服务器 以下是一个基础的 MCP 服务器示例&#xff0c;它使用标准输入输出&#xff08;stdio&#xff09;作为传输方式&#xff0c;并实现了一个简单的回显工具&#xff1a; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…...

Node.js 数据库 事务 项目示例

1、参考&#xff1a;JavaScript语言的事务管理_js 函数 事务性-CSDN博客 或者百度搜索&#xff1a;Nodejs控制事务&#xff0c; 2、实践 2.1、对于MySQL或MariaDB&#xff0c;你可以使用mysql或mysql2库&#xff0c;并结合Promise或async/await语法来控制事务。 使用 mysql2…...

【AI插件开发】Notepad++ AI插件开发实践:支持多平台多模型

引言 上篇文章我们的Notepad插件介绍到Dock窗口集成&#xff0c;本篇将继续完善插件功能&#xff0c;主要包括两个部分&#xff1a; 支持多平台、多模型支持多种授权验证、接口类型 一、多平台 原先的配置项很简单&#xff1a; // PluginConf.h class PlatformConf { publ…...

微信小程序数字滚动效果

效果图 .wxml <view class"container"><view class"container-num" wx:for"{{number}}" wx:key"index"><view class"num-container" style"--h:{{h}}px;--y:{{-item * h }}px;"><view wx:f…...

wx219基于ssm+vue+uniapp的教师管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

Python 注释进阶之Google风格

文章目录 1. Google 风格 Docstring 的核心特点2. Google 风格的基本结构3. 编写规则和注意事项4. 最常用的 Google 风格 Docstring 示例示例 1&#xff1a;普通函数 示例 2&#xff1a;带默认参数和可变参数的函数示例 3&#xff1a;类示例 4&#xff1a;生成器函数示例 5&…...

写测试文档时,需要的环境配置怎么查看

操作系统 cat /etc/os-releaseCPU信息 lscpu 内存 sudo dmidecode --type memory | grep -E "Size:|Type:|Speed:"硬盘 列出当前系统中 所有块设备&#xff08;Block Devices&#xff09; 的信息&#xff0c;并显示指定列&#xff08;-o 参数&#xff09; lsblk…...

强化学习的数学原理(十)actor-critic 方法

由于全文太长&#xff0c;只好分开发了。(已完结&#xff01;在专栏查看本系列其他文章&#xff09; 个人博客可以直接看全文~ 本系列为在学习赵世钰老师的“强化学习的数学原理” 课程后所作笔记。 课堂视频链接https://www.bilibili.com/video/BV1sd4y167NS/ 第十章 acto…...

多个定时器同时工作时,会出现哪些常见的bug ,如何解决??(定时任务未实时更新但刷新后正常的问题分析)

1. 定时器冲突与覆盖 问题&#xff1a;后设置的定时器可能覆盖先前的定时器&#xff0c;导致前一个定时器失效 原因&#xff1a;未正确管理定时器ID或未清除前一个定时器 2. 性能问题 内存泄漏&#xff1a;未清除不再需要的定时器会导致内存占用不断增加 CPU过载&#xff1a…...

代码随想录算法训练营day5(哈希表)

华子目录 有效的字母异位词思路 有效的字母异位词 https://leetcode.cn/problems/valid-anagram/description/ 思路 使用哈希表&#xff0c;这里哈希表使用数组先申请一个26空间的大小的数组遍历第一个字符串&#xff0c;记录每个字符出现的次数1遍历第二个字符串&#xff0c…...

Python(17)Python字符编码完全指南:从存储原理到乱码终结实战

目录 背景介绍一、字符编码核心原理1. 计算机存储本质2. Python3的编码革命3. 主流编码格式对比 二、编码转换核心方法1. 编码&#xff08;Encode&#xff09;过程2. 解码&#xff08;Decode&#xff09;过程3. 错误处理策略 三、文件操作编码实战1. 文本文件读写2. 二进制模式…...

Node.js 文件读取与复制相关内容

Node.js 文件读取与复制相关内容的系统总结&#xff0c;包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。 &#x1f9e9; 一、Node.js 文件读取方式总结 Node.js 使用 fs&#xff08;文件系统&#xff09;模块进行文件操作&#xff1a; 1. 同步读取&#…...

大数据面试问答-HBase/ClickHouse

1. HBase 1.1 概念 HBase是构建在Hadoop HDFS之上的分布式NoSQL数据库&#xff0c;采用列式存储模型&#xff0c;支持海量数据的实时读写和随机访问。适用于高吞吐、低延迟的场景&#xff0c;如实时日志处理、在线交易等。 RowKey&#xff08;行键&#xff09; 定义&#xf…...

jupyter 文件浏览器,加强版,超好用,免费exe

第一步&#xff1a;github搜索 lukairui的 jupyter-viewer-plus 仓库 第二步&#xff1a; git clone 到本地。 解压zip包 第三步&#xff1a; 进入压缩包&#xff0c;第一次双击打开jupyter-viewer-plus.exe运行&#xff0c;第一次运行后&#xff0c;界面上有一个“设为…...

【AI工具】用大模型生成脑图初试

刚试用了一下通过大模型生成脑图&#xff0c;非常简单&#xff0c;记录一下 一、用大模型生成脑图文件 关键&#xff1a;存在markdown文件 举例&#xff1a;使用Deepseek&#xff0c;输入问题&#xff1a;“针对大模型的后训练&#xff0c;生成一个开发计划&#xff0c;用ma…...

数据结构-树与二叉树

一、树的定义与基本术语 1.1 树的定义 树&#xff08;Tree&#xff09;是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n ≥ 0&#xff09;个有限节点组成的集合。如果 n 0&#xff0c;称为空树&#xff1b;如果 n > 0&#xff0c;则&#xff1a; 有一个特定的节…...

STL_unordered_map_01_基本用法

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

ARCGIS国土超级工具集1.5更新说明

ARCGIS国土超级工具集V1.5版本更新说明&#xff1a;因作者近段时间工作比较忙及正在编写ARCGISPro国土超级工具集&#xff08;截图附后&#xff09;的原因&#xff0c;故本次更新为小更新&#xff08;没有增加新功能&#xff0c;只更新了已有的工具&#xff09;。本次更新主要修…...

主流物理仿真引擎和机器人/强化学习仿真平台对比

以下是当前主流的物理仿真引擎和机器人/强化学习仿真平台的特点和适用场景&#xff0c;方便根据需求选择&#xff1a; &#x1f9e0; NVIDIA 系列 ✅ Isaac Lab v1.4 / v2 特点&#xff1a; 基于 Omniverse Isaac Sim&#xff0c;属于高端视觉机器人仿真框架v2 更加模块化&a…...

STM32 HAL库内部 Flash 读写实现

一、STM32F407 内部 Flash 概述 1.1 Flash 存储器的基本概念 Flash 存储器是一种非易失性存储器&#xff0c;它可以在掉电的情况下保持数据。STM32F407 系列微控制器内部集成了一定容量的 Flash 存储器&#xff0c;用于存储程序代码和数据。Flash 存储器具有擦除和编程次数的…...

C++学习:六个月从基础到就业——面向对象编程:构造函数与析构函数

C学习&#xff1a;六个月从基础到就业——面向对象编程&#xff1a;构造函数与析构函数 本文是我C学习之旅系列的第十篇技术文章&#xff0c;主要讨论C中构造函数与析构函数的概念、特点和使用技巧。这些是C对象生命周期管理的关键组成部分。查看完整系列目录了解更多内容。 引…...

dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257

目录 1.1题目链接&#xff1a;129.求根节点到叶结点数字之和 1.2题目描述&#xff1a;给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 1.3解法(dfs-前序遍历)&#xff1a; 2.1题目链接&#xff1a;814.二叉树剪枝 2.2题目描述&…...

Python Selenium 一小时速通教程

Python Selenium 一小时速通教程 实战案例 一、环境配置&#xff08;10分钟&#xff09; 安装Python 确保已安装Python 3.x&#xff08;官网下载&#xff09;。 安装Selenium 在终端运行&#xff1a; pip install selenium下载浏览器驱动 Chrome&#xff1a;访问 ChromeDriv…...

通过GO后端项目实践理解DDD架构

最近在工作过程中重构的项目要求使用DDD架构&#xff0c;在网上查询资料发现教程五花八门&#xff0c;并且大部分内容都是长篇的概念讲解&#xff0c;晦涩难懂&#xff0c;笔者看了一些github上入门的使用DDD的GO项目&#xff0c;并结合自己开发中的经验&#xff0c;谈谈自己对…...

MybatisPlus最新版分页无法使用

在使用分页的时候发现分页拦截器关键API会报错&#xff0c;其实根本原因是在之前只需要导入一个mybatisplus依赖&#xff0c;而现在分页似乎被单独分离出来了&#xff0c;需要额外导入新依赖使其支持 ​ <dependency><groupId>com.baomidou</groupId><art…...

【Android学习记录】工具使用

文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…...

youtube视频和telegram视频加载原理差异分析

1. 客户侧缓存与流式播放机制​​ 流式视频应用&#xff08;如 Netflix、YouTube&#xff09;通过​​边下载边播放​​实现流畅体验&#xff0c;其核心依赖以下技术&#xff1a; ​​缓存预加载​​&#xff1a;客户端在后台持续下载视频片段&#xff08;如 DASH/HLS 协议的…...

在机器视觉检测中为何选择线阵工业相机?

线阵工业相机&#xff0c;顾名思义是成像传感器呈“线”状的。虽然也是二维图像&#xff0c;但极宽&#xff0c;几千个像素的宽度&#xff0c;而高度却只有几个像素的而已。一般在两种情况下使用这种相机&#xff1a; 1. 被测视野为细长的带状&#xff0c;多用于滚筒上检测的问…...

lwip记录

Index of /releases/lwip/ (gnu.org) 以太网(Ethernet)是互联网技术的一种&#xff0c;由于它是在组网技术中占的比例最高&#xff0c;很多人 直接把以太网理解为互联网。 以太网是指遵守 IEEE 802.3 标准组成的局域网&#xff0c;由 IEEE 802.3 标准规定的主要是位于 参考模…...

Redis清空缓存

尽管redis可以设置ttl过期时间进行指定key的定时删除&#xff0c;但是在某些场景下&#xff0c;比如&#xff1a; 测试时需要批量删除指定库下所有库下所有的数据&#xff0c;则会涉及到缓存清除的话题。 如下为具体的操作及说明&#xff1a; 场景类型操作指令清空当前库下所有…...

WPF 依赖注入启动的问题

原因是在App.xaml 设置了 StartupUri“MainWindow.xaml” 1.依赖注入后启动的主窗体存在无参构造 程序正常启动&#xff0c;但是主窗体界面会弹出2个窗体。 2.依赖注入后启动的主窗体存在有参构造 报错...

Arcgis经纬线标注设置(英文、刻度显示)

在arcgis软件中绘制地图边框&#xff0c;添加经纬度度时常常面临经纬度出现中文&#xff0c;如下图所示&#xff1a; 解决方法&#xff0c;设置一下Arcgis的语言 点击高级--确认 这样Arcgis就转为英文版了&#xff0c;此时在来看经纬线刻度的标注&#xff0c;自动变成英文...

【电子通识】案例:电缆的安装方式也会影响设备的可靠性?

背景 在日常生活中&#xff0c;我们常常会忽略一些看似微不足道的细节&#xff0c;但这些细节有时却能决定设备的寿命和安全性。比如&#xff0c;你知道吗&#xff1f;一根电缆的布置方式&#xff0c;可能会决定你的设备是否会因为冷凝水而损坏。 今天&#xff0c;我们就来聊聊…...

房屋装修费用预算表:45594 =未付14509 + 付清31085【时间:20250416】

文章目录 引言I 房屋装修费用预算表II 市场价参考防水搬运3000III 装修计划整体流程进度细节国补IV 付款凭证(销售单)伟星 PPR +PVC+太阳线+地漏=6500入户门设计通铺大板瓷砖 | 湿贴 3408(地)+3600(加)+5209(墙)=12217元门头铁空调引言 关注我,发送【装修记账】获取预…...

Python文件操作完全指南:从基础到高级应用

目录 一、文件基础概念 1.1 什么是文件&#xff1f; 1.2 文件的存储方式 文本文件 二进制文件 二、Python文件操作基础 2.1 文件操作三步曲 2.2 核心函数与方法 2.3 文件读取详解 基本读取示例 文件指针机制 2.4 文件打开模式 写入文件示例 2.5 高效读取大文件 三…...

03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.2 上文传送门 2. docker镜像制作一: jdk2.1 制作jdk镜像2.1.1 准备工作2.1.2 jdk镜像的Dockerfile2.1.3 基于Dockerfile构建镜像2.1.4 docker使用镜像运行容器2.1.5 进入jdk1.8容器内测试 3. docker镜像制作二: java镜像(jar包)…...

CUDA的安装

打开nvidia控制面板 找到组件 打开 CUDA Toolkit Archive | NVIDIA Developer 下载CUDA...