02. Nginx入门-Nginx安装
Nginx安装
yum安装
编辑yum环境
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
安装Nginx
yum list | grep nginx
yum -y install nginx
nginx -v
常用命令
#Nginx状态
systemctl status nginx
#关闭Nginx
systemctl stop nginx
#启动Nginx
systemctl statrt nginx
#重载Nginx
systemctl daemon-reload
#设置开机启动
systemctl enable nginx
#查看版本
nginx -v
nginx -V
源码安装
解决依赖环境
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel wget vim
安装Nginx
useradd nginx
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/
cd /usr/local/nginx-1.24.0
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module
echo $?
make install
echo $?
/usr/local/nginx/sbin/nginx -v
常用命令
#启动Nginx
/usr/local/nginx/sbin/nginx
#检查配置文件
/usr/local/nginx/sbin/nginx -t
#关闭Nginx
/usr/local/nginx/sbin/nginx -s stop
#重载Nginx
/usr/local/nginx/sbin/nginx -s reload
#查看版本
/usr/local/nginx/sbin/nginx -v
/usr/local/nginx/sbin/nginx -V
启动文件
cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
编译模块详解
查看编译模块命令
nginx -V
编译模块详解
--prefix=/etc/nginx #指定Nginx安装目录
--sbin-path=/usr/sbin/nginx #指定Nginx执行文件目录
--modules-path=/usr/lib64/nginx/modules #指定Nginx模块路径
--conf-path=/etc/nginx/nginx.conf #指定Nginx配置文件路径
--error-log-path=/var/log/nginx/error.log #指定Nginx错误日志路径
--http-log-path=/var/log/nginx/access.log #指定Nginx访问日志路径
--pid-path=/var/run/nginx.pid #指定Nginx进程号存放路径
--lock-path=/var/run/nginx.lock #指定Nginx启动锁定文件路径
--http-client-body-temp-path=/var/cache/nginx/client_temp #指定Nginx客户端缓存路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp #指定Nginx代理缓存路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp #指定Nginx php缓存路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp #指定Nginx python缓存路径
--http-scgi-temp-path=/var/cache/nginx/scgi_temp #指定Nginx
--user=nginx #指定Nginx程序的用户
--group=nginx #指定Nginx进程的用户组
--with-compat #启动Nginx动态模块兼容性
--with-file-aio #启动Nginx aio使处理效率、处理大量IO性能大大提高
--with-threads #启动Nginx的多线程模块(根据CPU核数来启动,单核没必要启动)
--with-http_addition_module #启动Nginx的追加模块
--with-http_auth_request_module #启动Nginx的认证模块
--with-http_dav_module #启动Nginx的上传下载模块
--with-http_flv_module #启动Nginx的播放视频模块
--with-http_gunzip_module #启动Nginx的压缩模块
--with-http_gzip_static_module #启动Nginx的压缩模块
--with-http_mp4_module #启动Nginx的多媒体模块
--with-http_random_index_module #启动Nginx的随机主页模块
--with-http_realip_module #启动Nginx的用户真实IP模块
--with-http_secure_link_module #启动Nginx的安全连接模块
--with-http_slice_module #启动Nginx的中文文档模块
--with-http_ssl_module #启动Nginx的安全模块
--with-http_stub_status_module #启动Nginx的访问状态模块
--with-http_sub_module #启动Nginx的替换网站响应模块
--with-http_v2_module #启动Nginx的http v2模块
--with-mail #启动Nginx的邮件模块
--with-mail_ssl_module #启动Nginx的邮件安全模块
--with-stream #启动Nginx的负载均衡模块
--with-stream_realip_module #启动Nginx的负载均衡真实IP模块
--with-stream_ssl_module #启动Nginx的负载均衡安全模块
--with-stream_ssl_preread_module #启动Nginx的负载均衡预读取模块
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong #CPU优化参数
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' #CPU优化参数
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #CPU优化参数
简单访问
查看IP地址
ip addr
浏览器访问IP
如果访问IP地址无法访问,需要检查是否服务器开启了防火墙,如开启需要关闭
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
注意:安装没有错误的前提下,如果扔无法访问Nginx,绝大部分情况是没有开放防火墙上的Nginx端口,简单处理方式即关闭防火墙。
访问展示
Nginx文件
yum安装文件路径
目录及文件
rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d #Nginx的子配置文件目录
/etc/nginx/conf.d/default.conf #Nginx的默认子配置文件
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf #Nginx的主配置文件
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.25.3
/usr/share/doc/nginx-1.25.3/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html #Nginx的项目默认路径
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx #Nginx的默认日志路径
源码安装文件路径
所有目录
ll /usr/local/nginx
total 4
drwx------. 2 nginx root 6 Jan 4 01:49 client_body_temp
drwxr-xr-x. 2 root root 4096 Jan 4 01:43 conf #Nginx配置文件路径
drwx------. 2 nginx root 6 Jan 4 01:49 fastcgi_temp
drwxr-xr-x. 2 root root 40 Jan 4 01:43 html #Nginx项目默认路径
drwxr-xr-x. 2 root root 58 Jan 4 01:49 logs #Nginx默认日志路径
drwx------. 2 nginx root 6 Jan 4 01:49 proxy_temp
drwxr-xr-x. 2 root root 19 Jan 4 01:43 sbin #Nginx进程路径
drwx------. 2 nginx root 6 Jan 4 01:49 scgi_temp
drwx------. 2 nginx root 6 Jan 4 01:49 uwsgi_temp
关键文件
/usr/local/nginx/conf/nginx.conf #Nginx配置文件
/usr/local/nginx/conf/nginx.conf.default #Nginx配置文件模板
/usr/local/nginx/logs/access.log #Nginx访问日志
/usr/local/nginx/logs/error.log #Nginx错误日志
配置文件详解
Nginx配置文件三大模块
- 核心模块(CoreModule):进程数等配置;
- 事件驱动模块(EventsModule):工作模式等配置;
- http内核模块(HttpCoreModule):文档程序类型、配置文件等配置;
配置文件
主配置文件
user nginx; #全局设置,指定Nginx的启动用户
worker_processes auto; #全局设置,指定Nginx的启动进程个数error_log /var/log/nginx/error.log notice; #全局设置,指定Nginx的错误日志存放路径
pid /var/run/nginx.pid; #全局设置,指定Nginx的进程号存放路径events {worker_connections 1024; #事件设置,指定Nginx的每个worker进程的最大连接数
}http {include /etc/nginx/mime.types; #HTTP设置,指定Nginx包含的媒体访问类型文件default_type application/octet-stream; #HTTP设置,指定Nginx的流处理方式,默认为字节流处理方式log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #HTTP设置,指定Nginx的日志的记录格式'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main; #HTTP设置,指定Nginx的日志路径及使用的日志格式sendfile on; #HTTP设置,加速Nginx访问#tcp_nopush on; #HTTP设置,优化Nginx访问keepalive_timeout 65; #HTTP设置,指定Nginx的保持连接时长#gzip on; #HTTP设置,指定Nginx的gzip压缩include /etc/nginx/conf.d/*.conf; #HTTP设置,指定Nginx的子配置文件路径
}
子配置文件
server {listen 80; #网站配置,设置网站的Nginx监听端口server_name localhost; #网站配置,设置网站的Nginx监听域名#charset koi8-r; #网站配置,设置网站的字符集,默认使用UTF-8#access_log /var/log/nginx/host.access.log main; #网站配置,设置网站访问日志的路径及日志的记录格式location / {root /usr/share/nginx/html; #网站网页配置,指定网站的根目录路径index index.html index.htm; #网站网页配置,指定网站默认主页的文件名称}#error_page 404 /404.html; #网站配置,指定网站的404错误页面# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html; #网站配置,指定网站的500系列的错误页面的显示内容location = /50x.html {root /usr/share/nginx/html; #网站网页配置,指定网站的500系列错误页面存放路径}# 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;#}
}
日志文件详解
日志格式解释
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;
log_format:声明日志格式;
main:定义这个日志格式的名称;
$remote_addr:远程地址,记录客户端IP地址;
r e m o t e u s e r :远程用户,记录客户端访问用户名(有身份验证的前提下记录); [ remote_user:远程用户,记录客户端访问用户名(有身份验证的前提下记录); [ remoteuser:远程用户,记录客户端访问用户名(有身份验证的前提下记录);[time_local]:本地时间,服务器的自身时间(客户端访问时间);
“$request”:请求,记录请求的方式、请求的URL和请求的HTTP协议;
$status:请求状态码,记录请求的状态码;
b o d y b y t e s s e n t :发送给客户端的字节数,不包括响应头的大小; " body_bytes_sent:发送给客户端的字节数,不包括响应头的大小; " bodybytessent:发送给客户端的字节数,不包括响应头的大小;"http_referer":记录从哪个页面链接过来的访问(如果直接访问过来的则记录“-”);
“ h t t p u s e r a g e n t " :记录客户端浏览器相关信息; " http_user_agent":记录客户端浏览器相关信息; " httpuseragent":记录客户端浏览器相关信息;"http_x_forwarded_for”:记录代理IP
$request_length:记录请求的长度(包含请求行、请求头、请求正文);
$request_time:记录请求处理的时间,单位秒,精度是毫秒;
$time_iso8601:ISO8601标准格式下的本地时间;
$bytes_sent:记录发送给客户端的总字节数;
$msec:记录日志写入时间,单位秒,精度是毫秒;
$http_x_real_ip:记录真实客户端的ip,windows客户端ip;
$remote_addr:当无代理时候,是直接真实客户端的ip;
-:在日志中有两种情况,一表示占位符(如果没有记录使用占位符表示),二表示分隔符(没有特殊含义);
访问日志文件
192.169.1.101 - - [05/Jan/2024:23:45:59 +0800] "GET / HTTP/1.1" 200 17 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" "-"
$remote_addr --> 192.169.1.101
r e m o t e u s e r − − > − [ remote_user --> - [ remoteuser−−>−[time_local] --> [05/Jan/2024:23:19:56 +0800]
“$request” --> “GET / HTTP/1.1”
$status --> 200
b o d y b y t e s s e n t − − > 17 " body_bytes_sent --> 17 " bodybytessent−−>17"http_referer" --> “-”
“ h t t p u s e r a g e n t " − − > " M o z i l l a / 5.0 ( W i n d o w s N T 10.0 ; W i n 64 ; x 64 ; r v : 121.0 ) G e c k o / 20100101 F i r e f o x / 121.0 " " http_user_agent" --> "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" " httpuseragent"−−>"Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:121.0)Gecko/20100101Firefox/121.0""http_x_forwarded_for” --> “-”
错误日志文件
- 日志格式
error_log logs/error.log error;
- 日志解释
- error_log:是记录错误日志的关键字,不能任意修改;
- logs/error.log:是记录错误日志的路径及文件名;
- error:指定错误日志记录的级别;
- 默认使用error级别,常见级别有:debug,info,notice,wam,error,crit,alert,emerg;
- 注意:级别越高记录的信息越少,一般常用的三个级别:wam,error,crit;
- 注意:不要配置info等低级别,会带来巨大的磁盘I/O消耗;
2024/01/06 00:43:35 [error] 15794#15794: *8 open() "/usr/share/nginx/html/adb" failed (2: No such file or directory), client: 192.169.1.101, server: localhost, request: "GET /adb HTTP/1.1", host: "192.169.1.133"
日志缓存
日志缓存可以配置在http/server/location下
http {open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;......server {......}
}
- 默认情况下open_log_file_cache是关闭的,即open_log_file_cache off;
- max=1000:指定日志文件的FD,最大的缓存数量为1000;
- inactive=20s min_uses=3:在20秒内小于3次访问的FD,就会清理掉;
- valid=1m:检查周期为1分钟;
- 总结:缓存多个1000个,到了极限每分钟开始清除掉,20秒内小于3次的文件FD;
- 生成环境下不建议开启,因为会占用内存资源;
日志切割轮转
日志轮转切割可以使用linux的自带logrotate工具
- 日志切割文件
cat /etc/logrotate.d/nginx/var/log/nginx/*.log {daily #每天轮转一次missingok #日志丢失不提示rotate 52 #日志文件备份保留52份compress #压缩日志文件,默认后缀.gzdelaycompress #延迟压缩notifempty #空文件,不轮转create 640 nginx adm #日志轮转后创建一个新文件,并授权size 10M #日志文件大小超过10M时,启动日志轮转sharedscripts #日志轮转后执行的脚本,开始标识postrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid` #重启nginxfiendscript #日志轮转后执行的脚本,结束标识
}
- 测试日志轮转
logrotate -vf /etc/logrotate.d/nginx
日志分析
- 统计2023年9月5日,这一天内的PV量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | wc -l
grep '05/Sep/2023:08' /var/log/nginx/access_zzx_log.log | wc -l #(8点-9点直接的PV量)
- 统计2023年9月5日,这一天内的访问最多的10个IP
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ips[$1]++}END{for(i in ips){print "IP地址:"i,"数量:"ips[i]}}' | sort -k2 -rn | head -n 10
- 统计2023年9月5日,这一天内的访问大于100次的IP
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ips[$1]++}END{for(i in ips){if(ips[i]>100){print "IP地址:"i,"数量:"ips[i]}}}'
- 统计2023年9月5日,这一天内的访问最多的10个页面
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{urls[$7]++}END{for(i in urls){print "URL地址:"urls[i],"数量:"i}}' | sort -k1 -rn | head -n 10
- 统计2023年9月5日,这一天内的每个URL访问内容总量大小
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{urls[$7]++;size[$7]+=$10}END{for(i in urls){print "URL地址:"urls[i],"大小:"size[i]}}'
- 统计2023年9月5日,这一天内的每个IP访问状态码数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ip_code[$1" "$9]++}END{for(i in ip_code){print "IP地址和状态码:"i,"数量:"ip_code[i]}}'
- 统计2023年9月5日,这一天内的每个IP访问状态码为404及出现次数
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print "IP地址和状态码:"i,"数量:"ip_code[i]}}'
- 统计2023年9月5日,这一天8:30-9:30时间段每个IP出现404状态码的数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '$4>="[05/Sep/2023:08:30:00" && $4<="[05/Sep/2023:09:00:00"{if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}'
- 统计2023年9月5日,这一天内的各种状态码数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{code[$9]++}END{for(i in code){print i,code[i]}}'
- 统计前一分钟的PV量
date=$(date -d '-1 minute' +%Y:%H:%M); awk -v date=$date '$0 ~ date{i++}END{print i}' /var/log/nginx/access_zzx_log.log
相关文章:

02. Nginx入门-Nginx安装
Nginx安装 yum安装 编辑yum环境 cat > /etc/yum.repos.d/nginx.repo << EOF [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_…...
leetcode73. 矩阵置零
链接见:https://leetcode.cn/problems/set-matrix-zeroes/description/ 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 AC代码 class Solution { public:void setZeroes(vec…...

【中间件】RabbitMQ入门
📝个人主页:五敷有你 🔥系列专栏:中间件 ⛺️稳中求进,晒太阳 MQ的优劣: 优势 应用解耦:提升了系统容错性和可维护性异步提速:提升用户体验和系统吞吐量消峰填谷࿱…...

rtt的io设备框架面向对象学习-电阻屏LCD设备
目录 1.8080通信的电阻屏LCD设备1.1 构造流程1.2 使用2.i2c和spi通信的电阻屏LCD 电阻屏LCD通信接口有支持I2c、SPI和8080通信接口的。 1.8080通信的电阻屏LCD设备 lcd这块不像其他设备类,rtt没有实现的设备驱动框架层,那么是在驱动层直接实现的。 以…...

商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...
蓝桥杯刷题--python-16
562. 壁画 - AcWing题库 Tint(input()) j1 while(j<T): N int(input()) ainput() s [0]*(N1) # 求前戳和 for i in range(1, N 1): s[i] int(a[i-1]) s[i - 1] # 枚举 # 区间 max_ float(-inf) k (N 2 - 1) // 2 for i in …...
闰年计算中的计算机Bug
不知道你有没有看过凯瑟琳泽塔琼斯主演的《偷天陷阱》,里面主题思想是用银行结算系统的千年虫bug,精心设计,盗取银行几十亿的精彩动作片。所谓2000 年千禧年的千年虫,其实就是计算机计算闰年的bug。 这个闰年计算的历史源远流长&…...

python水表识别图像识别深度学习 CNN
python水表识别,图像识别深度学习 CNN,Opencv,Keras 重点:项目和文档是本人近期原创所作!程序可以将水表图片里面的数据进行深度学习,提取相关信息训练,lw1.3万字重复15%,可以直接上交那种&…...

Java对接快递100实时快递单号查询API接口
目录 1.引入依赖 2.定义配置信息 3.模块结构 4.Controller 5.Service实现类 6.返回数据dto以及dto中的数据dto 7.测试运行 今天也是接到了这个任务,官网有小demo,可以下载下来参考test中代码 官方文档地址: 实时快递查询接口技术文档…...

Redis常见的15个【坑】,避坑指南
一、常见命令 1.1 过期时间意外丢失 原因: SET命令如果不设置过期时间,那么Redis会自动【擦除】这个key的过期时间 1.2 DEL命令阻塞redis key是String类型时,DEL时间复杂度是O(1)key是List/Hash/Set/ZSet类型,DEL时间复杂度是…...

04. Nginx入门-Nginx WEB模块
测试环境 此处使用的yum安装的Nginx路径。 此处域名均在本地配置hosts。 主配置文件 路径:/etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connection…...
Python在信息安全领域中具有重要的作用
Python在信息安全领域中具有重要的作用。下面是几个方面的说明: 网络安全:Python提供了一系列用于网络安全的库和工具,例如Scapy、Nmap等。这些工具可以应用于漏洞扫描、网络流量分析、数据包嗅探等操作,帮助检测和防御网络攻击。…...
Linux 定时备份文件到另一台服务器
1. 需求 用户要求将 Tomcat 的日志文件定时备份到另一台服务器。同事给我提供了一个写好的 java 框架,但实在不想给用户再维护另一个服务了,所以另寻他法。 2. 问题 使用 scp 等跨服务器传输命令时需要手动输入用户名的密码才可进行文件传输ÿ…...

C++输入输出(I\O)
我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…...

基本设计模式
单例模式 ES5 function Duck1(name:string){this.namenamethis.instancenull }Duck1.prototype.getNamefunction(){console.log(this.name) }Duck1.getInstancefunction(name:string){if(!this.instance){this.instance new Duck1(name)} } const aDuck1.getInstance(a) const…...

双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025
D2025 为立体声音频功率放大集成电路,适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点: 适用于立体声或 BTL 工作模式 外接元件少 通道分离性好 电源电压范围宽(3V~12V ÿ…...
Linux 内核获取函数size
方式一:通过objdump -t直接从目标文件中获取函数size #objdump -t file_unread.o | grep hook 0000000000000030 l F .text 000000000000012f hook_vfs_read0000000000000030 l F .text 000000000000012f hook_vfs_read各个字段说明 0000000000000030&#x…...

Python+neo4j构建豆瓣电影知识图谱
文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系多标签实体和实体去重数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究。 数据整理导入 impor…...

DolphinScheduler——介绍及架构设计
目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…...
【Python】约瑟夫环问题
任务描述 据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...