Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_options函数
声明
就在 main函数所在的 nginx.c 中:
static ngx_int_t ngx_get_options(int argc, char *const *argv);
实现
static ngx_int_t ngx_get_options(int argc, char *const *argv) {u_char *p;ngx_int_t i;for (i = 1; i < argc; i++) {p = (u_char *) argv[i];if (*p++ != '-') {ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]);return NGX_ERROR;}while (*p) {switch (*p++) {case '?':case 'h':ngx_show_version = 1;ngx_show_help = 1;break;case 'v':ngx_show_version = 1;break;case 'V':ngx_show_version = 1;ngx_show_configure = 1;break;case 't':ngx_test_config = 1;break;case 'T':ngx_test_config = 1;ngx_dump_config = 1;break;case 'q':ngx_quiet_mode = 1;break;case 'p':if (*p) {ngx_prefix = p;goto next;}if (argv[++i]) {ngx_prefix = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-p\" requires directory name");return NGX_ERROR;case 'e':if (*p) {ngx_error_log = p;} else if (argv[++i]) {ngx_error_log = (u_char *) argv[i];} else {ngx_log_stderr(0, "option \"-e\" requires file name");return NGX_ERROR;}if (ngx_strcmp(ngx_error_log, "stderr") == 0) {ngx_error_log = (u_char *) "";}goto next;case 'c':if (*p) {ngx_conf_file = p;goto next;}if (argv[++i]) {ngx_conf_file = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-c\" requires file name");return NGX_ERROR;case 'g':if (*p) {ngx_conf_params = p;goto next;}if (argv[++i]) {ngx_conf_params = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-g\" requires parameter");return NGX_ERROR;case 's':if (*p) {ngx_signal = (char *) p;} else if (argv[++i]) {ngx_signal = argv[i];} else {ngx_log_stderr(0, "option \"-s\" requires parameter");return NGX_ERROR;}if (ngx_strcmp(ngx_signal, "stop") == 0|| ngx_strcmp(ngx_signal, "quit") == 0|| ngx_strcmp(ngx_signal, "reopen") == 0|| ngx_strcmp(ngx_signal, "reload") == 0){ngx_process = NGX_PROCESS_SIGNALLER;goto next;}ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal);return NGX_ERROR;default:ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1));return NGX_ERROR;}}next:continue;}return NGX_OK; }
它的任务是解析用户在命令行中输入的参数。
static ngx_int_t ngx_get_options(int argc, char *const *argv)
static
:这个关键字表示这个函数只能在当前文件中使用,外面的文件不能直接调用它。
ngx_int_t
:这是一个自定义的整数类型,用来表示函数的返回值
argc
:表示命令行参数的个数,比如你输入了nginx -h -v
,那么argc
就是 3(包括程序名和两个参数)(和main
函数的argc
一致)。
argv
:是一个数组,存储了所有命令行参数的内容。(和main
函数的argv
一致)返回值:成功返回
NGX_OK
,失败返回NGX_ERROR
。
#define NGX_OK 0 #define NGX_ERROR -1
这2个宏的定义都在 ngx_core.h 中
{u_char *p;ngx_int_t i;
u_char
:这是一个无符号字符类型,用来存储单个字符。
p
:是一个指针,用来逐个检查命令行参数中的每个字符。
i
:是一个循环变量,用来遍历所有的命令行参数。
for (i = 1; i < argc; i++) {
这是一个循环,从
i = 1
开始,因为argv[0]
是程序名,我们从第一个参数开始检查。循环会一直进行,直到检查完所有的参数。
p = (u_char *) argv[i];
把当前参数的内容赋给指针
p
,这样就可以逐个字符检查这个参数了。
if (*p++ != '-') {ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]);return NGX_ERROR;}
检查参数的第一个字符是否是
-
,因为命令行参数通常以-
开头,比如-h
。如果不是
-
,就说明这个参数格式不对,打印错误信息,并返回错误码NGX_ERROR
。
ngx_log_stderr 函数
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_log_stderr 函数-CSDN博客
while (*p) {
这是一个循环,用来逐个字符检查参数的内容,直到遇到字符串的结尾(
*p
为\0
)。
switch (*p++) {
这是一个
switch
语句,用来根据当前字符的值执行不同的操作。
*p++
表示先取出当前字符的值,然后把指针p
移动到下一个字符。
case '?':case 'h':ngx_show_version = 1;ngx_show_help = 1;break;
如果当前字符是
?
或h
,就设置两个变量:
ngx_show_version
:表示要显示 Nginx 的版本信息。
ngx_show_help
:表示要显示帮助信息。
在 nginx.c 中定义了一些全局变量
static ngx_uint_t ngx_show_help; static ngx_uint_t ngx_show_version; static ngx_uint_t ngx_show_configure; static u_char *ngx_prefix; static u_char *ngx_error_log; static u_char *ngx_conf_file; static u_char *ngx_conf_params; static char *ngx_signal;static char **ngx_os_environ;
case 'v':ngx_show_version = 1;break;
如果当前字符是
v
,只设置ngx_show_version
,表示显示版本信息。case 'V':ngx_show_version = 1;ngx_show_configure = 1;break;
如果当前字符是
V
,设置两个变量:
ngx_show_version
:显示版本信息。
ngx_show_configure
:显示配置信息。case 't':ngx_test_config = 1;break;
如果当前字符是
t
,设置ngx_test_config
,表示要测试配置文件是否正确。
ngx_test_config 定义在
ngx_cycle.c 中ngx_uint_t ngx_test_config; ngx_uint_t ngx_dump_config; ngx_uint_t ngx_quiet_mode;
ngx_cycle.h 中 导入这个变量
extern ngx_uint_t ngx_test_config; extern ngx_uint_t ngx_dump_config; extern ngx_uint_t ngx_quiet_mode;
case 'T':ngx_test_config = 1;ngx_dump_config = 1;break;
如果当前字符是
T
,设置两个变量:
ngx_test_config
:测试配置文件。
ngx_dump_config
:显示配置文件的内容。case 'q':ngx_quiet_mode = 1;break;
如果当前字符是
q
,设置ngx_quiet_mode
,表示进入安静模式,减少日志输出。case 'p':if (*p) {ngx_prefix = p;goto next;}if (argv[++i]) {ngx_prefix = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-p\" requires directory name");return NGX_ERROR;
如果当前字符是
p
,表示用户想指定 Nginx 的工作目录。
如果
p
指针后面还有内容(比如-p/path/to/dir
),就把这个路径赋给ngx_prefix
。如果没有,就检查下一个参数(
argv[++i]
),把它赋给ngx_prefix
。如果都没有,说明用户没有提供目录名,打印错误信息并返回错误码。
goto next 继续检查下一项参数
case 'e':if (*p) {ngx_error_log = p;} else if (argv[++i]) {ngx_error_log = (u_char *) argv[i];} else {ngx_log_stderr(0, "option \"-e\" requires file name");return NGX_ERROR;}if (ngx_strcmp(ngx_error_log, "stderr") == 0) {ngx_error_log = (u_char *) "";}goto next;
如果当前字符是
e
,表示用户想指定错误日志文件的位置。
同样,先检查
p
指针后面的内容,或者下一个参数。如果没有提供文件名,打印错误信息并返回错误码。
如果用户指定的文件名是
stderr
,就设置ngx_error_log
为空字符串,表示把错误日志输出到标准错误流。case 'c':if (*p) {ngx_conf_file = p;goto next;}if (argv[++i]) {ngx_conf_file = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-c\" requires file name");return NGX_ERROR;
如果当前字符是
c
,表示用户想指定配置文件的位置。
检查
p
指针后面的内容,或者下一个参数。如果没有提供文件名,打印错误信息并返回错误码。
case 'g':if (*p) {ngx_conf_params = p;goto next;}if (argv[++i]) {ngx_conf_params = (u_char *) argv[i];goto next;}ngx_log_stderr(0, "option \"-g\" requires parameter");return NGX_ERROR;
如果当前字符是
g
,表示用户想指定配置参数。
检查
p
指针后面的内容,或者下一个参数。如果没有提供参数,打印错误信息并返回错误码。
case 's':if (*p) {ngx_signal = (char *) p;} else if (argv[++i]) {ngx_signal = argv[i];} else {ngx_log_stderr(0, "option \"-s\" requires parameter");return NGX_ERROR;}if (ngx_strcmp(ngx_signal, "stop") == 0|| ngx_strcmp(ngx_signal, "quit") == 0|| ngx_strcmp(ngx_signal, "reopen") == 0|| ngx_strcmp(ngx_signal, "reload") == 0){ngx_process = NGX_PROCESS_SIGNALLER;goto next;}ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal);return NGX_ERROR;
如果当前字符是
s
,表示用户想发送一个信号给 Nginx。
检查
p
指针后面的内容,或者下一个参数。如果没有提供信号名称,打印错误信息并返回错误码。
如果信号名称是
stop
、quit
、reopen
或reload
,设置ngx_process
为NGX_PROCESS_SIGNALLER
,表示要处理信号。如果信号名称不合法,打印错误信息并返回错误码。
default:ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1));return NGX_ERROR;
如果当前字符不是上面提到的任何一个,说明这是一个非法的选项,打印错误信息并返回错误码。
}}next:continue;}return NGX_OK;
如果一切正常,函数返回
NGX_OK
,表示参数解析成功。
相关文章:
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_options函数
声明 就在 main函数所在的 nginx.c 中: static ngx_int_t ngx_get_options(int argc, char *const *argv); 实现 static ngx_int_t ngx_get_options(int argc, char *const *argv) {u_char *p;ngx_int_t i;for (i 1; i < argc; i) {p (u_char *) argv[i]…...
TCP长连接、HTTP短轮询、HTTP长轮询、HTTP长连接、WebSocket的区别
1.TCP长连接 (1)概念:该连接属于传输层的协议。客户端和服务器之间建立连接后,不立即断开该连接,而是一直保持这个状态,以便后续数据的持续、连续传输。(2)应用场景:适合…...
在 Flownex 中创建自定义工作液
在这篇博文中,我们将了解如何在 Flownex 中为流网添加和定义一种新的流体温度相关工作材料。 Flownex 物料管理界面 在 Flownex 中使用与温度相关的流体材料时,了解其特性与温度的关系非常重要。这种了解可确保准确预测各种热条件下的流体行为࿰…...
基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【抽象代数】1.1. 运算及关系
集合与映射 定义1. 设 为 的子集,定义 到 的映射 : 使得 ,称 为 到 的嵌入映射。 定义2. 设 为 的子集, 为 到 的映射, 为 到 的映射,如果 ,称为的开拓, 为 的限制&…...
拥抱开源,助力创新:IBM永久免费云服务器助力开源项目腾飞
近年来,开源项目蓬勃发展,为全球科技进步做出了巨大贡献。然而,服务器成本高昂常常成为开源项目的巨大障碍。许多优秀的项目因缺乏资源而难以持续发展,甚至夭折。令人振奋的是,IBM云计算平台推出了一项重磅活动&#x…...
Windows Docker笔记-简介摘录
Docker是一个开源的容器化平台,可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,然后在任何安装的Docker的环境中快速、可靠地运行。 几个基本概念和优势: 1. 容器 容器是一个轻量级、独立的运行环境,包含了应用程…...
threejs 建筑设计(室内设计)软件 技术调研之五 墙体生成后自动生成房间(地面)
运用threejs 开发 建筑设计(室内设计)软件 技术调研 四 墙体添加真实门窗并保持原材质 在线体验地址:http://47.96.130.245:8080/design/index.html 实现功能: 墙体材质变换后,自动根据墙体的顶点生成相应的房间 视…...
C++:string类的模拟实现
目录 1.引言 2.C模拟实现 2.1模拟实现构造函数 1)直接构造 2)拷贝构造 2.2模拟实现析构函数 2.3模拟实现其他常规函数 1)c_str函数 2)size函数 3)begin/end函数 4)reserve函数 5)re…...
UE制作2d游戏
2d免费资产: Free 2D Game Assets - CraftPix.net 需要用到PaperZD插件 官网下载后启用即可 导入png素材 然后全选 - 创建Sprite 创建 人物基类 设置弹簧臂和相机 弹簧臂设置成旋转-90 , 取消碰撞测试 设置子类Sprite 拖到场景中 绑定设置输入映射,让角色移动跳跃 神似卡拉比…...
verilog练习:i2c slave 模块设计
文章目录 前言1. 结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了,网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总,如果对读者有…...
mysql的语句备份详解
使用mysqldump工具备份(适用于逻辑备份) mysqldump是 MySQL 自带的一个非常实用的逻辑备份工具,它可以将数据库中的数据和结构以 SQL 语句的形式导出到文件中。 1. 备份整个数据库 mysqldump -u [用户名] -p [数据库名] > [备份文件名].…...
BFS算法篇——广度优先搜索,探索未知的旅程(上)
文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索(BFS)是一种广泛应用于图论中的算法,常用于寻找最短路径、图的遍历等问题。与深度优先搜索(DFS&…...
短剧APP开发:短剧风口下的机遇
今年春节以来,各种精品短剧不断上线,短剧赛道热度持续上升,展现出了强大的经济效益,为影视市场提供了越来越多的机会。短剧的持续火爆也带动了短剧APP的发展,“短剧”迎来了爆发式增长,本文将探讨短剧APP开…...
PT2021K 单触控同步输出 IC
1. 产品概述 PT2021K 是一款电容式触摸控制 ASIC ,支持 1 通道触摸输入, 1 通道同步型开关输出。具有低 功耗、高抗干扰、宽工作电压范围、高穿透力的突出优势。 2. 主要特性 工作电压范围: 2.4~5.5V 待机电流约 9uAV DD 5V&…...
[论文笔记] Deepseek-R1R1-zero技术报告阅读
启发: 1、SFT&RL的训练数据使用CoT输出的格式,先思考再回答,大大提升模型的数学与推理能力。 2、RL训练使用群体相对策略优化(GRPO),奖励模型是规则驱动,准确性奖励和格式化奖励。 1. 总体概述 背景与目标 报告聚焦于利用强化学习(RL)提升大型语言模型(LLMs)…...
选择LabVIEW开发外协还是自己做开发?
在决定是否选择外协进行LabVIEW开发时,选择合适的外协团队是至关重要的。一个专业的外协团队不仅能提高项目的开发效率,还能帮助解决技术难题,确保项目的高质量交付。在选择团队时,以下几个方面值得特别注意: 1. 团…...
网络工程师 (20)计算机网络的概念
一、定义 计算机网络是指将地理位置不同、具有独立功能的多台计算机及其外部设备,通过通信线路及通信设备连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现信息传递和资源共享的计算机通信系统。 二、组成 资源子网&…...
RockyLinux9.4安装教程
Rocky Linux 9.4 安装教程 Rocky Linux 是由 CentOS 创始人 Gregory Kurtzer 发起的一个社区企业操作系统,旨在与 Red Hat Enterprise Linux (RHEL) 保持二进制兼容。本教程将详细介绍如何在您的系统上安装 Rocky Linux 9.4。 步骤 1: 下载 Rocky Linux 9.4 ISO 文件 打开 R…...
单片机之基本元器件的工作原理
一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件,具有单向导电性。 1. PN结形成 P型半导体:掺入三价元素,形成空穴作为多数载流子。N型半导体:掺入五价元素,形成自由电子作为多…...
TOTP实现Google Authenticator认证工具获取6位验证码
登录遇到Google认证怎么办? TOTP是什么?(Google Authenticator) TOTP(Time-based One-Time Password)是一种基于时间的一次性密码算法,主要用于双因素身份验证。其核心原理是通过共享密钥和时间同步生成动态密码,具体步骤如下: 共享密钥:服务端与客户端预先共享一个…...
114,【6】攻防世界 web wzsc_文件上传
进入靶场 传个桌面有的 直接空白了 我们 访问一下上传的东西 /index 没显示用于解析的.htaccess和.user.ini 文件,还两个都不显示 .htaccess 和 .user.ini 文件分别用于 Apache 服务器和 PHP-FPM 环境的目录级配置 但上传的时候bp查看状态码是200,…...
Rust unresolved import `crate::xxx` 报错解决
问题阐述 该问题出现在我使用actix编写的crud后端api中,我的后端结构如下: D:. | handle_err.rs | lib.rs | main.rs | ---application | mod.rs | user_service.rs | ---domain | dto.rs | mod.rs | user.rs | ---infrastru…...
dl学习笔记(9):pytorch数据处理的完整流程
1)自动导入常用库的设置方式 在开始之前,这里介绍一下自动导入常用的你需要加载的库的操作方式。 首先在我们的目录下找到ipython文件,如下图: 然后找到里面的startup文件: 然后新建一个文本文档,输入你每…...
结构化表达(三):归纳分组
目录 归纳分组 一、如何归纳分组 二、如何掌握更多模型 归纳分组 一、如何归纳分组 整理思路,多用分类模型,列如: 1、内部、外部分类。 2、市场营销学中的4P:产品、渠道、价格、促销。 3、战略3C:公司、客户、竞…...
BUU17 [RoarCTF 2019]Easy Calc1
自用 源代码 $(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success"><strong>答案:&l…...
openGauss 3.0 数据库在线实训课程2:学习客户端工具gsql的使用
openGauss数据库状态查看 前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 学习openGauss数据库客户端工具gsql的使用。 课程作业 gsql是openGauss提供在命令行下运行的数据库连接工具&am…...
mac环境下,ollama+deepseek+cherry studio+chatbox本地部署
春节期间,deepseek迅速火爆全网,然后回来上班,我就浅浅的学习一下,然后这里总结一下,我学习中,总结的一些知识点吧,分享给大家。具体的深度安装部署,这里不做赘述,因为网…...
C# SQlite使用流程
前言 不是 MySQL 用不起,而是 SQLite 更有性价比,绝大多数的应用 SQLite 都可以满足。 SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎,它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机…...
mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制
在 MySQL 8 的 C 源码中,表的最大字段数量限制体现在 MAX_FIELDS 宏定义中。这个宏定义了表中可以拥有的最大字段数量。 代码中的体现 在 mysql_prepare_create_table 函数中,有以下代码段检查表的字段数量是否超过最大限制: cpp if (alt…...
stable diffusion安装包与常用模型下载
本地安装包(直接借用秋叶大佬的包)🙏 1.最好用的 Forge 版整合包 网盘:https://pan.quark.cn/s/4e9459b17c94 解压密码:bilibili-秋葉aaaki 2.最好用的整合包! https://pan.baidu.com/s/1MjO3CpsIvTQID…...
Redis | 十大数据类型
文章目录 十大数据类型概述key操作命令数据类型命令及落地运用redis字符串(String)redis列表(List)redis哈希表(Hash)redis集合(Set)redis有序集合(ZSet / SortedSet&…...
19爬虫:使用playwright登录超级鹰
本次案例一共解决了如下两个问题: (1)如何使用playwright截图,特别是验证码图片 (2)在playwright中如何判断一个元素可见 1.截图 我们首先解决第一个问题,截图。如果前期接触过selenium的小伙…...
强化学习笔记6——异同策略、AC、等其他模型总结
异步两种方法:1:经验回放 2:数据动作非同时产生 举例QLearning为什么是异策略? 生成动作时e的概率从Q表选,1-e概况随机。 更新策略时,贪心策略选择Q_max作为动作。 策略优化两种主要方法:基于梯…...
【工具变量】上市公司企业渐进式创新程度及渐进式创新锁定数据(1991-2023年)
测算方式: 参考顶刊《经济研究》孙雅慧(2024)老师的做法,用当期创新和往期创新的内容重叠度作为衡量渐进式创新程度的合理指标。通过搜集海量专利摘要,测算当前专利申请和既有专利的内容相似度,反映企业在…...
高级测试工程师,在接口自动化方面,如何用AI提升?DeepSpeek回答
思考过程: 嗯,用户现在的问题是作为高级测试工程师,在接口自动化方面如何用AI来提升。首先,我需要回顾之前的对话历史,看看之前给过哪些建议。之前讨论过AI在测试中的核心应用场景,比如智能测试用例生成、自…...
每日一题——插入排序实现数据流中的中位数
插入排序实现数据流中的中位数 题目描述功能要求数据范围 解题思路算法流程 代码实现代码详解1. 全局变量2. Insert 函数3. GetMedian 函数 复杂度分析Insert 函数GetMedian 函数空间复杂度(整体) 注意事项 题目描述 设计一个算法,用来计算数…...
arcgis for js范围内天地图高亮,其余底图灰暗
在GIS地图开发中,有时我们需要突出显示某个特定区域,而将其他区域灰暗处理,以达到视觉上的对比效果。本文将介绍如何使用ArcGIS for JavaScript实现这一功能,具体效果为:在指定范围内,天地图高亮显示&#…...
【Unity】从父对象中获取子对象组件的方式
1.GetComponentInChildren 用于获取对与指定组件或游戏对象的任何子级相同的游戏对象上的组件类型的引用。 该方法在Unity脚本API的声明格式为: public T GetComponentInChildren(bool includeInactive false) includeInactive参数(可选)…...
code run使用vs2015工具链构建
"cpp": "cmd.exe /C \"\"D:\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x86 && cl.exe $fileName /Fe:$fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe\"" 效果如下: // hello#includ…...
matlab快速入门(2)-- 数据处理与可视化
MATLAB的数据处理 1. 数据导入与导出 (1) 从文件读取数据 Excel 文件:data readtable(data.xlsx); % 读取为表格(Table)CSV 文件:data readtable(data.csv); % 自动处理表头和分隔符文本文件:data load(data.t…...
UnityShader学习笔记——动态效果
——内容源自唐老狮的shader课程 目录 1.原理 2.Shader中内置的时间变量 3.Shader中经常会改变的数据 4.纹理动画 4.1.背景滚动 4.1.1.补充知识 4.1.2.基本原理 4.2.帧动画 4.2.1.基本原理 5.流动的2D河流 5.1.基本原理 5.2.关键步骤 5.3.补充知识 6.广告牌效果 …...
Docker Desktop安装到其他盘
Docker Desktop 默认安装到c盘,占用空间太大了,想给安装到其他盘,网上找了半天的都不对 正确安装命令: start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…...
详细教程 | 如何使用DolphinScheduler调度Flink实时任务
Apache DolphinScheduler 非常适用于实时数据处理场景,尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能,包括任务依赖管理、动态调度、实时监控和日志管理,能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…...
稻盛和夫如何描述能力
1. 能力的三要素 稻盛和夫认为,能力由以下三个核心要素组成: 知识(Knowledge):掌握的专业知识、技术技能和行业经验。 技能(Skill):将知识应用于实际工作的能力,包括解决…...
【LeetCode 刷题】贪心算法(4)-区间问题
此博客为《代码随想录》二叉树章节的学习笔记,主要内容为贪心算法区间问题的相关题目解析。 文章目录 55. 跳跃游戏45. 跳跃游戏 II452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间56. 合并区间 55. 跳跃游戏 题目链接 class Solution:def canJump…...
javaEE初阶————多线程初阶(3)
大家新年快乐呀,今天是第三期啦,大家前几期的内容掌握的怎么样啦? 1,线程死锁 1.1 构成死锁的场景 a)一个线程一把锁 这个在java中是不会发生的,因为我们之前讲的可重入机制,在其他语言中可…...
Deep Sleep 96小时:一场没有硝烟的科技保卫战
2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…...
【AI应用】免费的文本转语音工具:微软 Edge TTS 和 开源版 ChatTTS 对比
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 我试用了下Edge TTS,感觉还不错,不过它不支持克隆声音(比如自己的声音) 微软 Edge TTS 和 开源版 ChatTTS 都是免费的 文本转语音&…...
Deepseek-v3 / Dify api接入飞书机器人go程序
准备工作 开通了接收消息权限的飞书机器人,例如我希望用户跟飞书机器人私聊,就需要开通这个权限:读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret:http…...