转发和重定向的区别详解
转发(Forward)和重定向(Redirect)是 Web 开发中两种常用的请求处理方式,主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别,以下是对两者的详细解析:
一、转发(Forward)
1.定义
-
转发是服务器内部的行为,由服务器直接将请求从一个资源(如 Servlet、JSP)传递到另一个资源,客户端(浏览器)对此过程无感知。
-
地址栏不变:用户看到的 URL 是初始请求的地址,而非最终处理请求的资源地址。
2.工作原理
-
客户端发送请求到服务器。
-
服务器通过
RequestDispatcher
将请求转发到目标资源。 -
目标资源处理请求并生成响应。
-
服务器将响应返回给客户端。
3.特点
-
一次请求:客户端仅发起一次请求,服务器内部完成转发。
-
数据共享:通过
request.setAttribute()
传递数据,目标资源可直接使用。 -
路径限制:只能转发到同一 Web 应用内的资源。
-
性能高效:无需额外网络交互。
4.语法
// 在 Servlet 中实现转发
RequestDispatcher dispatcher = request.getRequestDispatcher("/target.jsp");
request.setAttribute("message", "Hello from Forward");
dispatcher.forward(request, response);
5.示例代码验证:
User类
* 3. 一个JavaBean一般是有规范的:* 有无参数的构造方法* 属性私有化* 对外提供setter和getter方法* 重写toString()* 重写hashCode + equals* 实现java.io.Serializable接口。*/
public class User implements Serializable {private String id;private String name;public User() {}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(id, user.id) && Objects.equals(name, user.name);}@Overridepublic int hashCode() {return Objects.hash(id, name);}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", name='" + name + '\'' +'}';}public User(String id, String name) {this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
AServlet类
package oop1.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import oop1.bean.User;import java.io.IOException;public class AServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 创建一个用户对象User user = new User();user.setId("111111");user.setName("杰克");// 将用户对象存储到请求域当中request.setAttribute("userObj", user);// 转发request.getRequestDispatcher("/b").forward(request, response);}
}
BServlet类
package oop1.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;public class BServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 从请求域当中取出存储的数据Object userObj = request.getAttribute("userObj");// 输出到浏览器response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.print("请求域当中的用户对象:" + userObj);}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>a</servlet-name><servlet-class>oop1.servlet.AServlet</servlet-class></servlet><servlet-mapping><servlet-name>a</servlet-name><url-pattern>/a</url-pattern></servlet-mapping><servlet><servlet-name>b</servlet-name><servlet-class>oop1.servlet.BServlet</servlet-class></servlet><servlet-mapping><servlet-name>b</servlet-name><url-pattern>/b</url-pattern></servlet-mapping></web-app>
运行结果:
二、重定向(Redirect)
1.定义
-
重定向是客户端行为,服务器返回一个特殊响应(状态码 302 或 307),指示客户端重新发起对新 URL 的请求。
-
地址栏变化:用户最终看到的是新请求的 URL。
2.工作原理
-
客户端发送请求到服务器。
-
服务器返回状态码 302 和
Location
头(新 URL)。 -
客户端自动向新 URL 发起第二次请求。
-
新资源处理请求并返回响应。
3.特点
-
两次请求:客户端发起两次独立的请求。
-
数据隔离:两次请求的
request
对象不同,需通过 URL 参数、Session 或 Cookie 传递数据。 -
路径灵活:可重定向到任意 URL(包括外部域名)。
-
性能开销:多一次网络往返,效率略低。
4.语法:
// 在 Servlet 中实现重定向
response.sendRedirect("http://example.com/newPage.jsp");
// 通过 URL 参数传递数据
response.sendRedirect("/newPage.jsp?message=Hello+from+Redirect");
5.示例代码验证
仅修改AServlet类
// 重定向(重新定方向)
// 重定向时的路径当中需要以项目名开始,或者说需要添加项目名。
// response对象将这个路径:"/servlet10/b"响应给浏览器了。
// 浏览器又自发的向服务器发送了一次全新的请求:http://localhost:8080/servlet10/b
// 所以浏览器一共发送了两次请求:
// 第一次请求:http://localhost:8080/servlet10/a
// 第二次请求:http://localhost:8080/servlet10/b
// 最终浏览器地址栏上显示的地址当然是最后那一次请求的地址。所以重定向会导致浏览器地址栏上的地址发生改变。
package oop1.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import oop1.bean.User;import java.io.IOException;public class AServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 创建一个用户对象User user = new User();user.setId("111111");user.setName("杰克");// 将用户对象存储到请求域当中request.setAttribute("userObj", user);// 重定向(重新定方向)// 重定向时的路径当中需要以项目名开始,或者说需要添加项目名。// response对象将这个路径:"/servlet10/b"响应给浏览器了。// 浏览器又自发的向服务器发送了一次全新的请求:http://localhost:8080/servlet10/b// 所以浏览器一共发送了两次请求:// 第一次请求:http://localhost:8080/servlet10/a// 第二次请求:http://localhost:8080/servlet10/b// 最终浏览器地址栏上显示的地址当然是最后那一次请求的地址。所以重定向会导致浏览器地址栏上的地址发生改变。response.sendRedirect(request.getContextPath() + "/b");}
}
运行结果:
三、转发和重定向有什么区别?
1.形式上有什么区别?
-
转发(一次请求)
-
在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终请求结束之后,浏览器地址栏上的地址还是这个。没变。
-
-
重定向(两次请求)
-
在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终在浏览器地址栏上显示的地址是:http://localhost:8080/servlet10/b
-
2.转发和重定向的本质区别?
-
转发:是由WEB服务器来控制的。A资源跳转到B资源,这个跳转动作是Tomcat服务器内部完成的。
-
重定向:是浏览器完成的。具体跳转到哪个资源,是浏览器说了算。
3.转发和重定向应该如何选择?什么时候使用转发,什么时候使用重定向?
-
如果在上一个Servlet当中向request域当中绑定了数据,希望从下一个Servlet当中把request域里面的数据取出来,使用转发机制。
-
剩下所有的请求均使用重定向。(重定向使用较多。)
四、核心区别对比
特性 | 转发(Forward) | 重定向(Redirect) |
---|---|---|
请求次数 | 一次请求,服务器内部处理 | 两次独立请求 |
地址栏变化 | 不变化(显示初始 URL) | 变化(显示最终 URL) |
数据共享 | 通过 request 作用域传递 | 需手动传递(URL、Session 等) |
路径范围 | 仅限同一应用内 | 可跨应用、跨域 |
性能 | 高效(无额外网络交互) | 较低(多一次往返) |
实现方式 | RequestDispatcher.forward() | response.sendRedirect() |
HTTP 状态码 | 无明确状态码(服务器内部处理) | 302(临时)或 307(永久重定向) |
五、使用场景
适合转发的场景
-
隐藏实现细节:例如表单提交后跳转到结果页,但保持 URL 不变。
-
共享请求数据:在多个服务器端资源间传递数据(如 Servlet → JSP)。
-
避免重复提交:处理 POST 请求后转发到结果页,防止用户刷新导致重复提交。
适合重定向的场景
-
跨应用跳转:例如从旧系统跳转到新系统的页面。
-
防止重复提交:处理 POST 请求后重定向到 GET 请求(如 PRG 模式,Post-Redirect-Get)。
-
用户登录/注销:登录后重定向到主页,避免刷新时重复提交表单。
-
依赖外部资源:例如调用第三方支付接口后重定向回本站。
六、进阶补充
-
PRG 模式
通过重定向解决表单重复提交问题:用户提交表单(POST)→ 服务器处理并重定向到结果页(GET)→ 用户刷新不会重复提交数据。 -
框架中的使用
-
Spring MVC:
-
转发:
return "forward:/target"
-
重定向:
return "redirect:/target"
-
-
Thymeleaf/JSP:直接通过视图解析器处理转发逻辑。
-
七、总结
-
转发:服务器内部跳转,高效但路径受限,适合隐藏实现细节或共享数据。
-
重定向:客户端跳转,灵活但性能略低,适合跨应用、防重复提交或依赖外部资源。
根据具体需求选择合适的方式,例如对安全性和路径有要求时用转发,需要跨域或避免重复提交时用重定向。
相关文章:
转发和重定向的区别详解
转发(Forward)和重定向(Redirect)是 Web 开发中两种常用的请求处理方式,主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别,以下是对两者的详细解析&#…...
HarmonyOS NEXT——【鸿蒙相册图片以及文件上传Picker封装】
1、鸿蒙系统文件/图片上传base64: 鸿蒙应用需要上传图片或者文件时,由于更高的安全性与更严谨的访问权限,通常无法直接从系统相册或文件管理中直接上传,因此我们可以通过picker对象去拉起相册访问的能力,引导用户选择…...
Java中文件copy的5种方式
Java中文件copy的5种方式 传统字节流缓冲流jdk7 Files.copy通道(零拷贝)内存映射对比 传统字节流 缓冲流 jdk7 Files.copy 通道(零拷贝) 内存映射 对比...
Nacos Client 模块的作用是什么?是如何与 Server 端通信的?
Nacos Client 模块是 Nacos 架构中的重要组成部分,它负责与 Nacos Server 端进行交互,实现服务注册、服务发现、配置管理等核心功能。 可以将 Nacos Client 理解为 Nacos 提供给应用程序使用的 SDK。 Nacos Client 模块的主要作用: 服务注册 (Service R…...
c中的变量命名规则
在 C 中,变量命名需要遵循一定的规则和约定,以确保代码的可读性和合法性。以下是 C 变量命名的详细规则: 1. 基本规则 字母开头:变量名必须以字母(a-z 或 A-Z)或下划线(_)开头&…...
DDR(Double Data Rate)详解
一、DDR的定义与核心特性 DDR(双倍数据率同步动态随机存取存储器) 是一种 基于时钟上升沿和下降沿传输数据的高速内存技术,广泛应用于计算机、嵌入式系统、移动设备等领域。其核心特性包括: 双倍数据率:每个时钟周期传…...
aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级
最近对aocache 进行了重要升级,最新版本0.6.0增加了几项新功能:性能分析日志,AOCache性能分析工具,切入点自定义配置,全局配置,本文详细说明这几项目新功能的作用和使用方式。 一、性能分析日志 需求背景…...
IsaacLab最新2025教程(7)-引入IK solver控制机器人
机器人控制可以直接给定关节角进行驱动实现功能,完成任务,但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候,用eef pose会更符合直觉一些,isaacsim用的是LulaKinematics,因为IsaacLab现在是ETHZ的团队在…...
【测试】每日3道面试题 3/30
每日更新,建议关注收藏点赞。 白盒测试逻辑覆盖标准?哪种覆盖标准覆盖率最高? 5种。语句覆盖、分支/判定覆盖、条件覆盖、条件组合覆盖【覆盖率最高,所有可能条件组合都验证】、路径覆盖【理论上最高,但实际很难实现】…...
矩阵中对角线的遍历问题【C++】
1,按对角线进行矩阵排序 题目链接:3446. 按对角线进行矩阵排序 - 力扣(LeetCode) 【题目描述】 对于一个m*n的矩阵grid,要求对该矩阵进行 变换,使得变换后的矩阵满足: 主对角线右上的所有对角…...
自动化与智能化的认知差异
从认知心理学的角度对自动化和智能化进行了区分,我们可以从同化、顺应、平衡、图式方面来理解:一、自动化与图式及同化(1)图式是认知心理学中的一个重要概念,指个体对世界的知觉经验和理解方式,是个体过去经…...
leetcode 2360 图中最长的环 题解
题面 给定一个有向图,每个点出度最大为一,现在问你图中最长的环的长度是多少,如果没有环输出 -1, 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1≤n≤105。 题面 解题思路 我们直接说结论,我们从任意一个点出发,用…...
鸿蒙UI开发
鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议,特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况(自适应布局/响应式布局) 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …...
华宇TAS应用中间件与晓窗科技智慧校园管理一体化平台完成兼容互认证
近日,华宇TAS应用中间件与安徽晓窗教育科技有限公司(以下简称晓窗科技)的智慧校园管理一体化平台V1.0完成兼容性认证。经双方联合测试,两款产品在稳定性、安全性以及性能等方面表现优异,可以满足政企客户对于数据安全以…...
Java——数组
一、数组是? 数组就是一个容器,用于存储一批同种类型的数据。 数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。 二、静态初始化数组 (一)定义 即定义数组的时候直接给数组赋值。 (…...
MySQL排序详解
MySQL支持两种方式排序filesort和indexindex是指扫描索引本身完成排序,index效率高filesort是指通过内存或者排序文件完成排序,filesort效率低 order by满足两种情况时会使用index排序 order by语句使用索引最左列where条件字段和order by字段组合满足索…...
【python实战】-- 选择解压汇总mode进行数据汇总20250329更新
系列文章目录 文章目录 系列文章目录前言一、功能列表二、程序如下:总结 前言 一、功能列表 该模板用于多功能数据汇总处理: 1、用于解压压缩包,输入指定路径,即可解压多级压缩文件; 2、镜筒反射率、LAB文件汇总&…...
Java 程序员面试题:从基础到高阶的深度解析
引言 Java 作为全球最流行的编程语言之一,其面试题不仅考察候选人的编程能力,更关注对底层原理和架构设计的理解。本文将系统梳理 Java 面试中的高频考点,结合代码示例与原理分析,助您从容应对技术面试。 一、Java 基础语法与核…...
JSP(实验):带验证码的用户登录
[实验目的] 1.掌握应用request对象获取表单提交的数据。 2.掌握解决获取表单提交数据产生中文乱码的问题。 3.掌握使用response对象进行定时跳转功能。 4.掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…...
【安全运营】关于攻击面管理相关概念的梳理(二)
CYNC(持续可见性和网络控制) CYNC(Continuous Visibility and Network Control)即“持续可见性和网络控制”,是一个与网络安全和IT运营管理相关的概念。它强调的是在一个组织的数字环境中,确保对所有资产、…...
【Linux篇】进程入门指南:操作系统中的第一步
步入进程世界:初学者必懂的操作系统概念 一. 冯诺依曼体系结构1.1 背景与历史1.2 组成部分1.3 意义 二. 进程2.1 进程概念2.1.1 PCB(进程控制块) 2.2 查看进程2.2.1 使用系统文件查看2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取2.2.3 通过系统调用…...
Linux进程状态补充(10)
文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里,这实在是正常不过,因为例如 写实拷贝 等一些概念的深层原理我还没有讲解,大家不用紧张,我们继续往下学习就行!&…...
STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】
安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法: 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径,避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...
全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”?
全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”? (2025年3月29日) “未来十年,代码将比石油更具价值。” —— DeepSeek创始人梁文锋 一、数据洪流与AI进化&#…...
每日一题之修建灌木
问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修…...
智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9
使用DevExpress BI Dashboard,再选择合适的UI元素(图表、数据透视表、数据卡、计量器、地图和网格),删除相应参数、值和序列的数据字段,就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设备的决策…...
ubuntu下终端打不开的排查思路和解决方法
问题现象描述:ubuntu开机后系统桌面显示正常,其他图形化的app也都能打开无异常,唯独只有terminal终端打不开,无论是鼠标点击终端软件,还是ctrlaltt,还是altF2后输入gnome-terminal后按回车,这三…...
鸿蒙项目源码-天气预报app-原创!原创!原创!
鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作品…...
Turtle事件处理(键盘与鼠标交互)
Turtle 提供了 事件驱动编程,允许我们使用 键盘 和 鼠标 控制 Turtle,从而实现交互式绘图。例如,我们可以让 Turtle 响应 按键、鼠标点击 和 拖动 事件,使其根据用户的输入进行移动、旋转或绘制图形。 1. 事件机制概述 Turtle 的事件处理主要依赖 turtle.Screen() 提供的 …...
算法基础——模拟
目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对ÿ…...
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”,它们都有自己的核心技术、专利设计和生态体系。以下是它们“自己的”核心部分: 1. 关键自研技术 品牌自研技术/专利说明…...
一些练习 C 语言的小游戏
一些练习 C 语言的小游戏 — 1. 猜数字游戏 描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。 功能点: 随机数生成 (rand() 函数)。循环和…...
曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合
效果一览 代码功能 代码功能简述 目标:实现贝叶斯多项式曲线拟合,动态展示随着数据点逐步增加,模型后验分布的更新过程。 核心步骤: 数据生成:在区间[0,1]生成带噪声的正弦曲线作为训练数据。 参数设置:…...
Python 序列构成的数组(对序列使用+和_)
对序列使用和* Python 程序员会默认序列是支持 和 * 操作的。通常 号两侧的序列由 相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被 修改,Python 会新建一个包含同样类型数据的序列来作为拼接的结果。 如果想要把一个序列…...
洛谷题单1-P5703 【深基2.例5】苹果采购-python-流程图重构
题目描述 现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果? 输入格式 输入两个不超过 1 0 9 10^9 109 正整数,分别表示每人分到的数量和同学的人数。 输…...
计算机网络 用deepseek帮助整理的复习资料(一)
### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**:覆盖小范围(如家庭、教室、公司)。 - **特点**:高带宽、低延迟,设备通过交换机互联。 - **示例**࿱…...
虚拟电商-话费充值业务(二)话费充值对接供应商模块开发
一、对接供应商模块开发 供应商对接模块chongba_recharge_supplier主要负责的就是调用外部的供应商系统进行充值下单,这种调用是一种基于HTTP协议的调用。 此外在供应商对接模块中主要是实现的业务逻辑有: 1:余额或押金不足情况下的失败轮…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖拽视觉反馈示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖…...
游戏引擎学习第186天
回顾并规划今天的任务 现在,我们站在了一个关键的时刻,准备突破,拥有一些优秀的性能分析代码。从目前来看,我们已经能够看到时间的消耗情况,我对这一点感到非常兴奋。昨天的直播中我们勉强让一些东西工作了࿰…...
树的基础_遍历(蓝桥云课)
一些树上问题: 树的直径: import java.util.*;public class TreeDiameter {static List<List<Integer>> tree; // 用邻接表存储树结构static int[] depth; // 记录每个节点的深度public static void main(String[] args) {S…...
29_项目
目录 http.js 1、先注册账号 register.html 2、再登录 login.html 3、首页 index.html 4 详情 details.html cart.html css index.css register.css details.css 演示 进阶 http.js let baseURL "http://localhost:8888"; let resgiterApi baseURL &…...
vue搭建一个树形菜单项目
首先搭建项目需要先通过步骤搭建一个vue的项目,然后创建一个component文件,里面新建一个index.vue页面来。 这是引入的element-ui组件库里的组件,来实现我的路由,渲染的是我存储的动态路由,所以需要先安装并且引用。 …...
Python包管理完全指南:pip常用命令与最佳实践
一、pip核心功能解析 作为Python官方推荐的包管理工具,pip承担着以下关键职责: 从PyPI(Python Package Index)仓库安装/卸载第三方库管理项目依赖关系和版本控制支持本地/私有仓库的包安装维护虚拟环境中的包隔离 二、20个必知…...
Eigen 3
本文来源:腾讯元宝 Eigen 3 是一个专注于线性代数运算的高性能 C 模板库,广泛应用于科学计算、机器学习、计算机视觉等领域。以下是其核心特性与功能的综合介绍: 1. 核心定义与设计理念 纯头文件库:Eigen 3 无需编译或链接…...
数字化转型国家标准- GB/T 45341-2025《数字化转型管理 参考架构》
GB/T 45341-2025《数字化转型管理 参考架构》 前言一、数字化转型的根本任务二、标准的主要内容2.1、 核心概念2.2、总体框架2.3、 主要视角2.4、过程方法2.5、 发展阶段与水平档次 前言 在工业和信息化部和国家标准化管理委员会的指导下,全国信息化和工业化融合管…...
Redis 源码硬核解析系列专题 - 第三篇:核心数据结构之字典(Dict)
1. 引言 字典(Dict)是Redis的核心数据结构之一,用于实现键值存储(Redis数据库的核心)和内部元数据管理(如客户端状态)。Redis的字典基于哈希表实现,支持高效的增删改查操作。本篇将深入剖析其源码实现,包括哈希表结构、冲突解决和渐进式rehash机制。 2. 字典的结构体…...
JS—异步编程:3分钟掌握异步编程
个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–引言三–JavaScript 事件循环机制四–定时器的秘密:setTimeout 和 setInterval五–异步编程模型对比 二. 引言 在现代Web开发中,异步编程是提升性能的关键技术。无论是脚本加载&am…...
Linux C语言调用第三方库,第三方库如何编译安装
在 Linux 环境下使用 C 语言调用第三方库时,通常需要先对第三方库进行编译和安装。以下为你详细介绍一般的编译安装步骤,并给出不同类型第三方库(如使用 Makefile、CMake 构建系统)的具体示例。 一般步骤 1. 获取第三方库源码 …...
gogs私服搭建
一.介绍: gogs是一个用Go语言开发的自助Git服务,目标是简单、快速搭建Git服务, 支持多种平台,包括Linux、Windows等。它类似于GitHub,但更轻量,适合个人或小团队使用, 在简化git服务搭建流程的…...
python和c中作用域的差异
好的,我将详细列举 Python 和 C 语言在作用域规则上的主要差异,并为每种差异提供具体的代码示例,以便更清晰地理解它们之间的不同。 1. 块级作用域(Block Scope) C 语言 在 C 语言中,任何用 {} 包裹的代…...