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端口,简单处理方式即关闭防火墙。

访问展示

image.png

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配置文件三大模块

  1. 核心模块(CoreModule):进程数等配置;
  2. 事件驱动模块(EventsModule):工作模式等配置;
  3. 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;
  • 日志解释
  1. error_log:是记录错误日志的关键字,不能任意修改;
  2. logs/error.log:是记录错误日志的路径及文件名;
  3. error:指定错误日志记录的级别;
  4. 默认使用error级别,常见级别有:debug,info,notice,wam,error,crit,alert,emerg;
  5. 注意:级别越高记录的信息越少,一般常用的三个级别:wam,error,crit;
  6. 注意:不要配置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 {......}
}
  1. 默认情况下open_log_file_cache是关闭的,即open_log_file_cache off;
  2. max=1000:指定日志文件的FD,最大的缓存数量为1000;
  3. inactive=20s min_uses=3:在20秒内小于3次访问的FD,就会清理掉;
  4. valid=1m:检查周期为1分钟;
  5. 总结:缓存多个1000个,到了极限每分钟开始清除掉,20秒内小于3次的文件FD;
  6. 生成环境下不建议开启,因为会占用内存资源;

日志切割轮转

日志轮转切割可以使用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

日志分析

  1. 统计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量)
  1. 统计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
  1. 统计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]}}}'
  1. 统计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
  1. 统计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]}}'
  1. 统计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]}}'
  1. 统计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]}}'
  1. 统计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]}}'
  1. 统计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]}}'
  1. 统计前一分钟的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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA L2-009 抢红包

题目&#xff1a; 没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录&#xff0c;请你统计一下他们抢红包的收获。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤104&#xff09;&#xff0c;即参与发红包和抢红包的总人数&#xff0c;则…

L2-001 紧急救援(Java)

作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务是带领你的…

干货!带你快速了解Python元组

1.元组 元组一般用来存储多个数据&#xff0c;使用() 2.创建元组 创建空元组 tup1 () print(tup1) # () print(type(tup1)) # <class tuple> 创建非空元组&#xff08;元组中只有一个元素&#xff0c;一般要在元素的后面加 , 若不加 , 该数据类型不一定是元组…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

AI时代的数据分析软件DeepBI与传统BI数据分析的差距

#BI智能数据分析工具# 目前AI在各行业的渗透正在改变我们的工作方式和生活方式&#xff0c;尤其是在智能数据分析领域。今天我们就来看一下新时代数据分析的产品DeepBI与传统BI之间的差距有多大。 BI在过去的二十年被错误定义数据可视化&#xff0c;根本原因在于&#xff0c;…

低代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…

网络工程师笔记7

路由器需要知道下一跳和出接口才能把数据转发出去 各个协议的优先级 直连&#xff1a;0 OSPF&#xff1a;10 ISIS&#xff1a;15 静态&#xff1a;60 RIP :100 静态路由 ip route-static <目的ip地址> 掩码 下一跳地址 例…

关于大数据技术的学习

关于大数据技术的学习 《Java编程》、《python程序开发》&#xff0c;《Linux操作系统》、《Hadoop大数据平台构建与应用》、《网络爬虫技术与应用》、《大数据平台运维》、《Docker容器技术与应用》、《数据库技术》、《数据挖掘》、《可视化设计与开发》、《大数据分析实战》…

鸿蒙开发,对于前端开发来说,究竟是福是祸呢?

提前声明&#xff1a; 先说好哈&#xff0c;不要一上来就开喷&#xff0c;好吧&#xff0c;不感兴趣的话你可以不用看下文直接划走&#xff0c;直接喷俺有点承受不住&#xff0c;心脏不好。如果你感兴趣&#xff0c;你可以先把这篇文章看完&#xff0c;看完后感觉俺讲的还挺有道…

华容道问题求解第一部分_详细设计(二)之棋子和游戏类_棋盘和棋子渲染

&#xff08;续上篇&#xff09; HrdGame 类中的图像输出部分的函数&#xff0c;包括两部分&#xff0c;布局定义和绘制。 布局定义 广义上讲&#xff0c;布局只是棋子众多排列组合中一个快照&#xff0c;或者说是一个状态&#xff0c;因此引入了一个GameState 类&#xff0c…

07 |「存储小工具——SharedPreferences」

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言一、简介二、操作1. 存储数据2. 取数据3. 查看存储的位置和文件 一、简介 解决什么问题&#xff1a; Acticivty 中的数据还是临时的&#xff0c;当我们退出之后再进来&#xff0c;这些数据是不会被保存的&…

输出X^N对233333取模的结果。

对任意正整数N&#xff0c;求XN%233333的值。 要求运算的时间复杂度为O(logN)。 例如X30 X15*X15X15X7*X7*XX7X3*X3*XX3X*X*X共7次乘法运算完毕。输入输出格式 输入描述: 输入两个整数X和N&#xff0c;用空格隔开&#xff0c;其中X,N<10^9。 输出描述: 输出X^N对233333取模…