从0开始搭建个人博客《第十一期:优化网站访问速度》

news2024/11/25 22:46:41

目录

一、背景说明

二、Nginx性能优化

(一)文件句柄

        1.系统全局性修改和用户局部性修改

        2.进程局部性修改

(二)CPU亲和配置

        1.设置工作进程数

        2.设置连接数

(三)事件处理模型优化

(四)设置会话保持时间

(五)开启Gzip压缩

        1.安装Gzip模块

        2.配置Gzip模块

        3.判断Gzip压缩是否开启成功

(六)开启高效文件传输模式

(七)使用HTTP/2协议

        1.安装HTTP2模块

        2.配置HTTP2模块

        3.验证是否开启成功

(八)缓存策略配置

        1. 浏览器缓存

​编辑        2. Nginx 本地缓存

(九)日志配置优化

        1. 调整nginx输出日志的级别

        2. 优化日志写入规则

三、搭建免费的CDN加速

(一)免费CDN介绍

        1.FreeCDN

        2.Procdn

        3.cloudflare

(二)搭建过程

(三)完善配置

(四)验证是否成功开启

四、网站优化后的效果

五、其他优化建议

(一)数据库表增加索引

(二)对图片进行压缩上传

(三)提高服务器配置

六、结语


一、背景说明

        网站上线后,受限于服务器配置和网络带宽等因素,致使用户每次访问网站首页,加载速度都非常的慢。尤其是首页如果需要加载大量图片和文件资源进行页面渲染时,这种卡顿感就会无限放大,如下图所示,加载时间最长的图片,都需要近16秒,平均6~7秒,这是不能够接受的。

        如果不进行优化,则会降低访问者的浏览体验,最终导致网站访问量的流失。那么如何在有限的资源条件下,做到最极致的优化呢?本文将从多个方面进行实践和验证,最终实现网站访问速度的提高。

二、Nginx性能优化

(一)文件句柄

        在linux或Unix系统上,一切皆文件,每一次用户发起请求就会生成一个文件句柄,文件句柄可以理解为就是一个索引。随着请求量的增多,进程调用的频率增加,文件句柄的产生就越多。系统对文件句柄默认的限制是1024个,对Nginx来说非常小了,需要改大一点,设置方式有以下几种。

        1.系统全局性修改和用户局部性修改

        输入以下命令,打开用于设置Linux系统中用户和进程的资源限制的配置文件。‌这个文件允许系统管理员设定用户和进程的资源使用限制,‌包括打开文件的数量、‌线程数和内存用量等。‌

vim /etc/security/limits.conf

        在文件末尾添加以下4个参数配置。

root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

        参数说明:

        soft:软控制,到达设定值后,操作系统不会采取措施,只是发提醒

        hard:硬控制,到达设定值后,操作系统会采取机制对当前进程进行限制,这个时候请求就会受到影响

        root:这里代表root用户(系统全局性修改)

        *:代表全局,即所有用户都受此限制(用户局部性修改)

        nofile:指限制的是文件数的配置项。后面的数字即设定的值,一般设置10000左右

        ps:这个地方应该根据实际情况进行设置,可以设置全局的,也可以设置用户级别的

        2.进程局部性修改

        使用以下命令,查看系统打开文件的最大数量限制。

ulimit -n

        接着打开nginx配置文件。

vim /usr/local/nginx/conf/nginx.conf

        在配置文件中添加以下配置项,设置每个进程的最大文件打开数。这个参数对于Nginx的性能优化至关重要,‌因为它直接影响到Nginx能够处理的文件句柄数量,‌进而影响其并发处理能力,最好与ulimit -n查出的值保持一致,以确保Nginx能够充分利用系统资源。‌

worker_rlimit_nofile 65535; #进程限制

(二)CPU亲和配置

        cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上去。这能够减少在work间不断切换cpu,使得进程通常不会在处理器之间频繁迁移,进程迁移的频率小,以此来减少性能损耗。

在这里插入图片描述

        1.设置工作进程数

        Nginx运行工作进程个数一般设置CPU的核心或者核心数x2,输入以下命令可查询服务器的cpu数量和核心数。

lscpu | grep '^CPU(s):'   #获取逻辑CPU数量
nproc   #获取CPU的逻辑核心总数

        工作进程数worker_processes最多开启8个,8个以上性能提升就有限了,而且稳定性变得更低,所以8个进程够用了,核心数和对应配置如下:

        2核:

worker_processes 2; #工作进程数
worker_cpu_affinity 01 10;  #指定每个工作进程绑定的CPU核心

        4核:

worker_processes 4; #工作进程数
worker_cpu_affinity 0001 0010 0100 1000; #指定每个工作进程绑定的CPU核心

        8核:

worker_processes 8; #工作进程数
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #指定每个工作进程绑定的CPU核心

        根据自己的实际情况,将配置添加到nginx配置文件中。

        2.设置连接数

        在Nginx中,‌work_connections参数是关键配置项之一,‌它指定了每个worker进程可以同时处理的客户端连接的最大数量。‌这个数值的设置通常基于服务器的性能和内存状况来决定,‌以确保Nginx能够高效地处理来自客户端的请求。‌实际上,‌Nginx的最大并发连接数是由worker进程的数量和每个进程允许的最大连接数共同决定的。‌

        具体配置如下:

worker_connections  1024; #设置每个工作进程的线程数

(三)事件处理模型优化

        nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。要根据系统类型不同选择不同的事务处理模型,博主服务器操作系统是Centos,因此将nginx的事件处理模型调整为epoll模型。

‌        epoll模型是‌Linux内核为处理大批量文件描述符而设计的多路复用IO接口,它是‌select和‌poll的增强版本。 epoll模型能够显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它不需要遍历整个被侦听的描述符集,只需遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合。‌

        具体配置如下:

events {
    use epoll; #指定事件处理模型
}

        ps:在不指定事件处理模型时,nginx默认会自动的选择最佳的事件处理模型服务。

(四)设置会话保持时间

        在Nginx中,‌keepalive_timeout参数用于配置长连接的超时时间,单位为秒。‌这个参数的作用是保持客户端与服务器之间的连接在一定时间内保持活动状态,‌以便客户端可以重用这些连接来发送后续的请求,‌而无需每次都建立新的连接。‌这样做可以减少连接建立和关闭的开销,‌提高服务器的资源利用率和响应速度,‌尤其是在处理大量并发请求时。‌

        具体配置如下:

keepalive_timeout  60; #设置会话保持时间,单位为秒

(五)开启Gzip压缩

        Nginx的Gzip压缩功能主要用于压缩HTTP响应内容,‌以减小数据传输的大小,‌从而提高网站的性能和速度。‌Gzip功能通过在发送给客户端之前对响应内容进行压缩,‌可以有效减少数据传输的带宽消耗和响应时间。‌

        1.安装Gzip模块

        在Linux系统中,编译Nginx时使用以下命令安装Gzip模块。

./configure --prefix=/usr/local/nginx --with-http_gzip_static_module

make install

        2.配置Gzip模块

        在Nginx配置文件中添加以下内容(PS:以下配置可根据自己网站的实际需求做调整):

gzip on; # 开启Gzip压缩功能
gzip_min_length 1k; # 设置最小压缩文件大小为1KB
gzip_buffers 4 32k; # 设置压缩缓冲区个数和大小
gzip_http_version 1.1; # 设置支持的HTTP协议版本为1.1
gzip_comp_level 6; # 压缩比率, 一般选择4-6
gzip_types text/plain application/x-javascript text/css application/xml; # 设置需要压缩的文件类型

        3.判断Gzip压缩是否开启成功

        添加以上配置后,重启nginx,打开F12,查看请求,出现如下图所示红框字样则说明开启成功。

(六)开启高效文件传输模式

        当在 Nginx 配置中设置 sendfile on,‌Nginx 将使用零拷贝技术来传输文件,‌这种技术只需要两次上下文切换和两次数据拷贝,‌从而减少了系统开销,‌提高了文件传输的效率。‌相比之下,‌当 sendfile 设置为off时,‌Nginx 会使用传统的文件传输技术,‌即通过read + write的方式进行文件传输,‌这需要四次上下文切换和四次数据拷贝,‌效率较低。此外,‌与 sendfile 相关的另一个配置选项是tcp_nopush。‌当 tcp_nopush设置为on时,‌Nginx 会等待数据包最大时一次性传输出去,‌这有助于解决网络堵塞问题,‌减少网络报文段的数量。‌

        具体配置如下:

sendfile on; # 开启高效文件传输模式。
tcp_nopush on; #需要在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不一个接一个的发送。

(七)使用HTTP/2协议

        HTTP/2 协议相较于传统的 HTTP/1.1 协议,具有多路复用、头部压缩等特性,可以显著提高图片加载的效率。启用 HTTP/2 就好比为数据传输开辟了多条高速公路,不再是一条道走到黑,能够同时传输多个请求,大大减少了等待时间。

        1.安装HTTP2模块

        在Linux系统中,编译Nginx时使用以下命令安装HTTP2模块。

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module

make install

        2.配置HTTP2模块

        在Nginx配置文件中,只需要在在监听的443端口配置这一栏,添加以下代码即可启用 HTTP/2。

http2 on; #启用HTTPS并启用HTTP/2协议支持功能(需要操作系统和SSL库支持)

        3.验证是否开启成功

        访问测试网站:https://domsignal.com/test/,输入网站域名,即可知道结果。

(八)缓存策略配置

        缓存是提高网站性能的重要手段之一。Nginx提供了多种缓存策略,可以根据实际需求进行配置。以下是一些常见的缓存策略:

        1. 浏览器缓存

        通过设置正确的 HTTP 头信息,让浏览器缓存图片、css、js资源。当用户再次访问相同的页面时,如果这些资源没有更新,浏览器将直接使用本地缓存,而无需再次从服务器下载。

        配置如下:

location ~* \.(jpg|jpeg|png|gif|svg|css|js)$ {
    expires 30d; #设置缓存有效期时间为30天,可自行调整时间
    add_header Cache-Control "public";
}

        2. Nginx 本地缓存

        在Nginx中设置本地缓存可以通过配置文件中的proxy_cache_path指令和相关的缓存指令来实现。

        配置示例:

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
                     inactive=60m use_temp_path=off;
    server {
        listen 80;
        server_name localhost;
 
        location / {
            proxy_pass  # 
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        }
    }
}

        参数解释:

  • proxy_cache_path 定义了缓存的存储路径、缓存目录的层次结构、缓存键的区域、最大缓存大小以及缓存内容在多长时间没有被访问后应被视为不活跃并可能被删除。

  • levels=1:2 指定了缓存目录的层次结构。

  • keys_zone=my_cache:10m 设置了内存区域以存储缓存键,大小为10MB。

  • max_size=10g 指定了最大缓存大小为10GB。

  • inactive=60m 指定了缓存数据在60分钟内未被访问就会被移除。

  • use_temp_path=off 关闭临时文件的使用,这样Nginx就不会将大文件写入临时目录。

  • proxy_cache my_cache  启用代理缓存。

  • proxy_cache_valid 200 302 10m  设置HTTP状态码为200和302的响应缓存有效期为10分钟。

  • proxy_cache_valid 404 1m 设置HTTP状态码为404的响应缓存有效期为1分钟。

  • proxy_cache_use_stale 指定了在指定的错误情况下使用过期的缓存内容。

  • 确保替换 http://my_upstream 为你实际的上游服务器配置。这个配置假设你已经设置了一个名为 my_upstream 的上游服务器块。

(九)日志配置优化

        日志是排查问题的重要手段,但是过多的日志会导致磁盘空间不足,影响系统性能。因此,需要对Nginx的日志进行优化。以下是一些优化方法:

        1. 调整nginx输出日志的级别

        Nginx支持的日志级别有:debug、info、notice、warn、error等。可以通过修改Nginx配置文件中的log_level参数来调整日志级别。具体配置如下:

        2. 优化日志写入规则

        Nginx支持的日志级别有:debug、info、notice、warn、error等,可以通过修改Nginx配置文件中的log_level参数来调整日志级别。还有如果每次请求成功都会写入一条日志,这显然会增加磁盘的压力,因此需要优化nginx的日志级别、写入规则和压缩等级,配置如下:

access_log /usr/local/nginx/logs/access.log combined buffer=32k gizp flush=1m info; # 配置访问日志写入规则、压缩、日志级别
error_log /usr/local/nginx/logs/error.log info; # 配置错误日志,并设置日志级别为info

参数说明:

/usr/local/nginx/logs/access.log 是访问日志文件的路径。

combined 是日志格式,这是一个常用的日志格式,它记录的信息比较全面,包括时间、客户端IP、请求方法等。

buffer=32k 指明了缓冲区的大小,这里设置为32KB。

gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。

flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空,当产生第一条数据后过了一分钟才写入。

info 日志级别,常见的日志级别有 debug、info、notice、warn、error、crit、alert、merg,级别越高,记录的信息越少,默认为 error。

三、搭建免费的CDN加速

        CDN加速主要是解决因分布、‌带宽、‌服务器性能带来的访问延迟问题,‌适用于站点加速、‌点播、‌直播等场景。‌它使用户可以就近取得所需内容,‌解决Internet网络拥挤的状况,‌提高用户访问网站的响应速度和成功率。CDN的基本技术思路是尽可能避开互联网上可能影响数据传输速度和稳定性的环节,‌提升内容传输的速度和稳定性。‌通过将源站资源缓存到全国各地的边缘服务器,‌供用户就近获取,‌从而降低源站压力。

(一)免费CDN介绍

        收集了网上目前仍在运行的免费cdn,有以下几家:

        1.FreeCDN

        能够同时提供DDOS防御、CC防御和支持HTTPS/SSL证书并且不限流量,这个是目前发现的唯一 一家可以提供这种免费的服务,其他大多是限制了流量或者不提供DDOS防御/CC防御,能够支持HTTPS/SSL证书的也不多,提供国内和国外的免费cdn。

        网址: https://www.freecdn.pw/

        2.Procdn

        是一家新兴的cdn服务提供商,采用了lecdn系统,仅需要1元即可获得cdn服务,如您不会用,还可进群找技术人员免费提供支持,节点30+。

        网址:http://procdn.cn

        3.cloudflare

        这个家喻户晓,可谓最大方的cdn服务提供商了,随便跑,并且有着不错的防御,就是国内速度不太行,但是可以通过优选ip来缓解这个问题,问题不大,对应个人用户来说是个很好的选择。

        网址:https://www.cloudflare-cn.com/

(二)搭建过程

        这里以cloudflare为例,进行CDN加速搭建。打开cloudflare网站首页后,先进行注册登录。

        应用程序服务选择免费->添加一个网站

        接着输入邮箱和密码进行注册。

        注册成功后,会进入以下页面,先切换右上角的语言为简体中文,方便后续操作,然后点击添加网站或应用程序按钮。

        接着输入网站的域名地址,点击继续。

        选择Free套餐并点击继续。

        自动加载或导入DNS记录,点击继续。

        点击继续。

        进入后台后,我们需要把cloudflare分配给我们的DNS服务器,在我们购买域名的注册机构或经销商哪进行更换,由cloudflare负责对我们的域名进行解析。

        以阿里云为例,博主的域名是在阿里云进行购买注册的,进入阿里云域名控制台->域名列表->DNS管理->DNS修改

        修改成cloudflare分配给我们的DNS服务器。

        修改DNS配置完成后,cloudflare后台显示如下图所示则说明DNS解析成功配置。

(三)完善配置

        进入DNS->设置菜单,开启DNSSEC配置,该配置通过提供数字签名和验证机制,‌增强了DNS数据的可信度和安全性,‌保护用户免受恶意重定向和其他网络攻击的影响,‌同时提高了整个互联网的安全性和可靠性。

        进入SSL/TLS->概述菜单,将SSL/TLS加密模式设置为完全,该配置用于解决使用 CloudFlare 导致网站「重定向的次数过多」导致的访问失败问题。同时将CDN的回源端口设置为443(‌HTTPS协议的端口)‌,‌这样CDN回源时会以HTTPS协议请求源站,‌避免触发源站的强制跳转逻辑。‌

        进入安全性->自动程序菜单,开启自动程序攻击模式和阻止AI爬虫程序和爬网程序。

        进入安全性->设置菜单,可配置网站的安全级别、质询通过期、浏览器完整性检查、替换不安全的 JavaScript 库。

(四)验证是否成功开启

        进入站长工具网站 https://ping.chinaz.com/,输入网站域名进行ping测试,如果发现有多个不同的解析响应IP,则说明开启成功。

四、网站优化后的效果

        如下图所示,网站的加载时间明显得到显著的提升。

五、其他优化建议

(一)数据库表增加索引

        数据库表增加索引对网站的好处主要体现在提高查询速度、‌减少IO操作、‌提高数据的唯一性和完整性、‌以及提高并发性能。‌

(二)对图片进行压缩上传

        主要原因是为了提高网站加载速度并节省存储空间。‌在数字时代,‌图片是网页和社交媒体上不可或缺的元素,‌但大尺寸的图片不仅会拖慢网站的加载速度,‌影响用户体验,‌还会占用大量的存储空间,‌增加网站的运营成本。‌因此,‌对图片进行压缩变得尤为重要。‌压缩图片可以通过减少图片的文件大小,‌从而加快网页的加载速度,‌提高用户体验和满意度。‌此外,‌压缩图片还能有效节省存储空间,‌降低网站的存储成本。‌

(三)提高服务器配置

        网站优化需要提升服务器的配置主要包括处理器(‌CPU)‌、‌内存(‌RAM)‌、‌存储空间、‌带宽(‌Bandwidth)‌、‌操作系统和虚拟化技术。‌

        处理器(‌CPU)‌:‌选择多核心的中央处理器,‌如四核或更高,‌以及较大的高速缓存可以提供更快的数据读写速度,‌提升网站性能。‌

        内存(‌RAM)‌:‌需要较大的内存容量来支持处理大量的数据和请求。‌选择具有可扩展性的内存模块,‌以便在需要时进行升级。‌

        存储空间:‌选择具有足够存储空间的硬盘或固态硬盘(‌SSD)‌,‌以容纳网站的数据和文件。‌确保服务器配置有数据冗余和备份机制,‌以防止数据丢失或损坏。‌

        带宽(‌Bandwidth)‌:‌选择具有较高带宽的网络连接,‌满足用户对快速加载网站的需求。‌使用内容分发网络(‌CDN)‌来加速网站的访问速度,‌减少服务器负载。‌

        操作系统(‌Operating System)‌:‌选择稳定性较高的操作系统,‌如Linux或Windows Server等,‌确保具有良好的安全性能,‌以保护网站免受恶意攻击。‌

        虚拟化技术:‌使用虚拟化技术可以提高服务器的资源利用率,‌并简化管理和维护工作。‌

        此外,‌还有一些具体的优化措施可以帮助提高服务器的性能和可靠性,‌包括合理配置内存和CPU、‌优化磁盘I/O性能、‌调整网络配置、‌加强服务器安全性、‌使用性能监控工具等。‌这些措施共同作用,‌可以显著提升网站的访问速度和用户体验,‌确保网站的稳定运行。

六、结语

        扫下方二维码关注或访问个人网站 https://www.xiaolin-code.com/,第一时间获取最新文章更新。 

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

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

相关文章

VisualStudio:模块概念、引用概念及方法、Debug与Release说明

哈喽,你好啊,我是雷工! 今天学习VisualStudio软件的相关内容,以下为学习笔记。 01 模块的概念 模块通常是按照功能划分组成的各个类库或可启动项。 一个模块可以是一个类库,也可以是多个类库,还可以包括…

【机器学习】经典CNN架构

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 经典CNN架构1. 引言2. LeNet3. AlexNet4. VGGNet5. GoogLeNet(Inception)6. Res…

世上最简单的安装jenkins

注意:本次安装的jenkins只支持jdk1.8版本 下载地址(jenkins版本2.346): https://mirrors.jenkins-ci.org/war/2.346/ 1、在本地电脑jenkins.war包存放地址里面新建run.bat文件 内容:java -jar D:\install\jenkins\…

宝塔安装python新版本并使用

情况说明: 不是切换宝塔面板默认的 python 而是单独安装一个python版本,然后通过 终端 或者PHP的 shell_exec 方法可以调用。我当前宝塔面板默认的python版本是3.6.8,由于需要用到的python库只支持3.8以上,所以要安装新的python版…

【Java】——Java程序实现学生成绩输入与等级划分

在本文中,我们将介绍如何使用Java编写一个简单的程序,用于输入学生的成绩并划分等级。这个程序可以实现以下功能: 输入学生人数。输入每个学生的成绩。计算最高分。根据最高分划分成绩等级。输出每个学生的分数和对应的等级。 首先&#xff…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(四)

背景 在 SAP B1 中,科目表、业务伙伴主数据、物料主数据被称为三大基本表单,其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档:SAP Business One 10…

数学建模学习(115):主成分分析(PCA)与Python实践

文章目录 一.主成分分析简介1.1 数学背景与维度诅咒1.2 PCA的定义与应用二.协方差矩阵——特征值和特征向量三.如何为数据集选择主成分数量四.特征提取方法五.LDA——与PCA的区别六.PCA的应用七.PCA在异常检测中的应用八.总结一.主成分分析简介 1.1 数学背景与维度诅咒 主成成…

【Python爬虫】教你追剧看电影不求人!python爬虫代码教你爬取各平台视频,小白也能学会!附源码

看剧看一半不是VIP就是svip,正当我们看的津津有味的时候,让你冲米弹窗出来了!!! 对于大家来说,想看续集,都是全凭实力刷续集。 如果这时候你会Python的话,那就不会有这些烦恼了&…

安卓开发中的Jetpack Compose

本文内容总结自郭神的jetpack compose专栏 ,整理自学,未完持续... 一、了解Jetpack Compose Compose是一个由Google Android团队官方推出的声明式UI框架,Compose也是属于AndroidX的一部分,它的本质就是用来编写界面以及处理与用户…

【数据结构】二叉树的深度理解

🍬个人主页:Yanni.— 🌈数据结构:Data Structure.​​​​​​ 🎂C语言笔记:C Language Notes 前言 在之前学习了二叉树的基本概念,但二叉树有着更深入知识理解,这篇文章可以帮助大…

Java语言程序设计——篇十六

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

ROBOT--空心杯电机是什么

空心杯电机是什么 1. 简介2. 结构3. 主要特点4. 应用场合5. 优点6. 缺点 1. 简介 空心杯电机是一种微型伺服直流电机,由定子和转子两大核心部分组成,通常来讲尺寸一般较小通常不超过40mm。在结构上突破了传统直流电机的结构形式,采用的是无铁…

如何理解递归

在二叉树的题目中,我们难免会用到递归方法,递归思想很简单,但运用起来却因为抽象而难以理解。 理解递归的关键在于认识到它是一种解决问题的方法,允许函数直接或间接地调用自身。以下是对递归的概述以及如何理解它的几个要点&…

【算法】一文带你搞懂完全背包!(附背包问题总结)

理论基础 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。这就是完全背包问题。 完全背包…

【计算机组成原理】三、存储系统:1.存储器的分类、层次化结构、性能指标、基本组成(半导体、存储芯片基本原理)

三、存储系统(存储器层次结构) 文章目录 三、存储系统(存储器层次结构)1.存储器的分类1.1按在计算机中的作用(层次)❗多级存储结构(层次化结构)1.2按存储介质1.3按存取方式1.4按信息…

uniapp 小程序 设置按钮固定到页面的最下方

解决方案 我们在做小程序的时候,特别是页面是以列表的形式进行展示,并且页面必须还要新增数据时,这是就会在页面的底部加一个固定的新增按钮,点击新增按钮,弹出一个弹窗…然后进行下一步的业务逻辑操作,那…

Answer use of function tool by OpenAI assistant in Python

题意:“在 Python 中使用 OpenAI 助手的函数工具的用途” 问题背景: I am trying to answer to OpenAI assistants function tool. “我正在尝试回答 OpenAI 助手的函数工具。” See my code below. The custom function is called "funnyfunc&qu…

系统编程 网络 基于tcp协议

tcp的客户端: socket();用来开链接的端口 bind();绑定作用(在客户端可选可不选) connect();链接作用 tcp的服务端: s…

性能测试全解

世界上没有陌生人,只有还没认识的朋友 一.性能测试的意义 由于软件系统的性能问题而引起严重后果的事件比比皆是,下面列举几个案例 (1)2007年10月,北京奥组委实行2008年奥运会门票预售,一时间订票官网访问量激致系统…

「知识篇」UWB精确测距与定位技术优势的详细探讨

UWB650模块是思为无线新发布的一款双边双向测距,三点平面定位模块,WB650模块是在UWB3000F27基础上研发,并搭载单片机,用户无需配置可直接使用。 遵循IEEE 802.15.4-2020标准的UWB技术及其通信协议,提供高精度、低功耗…