从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)https://coffeemilk.blog.csdn.net/article/details/151350565

一、Nginx与PHP-FPM整合原理

 1.1、PHP-FPM配置文件

Nginx与PHP-FPM整合原理
序号说明
1

PHP-FPM是一个第三方的FastCGI进程管理器,最先它是作为PHP的一个补丁来开发的,现在PHP-FPM已经集成到了PHP源码中,在配置安装PHP的时候,通过指定“--enable-fpm”选项即可启用PHP-FPM功能。

#PHP的源码编译配置
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip
2

PHP-FPM管理的进程包含【master进程】和【worker进程】两种。

《1》master进程只有一个,主要负责监听端口,接收来自Web Server的请求;

《2》而worker进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌了一个PHP解释器,是PHP代码真正执行的地方。

3

那么Nginx又是如何发送请求给PHP-FPM的呢?

        这就要从Nginx层面讲起了,我们知道,Nginx不仅仅是一个Web服务器,也是一个功能强大的代理服务器,除了进行http请求的代理,也可以进行许多其他协议请求的代理,包括与PHP-FPM相关的FastCGI协议。

        为了能够使Nginx理解FastCGI协议,Nginx提供了一个FastCGI模块来将http请求映射为对应的FastCGI请求,这样,Nginx就可以将请求发送给PHP-FPM了,也就实现了Nginx与PHP-FPM的集成。

PHP-FPM配置文件操作
序号说明
1

我们在使用PHP源码编译安装完成PHP后,PHP的默认安装路径是【/usr/local/php】。

#1-PHP的默认安装路径是【/usr/local/php】
cd /usr/local/php#2-PHP的默认配置路径【/usr/local/php/etc】
cd /usr/local/php/etc#3-需要将PHP默认配置路径下的【php-fpm.conf.default】文件名称
#修改为【php-fpm.conf】(这个文件只有最后一行的 
#【include=/usr/local/php/etc/php-fpm.d/*.conf】是有用的)
mv php-fpm.conf.default php-fpm.conf

2

#1-进入PHP默认配置路径下的【php-fpm.d】目录下
#【www.conf.default】文件名称修改为【www.conf】
#并且编辑该配置文件【将该文件里面配置如:
#user与group后面的内容都修改为(www);(listen = 127.0.0.1:9000)】
mv www.conf.default www.conf
vi www.conf#【/usr/local/php/etc/php-fpm.d/www.conf】文件里面具体需编辑的内容如下:
[www]
user = www
group = www
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

3PHP的详细配置文件【/usr/local/php/etc/php-fpm.d/www.conf】参数项说明

user

group

设置运行php-fpm进程的用户;

设置运行php-fpm进程用户组;

listen 配置php-fpm进程监听的IP地址以及端口,默认是127.0.0.1:9000
pm

用来指定php-fpm进程池开启进程的方式,有两个值可以选择:

《1》static(静态);

《2》dynamic(动态);

《3》ondemand(按需);

pm.max_children

在static方式下表示固定开启的php-fpm子进程数量;

在dynamic方式下表示开启php-fpm的最大进程数;

pm.start_servers

【只在pm=dynamic方式】下初始开启php-fpm的子进程数量;

默认值=(min_spare_servers+max_spare_server)/2

pm.min_spare_servers 【只在pm=dynamic方式】空闲状态下开启的最小php-fpm子进程数量
pm.max_spare_servers

【只在pm=dynamic方式】空闲状态下开启的最大php-fpm进程数量;

注意:pm.max_spare_servers的值只能小于等于pm.max_children的值

pm.max_spawn_rate【只在pm=dynamic方式】下一次性生成的子进程数量;默认值是32且不启用
pm.process_idle_timeout【只在pm=ondemand方式】下空闲进程在多少秒后被终止;默认值是10秒且不启用
pm.max_requests每个子进程在重新生成之前应执行的请求数量。
这有助于解决第三方库中的内存泄漏问题。要进行无限的请求处理,请指定“0”。等同于 PHP_FCGI_MAX_REQUESTS。
默认值:0;默认是不启用

 1.2、配置Nginx来支持PHP并测试

#配置Nginx来支持PHP的完整操作流程#1-查看已有nginx的编译所有配置信息和版本(若是yum安装的Nginx则直接使用【nginx -V】即可)
#也可使用【systemctl status nginx.service】查看到Nginx的配置文件启动路径等信息
#【yum安装的Nginx的配置文件默认是(/etc/nginx/nginx.conf)】
#【使用源码安装的Nginx的配置文件默认是(/usr/local/nginx/conf/nginx.conf)】
systemctl status nginx.servicewhereis nginx
/usr/local/nginx/sbin/nginx -V#2-编辑Nginx的配置文件实现反向代理.php内容到php-fpm中(及其最终配置为的内容)
vi /etc/nginx/nginx.confserver {listen       80;listen       [::]:80;server_name  _;root         /usr/share/nginx/html;location / {index index.html index.htm index.php;root html;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-查看系统当前运行的Nginx进程信息并获取到Nginx的父进程PID编号(如:1224)
#获取到Nginx的父进程PID后【在不影响Nginx处理业务的情况下重启Nginx】
ps -ef | grep nginx
kill -HUP 1224#4-检查PHP-FPM服务是否已经启动(若未启动则需要启动,且设置开机自启)
systemctl status php-fpm.service 
systemctl start php-fpm.service 
systemctl enable php-fpm.service#5-若使用systemctl命令启动服务失败,可以查看服务状态配合日志来判断定位问题(如:这里排查后提示日志文件是只读模式,导致无法写入才失败,因此我们可以进入日志所在目录查看日志的权限;如权限没有问题就是php-fpm服务中的ProtectSystem属性保护系统导致,需要将php-fpm服务中的ProtectSystem属性值修改为false保存退出后,重载服务并重启php-fpm服务即可)
systemctl status php-fpm.service 
tail -20 /var/log/messagescd /usr/local/php/var/log/
ll
vi /usr/lib/systemd/system/php-fpm.service
ProtectSystem=falsesystemctl daemon-reload
systemctl start php-fpm.service
systemctl status php-fpm.service#6-查看php-fpm的所有进程信息与网络端口信息
ps -ef | grep php-fpm
netstat -antlp | grep php-fpm#7-进入到Nginx配置网站内容的路径且编写一个php文件用于测试Nginx对php的反向代理和支持
cd /usr/local/nginx/html
vi phpinfo.php#7.1-给phpinfo.php文件里面的内容如下:
<?php phpinfo(); ?>#8-在浏览器输入Nginx所在服务器的IP地址/phpinfo.php即【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)看该文件是否可以解析出正常的内容
#8.1-查看Linux服务器的ip命令
ifconfig#9-通过【mysqli方式】测试PHP连接MySQL是否正常
#9.1-进入Nginx的网站配置路径
cd /usr/share/nginx/html/
#9.2-创建并编辑mysqli.php文件
vi mysqli.php#mysqli.php文件中连接mysql数据的代码(保存并退出)
<?php
$conn = mysqli_connect('127.0.0.1', 'root', 'abc123456', 'mysql','3336');
if(!$conn){
die("数据库连接错误" . mysqli_connect_error());
}else{
echo"数据库连接成功";
}
?>#9.3-在浏览器输入Nginx所在服务器的IP地址/mysqli.php即【ip/mysqli.php】(如:192.168.1.9/mysqli.php)查看是否显示“数据库连接成功”#10-通过【pdo-mysql方式】测试PHP连接MySQL是否正常
#10.1-进入Nginx的网站配置路径
cd /usr/share/nginx/html/
#10.2-创建并编辑mysqli.php文件
vi pdo-mysql.php#pdo-mysql.php文件中连接mysql数据的代码(保存并退出)
<?php
try{
$pdo=new pdo('mysql:host=127.0.0.1;port=3336;dbname=mysql','root','abc123456');
}catch(PDDException $e){
echo "pdo方式连接数据库失败"+$e;
}
echo "pdo方式连接数据库成功";
?>#10.3-在浏览器输入Nginx所在服务器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如:192.168.1.9/pdo-mysql.php)查看是否显示“pdo方式连接数据库成功”

现在在浏览器上输入Nginx所在服务器的IP地址/phpinfo.php即【服务器IP/phpinfo.php】(如:192.168.1.9/phpinfo.php)

        注意:如果我们在浏览器访问(192.168.1.9/phpinfo.php)并没有正常显示php内容,且提示“File not fount”时的排查解决思路:进入Nginx服务器并查看报错日志;分析报错日志。

#进入Nginx服务器并查看报错日志;分析报错日志详细排查解决流程:#1-查看当前服务器的Nginx的默认目录配置、报错日志文件命令
nginx -V#2-根据查找到的nginx报错日志文件打开查看
tail -f /var/log/nginx/error.log#3-通过查看Nginx的报错日志文件可以清晰的看到报错日志是“FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream”;我们若不清楚这个报错信息可以将这个报错内容粘贴到百度查看即可查看到解决方法【该错误的含义是php-fpm的FastCGI无法响应Nginx反向代理过来的内容,在结合浏览器界面上显示的没有发现我们访问的phpinfo.php文件】(总结一下这个问题的原因就是:我们在Nginx上创建的phpinfo.php所在的路径不对,导致Nginx没有找到这个文件;只需要将这个文件在Nginx正确读取的网站路径下配置就可以解决了)#4-查找Nginx对应的正确网站路径(是【/usr/share/nginx/html】,接着在该路径下重新创建phpinfo.php文件)
nginx -V
cd /usr/share/nginx/html
vi phpinfo.php#phpinfo.php文件的内容是
<?php phpinfo(); ?>#5-再次访问【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)即可成功显示php的版本配置信息内容

到这里恭喜你配置Nginx支持php-fpm解析成功了!!!

《1》接下来是通过【mysqli方式 】测试php连接mysql数据库是否正常:

        在浏览器输入Nginx所在服务器的IP地址/mysqli.php即【ip/mysqli.php】(如192.168.1.9/mysqli.php)若显示“数据库连接成功”则表示php连接mysql没有问题(如下图所示)否则就是有问题的(具体的问题需要查看Nginx的错误日志【tail -f /var/log/nginx/error.log】)

《2》接下来是通过【pdo-mysql方式 】测试php连接mysql数据库是否正常:

         在浏览器输入Nginx所在服务器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如192.168.1.9/pdo-mysql.php)若显示“pdo方式连接数据库成功”则表示php连接mysql没有问题(如下图所示)否则就是有问题的(具体的问题需要查看Nginx的错误日志【tail -f /var/log/nginx/error.log】)

二、在LNMP环境下部署WordPress网站项目

        本文以wordpress为例,介绍下在LNMP环境下,如何部署和使用这套博客系统,WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统(CMS),用户可以免费使用、修改和分发,安装完成后,通过后台管理界面进行网站的配置和内容管理。

#在LNMP环境下载安装部署应用项目WordPress详细操作流程#1-进入/data目录然后从WordPress网站下载安装包
cd /data
wget https://cn.wordpress.org/wordpress-6.8.2-zh_CN.tar.gz#2-将下载好的WordPress安装包解压到Nginx网站目录下(/usr/share/nginx/html/)
tar -zxvf wordpress-6.8.2-zh_CN.tar.gz -C /usr/share/nginx/html#3-进入Nginx的默认网站目录下(可以查看到有一个名为wordpress的文件夹里面就是全部的php网站内容)
cd /usr/share/nginx/html/
ls
cd ./wordpress/
ll#4-在浏览器输入NginxIP/wordpress即可访问(若不能访问到安装界面则在后面添加上index.php就可以了)
192.168.1.9/wordpress#5-在mysql数据库中创建wordpress的数据库
/usr/local/mysql/mysql-8.4.6/bin/mysql -uroot -p
create database wordpress;#6-在Nginx的默认网站路径下的wordpress网站中创建【wp-config.php】文件并填写内容
vi /usr/share/nginx/html/wordpress/wp-config.php#6.1-在Nginx的默认网站路径下的wordpress网站中创建【wp-config.php】文件对应的内容
<?php
/*** The base configuration for WordPress** The wp-config.php creation script uses this file during the installation.* You don't have to use the website, you can copy this file to "wp-config.php"* and fill in the values.** This file contains the following configurations:** * Database settings* * Secret keys* * Database table prefix* * ABSPATH** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/** @package WordPress*/// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );/** Database username */
define( 'DB_USER', 'root' );/** Database password */
define( 'DB_PASSWORD', 'abc123456' );/** Database hostname */
define( 'DB_HOST', '127.0.0.1:3336' );/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );/**#@+* Authentication unique keys and salts.** Change these to different unique phrases! You can generate these using* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.** You can change these at any point in time to invalidate all existing cookies.* This will force all users to have to log in again.** @since 2.6.0*/
define( 'AUTH_KEY',         'SXfAJ2,9cW^4[%U/2*}p!2`wa_Nfv:.}:s$a-/(M){cPO{YX1O7];:xFcqjirnn#' );
define( 'SECURE_AUTH_KEY',  '[orgrI*qeAlv10NT6yvLN|KYZ4i8km;X9I%M5=X_x;D*YxE.W`G8zHf-CIW-i$Dj' );
define( 'LOGGED_IN_KEY',    '[0&^_kfTzSk/&8{li3V+M#qt@,T@E;Z*wO>kHEwKV,eM6tFbT$0dZSV+;m|AjOur' );
define( 'NONCE_KEY',        'EIEx?o`;AM@4{aD/V:(to%#)0Xv1=>Z?X!a}mK7$!FrbRoj|1>nnj+**yuejAT~<' );
define( 'AUTH_SALT',        'qd#3G(O:1s?Y<3LKZii ?!&sN@j7jDpa%sej*Po%C}>EUAk!p?@BltS+tbyT*;]L' );
define( 'SECURE_AUTH_SALT', '$LvzuK:/t7_.`SGDCp946r?)*x%srjJreh]z+p4bYCq*rQ <DL98Pe,a%,oS}?S!' );
define( 'LOGGED_IN_SALT',   'rppE.fpZ7MZlaJb.fJU@-^p;4-ObSZg`ay{P>4^d%m1IV`vC$KiMc++1[[s8t*9q' );
define( 'NONCE_SALT',       ']=s+s^ 8rI=q++-&$e,]_#>s,W9E?-8ou-kE==|m_wIA->9u{qoF);Dmf+VZ1(/l' );/**#@-*//*** WordPress database table prefix.** You can have multiple installations in one database if you give each* a unique prefix. Only numbers, letters, and underscores please!** At the installation time, database tables are created with the specified prefix.* Changing this value after WordPress is installed will make your site think* it has not been installed.** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix*/
$table_prefix = 'wp_';/*** For developers: WordPress debugging mode.** Change this to true to enable the display of notices during development.* It is strongly recommended that plugin and theme developers use WP_DEBUG* in their development environments.** For information on other constants that can be used for debugging,* visit the documentation.** @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/*/
define( 'WP_DEBUG', false );/* Add any custom values between this line and the "stop editing" line. *//* That's all, stop editing! Happy publishing. *//** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {define( 'ABSPATH', __DIR__ . '/' );
}/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

注意:在这一步点击【安装WordPress】前一定要先复制一份密码框的内容做备份,否则第一次登录的密码那里你都不知道密码就无法登录了!!!

三、LNMP环境下给Web开启https

 3.1、HTTP与HTTPS

HTTP与HTTPS
序号说明
1HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
2HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版本,HTTPS协议是利用SSL+HTTP协议建立安全信道,加密数据包,提供身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别
1

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

2

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

3

使用https协议需要申请SSL证书,证书有收费和免费的。

现在几乎所有的网站都开启了https协议,所以使用https已经是个趋势。

 3.2、SSL证书的获取

关于证书完整申请的流程如下:

        购买域名--->购买云主机(可获取到公网IP)--->工信部备案域名(备案需要域名和可解析的公网IP地址,最快两周内即可完成备案)--->备案成功后,就可以做域名解析了--->购买SSL证书--->在云主机部署网站程序,加载免费证书。

        注意:商业CA机构颁发证书时,需要绑定公网域名(即:在申请SSL证书之前,你的域名已经申请好了,并且也做了域名备案和解析,否则无法申请SSL证书)。 ​​​​​​​

        现在很多网站都提供免费的SSL证书(如:阿里云 的数字证书服务,可以一次申请3个月免费的SSL证书,过期后,可继续再次申请3个月的免费证书),申请方式如下:

 3.3、绑定SSL证书到Nginx

        将会申请好的证书绑定到我们服务器的Nginx配置上即可,在Nginx上配置ssl证书,需要在nginx.conf中添加一个server段,内容如下:

#1-在Nginx的配置文件路径创建一个证书的文件夹ssl,然后将SSL证书上传到Nginx的配置文件所在路径下的ssl中(如:/etc/nginx/)
cd /etc/nginx/
mkdir ssl#2-编辑Nginx的配置文件
vi /etc/nginx/nginx.conf#2.1-编辑Nginx启用SSL证书的配置内容server{listen       443 ssl;listen       [::]:443 ssl;root         /usr/share/nginx/html;server_name ck.site www.ck.site;ssl_certificate   ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;ssl_prefer_server_ciphers on;ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers     "HIGH:!aNULL:!MD5";add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-Xss-Protection 1;location / {root html;index  index.html index.htm index.php;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-验证修改后的Nginx的配置文件nginx.conf是否正确
nginx -t#4-查看系统当前的Nginx进程获取到Nginx的父进程PID编号(如:5035)
ps -ef | grep nginx#5-在不影响Nginx正常业务处理的情况下重启Nginx
kill -HUP 5035#6-在浏览器输入域名访问即可查看到效果

 3.4、配置Nginx只能通过域名访问不能使用IP访问

#配置Nginx只能通过域名(如:ck.site)访问不能使用IP访问的配置流程#1-在Nginx的配置文件所在路径中(如:/etc/nginx/)
cd /etc/nginx/#2-编辑Nginx的配置文件
vi /etc/nginx/nginx.conf#3-实现只能通过域名(如:ck.site)访问不能使用IP访问的nginx配置内容server {listen 80 default_server;listen [::]:80 default_server;server_name _;# 当用IP访问时,返回500错误码#return 500;#把IP和其他域名访问的流量永久重定向到我们的域名return 301 https://ck.site$request_uri;}server {listen 443 ssl default_server;listen [::]:443 ssl default_server;ssl_certificate ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;server_name _;#return 500;#把IP和其他域名访问的流量永久重定向到我们的域名return 301 https://ck.site$request_uri;}server {listen 80;listen [::]:80;listen 443;listen [::]:443;server_name ck.site www.ck.site;#将IP和其他域名访问的流量永久重定向到我们的域名中return 301 https://$server_name$request_uri;location / {root /usr/share/nginx/html;#根据需要设置访问白名单(这里只允许192.168.1网段与192.168.3网段的设备访问)allow 192.168.1.0/24;allow 192.168.3.0/24;deny  all;}}#4-验证修改后的Nginx的配置文件nginx.conf是否正确
nginx -t#5-查看系统当前的Nginx进程获取到Nginx的父进程PID编号(如:5035)
ps -ef | grep nginx#6-在不影响Nginx正常业务处理的情况下重启Nginx
kill -HUP 5035#7-在浏览器输入域名访问即可查看到效果

        如果要在本地的Windows系统使用自己的域名测试,则需要进入【C:\Windows\System32\drivers\etc】路径,将该路径下的【hosts】文件复制一份到桌面上,然后使用文本编辑器打开输入自己的域名及其IP地址后保存;然后在将桌面上修改好的这个hosts文件复制粘贴到【C:\Windows\System32\drivers\etc】路径下替换原有的hosts文件即可。

注意,在正式修改Windows系统的hosts文件前先复制一份作为备份。

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

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

相关文章

论文阅读-Correlate and Excite

文章目录1 背景2 创新点3 方法3.1 总体结构3.2 代价体计算3.3 引导式代价体激励&#xff08;GCE&#xff09;3.4 TopK视差回归4 效果参考资料1 背景 在IGEV中构建几何编码体CGC_GCG​时用到了本文将要描述的CoEx&#xff0c;IGEV中没有说明为什么要这样做&#xff0c;本文就是…

探索大语言模型(LLM):Open-WebUI的安装

前言 Open-WebUI 是一款专为大模型设计的开源可视化交互工具&#xff0c;它通过类 ChatGPT 的直观界面&#xff0c;让用户无需代码即可管理、调试和调用本地或云端的大语言模型&#xff08;LLMs&#xff09;&#xff0c;成为私有化部署的便捷工具&#xff0c;本文将介绍如何部…

企业远程访问方案选择:何时选内网穿透,何时需要反向代理?

企业远程访问需求日益增长&#xff0c;无论是远程办公、分支互联还是服务发布&#xff0c;选择合适的网络方案都至关重要。内网穿透和反向代理是两种常见的技术手段&#xff0c;但它们的设计目标和适用场景截然不同。本文将客观分析两者的特点&#xff0c;帮助企业做出更合理的…

ARM指令集(Instruction Set)细节

ARM指令集(Instruction Set)细节 本文旨在深入探讨 ARM 指令集(Instruction Set)的细节。这是一个非常广泛的主题&#xff0c;我会将其分解为关键概念、不同版本的区别以及核心特性&#xff0c;并提供一些示例。 ARM 指令集的核心在于 RISC&#xff08;精简指令集计算机&#x…

Vue基础知识-Vue集成 Element UI全量引入与按需引入

一、方式一&#xff1a;全量引入 Element UI全量引入即一次性加载 Element UI 所有组件和样式&#xff0c;优点是配置简单&#xff0c;适合快速开发&#xff1b;缺点是打包体积较大&#xff0c;生产环境可能存在冗余。1. 安装 Element UI全量引入只需安装 Element UI 核心依赖&…

leetcode26(字母异位词分组)

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。示例 1:输入: strs ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","…

光平面标定 (Laser Plane Calibration) 的原理和流程

光平面标定 (Laser Plane Calibration) 是线激光3D相机系统中最为关键且精巧的一步,它直接决定了最终的测量精度。 核心目标 光平面标定的目标是:精确地求出激光器发射出的那个扇形激光平面,在相机坐标系下的数学方程。 这个方程通常表示为一般式: Ax + By + Cz + D = 0…

项目1——单片机程序审查,控制系统项目评估总结报告

执行摘要 本报告对基于STM32F103RET6的老虎机控制系统进行了全面的技术评估。通过深入分析代码结构、系统架构、安全机制和潜在风险&#xff0c;为项目的进一步开发和部署提供专业建议。 核心发现 ✅ 系统架构: 设计合理&#xff0c;模块化程度高⚠️ 安全性: 存在输入验证和并…

【Qt应用程序】

Qt应用程序摘要概述快速开始Qt在线下载与安装Visual Studio开发Qt项目VS配置Qt扩展VS创建Qt项目配置qDebug调试信息配置源程序的字符集项目结构对象树与内存回收基础数据类型信号槽定时器窗口QWidgetQMainWindowQDialog窗口布局窗口中添加右键菜单控件按钮类容器类自定义控件事…

机器学习实战(一): 什么是机器学习

机器学习&#xff1a;让机器学会思考的魔法前言 在当今数字化的浪潮中&#xff0c;人工智能无疑是最引人注目的技术之一&#xff0c;而机器学习正是其核心驱动力。它不再是科幻电影中的遥远设想&#xff0c;而是已经渗透到我们日常生活的方方面面&#xff0c;从智能推荐到自动驾…

java流水号生成方式

1、基于时间戳生成流水号利用当前时间戳生成流水号&#xff0c;可以确保唯一性。通过格式化时间戳&#xff0c;可以生成固定位数的流水号。SimpleDateFormat sdf new SimpleDateFormat("yyyyMMddHHmmssSSS"); String serialNumber sdf.format(new Date());特点&…

前端工具大全:前端开发工具、前端调试工具、前端性能优化工具与构建工具的对比与最佳实践

在现代前端开发中&#xff0c;工具链已经成为开发效率与代码质量的关键。无论是 编辑器与 IDE、构建与打包工具、调试工具 还是 性能优化工具&#xff0c;每一个环节都有成熟的解决方案。 然而&#xff0c;工具太多也容易让团队选择困难&#xff1a;该选 VS Code 还是 WebStorm…

ABAP 使用ECHARTS实现图表展示

最近发现ECHARTS可以整合到SAP中的开源项目&#xff0c;可以丝滑的在SAP中展示各种图表&#xff0c;还是相当惊艳的。 ECHARTS官方网站&#xff1a;https://echarts.apache.org/examples/zh/index.html 今天顺手在开发环境成功安装了&#xff0c;做下记录&#xff1a; 1、ABA…

hot100-贪心算法(附图解思路)

贪心算法的核心&#xff0c;就是用局部最优去代替全局最优。一般的步骤就是去试思路&#xff0c;然后举反例&#xff0c;如果举不出反例&#xff0c;基本可以看作是正确的方法。121. 买卖股票的最佳时机&#xff08;Best Time to Buy and Sell Stock&#xff09;难度&#xff1…

从齿轮到智能:机器人如何重塑我们的世界【科普类】

新晋码农一枚&#xff0c;小编会定期整理一些写的比较好的代码和知识点&#xff0c;作为自己的学习笔记&#xff0c;试着做一下批注和补充&#xff0c;转载或者参考他人文献会标明出处&#xff0c;非商用&#xff0c;如有侵权会删改&#xff01;欢迎大家斧正和讨论&#xff01;…

python超市购物 2025年6月电子学会python编程等级考试一级真题答案解析

python超市购物 2025年6月 python编程等级考试一级真题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解

浅谈代理流程自动化 (APA)

一、什么是APA Agentic Process Automation (APA)APA 利用大型语言模型 &#xff08;LLM&#xff09; 自动执行复杂的动态工作流程。它可以自主构建、执行和调整工作流程&#xff0c;同时将人员干预降至最低。与依赖基于规则的系统的传统机器人流程自动化 &#xff08;RPA&…

LeetCode - 和为K的子数组 / 爬楼梯

​欢迎光临小站&#xff1a;致橡树 和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例…

day40 SQLite3单词查询程序设计与实现

day40 SQLite3单词查询程序设计与实现 核心知识点 SQLite3 C接口应用&#xff1a;使用sqlite3_open、sqlite3_exec等函数操作数据库回调函数机制&#xff1a;通过回调函数处理查询结果集SQL语句构建&#xff1a;动态生成SELECT、INSERT等SQL语句事务处理&#xff1a;使用BEGIN …

GitHub 热榜项目 - 日榜(2025-09-08)

GitHub 热榜项目 - 日榜(2025-09-08) 生成于&#xff1a;2025-09-08 统计摘要 共发现热门项目&#xff1a;17 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术趋势&#xff1a;AI智能体与LLM应用持续爆发&#xff08;emcie-co/parlant、coleam00…