Nginx基础详解3(nginx.conf核心代码讲解、常用命令解析、Nginx日志切割)

news2024/9/26 22:30:20

续Nginx基础详解2(首页解析过程、进程模型、处理Web请求机制、nginx.conf语法结构)-CSDN博客

目录

8.nginx.conf核心代码

8.1错误日志

8.1.1第一列:

8.1.2第二列:

8.1.3第三列:

8.2 #pid

8.3http模块(要点)

8.3.1include语句

8.3.1.1自定义文件的导入

8.3.1.2mime.type文件的查看,include导入该文件的原因

8.3.2access_log

8.3.3sendfile与tcp_nopush

8.3.4Keepalive_timeout

8.3.5gzip

8.4Server模块

8.4.1listen

8.4.2server_name

8.4.3location模块

8.4.3.1root

8.4.3.2index

8.4.4error_page

8.4.5location

8.4.6error_page下的root

8.5模块之间的关系和概括

8.5.1三个模块之间的关系

8.6实验,自己创建一个**.conf并且导入到nginx.conf文件中,**.conf文件必须包含至少两个网页,可以实现互相跳转

9.Nginx日志切割

9.1创建时间计划完成对日志的自动轮转


8.nginx.conf核心代码

        在上一节我们学到了Nginx分成的几个模块。类似于“洋葱模型”一样,一层一层的包裹住,下面我们进入nginx.conf进行代码的学习。

#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

上方代码为nginx的默认界面的代码,现在我们就可以对其核心代码进行讲解了

8.1错误日志

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

为了方便理解,我们按空格作为分隔符,将上面的代码分成三列

8.1.1第一列:

#error_log:

表示Nginx运行时的错误日志。我们在最初在生成Makefile文件前就已经写好了错误日志的存放位置,在Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)-CSDN博客这篇文章内的3.3.3章节中,我们有一段专门声明了错误日志的存放位置(如下图)。而nginx.conf将日志文件默认注释也是有原因的(如下代码块)

  1. 灵活性:默认配置允许用户根据自己的需求来设置日志路径。不同的部署环境可能有不同的日志存储策略。

  2. 安全性:避免在默认配置中写入具体的日志路径,可以防止在某些情况下日志被写入到不安全的位置。

  3. 简化配置:对于大多数用户来说,可能不需要立即自定义日志文件的位置,因此默认情况下不设置可以减少配置的复杂性。

  4. 避免冲突:在某些情况下,如果 Nginx 被安装在不同的环境或者由不同的包管理器安装,可能会有预设的日志路径。默认注释掉可以避免与这些预设路径发生冲突。

  5. 易于识别:当用户查看配置文件时,被注释掉的 error_log 指令可以作为一个明显的提示,告诉用户需要根据自己的环境来设置日志路径。

8.1.2第二列:

logs/error.log;

表示错误日志的存放位置。

  • logs:这是一个目录名,通常位于 Nginx 的安装目录下,用于存放日志文件。
  • error.log:这是日志文件的名称,用于记录 Nginx 运行时的错误信息。

如果想要更改错误日志的存放路径也是可以的

在 Nginx 的配置文件中,你可以这样设置错误日志的路径:】

绝对路径

error_log /var/log/nginx/error.log;

你看,这不就是和我们上述的手动配置的log-path=/var/log/nginx/error.log路径一样了吗? 
所以说某些步骤我们已经是配置好了的,这里再更改成上面的路径就是画蛇添足了

或者,如果你使用相对路径:

error_log logs/error.log;

8.1.3第三列:

notice

info 

notice和info代表着日志的级别,和Linux的进程一样,日志也是有级别的,级别越高出现的问题越严重

讲到这里,和同学们稍微普及一下日志的相关知识:

日志的级别共分为8个级别

  1. debug:最详细的日志级别,包括所有信息,用于调试目的。在生产环境中通常不推荐使用,因为它可能会产生大量的日志数据。

  2. info:记录一般信息,包括启动、配置加载、连接处理等信息。比 notice 级别更详细。

  3. notice:记录正常运行时的重要事件,如启动、关闭、配置错误等。

  4. warn:记录潜在的问题,但不一定影响服务的运行。这些信息表明可能需要注意或调查的问题。

  5. error:记录错误事件,这些事件可能会影响服务的运行,但服务通常仍能继续运行。

  6. crit:记录严重错误事件,这些事件可能会使服务无法正常运行。

  7. alert:记录需要立即采取行动的严重问题,如系统崩溃或严重的配置错误。

  8. emerg:记录紧急情况,如系统崩溃或严重的硬件故障。

        自上而下问题逐渐严重,但是记录逐渐变少,像emerg仅记录最严重的情况,而debug基本上所有的信息都会记录。

8.2 #pid

#pid        logs/nginx.pid;

#pid:表示声明了pid,后面就是pid的存储位置了

logs/nginx.pid;   :表示nginx的pid的存储位置,我们也是在配置的时候提前写过关于pid的配置路径。

我们可以进入该路径进行简单的查看

8.3http模块(要点)

因为http模块占了整个nginx.conf配置文件的大多数,所以我们现在先拣出来重要的几条进行讲解

8.3.1include语句

include语句用于导入其他配置文件,我们将写好的配置文件装载到计算机的某一路径下,使用

include 配置文件所在路径

8.3.1.1自定义文件的导入

例如:我在/usr/local/nginx/conf下写了一个zhangsan.conf的配置文件,在nginx.conf中对其进行导入,因为nginx.conf和zhangsan.conf都是在同一级的目录下,所以我们可以直接写成

include zhangsan.conf

自定义的文件进行导入时,需要注意的是

  • 配置文件必须是conf结尾
  • 配置文件的路径必须正确否则可能出现读不到的情况
  • 配置文件必须能让nginx有权限去读到
  • 用include的位置尽量在server的括号内
8.3.1.2mime.type文件的查看,include导入该文件的原因

        那么导入的mime.type文件里面有什么内容呢?为什么nginx的默认配置文件中没有将include mime.type注释掉呢?我们可以一起来瞧一瞧其中的内容

在/usr/local/nginx/conf下进行查看

cat mime.type

如下图

        我们发现有一个types的请求块,内部有我们需要请求的一些资源的类型,导入这个文件,就可以方便我们的nginx识别来自客户端的请求的类型(可以识别静态资源、动态资源,静态动态资源的分类我们上一篇已经讲过了)

        将这些种类写成一个配置文件进行导入,最大的一个好处就是最大限度地提高了nginx.con的可读性,因为我们后期如果频繁的查看nginx.conf的配置文件,写成一个包导入会很方便。大家可以用自己的centos虚拟机去看一眼mime.type中包含的资源类型,非常多,如果不使用include单独提取并导入的话那么nginx.conf就会又臭又长。 

8.3.2access_log

        该文件用于记录请求的数量,我们开启了一台服务器之后,nginx会接收来自客户机的请求,每接收一个,access_log文件都会被记录一次。

验证一下吧:

1.找到access_log记录的位置

vim /var/log/nginx/access.log

2.记住最后nginx接收请求的时间,一会要用

[23/Sep/2024:15:39:50...]

3.访问nginx服务器,在浏览器多刷新几次页面再来看这个文件

        我们发现时间改了!变成了【26/Sep/2024:18......】说明我们的access_log就是记录客户机请求的!实验成功!

        而上图中日志的格式又正好对应了nginx.conf中access_log上面的log_format文件!变量与实参之间是一一对应的。

  • $remote_addr:客户端的 IP 地址。
  • $remote_user:认证的用户名。
  • $time_local:本地时间。
  • $request:请求的完整原始行。
  • $status:请求的 HTTP 状态码。
  • $body_bytes_sent:发送给客户端的响应体的字节数。
  • $http_referer:HTTP referer 头部的值。
  • $http_user_agent:HTTP user-agent 头部的值。
  • $http_x_forwarded_for:HTTP x-forwarded-for 头部的值,通常用于记录原始请求的 IP 地址,当使用了代理或负载均衡器时。

8.3.3sendfile与tcp_nopush

        sendfile默认为on打开状态,表示文件传输打开“性能状态”文件的传输速率会提高。

        tcp_nopush默认为关闭状态,与sendfile相互配合,只有sendfile为打开状态时no_push才会起到相应的作用,表示为nginx发送数据包需累计到一定大小再发送,而具体的大小并没有一个固定的数据包大小阈值,因为它依赖于操作系统的内核行为。

        不需要理解的太深奥,总的来说,tcp_nopush 可以优化大文件的传输性能,通过累积一定量的数据再发送,减少网络传输的次数,从而提高效率。类比外卖点餐,外卖小哥会一次性从某个热门餐厅一次性取走他的外卖,而不是一个一个地去取,这样确实会提高效率。

8.3.4Keepalive_timeout

        客户端与nginx连接的超时时间我们使用Keepalive进行设置,默认状态下为0,但是在默认配置下还有一行Keepalive_timeout = 65是打开的。因为http本质是一种无状态协议,客户端发送请求的时候服务端会去相应,在连续的65s没有相应到请求的时候连接就会断开,如果客户端向Server发送了多个请求的话每个请求都需要独立的取进行连接、传输数据。Keepalived就会告诉Web服务器处理完一个连接之后保持打开Tcp连接(后面到吞吐量的地方还会讲一遍,这种方式也被称作长连接,会提高Web服务器的吞吐量)同一个连接在来请求的话就不需要再次创建连接了,客户端的请求会直传到相应的Web服务器上,好处就是节省了开销。如果不想使用长连接则可以将Keepalive_timeout = 65删除即可。

8.3.5gzip

gzip的好处就是对于接收的资源进行压缩,可以有效的节约服务器带宽的开销,缺点是打开该项之后也会消耗更多的Cpu性能

我对gzip的建议就是:

  • 如果你服务器的硬盘配置好、空间大就不用开;
  • 如果你的CPU核多、性能好、速度快也可以开。

反之就需要慎重考虑是否打开该选项了

8.4Server模块

8.4.1listen

        listen 指令告诉 Nginx 监听哪个端口的传入请求。这里,80 是 HTTP 默认端口,这意味着服务器将接受发送到这个端口的 HTTP 请求。        

8.4.2server_name

        server_name 指令用于指定服务器的域名。在这个例子中,localhost 表示服务器将响应来自本地主机的请求。通常,你会将这个值设置为你的域名,如 example.com

server可以填写的内容

  •         locolhost:当 server_name 设置为 localhost 时,它表示该虚拟主机仅响应来自本地主机的请求。
  •         ip地址:可以是自己的IP地址,也可以服务器的IP地址
  •         域名(已备案的,如果是自己做实验的域名那无所谓,但是需要改自己的本机hosts文件)

8.4.3location模块

        这一行开始了一个新的 location 块,它定义了服务器如何处理对根 URL (/) 的请求。

8.4.3.1root

        root 指令指定了文件服务的根目录。在这里,html 表示服务器将从当前 Nginx 配置目录下的 html 子目录中查找并提供文件。

8.4.3.2index

        index 指令定义了目录的默认首页文件。如果请求一个目录而不是一个具体的文件,Nginx 会查找并尝试提供这些文件。这里,index.htmlindex.htm 是列出的默认首页文件。

8.4.4error_page

        error_page 指令用于定义一组 HTTP 错误代码应该显示的自定义错误页面。在这个例子中,当出现 500(服务器内部错误)、502(网关错误)、503(服务不可用)和 504(网关超时)错误时,Nginx 会显示 /50x.html 这个错误页面。

8.4.5location

        这一行开始了一个新的 location 块,它专门用于配置 /50x.html 这个特定文件的请求。= 表示精确匹配,确保只有完全匹配 /50x.html 的请求才会应用这个块里的配置。

8.4.6error_page下的root

为了区别上面的root,我在这里特别写了是error_page下的root,注意不要混淆。

        root 指令指定了文件服务的根目录。在这里,html 表示 /50x.html 文件将从 Nginx 配置目录下的 html 子目录中提供。这意味着 Nginx 会从 html 目录中寻找 50x.html 文件并将其发送给客户端。

8.5模块之间的关系和概括

  1. http 模块

    • http 模块是 Nginx 配置的第二级模块,它位于 events 和 http 模块之间。
    • 它定义了全局性的 HTTP 相关的配置,如默认的文件根目录、日志路径、缓存设置等。
    • http 模块可以包含多个 server 模块,每个 server 模块定义了一个虚拟主机的配置。
  2. server 模块

    • server 模块是 Nginx 配置的第三级模块,它位于 http 模块之内。
    • 每个 server 模块定义了一个虚拟主机的配置,包括监听端口、服务器名称、安全设置、日志文件位置等。
    • 一个 http 模块可以包含多个 server 模块,每个 server 模块代表一个虚拟主机,可以有不同的域名或IP地址。
    • server 模块可以包含多个 location 模块,每个 location 模块定义了如何处理请求的特定部分。
  3. location 模块

    • location 模块是 Nginx 配置的第四级模块,它位于 server 模块之内。
    • location 模块定义了 URL 匹配规则和对应的处理配置,如代理设置、静态文件服务、重定向规则等。
    • 一个 server 模块可以包含多个 location 模块,每个 location 模块代表一组 URL 匹配规则。
    • location 模块可以精确匹配特定的路径,也可以使用正则表达式进行更复杂的匹配。

8.5.1三个模块之间的关系

  • http 模块是全局性的,它为所有 server 模块提供了一个基础的配置环境。
  • server 模块继承了 http 模块的配置,并且可以覆盖全局配置,或者添加针对特定虚拟主机的特定配置。
  • location 模块继承了 server 模块的配置,并且可以进一步细化处理请求的规则。
  • 当一个请求到达 Nginx 时,Nginx 会根据请求的域名和端口(由 server 模块定义)来确定使用哪个虚拟主机配置。
  • 然后,Nginx 会检查该 server 模块中的所有 location 模块,找到与请求 URL 匹配的规则,并应用相应的配置来处理请求。

        所以说,你想要创建一个虚拟主机,注意要创建在http的括号内,如果你想创建新的url,记住要在虚拟主机server的括号内。

8.6实验,自己创建一个**.conf并且导入到nginx.conf文件中,**.conf文件必须包含至少两个网页,可以实现互相跳转

        我在zhangsan.conf这个文件中书写了上述的内容并且将其include到了nginx.conf文件内,接下来我们来分析一下我写的zhangsan.conf文件吧

        listen:89,我取消了默认的80端口改为89端口,因为会与nginx中的server中的默认的80端口进行冲突,我在主机内添加了网页的编码格式charset utf-8,使之能够识别我的汉字,最后我将longnian.html作为了我的默认网页,而将/usr/local/nginx/html/index2.html作为了我路由的网页,这个网页需要我们手动的去自行的寻找。格式为

localhost本机IP地址:89/新的页面名称.html

在nginx.conf的server中我们不要忘记include zhangsan.conf将配置文件导入,否则都是空谈!

在sbin目录下不要忘记./nginx -t检查文件是否出错,否则都是空谈!

在sbin目录下不要忘记重新让nginx加载./nginx -s reload,否则都是空谈!        

做完上述三步我们开始验证:

        默认locolhost本机IP,弹出longnian.html页面成功,浏览器继续输入/index2.html弹出第二个页面也成功,实验结束。

9.Nginx日志切割

我们的nginx的日志默认都会保存在

/var/log/nginx(如下图)

保存到这里的原因还是我们之前写的配置文件中的那些内容(如下)

如果是这样的话就会存在一个非常重大的问题:

        日志文件如果我们不去动它的话它是只增不减的,所以我们如何去让日志保持在我们都能接受的一个范围内呢?既不会因为长时间不处理影响服务器的性能,也不会因为频繁的处理导致无法恢复?

        这就涉及到日志的切割(也叫做日志轮转)了,本质就是我们设置一个关于nginx访问日志和错误日志的定时计划,每到这个时间或者每隔一段时间,linux就会自动执行时间轮转的任务,清除几天前或者几个月前的日志,这样就会保证我们的服务器性能和空间。

        如何进行日志切割呢?

结合bash脚本可以完成!只需要设置一个时间节点自动执行bash脚本即可。在这里我给大家写了一个脚本,用于仅保存一周内的nginx脚本(如下)

#!/bin/bash

LOG_PATH="/var/log/nginx/"

RECORD_TIME=$(date --date="yesterday" +%Y-%m-%d_%H:%M)

PID=/var/run/nginx/nginx.pid

# 移动前一天的日志文件
mv "${LOG_PATH}/access.log" "${LOG_PATH}/access.${RECORD_TIME}.log"
mv "${LOG_PATH}/error.log" "${LOG_PATH}/error.${RECORD_TIME}.log"

# 向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 $(cat $PID)

# 删除7天前的日志文件
find "${LOG_PATH}" -name "access.*.log" -mtime +7 -exec rm -f {} \;
find "${LOG_PATH}" -name "error.*.log" -mtime +7 -exec rm -f {} \;

解释一下上述代码(如下):

  1. 定义日志路径

    LOG_PATH="/var/log/nginx/"

    这行代码定义了 Nginx 日志文件的存储路径。

  2. 获取昨天的日期和时间

    RECORD_TIME=$(date --date="yesterday" +%Y-%m-%d_%H:%M)

    这行代码使用 date 命令获取昨天的日期和时间,格式为 年-月-日_时:分。这个时间戳将用于日志文件的重命名。

  3. 定义 Nginx PID 文件路径

    PID=/var/run/nginx/nginx.pid

    这行代码指定了 Nginx 主进程 PID 文件的路径。

  4. 移动访问日志文件

    mv "${LOG_PATH}/access.log" "${LOG_PATH}/access.${RECORD_TIME}.log"

    这行代码将当前的访问日志文件 access.log 重命名为包含昨天日期时间的文件。

  5. 移动错误日志文件

    mv "${LOG_PATH}/error.log" "${LOG_PATH}/error.${RECORD_TIME}.log"

    这行代码将当前的错误日志文件 error.log 重命名为包含昨天日期时间的文件。

  6. 发送信号给 Nginx 以重新打开日志文件

    kill -USR1 $(cat $PID)

    这行代码首先读取 PID 文件中的进程 ID,然后向该进程发送 USR1 信号。Nginx 配置为在接收到 USR1 信号时,会重新打开日志文件,这允许新的日志条目写入新的文件,而旧的文件则保持不变。

  7. 删除7天前的访问日志文件

    find "${LOG_PATH}" -name "access.*.log" -mtime +7 -exec rm -f {} \;

    这行代码使用 find 命令搜索所有名为 access.*.log 的文件(匹配访问日志文件),这些文件的修改时间超过7天(-mtime +7),然后执行 rm -f 命令删除这些文件。

  8. 删除7天前的错误日志文件

    find "${LOG_PATH}" -name "error.*.log" -mtime +7 -exec rm -f {} \;

    这行代码与上一行类似,但是针对的是错误日志文件 error.*.log

大家首先完成的就是创建一个文件将代码粘贴进去,然后写一个crontab自动执行任务条件即可。

将其放入到nginx中的sbin目录下去,并且需要赋予执行权

chmod +x ***.sh

我们在sbin目录下手动进行运行一次

./***.sh

回到/var/log/nginx的日志文件进行验证

        我们发现多出来了两个文件,多出来的文件一个是access的日志文件而另一个则是error的日志文件。实验初步成功,那么如何让Linux系统自动进行这个实验的轮转呢?我们需要crontab创建时间计划

9.1创建时间计划完成对日志的自动轮转

        语法:

crontab -e

前提是centos中有crontab这个服务,否则需要使用yum下载服务,语法为
yum -y install crontabs

完成之后就进入了任务计划程序中了

输入

0 0 * * * /usr/local/nginx/sbin/***.sh

我们可以使用crontab -l查看我们配置的定时任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue引入js脚本问题记录(附解决办法)

目录 一、需求 二、import引入问题记录 三、解决方式 一、需求 我想在我的Vue项目中引入jquery.js和bootstrap.js这种脚本文件,但发现不能单纯的import引入,问题如下。 二、import引入问题记录 我直接这么引入,发现控制台报错TypeError: …

语义分割评价指标——95% Hausdorff距离

回顾以下95% Hausdorff距离的概念,一张比较经典直观的图: 一、 最快理解 max(d_XY, d_YX):取X>Y距离 和 Y>X距离的最大值。 其中 X>Y max min x>y :X所有点都和Y集合计算最小的距离,得到的距离集合再取最大值。 同理 Y>X m…

汽修行业:融合员工培训、知识库管理系统与SOP

随着汽车技术的飞速发展和消费者需求的日益多样化,汽修行业面临着前所未有的挑战与机遇。为了提升服务质量、增强竞争力,汽修企业必须重视员工培训、知识管理和作业标准化。本文旨在探讨如何构建一套集成汽修员工培训、知识库管理与SOP(标准作…

Leetcode - 周赛416

目录 一,3295. 举报垃圾信息 二,3296. 移山所需的最少秒数 三,3297. 统计重新排列后包含另一个字符串的子字符串数目 I 四,3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一,3295. 举报垃圾信息 本题就是…

首个端到端自动驾驶背景下对抗性训练研究

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:Module-wise Adaptive Adversarial Training for End-to-end Autonomous Driving 作者:Tianyuan Zhang, Lu Wang, Jiaqi Kang, Xinwei Zhang, Siyuan Liang,…

(done 意义不明的公式) 声音信号处理基础知识(10) (Demystifying the Fourier Transform: The Intuition)

参考:https://www.youtube.com/watch?vXQ45IgG6rJ4 就像棱镜可以把可见光分解为不同波长的光一样,FT 做的事情就是把复杂的声波转为不同频率的声波 FT 可以把时域信息转为频域信息 以下是对于 FT 的一些 intuition-level 的理解: 1.FT 会…

2.4K star的GOT-OCR2.0:端到端OCR 模型

GOT-OCR2.0是一款新一代的光学字符识别(OCR)技术,标志着人工智能在文本识别领域的重大进步。作为一款开源模型,GOT-OCR2.0不仅支持传统的文本和文档识别,还能够处理乐谱、图表以及复杂的数学公式,为用户提供…

如何使用ssm实现基于JavaWeb的个人健康信息管理系统

TOC ssm701基于JavaWeb的个人健康信息管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…

大模型如何赋能智慧城市新发展?

国家数据局近期发布的《数字中国发展报告(2023)》显示,我国数据要素市场化改革步伐进一步加快,数字经济规模持续壮大,数字技术应用场景不断拓展。这一成就的背后是数字技术广泛应用,数字技术不仅影响着老百…

12.系统架构分析师应该懂的项目管理知识

进度管理 进度管理就是采用科学的方法,确定进度目标,编制进度计划和资源供应计划,进行进度控制,在与质量、成本目标协调的基础上,实现工期目标。具体来说,包含以下过程: 活动定义:…

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代,智算中心作为人工智能和大数据技术的核心支撑设施,正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定,卓振思众动环监控应运而生,成为智算中心管理的重要组成部分…

小红书,努力成为小红书

【潮汐商业评论/原创】 Lisa作为时尚达人,小红书就是她成长路上的「电子闺蜜」,“想买衣服了,去小红书搜一下;晚饭不知道吃什么,去小红书搜搜看;最近我又小红书上在研究MBTI。” “离了小红书真是不能活&…

[笔记]数据结构

文章目录 堆排序215 数组中第k个最大元素 堆排序 堆排序方法对于记录数较少的文件并不值得提倡,但对n较大的文件还是有效 运行时间主要耗费在: 建立初始堆调整建立新堆 反复筛选 筛选算法进行的关键字比较次数至多为: 2 ( k − 1 ) 2(k-1)…

9.26作业

C 面试题 1,什么是虚函数?什么是纯虚函数? 虚函数:父子类中,在父类中的函数需要在子类中进行重写,重写后父子类空间中使用的都是重写后的函数,该函数就是虚函数,虚函数的声明需要在函数前加virtual。 纯虚函数&…

Trace纳米侦查无人机技术详解

纳米无人机,作为微型无人机的一种,通常指尺寸和重量都非常小的无人机,其重量一般不超过几百克,甚至更小。这类无人机由于体积小、重量轻,具备高度的隐蔽性和灵活性,在军事侦察、环境监测、搜救行动等领域具…

数值计算 --- 平方根倒数快速算法(上)

平方根倒数快速算法(上) --- 向Greg Walsh致敬&#xff01; 写在最前面 --- 一场关于平方根倒数快速算法作者的讨论&#xff1a; 上图中的这段代码出自一个早期的3D游戏<雷神之锤>的源代码&#xff0c;它实现的功能就是计算一个数x的平方根的倒数&#xff1a; 这段代码之…

如何投IEEE论文(Transactions on Cybernetics为例)

文章目录 0. 建议先看看投稿要求1.下载对应的论文模板2.进入提交论文信息的界面3.填写论文中必要的信息3.1 Article Type3.2 Upload Manuscript3.3 Title3.4 Abstract3.5 Authors3.6 Author Details3.7 Math Organizations3.8 Additional Information3.9 Final Review 终审 0. …

计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果

我们写这道题的时候需要俩变量接受&#xff0c;一个总数一个分母&#xff0c;我们发现分母变化是有规律的从1~100循环。 #include<stdio.h> int main() {int i 0;int tag 1;double sum 0.0;for (i 1; i < 101; i){if (i % 2 0){sum sum - 1.0 / i;}else{sum s…

实力!云起无垠荣获“创业邦2024年AIGC创新企业及产品创新”双奖

近日&#xff0c;国际创新生态服务平台创业邦郑重发布 “2024 年 AIGC 创新企业及产品创新榜单”。云起无垠凭借卓越的企业能力与突出的产品创新&#xff0c;成功入选 “2024 年 AIGC 创新企业 100 强” 以及 “2024 年 AIGC 产品创新 100 强”。 本次评选采用内部初审与外部专…

深入分析MySQL事务日志-Undo Log日志

文章目录 InnoDB事务日志-Undo Log日志2.1 Undo Log2.1.1 Undo Log与原子性2.1.2 Undo的存储格式1&#xff09;insert类型Undo Log2&#xff09;delete类型Undo Log3&#xff09;update类型Undo Log 2.1.3 Undo Log的工作原理2.1.4 Undo Log的系统参数2.1.5 Undo Log与Purge线程…