Nginx — Nginx处理Web请求机制解析
一、Nginx请求默认页面资源
1、配置文件详解
修改端口号为8080并重启服务:
二、Nginx进程模型
1、nginx常用命令解析
master进程:主进程(只有一个)
worker进程:工作进程(可以有多个,默认只有一个进程)
生命周期的原理:
信号: (操作人在执行以下指令操作的时候,master会转递给worker相关的信息让worker去进行相关的操作)
./nginx #开启nginx服务。
./nginx -s stop #暴力的关闭,如果后端有用户在连接如果用此命令会导致连接全部中断,如果发现有恶意攻击和黑客入侵的情况下可以用此命令。
./nginx -s stop #重新加载配置文件信息。
./nginx -s quit #优雅的关闭,如果后端有用户在连接会等待连接完成之后再去关闭,同时不会让新的请求访问进来(只针对http请求如果不是http请求时不行的)。
./nginx -t #检测配置文件的语法是否正确。
./nginx -v #查看当前的配置信息。
./nginx -V #显示详细信息,包括了nginx的版本、gcc版本、configure编译路径等。
./nginx -c #代表手动切换nginx的配置文件。
./nginx -h & ./nginx -h #显示nginx的帮助命令。
每个worker之间相对独立,如果某个worker收到黑客的攻击,那么运维人员只需要关闭相关的worker进程,如果某个worker进程不存在只需要master重新fork以下即可。
2、修改worker的进程数
三、Worker抢占机制
当client发起了请求之后client和worker之间会有一个护事锁(accept_mutex)服务端的众多worker会去抢这个锁,哪个worker抢到就由哪个worker来进行处理。
四、传统服务事件处理
假设一个client在进行请求的时候由worker1来进行处理,在处理的过程中用时比较长而且卡住了,客户端的请求就会被阻塞,假设在阻塞的过程中又有新的请求进来(假设client2、client3也同时连接到worker)要去处理。只有阻塞的请求处理完毕才回去处理client2、client3,所以master会去fork一个新worker进程。(在告并发情况下,这样的消耗会很大而且占用的资源会比较多)。
五、Nginx时间处理
假设一个client在进行请求的时候由worker1来进行处理,在处理的过程中用时比较长而且卡住了。对于Nginx而言是异步非阻塞的,如果发生阻塞同时又有新的请求进来那么worker会去处理下一个请求。用到的模型为epoll,(如果用到epoll那么一个worker进程可以处理6~8w的请求量,并且不会产生很多的开销),那么需要越高的并发量只需要增加服务器的配置就可以了(有钱解决)。
(一)Nginx的events模块支持的多种事件模型支持的模型
Nginx 的
events
模块主要用于配置 Nginx 如何处理连接,它提供了多种事件模型,以适应不同的操作系统和应用场景。下面为你详细介绍 Nginx 支持的主要事件模型:1.
select
模型
- 原理:
select
是一种较为传统的事件驱动模型,它通过对文件描述符集合进行轮询,检查是否有文件描述符处于可读、可写或异常状态。当有事件发生时,select
函数会返回发生事件的文件描述符数量,然后程序需要遍历文件描述符集合来确定具体是哪些文件描述符发生了事件。- 适用场景:适用于连接数较少的场景,因为
select
模型在处理大量连接时,轮询操作会带来较高的 CPU 开销,性能会显著下降。同时,select
模型对文件描述符数量有限制,通常最大为 1024。- 配置示例:
nginx
events {use select;worker_connections 1024; }
2.
poll
模型
- 原理:
poll
是对select
模型的改进,它同样采用轮询的方式检查文件描述符的状态,但poll
没有文件描述符数量的限制。poll
使用一个结构体数组来存储文件描述符和对应的事件,避免了select
对文件描述符数量的硬限制。- 适用场景:适用于连接数相对较多,但仍然不是非常大的场景。相比于
select
,poll
在处理大量连接时性能有所提升,但在处理超大量连接时,轮询操作仍然会带来较高的 CPU 开销。- 配置示例:
nginx
events {use poll;worker_connections 2048; }
3.
epoll
模型
- 原理:
epoll
是 Linux 内核为处理大批量文件描述符而作了改进的poll
,是 Linux 下多路复用 IO 接口select/poll
的增强版本。它采用事件驱动的方式,只关注那些有事件发生的文件描述符,避免了对所有文件描述符的轮询,从而提高了效率。epoll
使用内核和用户空间共享内存的方式,减少了数据的拷贝次数。- 适用场景:适用于 Linux 系统下处理大量并发连接的场景,是 Nginx 在 Linux 系统上的首选事件模型。
- 配置示例:
nginx
events {use epoll;worker_connections 65535; }
4.
kqueue
模型
- 原理:
kqueue
是 FreeBSD 系统上的一种高效事件通知机制,类似于 Linux 下的epoll
。它采用事件队列的方式,当有事件发生时,会将事件添加到队列中,程序可以从队列中获取发生事件的文件描述符。- 适用场景:适用于 FreeBSD 系统,在处理大量并发连接时性能较好。
- 配置示例:
nginx
events {use kqueue;worker_connections 65535; }
5.
rtsig
模型
- 原理:
rtsig
是基于实时信号实现的事件模型,它通过发送实时信号来通知程序有事件发生。- 适用场景:该模型在实际应用中使用较少,因为实时信号的处理有一些限制,并且性能不如
epoll
和kqueue
等模型。- 配置示例:
nginx
events {use rtsig;worker_connections 1024; }
6.
/dev/poll
模型
- 原理:
/dev/poll
是 Solaris 系统上的一种事件通知机制,它通过读取/dev/poll
设备文件来获取事件信息。- 适用场景:适用于 Solaris 系统,在该系统上可以提供较好的性能。
- 配置示例:
nginx
events {use /dev/poll;worker_connections 65535; }
自动选择模型
如果不指定
use
指令,Nginx 会根据操作系统自动选择最合适的事件模型。例如,在 Linux 系统上会优先选择epoll
模型,在 FreeBSD 系统上会优先选择kqueue
模型。示例如下:nginx
events {worker_connections 65535; }
在实际应用中,建议根据服务器的操作系统和具体的业务场景选择合适的事件模型,以提高 Nginx 的性能和稳定性。
(二)nginx默认的模型是
epoll
epoll
是 Linux 内核为处理大批量文件描述符而作了改进的poll
,是 Linux 下多路复用 IO 接口select/poll
的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。下面从几个方面详细介绍epoll
模型:基本概念
在网络编程中,服务器需要处理多个客户端的连接请求,传统的方法(如
select
和poll
)在处理大量连接时性能会下降。epoll
则通过事件驱动的方式,只关注那些有事件发生的文件描述符,避免了对所有文件描述符的轮询,从而提高了效率。工作原理
epoll
的工作流程主要分为三个步骤:
- 创建
epoll
实例:使用epoll_create
或epoll_create1
函数创建一个epoll
实例,它会返回一个文件描述符,后续的操作都基于这个描述符进行。- 注册事件:使用
epoll_ctl
函数向epoll
实例中添加、修改或删除需要监控的文件描述符以及对应的事件。例如,可以监控文件描述符的可读、可写等事件。- 等待事件发生:使用
epoll_wait
函数等待事件的发生。当有事件发生时,该函数会返回有事件发生的文件描述符列表,程序可以对这些文件描述符进行相应的处理。代码示例
以下是一个简单的使用
epoll
实现的 TCP 服务器示例代码:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/epoll.h> #include <unistd.h>#define MAX_EVENTS 10 #define BUF_SIZE 1024int main() {int listen_fd, epoll_fd;struct sockaddr_in server_addr;struct epoll_event ev, events[MAX_EVENTS];// 创建监听套接字listen_fd = socket(AF_INET, SOCK_STREAM, 0);if (listen_fd == -1) {perror("socket");return 1;}// 初始化服务器地址memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(8080);// 绑定地址if (bind(listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {perror("bind");close(listen_fd);return 1;}// 监听连接if (listen(listen_fd, SOMAXCONN) == -1) {perror("listen");close(listen_fd);return 1;}// 创建 epoll 实例epoll_fd = epoll_create1(0);if (epoll_fd == -1) {perror("epoll_create1");close(listen_fd);return 1;}// 将监听套接字添加到 epoll 实例中ev.events = EPOLLIN;ev.data.fd = listen_fd;if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, listen_fd, &ev) == -1) {perror("epoll_ctl: listen_fd");close(listen_fd);close(epoll_fd);return 1;}while (1) {int nfds = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);if (nfds == -1) {perror("epoll_wait");continue;}for (int i = 0; i < nfds; i++) {if (events[i].data.fd == listen_fd) {// 处理新的连接struct sockaddr_in client_addr;socklen_t client_addr_len = sizeof(client_addr);int conn_fd = accept(listen_fd, (struct sockaddr *)&client_addr, &client_addr_len);if (conn_fd == -1) {perror("accept");continue;}// 将新的连接添加到 epoll 实例中ev.events = EPOLLIN;ev.data.fd = conn_fd;if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, conn_fd, &ev) == -1) {perror("epoll_ctl: conn_fd");close(conn_fd);}} else {// 处理客户端数据char buf[BUF_SIZE];ssize_t n = read(events[i].data.fd, buf, BUF_SIZE);if (n <= 0) {// 客户端关闭连接close(events[i].data.fd);epoll_ctl(epoll_fd, EPOLL_CTL_DEL, events[i].data.fd, NULL);} else {// 回显数据给客户端write(events[i].data.fd, buf, n);}}}}// 关闭监听套接字和 epoll 实例close(listen_fd);close(epoll_fd);return 0; }
优点
- 高效处理大量连接:
epoll
使用事件驱动机制,只关注有事件发生的文件描述符,避免了select
和poll
对所有文件描述符的轮询,因此在处理大量并发连接时性能更优。- 内存拷贝优化:
epoll
使用内核和用户空间共享内存的方式,减少了数据的拷贝次数,提高了效率。- 水平触发和边缘触发模式:
epoll
支持水平触发(LT)和边缘触发(ET)两种模式,开发者可以根据具体需求选择合适的模式。缺点
- 平台依赖性:
epoll
是 Linux 特有的,在其他操作系统(如 Windows、macOS)上无法使用。- 实现复杂度较高:相比于
select
和poll
,epoll
的使用和实现相对复杂,需要开发者对其原理有深入的理解。
注:worker的进程要根据CPU实际情况来定不是越高越高,如果太高会造成请求访问卡顿。影响业务的正常运行。
epoll的配置
events {#默认使用epolluse epoll;#每个worker允许的客端最大连接数worker_connections 1024;
}
相关文章:
Nginx — Nginx处理Web请求机制解析
一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务: 二、Nginx进程模型 1、nginx常用命令解析 master进程:主进程(只有一个) worker进程:工作进程(可以有多个,默认只有一…...
GAN随手笔记
文章目录 1. description2. code 1. description 后续整理 GAN是生成对抗网络,主要由G生成器,D判别器组成,具体形式如下 D 判别器: G生成器: 2. code 部分源码,暂定,后续修改 import nump…...
Java 8 时区与历法处理指南:跨越全球的时间管理
Java 8 的 java.time API 不仅修复了旧版日期时间 API 的设计缺陷,还提供了对时区和多历法的全面支持。无论是处理全球化应用的时区转换,还是适配不同文化的日历系统,Java 8 都能轻松应对。本文将深入解析其核心功能,并提供实用代…...
【STM32】对stm32F103VET6指南者原理图详解(超详细)
目录 一、原理图基本概念二、STM32F103VET6 的主要特性二、MCU模块三、电源模块四、时钟模块五、复位模块NRST 六、GPIO模块LED 七、调试模块JTAG 八、外设模块UARTSPII2CADC 九、其它模块BOOT 一、原理图基本概念 原理图/电路图通常由硬件工程师使用Altium Designer/ KiCad / …...
瑞芯微RKRGA(librga)Buffer API 分析
一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中,有两组配置 buffer 的API: importbuffer 方式: importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式: wrapbuffer_virtualaddr wrapb…...
移动端六大语言速记:第1部分 - 基础语法与控制结构
移动端六大语言速记:第1部分 - 基础语法与控制结构 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构,帮助开发者快速理解各语言间的差异与共性。 1. 基础语法 1.1 数据类型 各语言的基本数据…...
Java 大视界 -- Java 大数据在智能金融区块链跨境支付与结算中的应用(154)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Python Playwright库全面详解
Playwright 是 Microsoft 开发的一个现代化的端到端测试和浏览器自动化库,支持 Chromium、WebKit 和 Firefox 浏览器。它提供了跨浏览器、跨平台的自动化能力,且具有高性能和可靠性。 一、核心特性 多浏览器支持: Chromium (Chrome, Edge)We…...
脑疾病分类的疑惑【6】:脑疾病分类比较适合使用具有哪些特点的模型?
脑疾病分类是一个复杂的任务,涉及医学影像、神经电生理信号、基因数据等多种信息类型。为了有效地进行脑疾病分类,选择合适的模型是至关重要的。以下是一些适合脑疾病分类的模型特点,您可以参考这些特点来选择合适的模型: 1. 深度…...
24_原型和原型链_this
目录 一、this关键字 修改this的指向 二、原型和原型链 三、创建对象 通过构造函数创建 (es5) 通过类创建 (es6) 四、浅拷贝和深拷贝 ctrlc 浅拷贝: 只拷贝一层 深拷贝: 可以拷贝多层 一、this关键字 每个函…...
自定义类型:结构体(1)
1.结构体回顾 结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.1结构的声明 struct tag {member-list; }variable-list;例如描述一个学生: struct Stu {char name[20];int age;char sex[5]; }; 1.2结构体变量的创…...
Java进阶——Lombok的使用
Lombok可以通过注解的方式,在编译时自动生成 getter、setter、构造函数、toString 等样板代码,从而减少代码的冗余,提高开发效率。本文深入讲解Lombok在实际开发中的使用。 本文目录 1. Lombok 依赖添加2. 常用Lombok注解及使用场景2.1 Gette…...
饿了么 bx-et 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 import requests bx_et re…...
python黑科技:无痛修改第三方库源码
需求不符合 很多时候,我们下载的 第三方库 是不会有需求不满足的情况,但也有极少的情况,第三方库 没有兼顾到需求,导致开发者无法实现相关功能。 如何通过一些操作将 第三方库 源码进行修改,是我们将要遇到的一个难点…...
PGD对抗样本生成算法实现(pytorch版)
PGD对抗样本生成算法 一、理论部分1.1 PGD 原理(1) 数学形式(2) 核心改进1.2 PGD 与其他攻击对比1.3 注意事项二、代码实现2.1 导包2.2 数据加载和处理2.3 网络构建2.4 模型加载2.5 生成对抗样本2.6 对抗测试2.7 启动攻击2.8 效果展示一、理论部分 1.1 PGD 原理 PGD 是 BIM/I-…...
小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行
以下是对 BackgroundTask::Schedule 函数代码的详细解释: void BackgroundTask::Schedule(std::function<void()> callback) {std::lock_guard<std::mutex> lock(mutex_);if (active_tasks_ > 30) {int free_sram heap_caps_get_free_size(MALLOC_…...
C++学习之路:深入理解变量
目录 编程的本质变量的本质内存模型、变量名与值以及地址的关系数据类型C数据类型数据类型别名数据类型转换 变量作用域总结 编程的本质 编程的本质是什么?虽然程序里能实现很多复杂的逻辑,但是从底层的硬件上来看,编程的本质就是数据的搬移。…...
前端基础知识汇总
目录 HTML5详解(结构层) 什么是HTML HTML基本结构 网页基本信息 图像标签 链接标签 超链接 行内元素与块元素 列表标签 表格标签 页面结构分析 iframe内联框架 表单语法 表单元素格式 表单的简单应用 表单初级验证 CSS详解(…...
2024蓝桥杯省赛C/C++大学B组 题解
文章目录 2024蓝桥杯省赛C/C大学B组A 握手问题(5分)B 小球反弹(5分)C 好数(10分)D R 格式(10分)E 宝石组合(15分)F 数字接龙(15分)G 爬…...
BIM/I-FGSM对抗样本生成算法实现(pytorch版)
BIM/I-FGSM对抗样本生成算法 一、理论部分1.1 核心思想1.2 数学形式1.3 BIM 的优缺点1.4 BIM 与 FGSM、PGD 的关系1.5 实际应用建议二、代码实现2.1 导包2.2 数据加载和处理2.3 网络构建2.4 模型加载2.5 生成对抗样本2.6 攻击测试2.7 启动攻击2.8 效果展示一、理论部分 1.1 核心…...
前沿科技:从Gen2到Gen3—Kinova轻型机械臂的技术升级路径
Kinova品牌在轻型机械臂行业中以其轻量化、灵活性和高精度的技术特点而知名。其产品线广泛适用于医疗、科研和工业等多个领域,对机器人技术的进步起到了积极的推动作用。Kinova轻型机械臂凭借其精良的设计和稳定的性能,为用户提供了高效且可靠的解决方案…...
智研咨询:2025DeepSeek技术全景解析重塑全球AI生态的中国力量|附下载方法
导 读INTRODUCTION 随着人工智能技术的飞速发展,AI大模型已成为推动行业进步的重要力量。智研咨询最新发布的《DeepSeek技术全景解析重塑全球AI生态的中国力量》报告,深入探讨了DeepSeek公司在AI领域的突破性成就及其对全球AI生态的深远影响。 如果感兴…...
超导量子计算机编程实战:IBM Qiskit 2025新API详解
一、量子计算平台演进与Qiskit 2025定位 1.1 IBM量子硬件发展路线 2025年IBM将实现三大技术突破: 量子体积:新一代"Goldeneye"处理器达到QV 8192相干时间:超导量子比特寿命突破500μs互联规模:模块化架构支持万级量子…...
斐波那契数列----C语言
关于斐波那契 已知: 问题背景:一对兔子从第3个月开始每月生一对新兔子,新兔子同样在第3个月开始繁殖。 关键观察: 第1个月:1对(初始兔子)。 第2个月:1对(未成熟&#…...
打开pycharm显示编制索引后卡死
若项目中包含过多文件,PyCharm 启动后会进行自动索引,电脑性能不高时往往会导致崩溃(主要是内存问题)。以下为解决措施。 ✅ 1. 仅索引代码,排除文件 设置PyCharm 主要索引代码文件(.py、.ipynbÿ…...
AWS云安全全面详解:从基础防护到高级威胁应对
随着企业加速向云端迁移,AWS作为全球最大的云服务提供商之一,其安全性成为用户首要关注的问题。本文将深入剖析AWS云安全架构,从基础防护到高级威胁应对,帮助您构建全方位的云安全防线。 一、AWS安全责任共担模型 在深入探讨AWS具体安全措施前,首先需要理解AWS的安全责任…...
【C++重点】虚函数与多态
在 C 中,虚函数是实现多态的基础。多态是面向对象编程的重要特性之一,允许程序在运行时决定调用哪一个函数版本。通过虚函数,我们能够实现动态绑定,使得不同类型的对象可以通过相同的接口进行操作。 1 静态绑定与动态绑定 静态绑…...
算法学习之BFS
关于BFS我的理解是根据离我们当前这个点的权重来移动,这里权重也可以理解为离这个点的距离, 从起点开始,往前走一步,记录下所有第一步能走到的点开始,然后从所有第一部能走到的点开始向前走第二步,重复下去…...
每日小积累day1
网络: g是用来检测网络联通性的的诊断工具,使用的协议是ICMP 显示数据包括 ICMP数据:序列号,存活时间(TTL) 目标主机域名IP 往返时间(RTT) 统计数据(平均RTT等等&a…...
【NLP】13. NLP推理方法详解 --- 穷举和贪心搜索
NLP推理方法详解 — 穷举和贪心搜索 在自然语言处理(NLP)任务中,推理(Inference)是指在给定模型的情况下,找到最可能的输出序列。由于模型通常是神经网络,它会为每个可能的输出分配一个概率&am…...
基于 Python 深度学习 lstm 算法的电影评论情感分析可视化系统(2.0 系统全新升级,已获高分通过)
大家好,欢迎来到我的技术专栏!今天我将和大家聊聊如何利用 Python 的深度学习技术,打造一个集电影评论情感分析与可视化展示于一体的系统。这个系统不仅能自动采集和解析海量影评,还能实时生成直观的情感趋势图表,对于…...
妙用《甄嬛传》中的选妃来记忆概率论中的乘法公式
强烈推荐最近在看的不错的B站概率论课程 《概率统计》正课,零废话,超精讲!【孔祥仁】 《概率统计》正课,零废话,超精讲!【孔祥仁】_哔哩哔哩_bilibili 其中概率论中的乘法公式,老师用了《甄嬛传…...
linux--------------进程控制
1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值:⾃进程中返回0,⽗进程返回⼦进程id…...
Video Transformer Network
目录 摘要 Abstract VTN 背景 模型框架 视频特征提取 时空位置编码 Transformer编码器 任务特定头 关键创新 实验 代码 总结 摘要 Video Transformer Network 是基于Transformer架构改进的视频理解模型,旨在解决传统3D卷积神经网络在长距离依赖建模和…...
Java网络编程演进:从NIO到Netty的UDP实践全解析
前言 在当前高并发、大数据量的互联网环境下,高性能的网络通信框架变得越来越重要。本文将深入探讨Java网络编程的演进,从NIO到Netty,并通过实际案例分析Netty的优势和应用。(本次主要以UDP请求为例) Java网络编程演…...
Linux系统中快速安装docker
1 查看是否安装docker 要检查Ubuntu是否安装了Docker,可以使用以下几种方法: 方法1:使用 docker --version 命令 docker --version如果Docker已安装,输出会显示Docker的版本信息,例如: Docker version …...
人工智能之数学基础:幂法和反幂法求特征值和特征向量
本文重点 特征值和特征向量是矩阵的重要性质,我们前面学习了矩阵的正交分解,要想完成正交分解需要求出一个矩阵的特征值和特征向量。有的时候,我们只需要求出一个矩阵的最大的特征值以及矩阵的最小特征值,它们以及它们对应的特征向量具有特殊的含义,下面我们介绍两种方法…...
数据结构 -- 树的应用(哈夫曼树和并查集)
树的应用 哈夫曼树 带权路径长度 结点的权:有某种现实含义的数值(如:表示结点的重要性等) 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积 树的带权路径…...
游戏引擎学习第193天
仓库:https://gitee.com/mrxiao_com/2d_game_4 回顾 我们昨天做了一些非常有趣的实验。在实验中,我们的目标是实现一个能够在运行时改变的编译时常量的概念。最开始,这个想法纯粹是出于一时的兴趣,觉得这应该是个很有意思的尝试。于是我们进…...
数据结构每日一题day7(顺序表)★★★★★
题目描述:从顺序表中删除其值在给定值s与t之间(包含s和 t,要求 s<t)的所有元素,若s或t不合理或顺序表为空,则返回 false,若执行成功则返回 true。 算法思想: 输入检查:若顺序表为空、指针为…...
ACM模式常用方法总结(Java篇)
文章目录 一、ACM输入输出模式二、重要语法2.1、导包2.2、读取数据2.3、判断是否有下一个数据2.4、输出2.5、关闭scanner2.6、易踩坑点 一、ACM输入输出模式 在力扣上编写代码时使用的是核心代码模式,如果在面试中遇到ACM模式就会比较迷茫?ACM模式要求你…...
SpringCould微服务架构之Docker(6)
容器的基本命令: 1. docker exec :进入容器执行命令 2. docker logs: -f 持续查看容器的运行日志 3. docker ps:查看所有运行的容器和状态 案例:创建运行一个容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…...
脑疾病分类的疑惑【7】一般FMRI数据都存储为什么格式?能不能给我用数据简单的描述一下FMRI是如何存储的?
fMRI 数据通常以 NIfTI(Neuroimaging Informatics Technology Initiative) 格式存储,这是一种专为神经影像设计的开放标准格式。以下是简化说明和示例: 1. 常见fMRI数据格式 格式扩展名特点NIfTI.nii 或 .nii.gz最常用࿰…...
DOM 加载函数
DOM 加载函数 在Web开发中,DOM(文档对象模型)加载函数是一个核心概念。它指的是在页面加载过程中,浏览器如何处理和解析HTML文档,并创建相应的DOM树。本文将深入探讨DOM加载函数的作用、原理及其在Web开发中的应用。 引言 随着互联网的飞速发展,Web技术日新月异。DOM作…...
[特殊字符]《Curve DAO 系统学习目录》
本教程旨在系统学习 Curve DAO 项目的整体架构、核心机制、合约设计、治理逻辑与代币经济等内容,帮助开发者全面理解其设计理念及运作方式。 目录总览: 1. Curve 项目概览 • 1.1 Curve 是什么?主要解决什么问题? • 1.2 与其他…...
webpack和vite之间的区别
Webpack 和 Vite 都是现代前端开发中非常流行的构建工具,但它们的设计理念、工作原理以及适用场景都有所不同。以下是两者之间详细的对比说明: 1. 构建机制与速度 Webpack: Webpack 是一个通用的模块打包工具,它通过分析项目中的依赖关系图来…...
《Operating System Concepts》阅读笔记:p495-p511
《Operating System Concepts》学习第 44 天,p495-p511 总结,总计 17 页。 一、技术总结 1.cache (1)定义 A cache is a region of fast memory that holds copies of data. (2)cache 和 buffer 的区别 The difference between a buffer and a cac…...
Java进阶——位运算
位运算直接操作二进制位,在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。 本文目录 一、位运算简介1. 与运算2. 或运算异或运算取反运算左移运算右移运算无符号右移运算 二、位运算的实际应用1. 权限管理2. 交换两个变…...
特征增强金字塔FPN
特征增强金字塔FPN 利用 ConvNet 特征层次结构的金字塔形状,构建一个在所有尺度上都具有强大语义的特征金字塔 总结:特征金字塔是检测不同尺度物体的识别系统中的基本组成部分。 1.利用深度卷积网络固有的多尺度、金字塔层次结构,以边际额…...
Java课程设计(双人对战游戏)持续更新......
少废话,当然借助了ai,就这么个实力,后续会逐渐完善...... 考虑添加以下功能: 选将,选图,技能,天赋,道具,防反,反重力,物理反弹,击落…...