综合架构-负载均衡系列

一个新的开始

本科/大专
学历
态度 态度,素质
较高
力所能及,地面面垃圾,人都走了空调,灯
(第一个来,最后一个走坚持至少3-4)
学习能力 学习能力
强(学习方
法)
费曼学习法, 表达(说),总结
记忆法
star s(什么情况) t(什么目标) a(如何做?)
r(什么结果)
smart(管理) 明确的需求 可以衡量结果 可
以达到 多个任务之间相关性 截止时间
3Q(IQ EQ AQ) IQ EQ AQ(只要活着,任何事情都可以重来.)

一 代理模块 proxy

2.1 概述

  • proxy 代理

    • 网站:让网站可以承受更高并发/访问量
    • 用户:通过代理上网加速/翻Q........
  • 反向代理与正向代理

2.2 正向代理用户

2.3 反向代理

  • 企业场景中:

    • 反向代理+web集群
    • 反向代理+单机

2.4 反向代理环境准备

环境
lb01 10.0.0.110/172.16.1.110 nginx
1.20.0
负载均衡 lb.zhangyuzhou.com
web01 10.0.0.101/172.16.1.101 nginx
1.20.0
后端服务器
web02 10.0.0.102/172.16.1.102 nginx
1.20.0
后端服务器
  • web01

#01 node01 web监听 8080
[root@node01 conf.d]# cat pass-web.conf
server {
listen 8080;
server_name 10.0.0.101;
location / {
root /code/web;
index index.html;
}
} #02 书写站点目录
[root@node01 conf.d]# echo 'node01' >>/code/web/index.html
[root@node01 conf.d]# cat /code/web/index.html
node01 #03 lb01 负载均衡配置
[root@lb01 conf.d]# cat pass.conf
server {
listen 80;
server_name lb.zhangyuzhou.com; location / {
proxy_pass http://10.0.0.101:8080;
}
} #解析下
echo "10.0.0.110 lb.zhangyuzhou.com" >>/etc/hosts
  • web页面访问

2.5 反正代理指令

代理指令proxy_pass 将请求转发对应地址
格式 proxy_pass url;
上下文 location , if in location , limit_except
proxy_set_header Host $http_host; 修改 Host的内容
proxy_set_header
proxy_set_header Host   $http_host;    #修改 Host的内容 

$host
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for; #增加 代理-->web请求头信息 让后端节点记录用户真实ip地址(客户端ip地址)
$proxy_add_x_forwarded_for
$remote_add the “X-Forwarded-For” client request header field with
the $remote_addr variable appended to it, separated by
a comma.
If the “X-Forwarded-For” field is not present in the
client request header, the $proxy_add_x_forwarded_for
variable is equal to the $remote_addr variable. #如果请求头中有X-Forwarded-For 字段 则
proxy_add_x_forwarded_for 记录用户ip地址 累加追加
#$remote_addr 记录一个ip ########### 必备模块
proxy_pass 将请求转发对应的地址
proxy_set_header Host $http_host; # 设置或host请求头(代理向后端发起的host) $http_host 变量 后端可以读取 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 后端服务可以记录客户的真实ip 并且追加性质 (X-Forwarded-Fo 变量 记录在日志里) proxy_connect_timeout 30s; # 代理与后端节点建立连接的超时时间
proxy_read_timeout 60s; # 代理服务器发送请求给后端节点 超时时间
proxy_send_timeout 60s; # 代理服务器读取后端响应的时间 proxy_buffering on; # 是否开启代理服务器 缓存后端节点的响应报文信息(响应头和响应主体) 如果响应报文无法放进内存 则可以放进磁盘
proxy_buffer_size 16k; # 设置size用于读取从代理服务器接收到的响应头大小
proxy_buffers 8 128k; # 设置单个连接响应缓存响应信息 的大小( 8 *128k)
  • 记录客户真实ip proxy_set_header
proxy_set_header
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 增加 代理-->web请求头信息 让后端节点记录用户真实ip地址(客户端ip地址) 累计追加
$proxy_add 记录一个ip
X-Forwarded-For 如果请求头中有X-Forwarded-For 字段, 记录用户ip地址 累加追加
  • 连接,读取,写入超时时间
# 代理与后端节点建立连接的超时时间  不建议超过75秒
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location # 代理服务器读取后端响应时间 read
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location # 代理服务器发送请求给后端节点 超时时间
Syntax: proxy_send_timeout time;
Default:proxy_send_timeout 60s;
Context:http, server, location
  • 各种缓存
#buffer 系列
####proxy_buffering 是否开启代理服务器 缓存后端节点的响应
报文信息(响应头和响应主体)
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location ####启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到
proxy_buffer_size和proxy_buffers指令设置的缓冲区中。
如果整个响应无法放入内存,则可以将部分响应保存到磁盘上的临时文件
中。
写入临时文件由proxy_max_temp_file_size和
proxy_temp_file_write_size指令控制。
proxy_connect_timeout
格式 proxy_connect_timeout 时间; ##proxy_busy_buffers_size
####proxy_buffer_size
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location ##设置用于读取从代理服务器接收的响应的第一部分的缓冲区大小。
##这部分通常包含一个小的响应头。
默认情况下,缓冲区大小等于一个内存页。这是4K或8K,取决于平台。
不过,它可以做得更小。
设置8k | 16k ##为单个连接缓存响应信息 8 128k;
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location #为单个连接设置用于从代理服务器读取响应的缓冲区的数量和大小。
默认情况下,缓冲区大小等于一个内存页。这是4K或8K,取决于平台。

二 负载均衡

2.1 定义

  • OSI 7层模型

  • 7层负载均衡:应用场景 用于处理用户uri 处理用户客户端,rewrite(修改url/uri/伪静态)

  • 4层负载均衡:处理端口 最多识别四层

2.1 环境准备

环境
lb01 10.0.0.110/172.16.1.110 nginx
1.20.0
负载均衡 lb.zhangyuzhou.com
web01 10.0.0.101/172.16.1.101 nginx
1.20.0
后端服务器 zhangbingbing 主机名 + IP
web02 10.0.0.102/172.16.1.102 nginx
1.20.0
后端服务器 zhangbingbing 主机名 + IP

2.2 单域名单个upstream

# 负载均衡静态网站
# 搭建环境 #01 web环境
[root@node01 conf.d]# cat proxy.conf
server {
listen 80;
server_name 10.0.0.101;
root /code/proxy;
location / {
index index.html;
}
} [root@node02 ~]# cat /etc/nginx/conf.d/proxy.conf
server {
listen 80;
server_name 10.0.0.102;
location / {
root /code/proxy;
index index.html;
}
} ##站点目录
[root@node01 conf.d]# echo `hostname` `hostname -I` >>/code/proxy/index.html
[root@node01 conf.d]# cat /code/proxy/index.html
node01 10.0.0.101 #03 lb01 配置文件
[root@lb01 conf.d]# cat pass-web.conf
upstream proxy_web {
server 10.0.0.101:80;
server 10.0.0.102:80;
} server {
listen 80;
server_name lb.zhangyuzhou.com; location / {
proxy_pass http://proxy_web;
include proxy_params;
} } nginx -s reload #04 引用的模块功能
[root@lb01 conf.d]# cat /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30s;
proxy_read_timeout 60s;
proxy_send_timeout 60s; proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 8 128k; #05 访问测试
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node01 10.0.0.101
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node01 10.0.0.101
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102

2.3 多域名多个upstream

环境 域名
lb01 10.0.0.110/172.16.1.110 nginx
1.20.0
负载均衡 lb.zhangyuzhou.com
web01 10.0.0.101/172.16.1.101 nginx
1.20.0
dong.zhangyuzhou.com 后端服务器 dong 默认
web02 10.0.0.102/172.16.1.102 nginx
1.20.0
jing.zhangyuzhou.com 后端服务器 jing 静态
  • 配置负载
#01 书写负载 配置
[root@lb01 conf.d]# cat proxys.conf
upstream dong {
server 10.0.0.101:80;
}
upstream jing {
server 10.0.0.102:80;
} server {
listen 80;
server_name dong.zhangyuzhou.com;
location / {
proxy_pass http://dong;
include proxy_params;
}
}
server {
listen 80;
server_name jing.zhangyuzhou.com;
location / {
proxy_pass http://jing;
include proxy_params; #02 配置hosts 解析
[root@lb01 conf.d]# tail -1 /etc/hosts
10.0.0.110 lb.zhangyuzhou.com dong.zhangyuzhou.com jing.zhangyuzhou.com
  • 后端web 配置
#01  配置代码
1)web02
echo 'jing' >> /code/proxy/index.html 2) web01
echo 'dong ' >> /code/proxy/index.html [root@node01 conf.d]# cat proxy.conf
server {
listen 80;
server_name 10.0.0.101;
root /code/proxy;
location / {
index index.html;
}
} [root@node02 conf.d]# cat proxy.conf
server {
listen 80;
server_name 10.0.0.102;
root /code/proxy;
location / {
index index.html;
}
}
  • 访问测试
[root@lb01 conf.d]# curl jing.zhangyuzhou.com
node02 10.0.0.102
jing
[root@lb01 conf.d]# curl dong.zhangyuzhou.com
node01 10.0.0.101
dong

2.4 负载均衡-7层-配置详解

调度算法

调度算法 概述
轮询 按时间顺序注意分配到后端服务器(默认)
weight 加权轮询weight值越大 分配到的访问几率越高
least_conn 最少连接数 那个机器链接数少就分发
ip_hash 每个请求按访问ip的hash结果分配 这个来自同一IP的固定访问一个后端服务器
url_hash 按照访问url的hash结果来分配请求 是每个URL定向到同一个后端服务器

注意 ip_hash和加权不能同时使用

  • 负载均衡+轮询具体配置
#调度算法: 负载均衡如何处理/分发用户的请求,如何给后端的服务器

#静态算法
## rr 轮询算法: 1一次1个
## wrr 加权轮询:(后端节点 服务器配置不同)
### weight
web01 1c1g
web02 1c1g
web03 4c8g
upstream blog {
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
} #动态算法
#least_conn 最小连接数,负载均衡会定期检查后端服务器的连接数
指定upstream使用的负载均衡算法,将请求传递到活动连接数最少的服务
器,并考虑服务器的权重。
如果有多个这样的服务器,则结合wrr和least_conn一起调度。
upstream blog {
least_conn;
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
} #ip_hash 对用户客户端ip进行hash,每次用户都会访问同一台服务器
好处: 解决用户登录状态问题(会话共享/登录会话)
缺点: 导致后端节点负载不均
upstream blog {
ip_hash;
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=1;
} #url_hash 对应用户请求中的url进行hash,每次用户访问相同的url,访
问相同的后端节点
应用场景: 配置缓存服务器,让用户指定的url/uri,访问缓存服务器.
upstream blog {
hash $requst_uri; #对指定的变量进行hash
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=1;
} # 测试
# curl -H Host:proxy.oldboy.com 172.16.1.5
# curl -H Host:proxy.oldboy.com 10.0.0.5

2.5 upstream 模块配置

  • upstream 模块可用参数

# upstream 模块
Syntax: server address [parameters];
Default: —
Context: upstream
server中可以用的参数 含义
weight 设置权重
max_conns 设置某个节点最大连接数
max_fails 设置nginx负载均衡检查后端节点失败次数(一般公司 3) (CDN 10)
fail_timeout 超过最大失败次数后 经过fail_timeout时间 再次检查节点是否可用 默认10s
backup 设置为备胎模式 其他节点都挂了的时候 启动backup 服务器
down 处于关闭状态 一般是用来指定一些服务器 这些服务器处于维护状态
#01 测试权重
[root@lb01 conf.d]# cat pass-web.conf
upstream proxy_web {
server 10.0.0.101:80 weight=1 ;
server 10.0.0.102:80 weight=2 ; } server {
listen 80;
server_name lb.zhangyuzhou.com; location / { proxy_pass http://proxy_web;
include proxy_params;
}
} #访问测试
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
jing
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node01 10.0.0.101
dong
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
jing
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
jing
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node01 10.0.0.101
dong
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
jing
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
node02 10.0.0.102
jing #02 测试健康检查
[root@lb01 conf.d]# cat pass-web.conf
upstream proxy_web {
server 10.0.0.101:80 weight=1 max_fails=3 fail_timeout=20;
server 10.0.0.102:80 weight=2 max_fails=3 fail_timeout=20; } server {
listen 80;
server_name lb.zhangyuzhou.com; location / { proxy_pass http://proxy_web;
include proxy_params;
}
} # 测试
[root@lb01 conf.d]$
for n in {1..1000000};
do
curl -H Host:lb.zhangyuzhou.com 10.0.0.110 ;
date +%T; sleep 1 ;
done # 关闭其中一台web 查看再次连接时间

2.6 uri 转发 动静分离**重要

域名
负载均衡进行转发 lb01 10.0.0.110 lb.zhangyuzhou.com
web01 请求/static 静态请求
10.0.0.101 处理
jing.zhangyuzhou.com /code/uri/static/index.html
static web01 (首页)
web02 请求/dong 动态请求
10.0.0.102 处理
dong.zhangyuzhou.com /code/uri/dong/index.html
active web02
  • web 配置
# web01服务器
#01 书写配置文件
[root@node01 conf.d]# cat jing.conf
server {
listen 80;
server_name jing.zhangyuzhou.com;
root /code/uri/ ;
location /static {
index index.html;
}
location / {
index index.html;
}
} nginx -s reload #02 创建站点目录
mkdir -p /code/uri/static/
echo 'web01 static' >/code/uri/static/index.html
echo 'type web01 static' >/code/uri/index.html #03 配置解析
echo 10.0.0.101 jing.zhangyuzhou.com >>/etc/hosts #04 访问测试
[root@node01 conf.d]# curl jing.zhangyuzhou.com/static/
web01 static # web02
mkdir -p /code/uri/dong/
echo 'web02 dong' >/code/uri/dong/index.html
echo 10.0.0.102 dong.zhangyuzhou.com >>/etc/hosts #01 书写配置文件
[root@node02 conf.d]# cat dong.conf
server {
listen 80;
server_name dong.zhangyuzhou.com;
root /code/uri;
location /dong {
index index.html;
}
} # 重启测试
nginx -s reload [root@node02 conf.d]# curl dong.zhangyuzhou.com/dong/
web02 dong #02 负载均衡上访问测试
[root@lb01 ~]# curl -H Host:jing.zhangyuzhou.com 10.0.0.101/static/
web01 static
[root@lb01 ~]# curl -H Host:dong.zhangyuzhou.com 10.0.0.102/dong/
web02 dong
  • 负载均衡配置
[root@lb01 conf.d]$ cat zhuan.conf
upstream static {
server 10.0.0.101:80;
}
upstream dong {
server 10.0.0.102:80;
}
server {
listen 80;
server_name lb.zhangyuzhou.com;
location / {
proxy_pass http://static;
include proxy_params;
}
location /static {
proxy_pass http://static;
include proxy_params;
}
location /dong {
proxy_pass http://dong;
include proxy_params;
}
} # 测试
[root@lb01 conf.d]# curl lb.zhangyuzhou.com
type web01 static
[root@lb01 conf.d]# curl lb.zhangyuzhou.com/static/
web01 static
[root@lb01 conf.d]# curl lb.zhangyuzhou.com/dong/
web02 dong

2.7 if 判断 user_agent转发

  • user_agent 用户使用的代理(iphone pc ipad )
lb01
web01 /code/uri/static/index.html phone web01
web02 /code/uri/dong/index.htm pc web02
http_user_agent
$request_uri
location #只能匹配 请求里面的uri # 配置文件
[root@lb01 conf.d]$ cat zhuan.conf
upstream static {
server 10.0.0.7:80;
}
upstream dong {
server 10.0.0.8:80;
}
server {
listen 80;
server_name zhuan.oldboy.com;
location / {
if ($http_user_agent ~* "android|iphone|ipad") {
proxy_pass http://static;
}
if ($http_user_agent ~* MSIE ) {
return 200 "please do not use ie";
}
proxy_pass http://dong;
include proxy_params;
}
} # 测试
[root@lb01 conf.d]$ curl -H Host:zhuan.oldboy.com 10.0.0.5
web02 pc
[root@lb01 conf.d]$ curl -Aiphone -H Host:zhuan.oldboy.com 10.0.0.5
web 01 iphone
[root@lb01 conf.d]$ curl -H Host:zhuan.oldboy.com 10.0.0.5
web02 pc
[root@lb01 conf.d]$ curl -A MSIE -H Host:zhuan.oldboy.com 10.0.0.5
please do not use ie[root@lb01 conf.d]$ # -A 指定终端访问 # 详解
if ($http_user_agent ~* "android|iphone|ipad") {
proxy_pass http://static;
}
if ($http_user_agent ~* MSIE ) {
return 200 "please do not use ie";
} # 如果客户使用android|iphone|ipad 访问 则分配给proxy_pass http://static;资源池
# 如果客户使用MSIE访问 则return 200 "please do not use ie"; 返回码200 并显示"内容" # proxy_pass http://dong; 如果都不是 则走 默认

三 四层负载均衡

  • 7层负载均衡处理http/https请求 做一个代理 高并发情况下 每次负载请求后端节点 占用一个端口(随机)
  • 4层负载均衡,lvs(对数据进行转发),效率更高. nginx 4层负载均衡,本质上

    还是代理模式.

nginx 4层 负载均衡 需要 stream(stream_proxy stream_upstream)

模块

nginx 7层 负载均衡 http (http_proxy http_upstream )

ssh 负载均衡

# web01
stream {
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log /var/log/nginx/4layer-nginx-access.log basic; server {
listen 9000;
proxy_pass 10.0.0.7:22;
}
} ##
stream {
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent
$bytes_received '
'$session_time';
access_log /var/log/nginx/4layer-nginx-access.log
basic ;
upstream ssh {
server 10.0.0.7:22;
server 10.0.0.8:22;
}
server {
listen 9000;
proxy_pass ssh;
}
}
  • mysql 3306 负载均衡
upstream mysql {
server 10.0.0.7:3306;
server 10.0.0.51:3306;
}
server { listen 8888;
proxy_pass mysql;
} #lb01
upstream chat {
server 10.0.0.7:8848;
server 10.0.0.8:8848;
}
server {
listen 8848;
proxy_pass chat;
}
#web01 02
nc -lk 8848

Nginx-负载均衡系列的更多相关文章

  1. nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

  3. Nginx系列篇二:linux搭建Nginx负载均衡

    建议先搭建好Nginx环境 可阅读--->Linux中搭建Nginx 1.准备好三台服务器[标配] 一.nginx负载均衡服务器:192.168.102.110,配置好Nginx 二.tomca ...

  4. 干货 | Nginx负载均衡原理及配置实例

    一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...

  5. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  6. nginx负载均衡集群

    nginx负载均衡集群  0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...

  7. 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统

    引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...

  8. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  9. Net分布式系统之二:CentOS系统搭建Nginx负载均衡

    一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...

  10. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

随机推荐

  1. 在K8S中,deploy升级过程包括什么?

    在Kubernetes (K8S) 中,Deployment的升级过程主要包括以下几个步骤: 更新Deployment配置: 当需要对应用程序进行升级时,通常会更新Deployment的YAML配置文 ...

  2. trick1---实现tensorflow和pytorch迁移环境教学

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  3. Intel(R) Ethernet Controller X710驱动升级

    环境 CentOS Linux release 7.9.2009 (Core) 升级 先查看原驱动版本 [root@xcdcs ~]# lspci |grep net 01:00.0 Ethernet ...

  4. centos多网卡时修改网卡的优先级

    我有个服务器有多个网卡,分别配置了多个网段的IP地址,发现有一个网段ping不通.最后发现是路由优先级的问题. 查看路由 查看本机路由route主要看Metric的值,值越小表示优先级越高,取值范围1 ...

  5. React Hooks 使用指南

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. AutoGPT是什么?超简单安装使用教程

    1.AutoGPT 最近几天当红炸子鸡的是AutoGPT,不得不说AI发展真快啊,几天出来一个新东西,都跟不上时代的脚步了. AutoGPT是一个开源的应用程序,展示了GPT-4语言模型的能力.这个程 ...

  7. 【进阶篇】Java 实际开发中积累的几个小技巧(一)

    目录 前言 一.枚举类的注解 二.RESTful 接口 三.类属性转换 四.Stream 流 五.判空和断言 5.1判空部分 5.2断言部分 文章小结 前言 笔者目前从事一线 Java 开发今年是第 ...

  8. Spring Boot 跨域的问题

  9. [Java]format string is malformed java

    format string is malformed java 最近在做代码审查,发现很多在使用 String.format 的时候遇到了IDEA报的 Format string 'xxx' is m ...

  10. BZOJ3156 防御准备 题解

    原题 令 \(S_{i} =\sum\limits_{j=1}^{i}j\) , \(f_{i}\) 为处理到第 \(i\) 个位置放置守卫塔的最小花费. 观察题意,容易得到在\((1 \le j \ ...