ngx_http_core_root
定义在 src\http\ngx_http_core_module.c
static char *
ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{ngx_http_core_loc_conf_t *clcf = conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t n;ngx_http_script_compile_t sc;alias = (cmd->name.len == sizeof("alias") - 1) ? 1 : 0;if (clcf->root.data) {if ((clcf->alias != 0) == alias) {return "is duplicate";}ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"\"%V\" directive is duplicate, ""\"%s\" directive was specified earlier",&cmd->name, clcf->alias ? "alias" : "root");return NGX_CONF_ERROR;}if (clcf->named && alias) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the \"alias\" directive cannot be used ""inside the named location");return NGX_CONF_ERROR;}value = cf->args->elts;if (ngx_strstr(value[1].data, "$document_root")|| ngx_strstr(value[1].data, "${document_root}")){ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the $document_root variable cannot be used ""in the \"%V\" directive",&cmd->name);return NGX_CONF_ERROR;}if (ngx_strstr(value[1].data, "$realpath_root")|| ngx_strstr(value[1].data, "${realpath_root}")){ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the $realpath_root variable cannot be used ""in the \"%V\" directive",&cmd->name);return NGX_CONF_ERROR;}clcf->alias = alias ? clcf->name.len : 0;clcf->root = value[1];if (!alias && clcf->root.len > 0&& clcf->root.data[clcf->root.len - 1] == '/'){clcf->root.len--;}if (clcf->root.data[0] != '$') {if (ngx_conf_full_name(cf->cycle, &clcf->root, 0) != NGX_OK) {return NGX_CONF_ERROR;}}n = ngx_http_script_variables_count(&clcf->root);ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));sc.variables = n;#if (NGX_PCRE)if (alias && clcf->regex) {clcf->alias = NGX_MAX_SIZE_T_VALUE;n = 1;}
#endifif (n) {sc.cf = cf;sc.source = &clcf->root;sc.lengths = &clcf->root_lengths;sc.values = &clcf->root_values;sc.complete_lengths = 1;sc.complete_values = 1;if (ngx_http_script_compile(&sc) != NGX_OK) {return NGX_CONF_ERROR;}}return NGX_CONF_OK;
}
ngx_http_core_root
函数是 Nginx 中处理root
和alias
配置指令的核心逻辑实现
alias = (cmd->name.len == sizeof("alias") - 1) ? 1 : 0;
通过指令名称长度判断当前处理的是
root
还是alias
指令当前的指令是 root
所以 alias=0
if (clcf->root.data) {if ((clcf->alias != 0) == alias) {return "is duplicate";}ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"\"%V\" directive is duplicate, ""\"%s\" directive was specified earlier",&cmd->name, clcf->alias ? "alias" : "root");return NGX_CONF_ERROR;}
逻辑 :
clcf->root.data
是存储路径值的指针。若非空,说明当前配置块(如location
)已设置过root
或alias
。意义 :避免重复或冲突的路径配置。
同一指令重复 (如两次
root
):直接返回"is duplicate"
不同指令冲突 (如
root
后跟alias
):记录详细日志后终止
if (clcf->named && alias) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the \"alias\" directive cannot be used ""inside the named location");return NGX_CONF_ERROR;}
clcf->named
:表示当前location
是一个命名 location(如location @name
)。
alias
:当前指令是alias
(值为1
)。若两者同时为真,触发错误逻辑。
意义 :命名 location 的特殊用途与
alias
的路径替换逻辑存在冲突此时 clcf->named=0 alias=0
条件不成立
value = cf->args->elts;if (ngx_strstr(value[1].data, "$document_root")|| ngx_strstr(value[1].data, "${document_root}")){ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the $document_root variable cannot be used ""in the \"%V\" directive",&cmd->name);return NGX_CONF_ERROR;}
禁止在
root
或alias
指令中直接使用$document_root
或${document_root}
变量
- 逻辑 :通过
ngx_strstr
函数检查路径参数(value[1]
)中是否包含变量$document_root
或${document_root}
。- 意义 :直接使用这些变量会导致循环依赖 ,因为
$document_root
的值正是由root
/alias
指令定义的。此时
value[1].data=html
条件不成立
if (ngx_strstr(value[1].data, "$realpath_root")|| ngx_strstr(value[1].data, "${realpath_root}")){ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the $realpath_root variable cannot be used ""in the \"%V\" directive",&cmd->name);return NGX_CONF_ERROR;}
禁止在
root
或alias
指令中直接使用$realpath_root
或${realpath_root}
变量此时条件不成立
clcf->alias = alias ? clcf->name.len : 0;clcf->root = value[1];
clcf->alias = alias ? clcf->name.len : 0;
作用 :
设置clcf->alias
的值,用于标识当前配置是alias
还是root
,并记录alias
的替换长度。逻辑 :
alias
是一个布尔变量:
1
表示当前处理的是alias
指令。0
表示当前处理的是root
指令。若为
alias
:
clcf->alias
被赋值为clcf->name.len
(即当前location
名称的长度)。若为
root
:
clcf->alias
被置为0
clcf->root = value[1];
作用 :
将用户配置的路径值保存到clcf->root
中。逻辑 :
value[1]
是指令的参数列表中的第二个元素(索引从0
开始)此时
clcf->alias=0
clcf->root=html
if (!alias && clcf->root.len > 0&& clcf->root.data[clcf->root.len - 1] == '/'){clcf->root.len--;}
!alias
:仅对root
指令生效(alias
为0
时为root
)。
clcf->root.len > 0
:确保路径非空,避免无效操作。
clcf->root.data[clcf->root.len - 1] == '/'
:检查路径末尾是否为斜杠/
若当前是
root
指令,且路径非空且以/
结尾,则进入处理逻辑将路径的长度减
1
,隐式删除末尾的斜杠避免拼接 URI 时可能出现双斜杠
此时条件不成立
if (clcf->root.data[0] != '$') {if (ngx_conf_full_name(cf->cycle, &clcf->root, 0) != NGX_OK) {return NGX_CONF_ERROR;}}
clcf->root.data[0]
是路径的第一个字符。若不以
$
开头,表示路径是静态字符串 ,而非变量(如$document_root
)。意义 :
仅对静态路径进行规范化处理,变量路径需在运行时动态解析。
ngx_conf_full_name
将相对路径转换为绝对路径 。参数
cf->cycle
:Nginx 全局配置上下文。参数
&clcf->root
:待处理的路径。参数
0
:标志位(此处未启用特殊选项,如符号链接解析)。示例 :
若 Nginx 前缀为/usr/local/nginx
,用户配置root html;
,则转换后路径为/usr/local/nginx/html
。此时 root.data=/usr/local/nginx/html
n = ngx_http_script_variables_count(&clcf->root);
ngx_http_script_variables_count
遍历路径字符串(clcf->root
),统计符合变量格式($var
或${var}
)的出现次数。示例 :
路径"/var/www/$host/$uri"
包含 2 个变量 ($host
和$uri
),因此n = 2
。设计目的
动态路径预处理 :
若n > 0
,表示路径需要运行时动态解析变量,后续需通过脚本引擎(ngx_http_script
)生成解析逻辑。
若n = 0
,路径为静态字符串,直接使用即可。ngx_http_script_variables_count-CSDN博客
此时 n = 0
ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));sc.variables = n;
ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
作用 :
初始化ngx_http_script_compile_t
结构体变量sc
,将其所有字段置零 。
sc.variables = n;
作用 :
设置脚本编译器的变量数量 ,即路径中需要动态解析的变量个数。ngx_http_script_compile_t-CSDN博客
#if (NGX_PCRE)if (alias && clcf->regex) {clcf->alias = NGX_MAX_SIZE_T_VALUE;n = 1;}
#endif
if (alias && clcf->regex)
当前处理的是 alias
当前使用了正则表达式匹配
此时
alias=0
clcf->regex=NULL条件不成立
if (n) {sc.cf = cf;sc.source = &clcf->root;sc.lengths = &clcf->root_lengths;sc.values = &clcf->root_values;sc.complete_lengths = 1;sc.complete_values = 1;if (ngx_http_script_compile(&sc) != NGX_OK) {return NGX_CONF_ERROR;}}
if (n) {
- 作用 :
检查路径中是否包含变量(n > 0
)。若存在变量,进入动态路径编译流程条件不成立
return NGX_CONF_OK;
返回 NGX_CONF_OK;
相关文章:
ngx_http_core_root
定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t …...
大模型在支气管肺癌预测及临床决策中的应用研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、大模型预测支气管肺癌的原理与技术基础 2.1 大模型简介 2.2 数据收集与预处理 2.3 模型训练与优化 三、术前预测 3.1 病情评估 3.1.1 肿瘤大小、位置及分期预测 3.1.2 转移风险预测 3.2 手术风险预测 3.2.1 患…...
机器人原点丢失后找回原点的解决方案与步骤
机器人原点丢失后找回原点的解决方案与步骤 在机器人运行过程中,原点丢失可能导致定位错误、运动失控等问题,常见于机械臂、AGV(自动导引车)、3D打印机等设备。以下是针对原点丢失问题的系统性解决方案及详细步骤,涵盖…...
CSS SEO、网页布局、媒体查询
目录 一、SEO 头部三大标签 1. Title 标签(标题) 核心作用 优化规范 示例 2. Meta Description(描述) 核心作用 优化规范 示例 3. Viewport 标签(视口) 核心作用 优化规范 4. 完整 SEO 头部模…...
SolidJS 深度解析:高性能响应式前端框架
SolidJS 是一个新兴的响应式前端框架,以其极致的性能、简洁的语法和接近原生 JavaScript 的开发体验而闻名。它结合了 React 的声明式 UI 和 Svelte 的编译时优化,同时采用细粒度响应式更新,避免了虚拟 DOM(Virtual DOM࿰…...
基于Spring Boot + Vue的银行管理系统设计与实现
基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速,传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统,通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…...
解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“
问题描述 在 Ubuntu/Debian 系统中运行 sudo apt-get install 或 sudo apt update 时,遇到以下错误: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它&#…...
OpenGL 着色器
一、着色器基础结构 版本声明与入口函数 首行版本声明:必须指定 GLSL 版本和模式(如 #version 450 core)。 #version 450 core // 声明使用 OpenGL 4.5 Core Profile 入口函数:所有着色器的入口均为 main() 函…...
代码随想录刷题day53|(二叉树篇)105.从前序与中序遍历序列构造二叉树(▲
目录 一、二叉树基础知识 二、构造二叉树思路 2.1 构造二叉树流程(先序中序 2.2 递归思路 三、相关算法题目 四、易错点 一、二叉树基础知识 详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客 二、构造二叉…...
【leetcode刷题日记】lc.560-和为 K 的子数组
目录 1.题目 2.代码 1.题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入…...
计算机期刊推荐 | 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用
Computers, Materials & Continua 学科领域: 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用 期刊类型: SCI/SSCI/AHCI 收录数据库: SCI(SCIE),EI,Scopus,知网(CNK…...
K8S安装及部署calico(亲测有用[特殊字符])
一、 基础部署(三台均部署) 1. 关闭防火墙并修改网络为aliyun 要保证网络可以使用,可以将DNS的指向修改为114.114.114.114和8.8.8.8这两个。 systemctl stop firewalld && systemctl disable firewalld sed -i s/enforcing/disabl…...
etcd性能测试
etcd性能测试 本文参考官方文档完成etcd性能测试,提供etcd官方推荐的性能测试方案。 1. 理解性能:延迟与吞吐量 etcd 提供稳定、持续的高性能。有两个因素决定性能:延迟和吞吐量。延迟是完成一项操作所花费的时间。吞吐量是在某个时间段内…...
在shell脚本内部获取该脚本所在目录的绝对路径
目录 需求描述 方法一:使用 dirname 和 readlink 命令 方法二:使用 BASH_SOURCE 变量 方法三:仅使用纯 Bash 实现 需求描述 工作中经常有这样情况,需要在脚本内部获取该脚本自己所在目录的绝对路径。 假如有一个脚本/a/b/c/…...
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
提醒 要求了解或者熟练掌握以下知识点 spring 事务mysql 脏读如何保证缓存和数据库数据一致性延迟双删分布式锁并发编程 原子操作类 前言 在起草这篇博客之前 我做了点功课 这边我写的是一个示例代码 数据层都写成了 mock 的形式(来源于 JUnit5) // Dduo import java.u…...
SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测
SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测(程…...
【Python】天气数据可视化
1. Python进行数据可视化 在数据分析和科学计算领域,Python凭借其强大的库和简洁的语法,成为了众多开发者和科研人员的首选工具。数据可视化作为数据分析的重要环节,能够帮助我们更直观地理解数据背后的规律和趋势。本文将详细介绍如何使用P…...
c#的.Net Framework 的console 项目找不到System.Window.Forms 引用
首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…...
Ubuntu 重置密码方法
目录 修改过 root 密码,重置密码的方法没改过 root 密码,重置密码的方法 修改过 root 密码,重置密码的方法 Ubuntu 默认禁用root用户,意思就是安装好Ubuntu系统后,root用户默认是没有密码的,普通用户通过…...
电机控制常见面试问题(二十)
文章目录 一.整流电路绕组接法二.电机为什么需要转速器三.电机转矩产生原理四.电机控制中载波频率大小的确定五.开关周期 Tpwm 一.整流电路绕组接法 为了引出直流的输出,一定要在整流变压器的二次侧引出零线,所以二次侧绕组必须接成星形 一次绕组必须要…...
Linux系统之yum本地仓库创建
目录 一.Linux软件安装 1.Rpm包安装 2.yum本地仓库安装 二.yum本地仓库建立 三.编译 一.Linux软件安装 软件安装共2种安装方式,通过rpm包安装或通过yum仓库库安装。 先下载安装包命令的方式去安装软件包安装结束 得到一个可以执行程序 绝对路径下的程序 1.…...
未来技术的发展趋势与影响分析
区块链技术在版权中的应用越来越受到关注。它的基本原理是通过分布式账本将每一份作品的版权信息储存起来,确保这些信息不可篡改、不可删除。这就意味着,当创作者发布作品时,可以在区块链上登记相关信息。这样,任何人都能验证版权…...
ROS2 架构梳理汇总整理
文章目录 前言正文机器人平台整体架构(ROS2)图一、个人理解整体架构 ROS2架构图一、个人理解ROS2整体架构图二、开发者整理ROS2整体架构图三、Intel整理ROS2整体架构图四、DDS具体架构说明 ROS2 Control架构图一、官方整整理ROS2 Control整体架构 总结 前…...
蓝桥杯算法精讲:二分查找实战与变种解析
适合人群:蓝桥杯备考生 | 算法竞赛入门者 | 二分查找进阶学习者 目录 一、二分查找核心要点 1. 算法思想 2. 适用条件 3. 算法模板 二、蓝桥杯真题实战 例题:分巧克力(蓝桥杯2017省赛) 三、二分查找变种与技巧 1. 查找左边…...
多层感知机实现
激活函数 非线性 ReLU函数 修正线性单元 rectified linear unit relu(x)max(0,x) relu的导数: sigmoid函数 s i g m o i d ( x ) 1 1 e − x sigmoid(x)\frac{1}{1e^{-x}} sigmoid(x)1e−x1 是一个早期的激活函数 缺点是: 幂运算相对耗时&…...
Linux进程控制--进程创建 | 进程终止 | 进程等待 | 进程替换
1.进程创建 现阶段我们知道进程创建有如下两种方式,起始包括在以后的学习中有两种方式也是最常见的: 1、命令行启动命令(程序、指令)。 2、通过程序自身,使用fork函数创建的子进程。 1.1 fork函数 在linux操作系统中,fork函数是…...
Linux 网络编程(二)——套接字编程简介
文章目录 2 Socket 套接字 2.1 什么是 Socket 2.2 Socket编程的基本操作 2.3 地址信息的表示 2.4 网络字节序和主机字节序的转换 2.4.1 字节序转换 2.4.2 网络地址初始化与分配 2.5 INADDR_ANY 2.6 Socket 编程相关函数 2.7 C标准中的 main 函数声明 2.8 套接字应用…...
串行通信 与 并行通信 对比
总目录 一、并行通信 1. 定义与核心特点 1) 定义 并行通信是指通过多条数据线同时传输一组数据的各个位(如8位、16位或更多),以字节或字为单位进行数据交换的通信方式。 2)核心特点 特点描述传输速度快多位同时传…...
基于springboot+vue的北部湾地区助农平台
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
Docker技术系列文章,第七篇——Docker 在 CI/CD 中的应用
在当今快速发展的软件开发领域,持续集成与持续部署(CI/CD)已经成为提高软件交付效率和质量的关键实践。而 Docker 作为一种流行的容器化技术,为 CI/CD 流程提供了强大的支持。通过将应用及其依赖项打包成容器,Docker 确…...
Hive SQL中 ?+.+ 的用法,字段剔除
一、含义 ?. 的用法代表剔除表中的特定字段,建议按照字段顺序列出以确保正确性。 二、参数设置 -- 首先需要设置一个参数: set hive.support.quoted.identifiersNone; --然后指定要剔除哪个字段 select (dateline)?. from test.dm_user_add三、举例…...
Vue学习笔记集--pnpm包管理器
pnpm包管理器 官网: https://www.pnpm.cn/ pnpm简介 pnpm全称是performant npm,意思为“高性能的npm”,它通过硬链接和符号链接共享依赖,提升安装速度并减少存储占用。 功能特点 节省磁盘空间:依赖包被存放在一个统…...
游戏交易系统设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对游戏交易信息管理的提升&#x…...
为什么视频文件需要压缩?怎样压缩视频体积即小又清晰?
在日常生活中,无论是为了节省存储空间、便于分享还是提升上传速度,我们常常会遇到需要压缩视频的情况。本文将介绍为什么视频需要压缩,压缩视频的好处与坏处,并教你如何使用简鹿视频格式转换器轻松完成MP4视频文件的压缩。 为什么…...
腾讯pcg客户端一面
Java 基本引用类型 常见异常以及怎么处理 所有类的父类是什么,有哪些常用方法 常用线程池有哪些 线程池的创建参数 如何实现线程同步 常用锁有哪些 Lock和reentrantlock有什么不一样 Reentrantlock要手动释放锁吗 数据结构 数组和链表的区别 队列和栈的区别 为什么…...
解决vscode终端和本地终端python版本不一致的问题
🌿 问题描述 本地终端: vscode终端: 别被这个给骗了,继续往下看: 难怪我导入一些包的时候老提示找不到,在本地终端就不会这样,于是我严重怀疑vscode中的python版本和终端不一样,…...
常见几种网络攻击防御方式
xss跨站脚本攻击 反射型 XSS(Reflected XSS): 恶意脚本是通过 URL 参数或者表单提交直接传递给服务器的,并且立即在响应页面中反射返回给用户。 假设有一个登录页面,用户可以通过 URL 参数传递一个消息: &…...
操作系统之输入输出
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
TCP/IP的网络连接设备
TCP/IP层物理层网卡、集线器、中继器数据链路层网桥、交换机网络层路由器传输层网关应用层 1.网桥:网桥主要功能是将一个网络的数据沿通信线路复制到另一个网络中去,可以有效的连接两个局域网 2.网关:网关又称协议转换器,是将两…...
记一次feign调用400,参数过长导致,修改解决
feign客户端PostMapping("/website/checkChooseColumn") boolean checkChooseColumn(RequestParam("chooseColumn") String chooseColumn);服务端 PostMapping("/checkChooseColumn") public boolean checkChooseColumn(RequestParam("cho…...
【大模型基础_毛玉仁】4.3 参数选择方法
目录 4.3 参数选择方法4.3.1 基于规则的方法4.3.2 基于学习的方法1)公式:2)Child-tuning 的两种变体模型3)Child-tuning总结 4.3 参数选择方法 参数选择方法: 对预训练模型中部分参数微调,不添加额外参数以避免推理时…...
企业级Linux服务器初始化优化全流程
实战指南:企业级Linux服务器初始化优化全流程 本文基于某电商平台百万级并发服务器的真实调优案例整理,所有操作均在Rocky Linux8.5验证通过,不同发行版请注意命令差异 一、服务器安全加固(Situation-Task-Action-Resultÿ…...
亿级分布式系统架构演进实战(十一)- 垂直拆分(服务治理体系、安全架构升级)
亿级分布式系统架构演进实战(一)- 总体概要 亿级分布式系统架构演进实战(二)- 横向扩展(服务无状态化) 亿级分布式系统架构演进实战(三)- 横向扩展(数据库读写分离&#…...
飞速(FS)InfiniBand解决方案助力领先科技公司网络升级
国家:越南 行业:信息技术 网络类型:InfiniBand网络 方案类型:HPC网络 案例亮点 通过真实使用场景的全面测试,确保出色兼容性和高可用性,显著降低部署风险和运营成本。 借助飞速(FS…...
[Qt5] QMetaObject::invokeMethod使用
📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...
深入理解垃圾收集算法:从分代理论到经典回收策略
垃圾收集(Garbage Collection, GC)是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象,还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。 注&…...
数据降维——PCA与LDA
特征选择和特征提取 特征选择和特征提取是数据降维的重要步骤。 1. 定义与目标 特征提取: 目标:通过变换(如投影、编码)将原始高维特征映射到新的低维空间,新特征是原始特征的组合(线性或非线性ÿ…...
机器学习中的 K-均值聚类算法及其优缺点
K-均值聚类是一种常用的无监督学习算法,用于将数据集中的样本分为 K 个簇。其工作原理是通过迭代优化来确定簇的中心点,实现样本的聚类。 算法步骤如下: 随机选择 K 个样本作为初始簇中心。根据每个样本和簇中心的距离将样本归类到最近的簇…...
RAID原理
一、RAID 0 原理 核心特点 条带化(Striping):数据被分割成块(Block),交替写入多个磁盘(至少2块)。无冗余:不提供数据备份或校验,依赖所有磁盘同…...
2025系统分析师---软件工程:深度剖析常见软件开发方法
在软件工程这一复杂而精妙的领域中,软件开发方法的选择与实施无疑是项目成功的关键所在。作为一名资深软件技术专家,我深知不同的开发方法适用于不同的业务场景,各自具备独特的优缺点。本文将深入探讨几种常见的软件开发方法,包括…...