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

ngx_ssl_init

定义在 src\event\ngx_event_openssl.c 

ngx_int_t
ngx_ssl_init(ngx_log_t *log)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");return NGX_ERROR;}/** OPENSSL_init_ssl() may leave errors in the error queue* while returning success*/ERR_clear_error();#elseOPENSSL_config(NULL);SSL_library_init();SSL_load_error_strings();OpenSSL_add_all_algorithms();#endif#ifndef SSL_OP_NO_COMPRESSION{/** Disable gzip compression in OpenSSL prior to 1.0.0 version,* this saves about 522K per connection.*/int                  n;STACK_OF(SSL_COMP)  *ssl_comp_methods;ssl_comp_methods = SSL_COMP_get_compression_methods();n = sk_SSL_COMP_num(ssl_comp_methods);while (n--) {(void) sk_SSL_COMP_pop(ssl_comp_methods);}}
#endifngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_connection_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "SSL_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_server_conf_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_server_conf_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_session_cache_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_session_cache_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ticket_keys_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_ticket_keys_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ocsp_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_ocsp_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_next_certificate_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_next_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_name_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_name_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_stapling_index = X509_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_stapling_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}return NGX_OK;
}

这段代码是 Nginx 源码中用于初始化 OpenSSL 库的核心函数 ngx_ssl_init,其主要目的是为 Nginx 的 SSL/TLS 功能提供必要的初始化操作


ngx_int_t
ngx_ssl_init(ngx_log_t *log)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");return NGX_ERROR;}/** OPENSSL_init_ssl() may leave errors in the error queue* while returning success*/ERR_clear_error();

 此时

#if OPENSSL_VERSION_NUMBER >= 0x10100003L

成立

OpenSSL 版本号大于等于 0x10100003L(即 OpenSSL 1.1.0 及以上版本),使用 OPENSSL_init_ssl 函数进行初始化


OPENSSL_init_ssl

在 OpenSSL 1.1.0 及以上版本中,OPENSSL_init_ssl 函数的声明位于以下头文件中:

#include <openssl/ssl.h>

OPENSSL_init_ssl 是 OpenSSL 1.1.0 引入的一个函数,用于初始化 SSL/TLS 库。

它的主要作用是替代旧版本中多个独立的初始化函数(如 SSL_library_init、SSL_load_error_strings 等),提供一个统一的接口来完成 SSL/TLS 的初始化工作。

函数原型如下:

int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);

opts :

这是一个位掩码参数,用于指定初始化选项。



常见的选项包括:
OPENSSL_INIT_LOAD_CONFIG:加载 OpenSSL 配置文件(通常是 openssl.cnf)。
OPENSSL_INIT_LOAD_SSL_STRINGS:加载 SSL/TLS 相关的错误字符串。
OPENSSL_INIT_ADD_ALL_CIPHERS 和 OPENSSL_INIT_ADD_ALL_DIGESTS:注册所有加密算法和摘要算法。
OPENSSL_INIT_NO_LOAD_CONFIG:禁用配置文件加载。
更多选项可以参考 OpenSSL 文档。


settings :

这是一个指向 OPENSSL_INIT_SETTINGS 结构的指针,用于传递更高级的初始化设置。
在大多数情况下,可以传入 NULL,表示使用默认设置。


返回值
成功时返回 1。
失败时返回 0。



需要注意的是,即使 OPENSSL_init_ssl 返回成功,也可能在错误队列中留下未处理的错误信息。

因此,通常会在调用后清除错误队列:

ERR_clear_error();


    ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_connection_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "SSL_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_server_conf_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_server_conf_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_session_cache_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_session_cache_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ticket_keys_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_ticket_keys_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ocsp_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_ocsp_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_next_certificate_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_next_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_name_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_name_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_stapling_index = X509_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_stapling_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}

创建扩展索引 ,创建扩展数据索引,为 Nginx 的 SSL 相关结构分配扩展存储空间


return NGX_OK;

返回 NGX_OK

 

相关文章:

ngx_ssl_init

定义在 src\event\ngx_event_openssl.c ngx_int_t ngx_ssl_init(ngx_log_t *log) { #if OPENSSL_VERSION_NUMBER > 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed")…...

Roo Code(前身为 Roo Cline)一个 AI 驱动的自主编码代理

Roo Code&#xff08;前身为 Roo Cline&#xff09; Roo Code 是一个 AI 驱动的自主编码代理&#xff0c;它存在于您的编辑器中。它可以&#xff1a; 用自然语言沟通直接在您的工作区读写文件运行终端命令自动化浏览器操作与任何 OpenAI 兼容或自定义的 API/模型集成通过自定…...

每日一题洛谷P8649 [蓝桥杯 2017 省 B] k 倍区间c++

P8649 [蓝桥杯 2017 省 B] k 倍区间 - 洛谷 (luogu.com.cn) #include <iostream> #include <vector> using namespace std; #define int long long signed main() {int n, k;cin >> n >> k;vector<int> a(n 1);vector<int> sum(n 1);vec…...

CLion安装、配置及使用

目录 1 CLion是什么 2 CLion安装 3 系统环境变量配置 4 CLion配置 4.1 编辑器选择 4.2 编辑器配置 4.3 新建项目 5 总结 1 CLion是什么 CLion 是 JetBrains 推出的一款跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为 C 和 C 开发设计&#xff0c;支…...

UE5把动画导出为视频格式

UE5把动画导出为视频格式 步骤一 点击渲染视频或图片按钮旁边的三个圆点按钮 步骤二 点击渲染视频或图片按钮 步骤三 1是修改输出视频的帧率格式 2输出视频的路径 3点击等待视频渲染完成 以上是基本方法 最新的输出视频方法请看这位大佬的视频...

SQL语句(三)—— DQL

目录 基本语法 一、基础查询 1、查询多个字段 2、字段设置别名 3、去除重复记录 4、示例代码 二、条件查询 1、语法 2、条件列表常用的运算符 3、示例代码 三、分组查询 &#xff08;一&#xff09;聚合函数 1、介绍 2、常见的聚合函数 3、语法 4、示例代码 &…...

[2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——

前言 类型 太赫兹 + 全光开关 太赫兹 + 全光开关 太赫兹+全光开关 期刊 A C S P H O T O N...

第十九节课: python第四周课程:程序分支结构详解

程序分支结构 1. 单分支结构 语法结构&#xff1a; if <条件>:<代码块>执行逻辑&#xff1a; 条件为真时执行代码块类似自然语言中的"如果…则…" 应用案例&#xff1a; # 猜数字示例 guess eval(input("请输入数字&#xff1a;")) if …...

NSSCTF [HGAME 2023 week1]simple_shellcode

3488.[HGAME 2023 week1]simple_shellcode 手写read函数shellcode和orw [HGAME 2023 week1]simple_shellcode (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file vuln vuln: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpret…...

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称&#xff0c;Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下&#xff1a; featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…...

报考高校辅导员需要具备哪些条件?

报考高校辅导员通常需要具备以下条件&#xff1a; 基本条件 国籍与政治面貌&#xff1a;具有中华人民共和国国籍&#xff0c;一般要求是中共党员&#xff08;含预备党员&#xff09;。道德品质&#xff1a;遵守宪法和法律&#xff0c;具有良好的品行&#xff0c;作风正派&…...

什么是Stop The World

深入解析Stop-The-World&#xff08;STW&#xff09;&#xff1a;JVM垃圾回收的"世界暂停"现象 1. 什么是Stop-The-World&#xff08;STW&#xff09;&#xff1f; Stop-The-World&#xff08;STW&#xff09; 是JVM在执行垃圾回收&#xff08;GC&#xff09;时的一…...

Promise 详细说明、常用方法

Promise 详细说明 上一节&#xff1a;认识 Promise 1. 常用的几种方法 1.1 resolve 方法 resolve 方法作用&#xff1a;将一个普通的值转换成 Promise 类型的数据 方法的状态与结果受参数影响&#xff1a; 参数非 Promise 对象&#xff0c;将返回一个 Promise 对象&#xf…...

大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署与调用指南

一、说明简介 ‌DeepSeek Janus-Pro‌是一款先进的多模态理解和生成模型&#xff0c;旨在实现高质量的文本-图像生成与多模态理解。它是由DeepSeek团队研发的&#xff0c;是之前Janus模型的升级版&#xff0c;能够同时处理文本和图像&#xff0c;即可以理解图片内容&#xff0c…...

康托展开原理

康托展开&#xff08;Cantor Expansion&#xff09; 康托展开是一种用于排列唯一编码的方法&#xff0c;可以把一个排列转换成一个整数&#xff0c;并且能够从整数反向解析出原排列。主要用于排列的唯一表示、字典序排名、全排列生成等问题。 1. 康托展开公式 给定一个长度为…...

RESTful如何传递参数

文章目录 前言一、REST 遵循核心原则二、REST 的优点和缺点1.优点2.缺点 三、常见参数传递方式1&#xff09;路径参数&#xff08;Path Parameters&#xff09;2&#xff09;查询参数&#xff08;Query Parameters&#xff09;3&#xff09;请求体参数&#xff08;Request Body…...

Java 大视界 -- 基于 Java 的大数据机器学习模型在图像识别中的迁移学习与模型优化(173)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Pascal语言的贪心算法

贪心算法与Pascal语言 引言 在算法设计与分析中&#xff0c;贪心算法是一类重要的算法策略。它以一种直接而高效的方式解决问题&#xff0c;尤其适合那些可以通过局部最优解推导出全局最优解的问题。在本文中&#xff0c;我们将探讨贪心算法的基本概念、工作原理及其在Pascal…...

软件设计师之设计模式

设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…...

洛谷题单3-P1720 月落乌啼算钱(斐波那契数列)-python-流程图重构

题目描述 给定一个整数 N N N&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零&#xff08;参见样例 2&#xff09;。 输入格式 一个整数 N N N。 …...

WinForm真入门(5)——控件的基类Control

控件的基类–Control 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。无论要学习哪个控件的使用&#xff0c;都离不开这些基本成员&#xff0c;尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征…...

第一讲—函数的极限与连续(一)

思维导图 笔记 双曲正弦函数及其反函数...

开发一个项目的顺序

目录 1.设计表 2.写好pom.xml和application.yml文件 &#xff08;设置端口号&#xff0c;配置数据源&#xff09; 3.引入一个插件&#xff0c;帮助自动生成dao层&#xff0c;model层和mapper目录的代码 4.接着配置mybatis的扫描路径&#xff0c;产生这些文件后&#xff0c;…...

第P10周:Pytorch实现车牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一.导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…...

如何在 Windows 上安装 Python

Python是一种高级编程语言&#xff0c;由于其简单性、多功能性和广泛的应用范围而变得越来越流行。如何在 Windows 操作系统中安装 Python 的过程相对简单&#xff0c;只需几个简单的步骤。 本文旨在指导您完成在 Windows 计算机上下载和安装 Python 的过程。 如何在 Windows…...

探秘区块链开发:智能合约在 DApp 中的地位及与传统开发差异

从:引言:当我们谈论区块链开发时,实际在讨论什么?,我们已经能够知道,当我们在讨论区块链开发的时候,大多数时间里说的就是DApp开发。 那么DApp是由什么组成的呢?从上篇文章的特征中我们得出一个技术名词”智能合约“。这是DApp的一个重要特征,也是DApp的一个重要组成…...

react redux的学习,多个reducer

redux系列文章目录 第一章 简单学习redux,单个reducer 前言 前面我们学习到的是单reducer的使用&#xff1b;要知道redux是个很强大的状态存储库&#xff0c;可以支持多个reducer的使用。 combineReducers ‌combineReducers‌是Redux中的一个辅助函数&#xff0c;主要用于…...

SadTalker 数字人web网页版-不需要GPU也可以跑

数字人启动 Active code page: 65001 开始运行 Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] Commit hash: <none> Installing requirements for SadTalker WebUI (may take longer time in first time) Launching SadT…...

最少刷题数--二分+排序

1.考虑重复&#xff0c;题意是多的不超过少的&#xff0c;等于不算 2.所以中间的要二分判断 3.同时排序后要刷的题数也可能是pos-i&#xff0c;也可能是pos-i1&#xff0c;也要判断一下 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long lo…...

花卉识别分类系统,Python/resnet18/pytorch

花卉识别分类系统,Python/resnet18/pytorch 基于pytorch训练, resnet18网络&#xff0c;可用于训练其他分类问题&#xff0c;也可自己重新训练 共五种花卉&#xff1a;雏菊&#xff0c;蒲公英&#xff0c;玫瑰&#xff0c;向日葵&#xff0c;郁金香 标价包含GUI源码、数据集…...

基于 .NET 8 + Lucene.Net + 结巴分词实现全文检索与匹配度打分实战指南

文章目录 前言一、技术选型与优势1.1 技术栈介绍1.2 方案优势 二、环境搭建与配置2.1 安装 NuGet 包2.2 初始化核心组件 三、索引创建与文档管理3.1 构建索引3.2 动态更新策略 四、搜索与匹配度排序4.1 执行搜索4.2 自定义评分算法&#xff08;扩展&#xff09; 五、高级优化技…...

【图像处理基石】什么是neural style transfer?

1. 什么是neural style transfer? 神经风格迁移&#xff08;Neural Style Transfer&#xff09;是一种利用深度学习技术将一幅图像的风格&#xff08;如笔触、色彩、纹理等&#xff09;与另一幅图像的内容&#xff08;如物体、场景结构&#xff09;结合的方法。其核心思想是通…...

ubuntu20.04升级成ubuntu22.04

命令行 sudo do-release-upgrade 我是按提示输入y确认操作&#xff0c;也可以遇到配置文件冲突时建议选择N保留当前配置...

【C++奇遇记】C++中的进阶知识(继承(一))

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…...

SpringBoot异步任务实践指南:提升系统性能的利器

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在现代Web应用中&#xff0c;高并发场景下的响应速度和资源利用率是系统设计的重要考量。SpringBoot通过简洁的异步任务机制&#xff0c;帮助开发者轻松…...

Gson修仙指南:谷歌大法的佛系JSON渡劫手册

各位在代码世界打坐修行的道友们&#xff01;今天我们要参悟Google出品的JSON心法——Gson&#xff01;这货就像代码界的扫地僧&#xff0c;表面朴实无华&#xff0c;实则内力深厚&#xff0c;专治各种JSON不服&#xff01;准备好迎接"万物皆可JSON"的顿悟时刻了吗&a…...

MINIQMT学习课程Day8

获取qmt账号的资金账号后&#xff0c;我们进入下一步&#xff0c;如何获得当前账号的持仓情况 还是之前的步骤&#xff0c;打开qmt&#xff0c;选择独立交易&#xff0c; 之后使用pycharm&#xff0c;编写py文件。 from xtquant import xtdata from xtquant.xttrader import…...

spring-ai-alibaba第八章使用searxng构建大模型联网搜索应用

1、searxng安装配置 详见 anythingLLM结合searXNG实现联网搜索_anythingllm 配置 searxng-CSDN博客 2、本文介绍如何使用 Spring AI Alibaba 构建大模型联网搜索应用结合模块化 RAG&#xff08;Module RAG&#xff09;和信息检索服务&#xff08;SearXNG&#xff09;赋能大模…...

C#:is关键字

目录 is 关键字的核心是什么&#xff1f; 1. 什么是 is 关键字&#xff0c;为什么要用它&#xff1f; 2. 如何使用 is 关键字&#xff1f; 3. is 的作用和场景 4. is 与 as 的区别 5. 模式匹配的扩展&#xff08;C# 8.0&#xff09; 6. 常见陷阱和注意事项 总结&#x…...

SpringCloud第二篇:注册中心Eureka

注册中心的意义 注册中心 管理各种服务功能包括服务的注册、发现、熔断、负载、降级等&#xff0c;比如dubbo admin后台的各种功能。 有了注册中心&#xff0c;调用关系的变化&#xff0c;画几个简图来看一下。(了解源码可求求: 1791743380) 服务A调用服务B 有了注册中心之后&a…...

CSS语言的硬件驱动

CSS语言的硬件驱动探讨 引言 随着信息技术的迅猛发展&#xff0c;硬件和软件之间的交互愈发复杂&#xff0c;特别是在嵌入式系统、物联网设备等领域&#xff0c;硬件驱动程序的开发变得至关重要。而在众多编程语言中&#xff0c;CSS&#xff08;层叠样式表&#xff09;作为一…...

浅入浅出:从传统开发者角度去了解区块链和智能合约之间的关系

前言 在传统开发者视角:智能合约与区块链数据库探秘文中我为大家简单的讲解了DApp开发中智能合约开发和传统开发中数据存储层面的不同。而智能合约则是DApp中重要的组成部分,如同传统开发中的后端。 但是我们不要忘记的是:智能合约是应区块链而生的。 那么对于区块链来说…...

使用人工智能大模型DeepSeek,如何免费辅助教学?

今天我们学习DeepSeek工具如何辅助教学?DeepSeek功能很强大&#xff0c;带动人工智能快速发展&#xff0c;这里给DeepSeek点个赞。免费手把手学习视频地址&#xff1a;https://edu.csdn.net/learn/40402/666415 第一步&#xff0c;进入DeepSeek官网。打开google浏览器&#x…...

leetcode-代码随想录-链表-链表理论基础

链表&#xff1a; 通过指针串联在一起的线性结构&#xff1b;每个节点包含两部分&#xff1a;数据域、指针域&#xff08;存放下一个节点的指针&#xff09;入口节点&#xff1a;称为 头节点 head最后一个节点的指针指向 NULL&#xff08;空指针&#xff09; 链表的类型 1. 单…...

dify中配置使用Ktransformer模型

一共是两个框架一个是Ktransformer,一个是dify。 Ktransformer用来部署LLM,比如Deepseek,而LLm的应用框架平台Dify主要用来快速搭建基于LLM应用。 这篇教程主要是用来介绍两个框架的交互与对接的,不是部署Ktransformer也部署部署Dify,要部署Dify、Ktransformer可以直接参考…...

解释区块链技术的应用场景和优势

区块链技术是一种基于分布式账本的技术&#xff0c;被广泛应用于多个领域。以下是区块链技术的主要应用场景和优势&#xff1a; 应用场景&#xff1a; 金融领域&#xff1a;区块链可以用于支付结算、跨境汇款、智能合约等金融服务&#xff0c;提高交易效率和降低成本。物联网…...

明清两朝全方位对比

明清两朝是中国历史上最后两个封建王朝&#xff0c;在政治、经济、文化等方面存在显著差异&#xff0c;以下为主要区别&#xff1a; 一、政治制度 皇权集中程度 明朝&#xff1a;废除丞相制度&#xff0c;设内阁辅助皇帝&#xff0c;但中后期宦官专权&#xff08;如刘瑾、魏…...

Mysql的事务

事务的概念 简单的说事务就是一个连贯性任务,只有一起成功或者一起失败的说法。在mysql的事务中要么事务里的sql语句成功执行,其中有出错就回滚到事务开始时候的状态。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效事务的四大特性ACID 原子性(Atomicity):一件…...

chromium魔改——绕过无限debugger反调试

在进行以下操作之前&#xff0c;请确保已完成之前文章中提到的 源码拉取及编译 部分。 如果已顺利完成相关配置&#xff0c;即可继续执行后续操作。 在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段&#xff0c;用于防止他人通过开发者工具对网页进行调试或逆向…...

【力扣hot100题】(051)腐烂的橘子

我讨厌图论。 这道题写了特别久&#xff0c;不过好歹也是写出来了…… 方法是先将橘子全部遍历一遍&#xff0c;做两件事&#xff1a;①找出所有连通的橘子②找出所有腐烂的橘子&#xff0c;设置一个vector<queue<int>>&#xff0c;每个vector元素代表一片连通的…...