RHCE- 4-Web服务器(2)

news2024/11/19 23:41:46

基于https协议的静态网站

概念解释

  • 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。

  • HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。

  • HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext TransferProtocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。

  • HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间

  • SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)

SSL协议分为两层:
  • SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能

  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等

SSL协议提供的服务:
  • 认证用户和服务器,确保数据发送到正确的客户机和服务器

  • 加密数据以防止数据中途被窃取

  • 维护数据的完整性,确保数据在传输过程中不被改变

HTTPS安全通信机制

图:

过程:
  • (1)客户端(通常是浏览器)向服务端发送加密通信的请求,然后连接到服务端的443端口,这被叫做ClientHello请求,客户端主要向服务器提供以下信息

    • 支持的协议版本,比如TLS 1.0版。

    • 一个客户端生成的随机数1,稍后用于生成"会话密钥"。

    • 支持的加密方法,比如RSA公钥加密。

    • 支持的压缩方法。

  • (2)服务端回应(SeverHello),接收到信息之后给予客户端响应握手信息,服务器的回应包含以下内容:

    • 确认使用的加密通信协议版本,比如TLS 1.0版本,。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

    • 一个服务器生成的随机数2,稍后用于生成"会话密钥"。

    • 确认使用的加密方法,这个加密算法一定是client发送给server加密算法的子集,比如RSA公钥加密

    • 服务器证书:可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,传送的证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名等

    • 除此之外,如果服务器需要使用双向认证,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书

  • (3)客户端回应:客户端收到服务器回应以后进行证书解析,首先会验证证书是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机数3(预主密钥"pre-master key"),接下来是通过随机值1、随机值2和随机数3组装会话秘钥。然后通过服务器端证书的公钥加密会话秘钥,传送加密信息,内容如下:

    • 一个随机数C。该随机数用服务器公钥加密,防止被窃听。

    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验

  • (4)服务器的最后回应:服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"(对称密钥)。然后,向客户端最后发送下面信息。

    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

  • 至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

  • 大致分为三个阶段:

    • (1)(2)认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。

    • (3)(4)协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

    • 加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的网络环境

PKI 主要包括四个部分:X.509 格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA 操作协议;CA管理协议;CA政策制定

X.509通用的证书格式包含三个文件:key,csr,crt。

key是私钥文件

csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名

crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

使用nginx的http_ssl模块建立加密认证网站

查看
 [root@server ~]# nginx  -V
 # 看是否有--with-http_ssl_module模块,否则需要安装mod_ssl
配置文件:
  • 证书文件:/……/xxxx.crt

  • 私钥文件:/……/xxxx.key

ssl配置文件的主要参数
 [root@server ~]# vim  /etc/nginx/nginx.conf   # 主配置文https段,默认为注释,可以取消注释
 # Settings for a TLS enabled server.
 #
 #    server {
 #        listen       443 ssl http2;    # 监听443端口
 #        listen       [::]:443 ssl http2;   
 #        server_name  _;                  # 域名
 #        root         /usr/share/nginx/html;    # 网页默认
 #
 #        ssl_certificate "/etc/pki/nginx/server.crt";   # 证书路径
 #        ssl_certificate_key "/etc/pki/nginx/private/server.key";  # 私钥文件路径
 #        ssl_session_cache shared:SSL:1m;
 #        ssl_session_timeout  10m;
 #        ssl_ciphers PROFILE=SYSTEM;
 #        ssl_prefer_server_ciphers on;
 #
 #        # Load configuration files for the default server block.
 #        include /etc/nginx/default.d/*.conf;
 #
 #        error_page 404 /404.html;
 #            location = /40x.html {
 #        }
 #
 #        error_page 500 502 503 504 /50x.html;
 #            location = /50x.html {
 #        }
 ​
实验1
  • 搭建nginx+ssl的加密认证web服务器

  • 第一步:准备工作

 # 恢复快照
 [root@server ~]# setenforce  0           
 ​
 [root@server ~]# systemctl stop  firewalld
 ​
 [root@server ~]# systemctl disable  firewalld
 ​
 [root@server ~]# yum  install  nginx  mod_ssl -y
 ​
 [root@server ~]# systemctl start  nginx   # 启动
  
 [root@server ~]# systemctl enable  nginx  # 设置开机启动
  • 第二步:新建存储网站数据文件的目录

 [root@server ~]# mkdir  -p  /www/zy
 # 私用xftp将windows的zy网站数据文件上传到/www/zy目录中
  • 第三步:制作证书

 # 在/etc/nginx目录下制作整数所用的私钥文件zy.key
 [root@server ~]# openssl  genrsa  -aes128  2048 > /etc/nginx/zy.key
 Generating RSA private key, 2048 bit long modulus (2 primes)
 ............+++++
 ......................................................................................................................................................................................................+++++
 e is 65537 (0x010001)
 Enter pass phrase:             # 输入加密私钥的密码123456
 Verifying - Enter pass phrase: # 再输一遍
 ​
 # 制作证书
 [root@server ~]# openssl  req  -utf8  -new  -key  /etc/nginx/zy.key  -x509  -days  365  -out  /etc/nginx/zy.crt
 Enter pass phrase for /etc/nginx/zy.key:    # 需要输入加密私钥的密码
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 # 注意:下列证书信息项目,在面试时常问
 Country Name (2 letter code) [AU]:86                              # 国家代码
 State or Province Name (full name) [Some-State]:shanxi            # 省份
 Locality Name (eg, city) []:xi'an                                 # 城市
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab# 公司
 Organizational Unit Name (eg, section) []:RHCE                    # 部门
 Common Name (e.g. server FQDN or YOUR name) []:server             # 主机名
 Email Address []:andy@qq.com                                      # 邮箱
 ​
 # 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
 [root@server ~]# cd  /etc/nginx
 [root@server nginx]# cp  zy.key  zy.key.org
 [root@server nginx]# openssl rsa -in zy.key.org -out zy.key
 Enter pass phrase for zy.key.org:  # 输入加密私钥的密码
 writing RSA key
  • 第四步:修改配置文件

 [[root@server nginx]# cd  ~
 [root@server ~]# vim  /etc/nginx/nginx.conf
 ​
 server {
                 listen       443 ssl http2;
                 server_name  192.168.48.130;
                 root         /www/zy;
                 ssl_certificate  /etc/nginx/zy.crt;
                 ssl_certificate_key  /etc/nginx/zy.key;
         }
 server {      # 输入http跳转到https
                 listen 80;
                 server_name 192.168.48.130;
                 return 301 https://192.168.48.130;
         }
  • 第五步:重启服务

[root@server nginx]# cd  ~
 [root@server ~]# nginx  -t
 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful
 [root@server nginx]# systemctl start nginx
  • 第六步:测试

 # 在windows端打开浏览器,输入https://192.168.48.130,点击高级->接受风险并继续

image-20230528104515175

实验2
  • 组建多个子目录网站www.openlab.com,该网站有2个子目录www.openlab.com/file和www.openlab.com/ftp,要求:

    • file数据使用http读取

    • ftp数据使用https读取

  • 第一步:准备工作

# 恢复快照
[root@server ~]# setenforce  0           

[root@server ~]# systemctl stop  firewalld

[root@server ~]# systemctl disable  firewalld

[root@server ~]# yum  install  nginx -y

[root@server ~]# systemctl start  nginx   # 启动nginx
 
[root@server ~]# systemctl enable  nginx  # 设置开机启动
  • 第二步:新建网页目录并建立网页

[root@server ~]# mkdir  -p  /www/file
[root@server ~]# mkdir  -p  /www/ftp
[root@server ~]# echo  "file"  >  /www/file/index.html  # 写入网站数据
[root@server ~]# echo  "ftp"  >  /www/ftp/index.html
  • 第三步:建立本地hosts域名映射

[root@server ~]# vim  /etc/hosts   # 添加如下内容
192.168.48.130  www.openlab.com
  • 第四步:建立file网站

[root@server ~]# vim  /etc/nginx/nginx.conf 
server {
                listen       80;
                server_name  www.openlab.com;
                location   /file {
                                        alias /www/file/;
                                        index index.html index.htm;
                                }
           }
  • 第五步:建立https的ftp网站

# 制作私钥
[root@server ~]# openssl  genrsa  -aes128  2048 > /etc/nginx/ftp.key
Generating RSA private key, 2048 bit long modulus (2 primes)
............+++++
......................................................................................................................................................................................................+++++
e is 65537 (0x010001)
Enter pass phrase:             # 输入加密私钥的密码123456
Verifying - Enter pass phrase: # 再输一遍

# 制作证书
[root@server ~]# openssl  req  -utf8  -new  -key  /etc/nginx/ftp.key  -x509  -days  365  -out  /etc/nginx/ftp.crt
Enter pass phrase for /etc/nginx/ftp.key:    # 需要输入加密私钥的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
# 注意:下列证书信息项目,在面试时常问
Country Name (2 letter code) [AU]:86							  # 国家代码
State or Province Name (full name) [Some-State]:shanxi			  # 省份
Locality Name (eg, city) []:xi'an								  # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab# 公司
Organizational Unit Name (eg, section) []:RHCE                    # 部门
Common Name (e.g. server FQDN or YOUR name) []:server             # 主机名
Email Address []:andy@qq.com									  # 邮箱

# 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
[root@server ~]# cd  /etc/nginx
[root@server nginx]# cp  ftp.key  ftp.key.org
[root@server nginx]# openssl rsa -in ftp.key.org -out ftp.key
Enter pass phrase for ftp.key.org:  # 输入加密私钥的密码
writing RSA key
[root@server ~]# vim  /etc/nginx/nginx.conf      # 编辑配置文件
server {
                listen       443 ssl http2;
                server_name  www.openlab.com;
                location /ftp {
                                        alias         /www/ftp;
                                        index  index.html  index.htm;
                                }
                ssl_certificate       "/etc/nginx/ftp.crt";
                ssl_certificate_key   "/etc/nginx/ftp.key";
        }
  • 第六步:重启服务

[root@server ~]# systemctl  restart  nginx
  • 第七步:测试

# 输入www.openlab.com/file
# 输入https://www.openlab.com/ftp,点击高级->接受风险并继续

项目:使用LNMP搭建私有云存储

准备工作

恢复快照,关闭安全软件
[root@server ~]# setenforce  0

[root@server ~]# systemctl stop  firewalld
搭建LNMP环境
[root@server ~]# yum  install  nginx  mariadb-server  php*  -y
上传软件
  • 使用xftp将nextcloud-25.0.1.zip软件压缩包上传到Linux的根目录,并解压缩

[root@server ~]# cd  /

[root@server /]# unzip  /nextcloud-25.0.1.zip 
设置nextcloud安装命令权限
[root@server /]# chmod  -Rf  777  /nextcloud
设置数据库
[root@server /]# systemctl start  mariadb   # 启动数据库

[root@server /]# mysql
# 数据库设置
MariaDB [(none)]> create  database  nextcloud;  # 创建数据库

MariaDB [(none)]> create  user  'nextcloud'@'localhost' identified  by  '123456';   # 创建用户及密码

MariaDB [(none)]> grant all on  nextcloud.*  to  'nextcloud'@'localhost';
# 设置权限
 
MariaDB [(none)]> exit       # 退出
重启数据库
[root@server /]# systemctl restart  mariadb
配置nginx
[root@server /]# vim  /etc/nginx/nginx.conf 
  server {
        listen       80;
        server_name  192.168.48.130;
        root         /nextcloud;
    }
重启httpd服务
[root@server /]# systemctl  start  nginx
安装
  • 打开浏览器后输入服务器IP地址,进入nextcloud安装向导

  • 管理员的用户名即密码自定

  • 存储与数据库:选择MySQL/MariaDB,设置数据库用户为nextcloud,密码:123456,数据库名:nextcloud,主机名:localhost

内网穿透
cpolar的域名信任
[root@server ~]# vim  /nextcloud/config/config.php
# 按照下面的内容对源文件进行修改
<?php
$CONFIG = array (
  'instanceid' => 'ocvy7jm0iqom',
  'passwordsalt' => 'jLg0GXwJtlj8vowMsLpN5MbBSRsoiC',
  'secret' => 'ayTVaC6dsHrSKgXazVP6llFMWdNVxjF582v5pAPKuyEecdTU',
  'trusted_domains' =>
  array (
          0 => '192.168.48.130',
          1 => '2dc0afad.r17.cpolar.top' ,  # 单引号中为cpolar给的域名不要http前缀
  ),
  'datadirectory' => '/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '25.0.1.1',
  'overwrite.cli.url' => 'http://192.168.48.130',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud',
  'dbpassword' => '123456',
  'installed' => true,
);
# 保存退出后重试

image-20230601115847199

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LVS负载均衡(load balance)

一 LVS LVS&#xff1a;Linux Virtaul Server&#xff0c;该软件的功能是实现 LB&#xff08;load balance&#xff09; 二LVS 的三种工作模式 1.NAT 模式&#xff08;NAT&#xff09; LVS 服务器同时充当一台 NAT 网关&#xff0c;拥有公有 IP &#xff0c;同时负责将针对此…

Apple Vision Pro应用合集

这里给大家分享一个网站&#xff0c;手机了最新的apple vision pro 上面运行的应用。 1、查找应用&#xff1a;用户可以浏览特色推荐的应用&#xff0c;或者通过随机挑选功能发现新的应用。 2、社区交流&#xff1a;提供社区功能&#xff0c;用户可以在这里交流使用体验、分享…

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件 0. 引言1. 安装 Markdown Viewer 插件2. 使用 Markdown Viewer 阅读 Markdown 格式文件 0. 引言 大部分程序员都喜欢 Markdown 格式的文件&#xff0c;这时给一些没有在电脑上安装 Markdown 编辑器的同事分享资料时&…

SAP gui 组服务器 提示 Error service sapmsPRD unknown

/etc/hosts 追加IP地址和域名的配对关系 /etc/services 追加 sapms[sid] 3601/tcp

java数据结构与算法刷题-----LeetCode665. 非递减数列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;时间复杂度O( n n n)&#xff0c;空间复杂度…

在vscode终端terminal加大栈空间How to increase max stack size in c++ using vscode

参考:https://devpress.csdn.net/cloud/63268204fd0b112779162383.html Answer a question In many dynamic programming and graph problems it is required to do long depth recursion. I am currently using vscode and mingw in windows for my c programs. But in defau…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…

MySQL Explain 字段详解

Explain 工具介绍 Explain 一般被称为解释器&#xff0c;通过 Explain 工具&#xff0c;我们能分析我们使用的查询语句或是结构的性能瓶颈&#xff0c;它提供 MySQL 如何执行语句的信息。 使用语法&#xff1a; explain [extended|partition] select在 select 关键字前加 ex…

【多模态融合】SuperFusion 激光雷达与相机多层次融合 远距离高清地图预测 ICRA 2024

前言 本文介绍激光雷达与相机进行多层次融合&#xff0c;包括数据级融合、特征级融合和BEV级融合。 融合后的BEV特征可以支持不同的任务头&#xff0c;包括语义分割、实例编码和方向预测&#xff0c;最后进行后处理生成高清地图预测&#xff0c;它是来自ICRA 2024的。 会讲解…

【C++ leetcode】双指针(专题完结)

15. 三数之和 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

3.26学习总结

java 实例变量和局部变量 实例变量是记录这个类中对象的特点的每一个对象的实例变量都可以不同(例如名字,性别等),其中一个对象的实例变量改变不会影响其他的变量. 类变量是一种特殊的实例变量,他的特殊在于所有的对象的类变量都是相同的,当一个对象改变了类变量那么所有对象…

0101支付安全-支付模块-项目实战

文章目录 一、信息安全的基础-机密性1 相关概念2 对称加密和非对称加密 二、身份认证三 摘要算法四、数字签名五、数字证书结语 在支付过程中&#xff0c;设计多方的敏感信息&#xff0c;那么安全尤为重要。下面先简单介绍下&#xff0c;相关概念。 一、信息安全的基础-机密性 …

Java项目:76 Springboot学生读书笔记共享

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本文从管理员、用户的功能要求出发&#xff0c; 读书笔记共享平台系统中的功能模块主要是实现管理员&#xff1b;首页、个人中心、用户管理、…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置&#xff08;Intellij IDEA - Settings - Plugins &#xff09; 再次创建项目可以看到Android的选项 解决Android导入项目时Gradle下载速度慢/超时/失败

Ansys Speos | Light Expert Group探测器组使用技巧

附件下载 联系工作人员获取附件 概述 相机挡板的设计需要在光路的不同位置同步多个照度图&#xff0c;以尽量减少杂散光。2023R2 Speos提供了一种新的探测器&#xff0c;用于高阶杂散光分析&#xff0c;可以同时对多个探测器进行光线追迹。Light Expert工具可以即时过滤3D视…

docker安装elasticseachkibana

1.docker安装es 创建本机挂载目录&#xff0c;与容器上目录映射 /Users/wangpei/2024/mydata/elasticsearch conf下创建yml文件 echo "http.host : 0.0.0.0" >> /Users/wangpei/2024/mydata/elasticsearch/config/elasticsearch.yml 安装容器&#xff1a; d…

书籍推荐|meta分析R语言实践教程-Doing Meta-Analysis with R: A Hands-On Guide

“The problems are solved, not by giving new information, but by arranging what we have known since long.” – Ludwig Wittgenstein 推荐理由 《Doing Meta-Analysis with R: A Hands-On Guide》是由 Mathias Harrer, Pim Cuijpers, Toshi Furukawa, 和 David Ebert所…

排序(冒泡/快速/归并)

冒泡排序 时间复杂度为 O(n^2) 原理 比较相邻的元素. 如果第一个比第二个大,就交换他们两个.依次比较每一对相邻的元素—>结果 : 最后的元素是这组数中最大的重复上述步骤 , 除了最后一个[]因为最后一个已经是排好序的了(这组数中最大的那个)]持续对越来越少的元素进行如上…

如何备考2025年AMC8竞赛?吃透2000-2024年600道真题(免费送题)

最近有家长朋友问我&#xff0c;现在有哪些类似于奥数的比赛可以参加&#xff1f;我的建议可以关注下AMC8的竞赛&#xff0c;类似于国内的奥数&#xff0c;但是其难度要比国内的奥数低一些&#xff0c;而且比赛门槛更低&#xff0c;考试也更方便。比赛的题目尤其是应用题比较有…

NIO与AIO

NIO与AIO NIO模型 在 LInux 环境中&#xff0c;java.nio.channels.Selector 的子类叫做 sun.nio.ch.EPollSelectorImpl &#xff0c;其底 层是基于 Epoll 模型去实现的 IO 多路复用器。 对于 Epoll 模型 我们需要了解到它底层的三个函数 在 JDK 实现的底层中&#xff0c;EPol…