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

Nginx的基本介绍 安装 配置文件 日志

  • 一、Nginx介绍
  • 二、nginx的优点
  • 三、多路复用
    • 1、I/O multiplexing 多并发
  • 四、nginx内部技术架构
  • 五、安装Nginx
  • Nginx部署-yum安装
    • 获取Nginx的yum源
    • yum安装Nginx
    • 浏览器访问
  • 编译安装Nginx
    • 安装编译环境
    • 安装依赖环境
    • 创建nginx用户
    • 安装nginx
    • 启动nginx
    • 实现nginx开机自启(脚本)
      • 添加权限
      • 重新加载系统启动文件
      • 设置开机自启
  • 六、nginx配置文件
  • 七、nginx的日志文件
  • 八、使用stub_status模块监控nginx的工作状态
    • 1)、通过 nginx -V 命令查看是否已安装 stub_status 模块
    • 2)、编辑 /etc/nginx/nginx.conf 配置文件
    • 3).创建认证口令文件并添加用户,密码用md5加密
    • 4)重启服务
    • 5)客户端访问

一、Nginx介绍

基本介绍: Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务,nginx也是一个轻量级的web(反向代理)服务器以及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行

Nginx的特点: 内存占用少,并发能力强。 中国大陆使用Nginx的网站用户有:百度,京东,新浪,网易,腾讯,淘宝等

创始人: 伊戈尔 塞索耶夫

二、nginx的优点

单机环境参考服务器配置并发数量在7000-8000+左右,在集群模式2000+
作为web服务器:用更少的资源,支持更多的并发连接,体现更高的效率
作为负载均衡器:Nginx既可以在内部支持Rails和PHP,也可以作为HTTP代理服务器对外进行服务。
作为邮件代理器 :Nginx同时也是一个优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)last.fm描述了他的使用经验。

Nginx安装简单,配置文件简洁(支持perl语法),bugs非常少可以做到不间断运行,即使运行数个月也不需要重新启动,也能够在不间断服务的情况下进行软件版本的升级

三、多路复用

1、I/O multiplexing 多并发

第一种就是最传统的多进程并发模型(每进来一个新的I/O流就会分配一个新的进程管理)

1561897144109

第二种 就是I/O多路复用(单个进程,通过记录每个I/O流状态来同时管理多个I/O流)I/O multiplexing这里面的multiple行指的其实是在单个进程通过记录跟踪每一个sock(I/O流)的状态来同时管理多个I/O流,目的是为了尽量多的提高服务器的吞吐能力。
在同一个进程里面,通过拨开关的方式,来同时传送多个I/O流

1561897166658
ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。

异步回调

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调。

四、nginx内部技术架构

Nginx服务器,以其处理网络的高并发,高性能以及高效率,获得行业的广泛认可,今年已稳居web服务器部署排行第二的位置,并被广泛用于反向代理和负载均衡
1561897235155

  • nginx启动时,会生成两种类型的进程,一个是主进程(master),一个或者多个工作进程(worker),主进程不处理网络请求,负责调度工作进程,也就是图示的三项:加载配置,启动工作进程,以及非停进程,所以,nginx启动以后至少有两个进程。
  • 服务器实际处理网路请求以及相应的是工作进程(worker),在类linux系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求
  • 模块化设计:nginx的worker,包括核心和功能模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写,存储读写,内容传输等,而其代码块的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。
  • 事件驱动,异步以及非阻塞,可以说是nginx得以获得高并发,高性能的关键因素,同时也得益于对linux,Solars以及BSD等操作系统内核中的事件通知及I/O性能的增强功能的采用。
  • 代理(proxy)设计,可以说是nginx深入骨髓的设计,无论是对于HTTP,还是对于FastCGI,memcache,Redis等网络请求或者响应,本质上都采用了代理机制,所以,nginx天生就是高性能的代理服务器

五、安装Nginx

Nginx部署-yum安装

官网链接: http://www.nginx.org/
1561531095060

Nginx版本介绍
Mainline version:正在开发的版本
stable version:最新的稳定版本,生产环境上建议使用
Legacy version:遗留的老版本的稳定版

获取Nginx的yum源

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@master2 ~]# yum clean all 
已加载插件:fastestmirror
正在清理软件源: base epel nginx-stable
Cleaning up list of fastest mirrors
[root@master2 ~]# yum repolist
已加载插件:fastestmirror
Determining fastest mirrors
base                                                                                     | 2.9 kB  00:00:00     
epel                                                                                     | 2.9 kB  00:00:00     
nginx-stable                                                                             | 2.9 kB  00:00:00     
(1/3): base/primary_db                                                                   | 6.1 MB  00:00:00     
(2/3): epel/primary_db                                                                   | 6.9 MB  00:00:00     
(3/3): nginx-stable/7/x86_64/primary_db                                                  |  86 kB  00:00:01     
源标识                                                 源名称                                             状态
base                                                   base                                               10,072
epel                                                   epel                                               13,747
nginx-stable/7/x86_64                                  nginx stable repo                                     320
repolist: 24,139

yum安装Nginx

[root@master2 ~]# systemctl stop firewalld && setenforce 0
[root@master2 ~]# yum -y install yum-utils
[root@master2 ~]# yum -y install nginx
[root@master2 ~]# nginx -v
nginx version: nginx/1.24.0
[root@master2 ~]# systemctl start nginx
[root@master2 ~]# systemctl enable nginx

浏览器访问

在这里插入图片描述

编译安装Nginx

安装编译环境

yum -y install gcc gcc-c++

安装依赖环境

yum -y install openssl openssl-devel  zlib zlib-devel  pcre pcre-devel wget

创建nginx用户

useradd nginx

安装nginx

[root@localhost ~]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
[root@localhost ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/nginx-1.16.0
[root@localhost nginx-1.16.0]# ./configure--prefix=/usr/local/nginx --group=nginx--user=nginx --sbin-path=/usr/local/nginx/sbin/nginx--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body--http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid--lock-path=/var/lock/nginx--with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream
[root@localhost nginx-1.16.0]# make && make install
--prefix=/usr/local/nginx                        //指向安装目录
--conf-path=/etc/nginx/nginx.conf                //指定配置文件
--http-log-path=/var/log/nginx/access.log        //指定访问日志
--error-log-path=/var/log/nginx/error.log        //指定错误日志
--lock-path=/var/lock/nginx.lock                 //指定lock文件
--pid-path=/run/nginx.pid                        //指定pid文件>--http-client-body-temp-path=/var/lib/nginx/body    //设定http客户端请求临时文件路径
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi     //设定http fastcgi临时文件路径
--http-proxy-temp-path=/var/lib/nginx/proxy         //设定http代理临时文件路径
--http-scgi-temp-path=/var/lib/nginx/scgi           //设定http scgi临时文件路径
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi         //设定http uwsgi临时文件路径>--with-debug                                        //启用debug日志
--with-pcre-jit                                     //编译PCRE包含“just-in-time compilation”
--with-ipv6                                         //启用ipv6支持
--with-http_ssl_module                              //启用ssl支持
--with-http_stub_status_module                      //获取nginx自上次启动以来的状态
--with-http_realip_module                 //允许从请求标头更改客户端的IP地址值,默认为关
--with-http_auth_request_module           //实现基于一个子请求的结果的客户端授权。如果该子请求返回的2xx响应代码,所述接入是允许的。如果它返回401或403中,访问被拒绝与相应的错误代码。由子请求返回的任何其他响应代码被认为是一个错误。
--with-http_addition_module               //作为一个输出过滤器,支持不完全缓冲,分部分响应请求
--with-http_dav_module                    //增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法 默认关闭,需编译开启
--with-http_geoip_module                  //使用预编译的MaxMind数据库解析客户端IP地址,得到变量值
--with-http_gunzip_module                 //它为不支持“gzip”编码方法的客户端解压具有“Content-Encoding: gzip”头的响应。
--with-http_gzip_static_module            //在线实时压缩输出数据流
--with-http_image_filter_module           //传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd库要用到)
--with-http_spdy_module                   //SPDY可以缩短网页的加载时间
--with-http_sub_module                    //允许用一些其他文本替换nginx响应中的一些文本
--with-http_xslt_module                   //过滤转换XML请求
--with-mail                               //启用POP3/IMAP4/SMTP代理模块支持
--with-mail_ssl_module                    //启用ngx_mail_ssl_module支持启用外部模块支持

启动nginx

mkdir -p /tmp/nginx
/usr/local/nginx/sbin/nginx
nginx命令
nginx -c                #以特定目录下的配置文件启动nginx
nginx -t                #测试配置文件是否正确
nginx -t -c             #测试指定路径下的文件是否正确
nginx -s reload         #重新加载配置文件
nginx  -s reopen        #重新打开日志文件
nginx -s  stop          #快速停止nginx

注意:
nginx -s reload命令加载修改后的配置文件
1、Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx将继续采用原配置文件(因为worker未收到影响)
2、Nginx启动新的worker进程,采用新的配置文件
3、Nginx将请求新的worker进程
4、Nginx等待以前的worker进程全部请求都已经返回后,关闭相应的worker进程
5、重复以上的过程,直到旧的worker进程全部被关闭

实现nginx开机自启(脚本)

[root@localhost ~]# vim /etc/init.d/nginx
#!/bin/sh 
# 
# nginx - this script starts and stops the nginx daemon 
# 
# chkconfig:  - 85 15  
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
#              proxy and IMAP/POP3 proxy server 
# processname: nginx 
# config:      /etc/nginx/nginx.conf 
# config:      /etc/sysconfig/nginx 
# pidfile:    /var/run/nginx.pid # Source function library. 
. /etc/rc.d/init.d/functions# Source networking configuration. 
. /etc/sysconfig/network# Check that networking is up. 
[ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/nginxmake_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; doif [ `echo $opt | grep '.*-temp-path'` ]; thenvalue=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then# echo "creating" $value mkdir -p $value && chown -R $user $value fifidone
} start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILE retval=$? echo[ $retval -eq 0 ] && touch $lockfile return $retval 
} stop() { echo -n $"Stopping $prog: "killproc $prog -QUIT retval=$? echo[ $retval -eq 0 ] && rm -f $lockfile return $retval 
} restart() { configtest || return $? stop sleep 1 start 
} reload() { configtest || return $? echo -n $"Reloading $prog: "killproc $nginx -HUP RETVAL=$? echo
} force_reload() { restart 
} configtest() { $nginx -t -c $NGINX_CONF_FILE 
} rh_status() { status $prog 
} rh_status_q() { rh_status >/dev/null 2>&1 
} case "$1" instart) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2 
esac

添加权限

chmod +x /etc/init.d/nginx

重新加载系统启动文件

systemctl daemon-reload

设置开机自启

pkill -9 nginx
systemctl start nginx
/sbin/chkconfig nginx on

六、nginx配置文件

# 全局参数设置 (主配置文件)
worker_processes  4;          #设置nginx启动进程的数量,一般设置成与逻辑cpu数量相同 
error_log  logs/error.log;    #指定错误日志 
worker_rlimit_nofile 102400;  #设置一个nginx进程能打开的最大文件数 
pid        /var/run/nginx.pid; 
events { worker_connections  1024; #设置一个进程的最大并发连接数 
}
# http 服务相关设置 
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  /var/log/nginx/access.log  main;    #设置访问日志的位置和格式 sendfile          on; #是否调用sendfile函数输出文件,一般设置为on,若nginx是用来进行磁盘IO负载应用时,可以设置为off,降低系统负载 gzip              on;      #是否开启gzip压缩,将注释去掉开启 keepalive_timeout  65;     #设置长连接的超时时间
# 虚拟服务器的相关设置 server { listen      80;                #设置监听的端口 server_name  localhost;        #设置绑定的主机名、域名或ip地址 charset koi8-r;               # 设置编码字符 location / { root  /var/www/nginx;           #设置服务器默认网站的根目录位置,需要手动创建index  index.html index.htm;    #设置默认打开的文档 } error_page  500 502 503 504  /50x.html; #设置错误信息返回页面 location = /50x.html { root  html;        #这里的绝对位置是/usr/local/nginx/html} } }

nginx.conf的组成:nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置快,各个之间不存在次序关系。

七、nginx的日志文件

nginx的日志文件为 log_ormataccess_log两部分
**log_format 定义记录的格式,语法格式为
log_format 样式名称 样式详情

   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  /var/log/nginx/access.log  main; 

1561599608585
1561599718230

八、使用stub_status模块监控nginx的工作状态

1)、通过 nginx -V 命令查看是否已安装 stub_status 模块

2)、编辑 /etc/nginx/nginx.conf 配置文件

yum安装在/etc/nginx/conf.d/default.conf

location /nginx-status {stub_status on;access_log    /var/log/nginx/nginxstatus.log;auth_basic    "nginx-status";auth_basic_user_file    /etc/nginx/htpasswd;
}

location /nginx-status {
stub_status on;
access_log /var/log/nginx/nginxstatus.log; #设置日志文件的位置
auth_basic “nginx-status”; #指定认证机制(与location后面的内容相同即可)
auth_basic_user_file /etc/nginx/htpasswd; #指定认证的密码文件
}

3).创建认证口令文件并添加用户,密码用md5加密

[root@localhost ~]# yum install -y httpd-tools  #htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件
[root@localhost ~]# htpasswd -c -m /etc/nginx/htpasswd zhangxiao #-c 创建解密文件 -m 使用md5加密
New password: 
Re-type new password: 
Adding password for user zhangxiao

4)重启服务

[root@localhost ~]# nginx -s reload

5)客户端访问

在这里插入图片描述
在这里插入图片描述

Active connections: 2 
server accepts handled requests2 2 2 
Reading: 0 Writing: 1 Waiting: 1Active connection 活跃的连接数量
server accepts handled requests  
总共创建了2次连接,成功创建2次,总共处理了2 个请求
reading — 读取客户端的连接数。
writing — 响应数据到客户端的数量。
waiting — 开启 keep-alive 的情况下,这个值等于 active 
(reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

limit_rate用来限制客户端传递数据的速度

相关文章:

Nginx的基本介绍 安装 配置文件 日志

一、Nginx介绍二、nginx的优点三、多路复用1、I/O multiplexing 多并发 四、nginx内部技术架构五、安装NginxNginx部署-yum安装获取Nginx的yum源yum安装Nginx浏览器访问 编译安装Nginx安装编译环境安装依赖环境创建nginx用户安装nginx启动nginx实现nginx开机自启(脚…...

docker部署nginx并设置挂载

前言: 最近在学习docker和nginx,因为容器在运行过程中,相关的配置文件及日志都会存在容器内。对容器以来较高,当容器不存在的时候。所有的文件也就都没有了。并且当需要查看日志,修改配置文件的时候必须进入到容器内部…...

MAC如何在根目录创建文件

在这之前先明确一下啥是根目录。 打开终端,输入cd /,然后输入 ls 查看根目录下有哪些文件 可以看到 usr、etc、opt 这些文件的地方才叫根目录,而不是以用户命名,可以看到音乐、应用程序、影片、桌面的地方哈 介绍一种叫做软连接…...

某全球领先的芯片供应商:优化数据跨网交换流程,提高安全管控能力

1、客户介绍 某全球领先的芯片供应商,成立于2005年,总部设于北京,在国内上海、深圳、合肥等地及国外多个国家和地区均设有分支机构和办事处,致力于为客户提供更优质、便捷的服务。 2、建设背景 该公司基于网络安全管理的需求&am…...

自然语言处理---文本预处理概述

自然语言处理(Natural Language Processing,简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域。其主要应用于:语音助手、机器翻译、搜索引擎、智能问答等。 文本预处理概述 文本语料在输送给模型前一般需要一…...

GCC编译器 什么是宏? 标识符和关键字

一.GCC是什么? GCC是用于编译C语言和其它语言的开源软件。 全称是 GNU Compiler Collection,意思是GNU编译器集和。 支持多种操作系统和硬件平台。二.GCC的作用 GCC的作用是将源码转换为可执行的文件,使之可以在计算机上运行。三.GCC编译c文…...

【GESP】2023年06月图形化三级 -- 自幂数判断

文章目录 自幂数判断【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 自幂数判断 【题目描述】 自幂数是指N位数各位数字N次方之和是本身,如153是3位数,其每位数的3次方之和是153本身,因此153是自幂数,1634是4位数…...

MySQL常见面试题

一、存储引擎相关 (1)MySQL 支持哪些存储引擎? MySQL支持多种存储引擎,比如InnoDB,MyISAM, MySQL大于等于5.5之后,默认存储引擎是InnoDB (2)InnoDB 和 MyISAM 有什么区别? InnoD…...

前端HTML CSS JS风格规范

本文代码规范来自HTML/CSS代码开发规范文档 文件命名规范 使用小写字母、数字和下划线组成文件名。 避免使用特殊字符和空格。 使用语义化的命名,能够清晰地表达出文件的功能或内容。 目录结构规范 使用约定俗成的目录结构,如:src/compon…...

为什么spring默认采用单例bean

概 述 熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope,分别是: singleton: 单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理&#xf…...

Redisson分布式锁学习

之前工作中一直使用redis来实现分布式锁,但是最近项目使用了云弹性,机器会涉及到扩缩容,涉及到优雅停机的问题,普通的redis分布锁,一般使用时会设置锁的时间,但是如果在加锁期间 JVM异常重启等发生会导致分…...

Metabase:简单快捷的商业智能与数据分析工具 | 开源日报 No.61

moby/moby Stars: 66.8k License: Apache-2.0 Moby 是一个由 Docker 创建的开源项目,旨在实现和加速软件容器化。它提供了工具包组件的“乐高集”,可以将它们组装成基于容器的自定义系统的框架。组件包括容器生成工具、容器注册表、业务流程工具、运行时…...

【无标题】高流量大并发Linux TCP性能调优

最近在使用jmeter做压测,当jmeter的并发量高的时候发现jmeter服务器一直报错Cannot assign requested address, 查看了一下发现系统中存在大量处于TIME_WAIT状态的tcp端口 netstat -n | awk ‘/^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}’ TIME_W…...

优雅的用户体验:微信小程序中的多步骤表单引导

前言 在微信小程序中,实现一个多步骤表单引导界面既可以提供清晰的任务指引,又可以增加用户体验的互动性。本文将探讨如何使用微信小程序的特性,构建一个流程引导界面,帮助用户一步步完成复杂任务。我们将从设计布局和样式开始&am…...

Kotlin中的委托、属性委托和延迟加载

委托模式是一种常用的设计模式,用于将某个对象的责任委托给另一个对象来处理。在Kotlin中,委托可以通过关键字by来实现,主要分为类委托和属性委托两种形式。此外,Kotlin还提供了延迟加载的功能,可以在需要时才进行初始…...

轻松合并Excel工作表:Java批量操作优化技巧

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如&a…...

计算机网络_网络层概述

4.1 网络层概述 4.1.1 一.分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。 注释:A发送到B,从1端口进入. 如何得知是从2还是从3中转发出去呢?--------->这…...

自然语言处理---Transformer机制详解之GPT2模型介绍

1 GPT2的架构 从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块的Transformer很像. 所谓语言模型, 作用就是根据已有句子的一部分, 来预测下一个单词会是什么. 现实应用中大家最熟悉的一个语言模型应用, 就是智能手机上的输入法, 它可以根据当前输入的内容智…...

ChatGPT 即将诞生一周年,OpenAI 将有大动作

图片来源:由无界AI生成 下个月就是 ChatGPT 一周年纪念日。OpenAI 正在谋划新的大动作。可以肯定地说,自诞生以来,ChatGPT 就为 OpenAI 提供了不可阻挡的增长动力。 01 营收超预期,OpenAI 缓了一口气 据 The Information 报道&…...

jenkins 原理篇——pipeline流水线 声明式语法详解

大家好,我是蓝胖子,相信大家平时项目中或多或少都有用到jenkins,它的piepeline模式能够对项目的发布流程进行编排,优化部署效率,减少错误的发生,如何去写一个pipeline脚本呢,今天我们就来简单看…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...

FOPLP vs CoWoS

以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...