Ubuntu 下 nginx-1.24.0 源码分析 - ngx_show_version_info函数
声明
在 nginx.c 开头
static void ngx_show_version_info(void);
实现
static void ngx_show_version_info(void) {ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);if (ngx_show_help) {ngx_write_stderr("Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]" NGX_LINEFEED" [-e filename] [-c filename] [-g directives]"NGX_LINEFEED NGX_LINEFEED"Options:" NGX_LINEFEED" -?,-h : this help" NGX_LINEFEED" -v : show version and exit" NGX_LINEFEED" -V : show version and configure options then exit"NGX_LINEFEED" -t : test configuration and exit" NGX_LINEFEED" -T : test configuration, dump it and exit"NGX_LINEFEED" -q : suppress non-error messages ""during configuration testing" NGX_LINEFEED" -s signal : send signal to a master process: ""stop, quit, reopen, reload" NGX_LINEFEED #ifdef NGX_PREFIX" -p prefix : set prefix path (default: " NGX_PREFIX ")"NGX_LINEFEED #else" -p prefix : set prefix path (default: NONE)" NGX_LINEFEED #endif" -e filename : set error log file (default: " #ifdef NGX_ERROR_LOG_STDERR"stderr)" NGX_LINEFEED #elseNGX_ERROR_LOG_PATH ")" NGX_LINEFEED #endif" -c filename : set configuration file (default: " NGX_CONF_PATH")" NGX_LINEFEED" -g directives : set global directives out of configuration ""file" NGX_LINEFEED NGX_LINEFEED);}if (ngx_show_configure) {#ifdef NGX_COMPILERngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED); #endif#if (NGX_SSL)if (ngx_strcmp(ngx_ssl_version(), OPENSSL_VERSION_TEXT) == 0) {ngx_write_stderr("built with " OPENSSL_VERSION_TEXT NGX_LINEFEED);} else {ngx_write_stderr("built with " OPENSSL_VERSION_TEXT" (running with ");ngx_write_stderr((char *) (uintptr_t) ngx_ssl_version());ngx_write_stderr(")" NGX_LINEFEED);} #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAMEngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED); #elsengx_write_stderr("TLS SNI support disabled" NGX_LINEFEED); #endif #endifngx_write_stderr("configure arguments:" NGX_CONFIGURE NGX_LINEFEED);} }
这段代码的作用是显示 Nginx 的版本信,帮助信息和编译配置
当用户运行 Nginx 并带上特定的参数(比如
-v
或-h
)时,这段代码会告诉用户 Nginx 的版本号
这段代码主要做了两件事:
显示版本信息:告诉用户 Nginx 的版本号。
显示帮助信息:如果用户需要,就显示如何使用 Nginx 的各种参数。
static void ngx_show_version_info(void)
static
是一个关键字,表示这个函数只能在当前文件中使用,外部文件无法调用它
void
表示这个函数没有返回值,没有参数
{ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);
向标准错误流(
stderr
)写入 Nginx 的版本信息。无论用户是否请求帮助(
-h
)或详细配置(-V
),版本信息始终显示
ngx_write_stderr
是一个函数,用来把信息写到标准错误输出(通常是屏幕)
NGINX_VER_BUILD
是一个宏,包含了 Nginx 的版本信息。
NGX_LINEFEED
是一个宏,跨平台换行符(Windows用\r\n
,Linux用\n
)
ngx_write_stderr
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_write_stderr函数-CSDN博客
NGINX_VER_BUILD
在 nginx.h 中:
#ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif
NGX_BUILD
NGX_BUILD
是一个可选的宏,用于定义 Nginx 的构建信息它通常在编译时通过
./configure --build=name
命令设置。例如,如果在编译时指定了--build=stable
,那么NGX_BUILD
的值将会是"stable"
我这里当前是没有 定义
NGX_BUILD 的
如果定义了
NGX_BUILD
:
将版本号与构建信息拼接,格式为:
NGINX_VER (NGX_BUILD)
。示例:
nginx/1.25.3 (2023-10-01 OpenSSL 1.1.1)
。如果未定义
NGX_BUILD
:
直接使用
NGINX_VER
,仅显示基础版本号。示例:
nginx/1.25.3
NGINX_VER
是一个宏,用于定义 Nginx 的版本信息
它通常由字符串
"nginx/"
和另一个宏NGINX_VERSION
拼接而成。例如,如果NGINX_VERSION
被定义为"1.21.0"
,那么NGINX_VER
的值将会是"nginx/1.21.0"
nginx.h 中:
#define nginx_version 1024000 #define NGINX_VERSION "1.24.0" #define NGINX_VER "nginx/" NGINX_VERSION
NGX_LINEFEED
ngx_files.h 中:
#define NGX_LINEFEED "\x0a"
换行符“\n”在ASCII编码中的值是10
在C语言中,相邻的字符串字面量会在编译阶段自动合并为一个字符串
当代码中的宏被展开后
"nginx version: " "1.24.0" "\n"
C 语言在编译时会自动将这些相邻的字符串拼接起来,形成完整的字符串
"nginx version: 1.24.0\n"
if (ngx_show_help) {
处理帮助信息(
-h
或-?
)
if
是一个条件语句,用来判断某个条件是否成立。ngx_show_help
是一个变量,如果用户请求帮助信息,这个变量会被设置为真。这行代码的意思是:如果用户需要帮助信息,就执行下面的代码块。
用户通过
-h
或-?
参数触发,全局变量ngx_show_help被设置
为1
ngx_write_stderr("Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]" NGX_LINEFEED" [-e filename] [-c filename] [-g directives]"NGX_LINEFEED NGX_LINEFEED"Options:" NGX_LINEFEED" -?,-h : this help" NGX_LINEFEED" -v : show version and exit" NGX_LINEFEED" -V : show version and configure options then exit"NGX_LINEFEED" -t : test configuration and exit" NGX_LINEFEED" -T : test configuration, dump it and exit"NGX_LINEFEED" -q : suppress non-error messages ""during configuration testing" NGX_LINEFEED" -s signal : send signal to a master process: ""stop, quit, reopen, reload" NGX_LINEFEED #ifdef NGX_PREFIX" -p prefix : set prefix path (default: " NGX_PREFIX ")"NGX_LINEFEED #else" -p prefix : set prefix path (default: NONE)" NGX_LINEFEED #endif" -e filename : set error log file (default: " #ifdef NGX_ERROR_LOG_STDERR"stderr)" NGX_LINEFEED #elseNGX_ERROR_LOG_PATH ")" NGX_LINEFEED #endif" -c filename : set configuration file (default: " NGX_CONF_PATH")" NGX_LINEFEED" -g directives : set global directives out of configuration ""file" NGX_LINEFEED NGX_LINEFEED);
使用
ngx_write_stderr
逐行拼接多段字符串,避免一次性分配大内存如果用户需要帮助,这段代码会列出所有可以用的命令参数和它们的含义。比如
-v
表示显示版本号并退出,-h
表示显示帮助信息。
#ifdef NGX_PREFIX
:根据编译时的--prefix
参数显示默认安装路径(如/usr/local/nginx/
)
#ifdef NGX_ERROR_LOG_STDERR
:根据配置决定错误日志默认输出到stderr
还是文件例如:
NGX_PREFIX
objs/ngx_auto_config.h 中:
#ifndef NGX_PREFIX #define NGX_PREFIX "/usr/local/nginx/" #endif
NGX_PREFIX
宏在 Nginx 的源代码中被用来确定各种文件的默认路径,例如配置文件、日志文件等。可以在编译时设置
--prefix=
如果没有指定
--prefix
参数,NGX_PREFIX
宏的默认值通常是/usr/local/nginx
NGX_ERROR_LOG_STDERR
NGX_ERROR_LOG_STDERR
宏用于指定错误日志的输出目标为标准错误输出(stderr)当 Nginx 需要记录错误日志时,如果配置了
NGX_ERROR_LOG_STDERR
,则错误日志信息会被输出到标准错误流,而不是写入到文件或其他日志存储位置我这里没有定义
NGX_ERROR_LOG_STDERR, 因为
在编译前指定了--error-log-path
参数NGX_ERROR_LOG_PATH
在 objs\ngx_auto_config.h 中:
#ifndef NGX_ERROR_LOG_PATH #define NGX_ERROR_LOG_PATH "/home/wsd/桌面/nginx/LOG/error.log" #endif
NGX_ERROR_LOG_PATH 就是
--error-log-path= 参数这里指定的
NGX_CONF_PATH
objs\ngx_auto_config.h 中:
#ifndef NGX_CONF_PATH #define NGX_CONF_PATH "/home/wsd/桌面/nginx/conf/nginx.conf" #endif
NGX_CONF_PATH
宏用于指定 Nginx 配置文件nginx.conf
的路径可以在编译时通过 --conf-path 参数指定
./configure --conf-path=/path/to/your/nginx.conf
if (ngx_show_configure) {
处理详细配置信息(
-V
)输出编译环境和配置选项
if
是条件语句,ngx_show_configure
是一个变量,如果用户请求显示配置信息,这个变量会被设置为真这行代码的意思是:如果用户需要查看配置信息(-V),就执行下面的代码块
用户通过
-V
参数触发,全局变量ngx_show_configure被设置
为1
#ifdef NGX_COMPILERngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED); #endif
fdef
是预处理指令,用来判断是否定义了NGX_COMPILER
宏。
NGX_COMPILER
是一个宏,包含了编译 Nginx 的编译器信息。如果定义了
NGX_COMPILER
,就输出编译 Nginx 的编译器信息
NGX_COMPILER
objs\ngx_auto_config.h
#ifndef NGX_COMPILER #define NGX_COMPILER "gcc 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) " #endif
NGX_COMPILER
宏用于记录编译 Nginx 时所使用的编译器信息
#if (NGX_SSL)if (ngx_strcmp(ngx_ssl_version(), OPENSSL_VERSION_TEXT) == 0) {ngx_write_stderr("built with " OPENSSL_VERSION_TEXT NGX_LINEFEED);} else {ngx_write_stderr("built with " OPENSSL_VERSION_TEXT" (running with ");ngx_write_stderr((char *) (uintptr_t) ngx_ssl_version());ngx_write_stderr(")" NGX_LINEFEED);} #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAMEngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED); #elsengx_write_stderr("TLS SNI support disabled" NGX_LINEFEED); #endif #endif
if
是预处理指令,用来判断是否定义了NGX_SSL
宏
ngx_strcmp
是一个函数,用来比较两个字符串是否相等
ngx_ssl_version
是一个函数,用来获取 SSL 的版本信息
NGX_SSL
表示启用了 SSL 模块。
ngx_ssl_version()
返回运行时 OpenSSL 版本,OPENSSL_VERSION_TEXT
是编译时版本。如果版本不一致,提示用户(可能导致兼容性问题)
输出 SNI 支持状态
显示是否支持 TLS SNI(Server Name Indication)。
SSL_CTRL_SET_TLSEXT_HOSTNAME
宏的存在表示支持 SNI。SNI 是托管多个 HTTPS 站点的关键功能,用户需知晓支持状态
NGX_SSL
objs\ngx_auto_config.h 中:
#ifndef NGX_SSL #define NGX_SSL 1 #endif
NGX_SSL
宏用于指示 Nginx 是否启用了 SSL/TLS 支持在编译 Nginx 时,可以通过
--with-http_ssl_module
参数启用 SSL/TLS 支持
ngx_strcmp
ngx_string.h 中
#define ngx_strcmp(s1, s2) strcmp((const char *) s1, (const char *) s2)
本质就是 strcmp
在 C 语言中,
strcmp
是一个标准库函数,用于比较两个字符串的大小。它在<string.h>
头文件中定义。
如果第一个字符串大于第二个字符串,返回正值。
如果两个字符串相等,返回 0。
如果第一个字符串小于第二个字符串,返回负值。
ngx_ssl_version
获取 SSL 的版本信息 Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_version 函数-CSDN博客
OPENSSL_VERSION_TEXT
OPENSSL_VERSION_TEXT
是 OpenSSL 库中定义的一个宏,用于获取 OpenSSL 的完整描述性版本文本,包括版本号和发布日期可以用以下 代码 输出一下 OPENSSL_VERSION_TEXT 的值
gcc test.c -o test -lcrypto -lssl
#include <openssl/opensslv.h> #include <stdio.h>int main() {printf("OpenSSL version text: %s\n", OPENSSL_VERSION_TEXT);return 0; }
SSL_CTRL_SET_TLSEXT_HOSTNAME
SSL_CTRL_SET_TLSEXT_HOSTNAME
是 OpenSSL 中的一个宏,用于设置 TLS 扩展中的 Server Name Indication (SNI) 主机名。可以用下面的代码输出一下
SSL_CTRL_SET_TLSEXT_HOSTNAME
的值gcc test.c -o test -lcrypto -lssl
#include <openssl/ssl.h> #include <stdio.h>int main() {// 输出 SSL_CTRL_SET_TLSEXT_HOSTNAME 的值printf("SSL_CTRL_SET_TLSEXT_HOSTNAME 的值是: %d\n", SSL_CTRL_SET_TLSEXT_HOSTNAME);return 0; }
ngx_write_stderr("configure arguments:" NGX_CONFIGURE NGX_LINEFEED);
NGX_CONFIGURE
是一个宏,包含了编译 Nginx 时的配置参数这行代码会输出编译 Nginx 时用到的配置参数
例如:
NGX_CONFIGURE
在 objs\ngx_auto_config.h 中:
#define NGX_CONFIGURE " --sbin-path=/home/wsd/桌面/nginx/nginx --conf-path=/home/wsd/桌面/nginx/conf/nginx.conf --error-log-path=/home/wsd/桌面/nginx/LOG/error.log --http-log-path=/home/wsd/桌面/nginx/LOG/access.log --with-pcre --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module"
相关文章:
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_show_version_info函数
声明 在 nginx.c 开头 static void ngx_show_version_info(void); 实现 static void ngx_show_version_info(void) {ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);if (ngx_show_help) {ngx_write_stderr("Usage: nginx [-?hvVtTq] [-s s…...
LM Studio本地调用模型的方法
首先需要下载LM Studio,(LM Studio - Discover, download, and run local LLMs)安装好后,需要对index.js文件进行修改,主要是对相关源hugging face的地址修改。 以macOS为例: cd /Applications/LM\ Studi…...
Open3d Qt的环境配置
Open3d Qt的环境配置 一、概述二、操作流程2.1 下载文件2.2 新建文件夹2.3 环境变量设置2.4 qt6 引用3、qt中调用4、资源下载一、概述 目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。 二、操作流程 2.1 下载文件 访问open3d github链接,进入releas…...
数据结构——链表
引言 链表(Linked List)是计算机科学中最基础且灵活的数据结构之一。与数组的连续内存分配不同,链表通过指针将零散的内存块串联起来,允许动态调整数据规模,避免内存浪费。链表广泛应用于操作系统内核、数据库索引、动…...
数据结构 图
目录 前言 一,图的基本知识 二,图的表示法:边列表 三,图的表示方法:邻接矩阵 四,图的表示方法:邻接表 五,功能 总结 前言 图是一个非常有意思东西,可以运用到生活中…...
2025.2.8总结
题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 N,MN,M,表示该图共有 NN 个结点和 MM 条无向边。 接下来 MM 行每行包含三个整数 Xi,Yi,ZiXi,Yi,Zi&#…...
软件模拟I2C案例(寄存器实现)
引言 在经过前面对I2C基础知识的理解,对支持I2C通讯的EEPROM芯片M24C02的简单介绍以及涉及到的时序操作做了整理。接下来,我们就正式进入该案例的实现环节了。本次案例是基于寄存器开发方式通过软件模拟I2C通讯协议,然后去实现相关的需求。 阅…...
开源CodeGPT + DeepSeek-R1 是否可以替代商业付费代码辅助工具
开源CodeGPT + DeepSeek-R1 是否可以替代商业付费代码辅助工具 背景与研究目的 在快速发展的软件开发领域,代码辅助工具已成为提高开发效率和质量的关键。然而,商业付费工具如通义灵码和腾讯AI代码助手,尽管功能强大,但其高昂的成本和许可证限制,使得许多企业寻求更具吸…...
c++:list
1.list的使用 1.1构造 1.2迭代器遍历 (1)迭代器是算法和容器链接起来的桥梁 容器就是链表,顺序表等数据结构,他们有各自的特点,所以底层结构是不同的。在不用迭代器的前提下,如果我们的算法要作用在容器上…...
Websocket从原理到实战
引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它使得客户端和服务器之间能够进行实时、双向的通信,既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…...
探索robots.txt:网站管理者的搜索引擎指南
在数字时代,网站如同企业的在线名片,其内容和结构对搜索引擎的可见性至关重要。而在这背后,有一个默默工作的文件——robots.txt,它扮演着搜索引擎与网站之间沟通桥梁的角色。本文将深入探讨robots.txt的功能、编写方法及其在现代…...
ubuntu中如何在vscode的终端目录后显示(当前的git分支名) 实测有用
效果展示 配置过程: 在 Ubuntu 中,如果你想在 VS Code 的终端提示符后显示当前的 Git 分支名,可以通过修改 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)来实现。以下是具体步骤: 1. 确定使用的 Shell 首…...
0012—数组
存取一组数据,使用数组。 数组是一组相同类型元素的集合。 要存储1-10的数字,怎么存储? C语言中给了数组的定义:一组相同类型元素的集合。 创建一个空间创建一组数: 一、数组的定义 int arr[10] {1,2,3,4,5,6,7,8,…...
决策树算法相关文献
决策树是一种基于树状结构的机器学习算法,广泛应用于分类和回归任务。尽管决策树算法已经非常成熟,但研究者们仍在不断探索新的方法和技术,以进一步提升其性能、适应性和可解释性。 以下是当前研究者对决策树算法的最新研究方向和内容&#x…...
DeepSeek在FPGA/IC开发中的创新应用与未来潜力
随着人工智能技术的飞速发展,以DeepSeek为代表的大语言模型(LLM)正在逐步渗透到传统硬件开发领域。在FPGA(现场可编程门阵列)和IC(集成电路)开发这一技术密集型行业中,DeepSeek凭借其…...
学习threejs,使用Lensflare模拟镜头眩光
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Lensflare 二、&…...
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载:https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开,启动: 日志有报错: 点右侧m图标,maven有以下报误 &…...
kafka服务端之日志磁盘存储
文章目录 页缓存顺序写零拷贝 Kafka依赖于文件系统(更底层地来说就是磁盘)来存储和缓存消息 。 那么kafka是如何让自身在使用磁盘存储的情况下达到高性能的?接下来主要从3各方面详细解说。 页缓存 页缓存是操作系统实现的一种主要的磁盘缓存…...
deepseek来讲lua
Lua 是一种轻量级、高效、可嵌入的脚本语言,广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念: 1. 特点 轻量级:Lua 的核心非常小,适合嵌入到其他应用程序中。高效:Lua 的执…...
C++开发(软件开发)常见面试题
目录 1、C里指针和数组的区别 2、C中空指针请使用nullptr不要使用NULL 3、http/https区别和头部结构? 4、有了mac地址为什么还要ip地址?ip地址的作用 5、有了路由器为什么还要交换机? 6、面向对象三大特性 7、友元函数 8、大端小端 …...
AtCoder Beginner Contest 391(A~E题题解)
A - Lucky Direction 思路:纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…...
使用线性回归模型逼近目标模型 | PyTorch 深度学习实战
前一篇文章,计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 使用线性回归模型逼近目标模型 什么是回归什么是线性回归使用 PyTorch 实现线性回归模型代码执行结…...
解决com.kingbase8.util.KSQLException: This _connection has been closed.
问题描述 一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend.java.net.SocketTime…...
Pyqt 的QTableWidget组件
QTableWidget 是 PyQt6 中的一个表格控件,用于显示和编辑二维表格数据。它继承自 QTableView,提供了更简单的方式来处理表格数据,适合用于需要展示结构化数据的场景。 1. 常用方法 1.1 构造函数 QTableWidget(parent: QWidget None)&#x…...
DeepSeek R1 Distill Llama 70B(免费版)API使用详解
DeepSeek R1 Distill Llama 70B(免费版)API使用详解 在人工智能领域,随着技术的不断进步,各种新的模型和应用如雨后春笋般涌现。今天,我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…...
24.ppt:小李-图书策划方案【1】
目录 NO1234 NO5678 NO1234 新建PPT两种方式👇docx中视图→导航窗格→标题1/2/3ppt新建幻灯片→从大纲→重置开始→版式设计→主题插入→表格 NO5678 SmartArt演示方案:幻灯片放映→自定义幻灯片放映→新建→选中添加...
百科词条创建审核不通过的原因有哪些?
我们知道的国内有名的百科网站有百度百科、快懂百科、搜狗百科、360百科,这些有名的百科网站。一般来说,百科的词条排名都是在第一页的,无论是名人、明星、软件、影视名称,还是其他名称,大多排名都在首页,这就拥有了更多的曝光量和流量,而且由于百科是人们获取信息、查找资料的…...
amis组件crud使用踩坑
crud注意 过滤条件参数同步地址栏 默认 CRUD 会将过滤条件参数同步至浏览器地址栏中,比如搜索条件、当前页数,这也做的目的是刷新页面的时候还能进入之前的分页。 但也会导致地址栏中的参数数据合并到顶层的数据链中,例如:自动…...
【docker】Failed to allocate manager object, freezing:兼容兼容 cgroup v1 和 v2
参考大神让系统同时兼容 cgroup v1 和 v2 要解决你系统中只挂载了 cgroup v2 但需要兼容 cgroup v1 的问题,可以通过以下几步来使系统同时兼容 cgroup v1 和 cgroup v2。这样 Docker 和其他服务就可以正常工作了。步骤 1:更新 Grub 配置,启用兼容模式 编辑 GRUB 配置来启用同…...
LeetCode:503.下一个更大元素II
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:503.下一个更大元素II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[…...
【AI日记】25.02.08
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 探索 AI 应用探索周二有个面试,明后天打算好好准备一下,我打算主要研究下 AI 如何在该行业赋能和应用,以及该行业未来的发展前景和公司痛点&#…...
32. C 语言 安全函数( _s 尾缀)
本章目录 前言什么是安全函数?安全函数的特点主要的安全函数1. 字符串操作安全函数2. 格式化输出安全函数3. 内存操作安全函数4. 其他常用安全函数 安全函数实例示例 1:strcpy_s 和 strcat_s示例 2:memcpy_s示例 3:strtok_s 总结 …...
常用数据结构之String字符串
字符串 在Java编程语言中,字符可以使用基本数据类型char来保存,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 操作字符串常用的有三种类:String、StringBuilder、StringBuffer 接下来看看这三类常见用…...
Android开发获取缓存,删除缓存
Android开发获取缓存,删除缓存 app设置中往往有清理缓存的功能。会显示当前缓存时多少,然后可以点击清理缓存 直接上代码: object CacheHelper {/*** 获取缓存大小* param context* return* throws Exception*/JvmStaticfun getTotalCache…...
网络安全 | 保护智能家居和企业IoT设备的安全策略
网络安全 | 保护智能家居和企业IoT设备的安全策略 一、前言二、智能家居和企业 IoT 设备面临的安全威胁2.1 设备自身安全缺陷2.2 网络通信安全隐患2.3 数据隐私风险2.4 恶意软件和攻击手段 三、保护智能家居和企业 IoT 设备的安全策略3.1 设备安全设计与制造环节的考量3.2 网络…...
掌握API和控制点(从Java到JNI接口)_38 JNI从C调用Java函数 01
1. Why? 将控制点下移到下C/C层 对古典视角的反思 App接近User,所以App在整体架构里,是主导者,拥有控制权。所以, App是架构的控制点所在。Java函数调用C/C层函数,是合理的。 但是EIT造形告诉我们: App…...
vue组件间的数据传递:自定义输入组件(v-model/defineModel)
文章目录 引言I Vue 3.4 开始,推荐使用 defineModel() 宏子组件使用defineModel父组件用 v-model 绑定值底层机制II Vue 3.4之前:自定义输入组件(组件中实现 v-model )前置知识父组件监听自定义事件进行 v-model 的数据绑定子组件通过监听input事件触发自定义的 `update:mo…...
记录一下 在Mac下用pyinstallter 打包 Django项目
安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…...
大模型相关概念
文章目录 部署相关数据并行模型并行张量并行管道并行(流水线并行) 混合并行(数据并行模型并行)显存优化技术InfiniBand去中心化的All-Reduce操作软件 大模型命名**1. 模型架构相关****2. 模型用途相关****3. 训练方法相关****4. 多…...
【实用教程】在 Android Studio 中连接 MuMu 模拟器
MuMu 模拟器是一个非常流行的安卓模拟器,特别适合开发人员进行应用测试,我使用它的根本原因在于Android Studio自带的AVM实现是太难用了,但是Mumu模拟器启动以后不会自动被Android Studio识别到,但是其他模拟器都是能够正常被Andr…...
Linux 安装 Ollama
1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…...
双亲委派(JVM)
1.双亲委派 在 Java 中,双薪委派通常是指双亲委派模型,它是 Java 类加载器的一种工作模式,用于确保类加载的安全性和一致性。以下是其相关介绍: 定义与作用 定义:双亲委派模型要求除了顶层的启动类加载器外…...
青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要
青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括: 二、MVT模式三、官方网站四、内置功能数据库 ORM(对象关系映射)用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…...
为AI聊天工具添加一个知识系统 之90 详细设计之31 Derivation 之5-- 神经元变元用它衍生神经网络
本文要点 要点 Derivation 神经元变元衍生模型( 衍生 神经网络) 整体上说,它( Derivation)自己充当 整体无意识原型anestor的代言--作为所有神经网络的 共生环境。Derivation 初始断言了 基于最古老的 自然和逻辑树…...
Centos挂载镜像制作本地yum源,并补装图形界面
内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录,后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…...
【Python实战练习】Python类中的方法:形式与作用详解
文章目录 Python类中的方法:形式与作用详解1. 实例方法 (Instance Method)定义与使用作用2. 类方法 (Class Method)定义与使用作用3. 静态方法 (Static Method)定义与使用作用4. 特殊方法 (Magic/Dunder Methods)常见的特殊方法定义与使用作用5. 抽象方法 (Abstract Method)定…...
Idea 2024.3 使用CodeGPT插件整合Deepseek
哈喽,大家好,我是浮云,最近国产大模型Deepseek异常火爆,作为程序员我也试着玩了一下,首先作为简单的使用,大家进入官网,点击开始对话即可进行简单的聊天使用,点击获取手机app即可安装…...
神经网络常见激活函数 1-sigmoid函数
sigmoid 1 函数求导 sigmoid函数 σ ( x ) 1 1 e ( − x ) \sigma(x) \frac{1}{1e^{(-x)}} σ(x)1e(−x)1 sigmoid函数求导 d d x σ ( x ) d d x ( 1 1 e − x ) e − x ( 1 e − x ) 2 ( 1 e − x ) − 1 ( 1 e − x ) 2 1 1 e − x − 1 ( 1 e − x ) 2 …...
Vue(6)
一.路由板块封装 (1)路由的封装抽离 目标:将路由板块抽离出来 好处:拆分板块,利于维护 // 路由的使用步骤 5 2 // 5个基础步骤 // 1. 下载 v3.6.5 // 2. 引入 // 3. 安装注册 Vue.use(Vue插件) // 4. 创建路由对象…...
深入理解进程优先级
目录 引言 一、进程优先级基础 1.1 什么是进程优先级? 1.2 优先级与系统性能 二、查看进程信息 2.1 使用ps -l命令 2.2 PRI与NI的数学关系 三、深入理解Nice值 3.1 Nice值的特点 3.2 调整优先级实践 四、进程特性全景图 五、优化实践建议 结语 引言 在操…...