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

PG14安装_rpm方式

一、前期准备

发现生产环境有用rpm安装,故整理安装rpm安装步骤,目的是准备walminer恢复数据用的环境

二、安装包下载

https://download.postgresql.org/pub/repos/yum/ 含多个版本
https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-7-x86_64/ 仅14版本

postgresql14-server-14.8-1PGDG.rhel7.x86_64.rpm
postgresql14-libs-14.8-1PGDG.rhel7.x86_64.rpm
postgresql14-14.8-1PGDG.rhel7.x86_64.rpm
postgresql14-contrib-14.8-1PGDG.rhel7.x86_64.rpm

三、环境准备

环境准备需要使用root用户进行操作。本文档以CentOS7.9发行版操作系统为例,命令如下。如若是其他的linux发行版,准备工作这一块内容操作步骤是差不多的,linux命令需要调整。

3.1、配置本地yum源

--上传操作系统镜像到/opt目录
[root@localhost ~]# ls -l /opt | grep Cen*
-rw-r--r--.  1 root root 4712300544 Aug  8 05:27 CentOS-7-x86_64-DVD-2009.iso
--挂载镜像
[root@localhost ~]# mount /opt/CentOS-7-x86_64-DVD-2009.iso /mnt/
[root@localhost ~]# df -h | grep mnt
/dev/loop0      4.4G  4.4G     0 100% /mnt
--设置开机挂载
cat << EOF >> /etc/fstab
/dev/loop0    /mnt        iso9660 loop            0 0
EOF
--配置本地yum源文件
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat >> /etc/yum.repos.d/os.repo <<"EOF"
[OS1]
name=OS
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

3.2、安装依赖包

首先需要安装一些必要的依赖,PostgreSQL安装的过程需要使用到这些linux包。

yum install libxslt libicu python36-libs python2-libs libperl.so

3.3、关闭防火墙

禁用和启用二选一

--禁用防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service 
--启用防火墙
firewall-cmd --zone=public --add-port=15400/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload
--禁用防火墙区域偏移
sed -i 's/^AllowZoneDrifting=yes/AllowZoneDrifting=no/' /etc/firewalld/firewalld.conf 

3.4、关闭selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0 

3.5、修改操作系统打开最大文件句柄数

cat >> /etc/security/limits.conf << "EOF"
#add by postgres
postgres    soft    nproc    65536
postgres    hard    nproc    65536
postgres    soft    nofile   65536
postgres    hard    nofile   65536
postgres    soft    stack    1024000
postgres    hard    stack    1024000
EOF

该配置在关闭linux访问终端session重新登录之后生效,ulimit -n的值会变成65535 。进行这一步操作的目的是防止linux操作系统内打开文件句柄数量的限制,避免不必要的故障。

3.6、修改磁盘调度

echo deadline > /sys/block/sda/queue/scheduler

3.7、修改磁盘预读

/sbin/blockdev --setra 8192 /dev/sda

3.8、查看磁盘预读

/sbin/blockdev --getra /dev/sda

3.9、设置系统内核参数

cp /etc/sysctl.conf /etc/sysctl.confbak
cat >> /etc/sysctl.conf <<EOF
#add by postgres
#关闭sysrq功能
kernel.sysrq = 0
#关闭路由转发
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 2
#内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries = 2
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_tw_buckets = 6000
#启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 10
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 16384
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.file-max = 1024000
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.route.gc_timeout = 100
#系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128
net.core.somaxconn=1024
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
EOF

3.10、关闭进程间通信

#CentOS openEuler操作系统默认为关闭,可以跳过该步骤
sed -i 's/#RemoveIPC=no/RemoveIPC=no/g' /etc/systemd/logind.conf
systemctl daemon-reload
systemctl restart systemd-logind

四、安装数据库软件

cd /opt
rpm -ivh *.rpm

*会自动处理rpm安装顺序
rpm安装方式会自动创建postgres用户
二进制文件位置:/usr/pgsql-14/bin

五、创建数据目录(可选)

如果采用默认数据目录,该步骤忽略

mkdir -p /pgdata
chown -R postgres:postgres /pgdata
chmod -R 755 /pgdata

六、初始化实例

根据情况,选择以下任意一种

6.1.场景1:以postgres用户初始化实例

  • 默认初始化实例数据目录位置:/var/lib/pgsql/14/data/
su - postgres
cd /usr/pgsql-14/bin
./initdb 
  • 如果自定义数据目录位置:
su - postgres
cd /usr/pgsql-14/bin
./initdb 
--username=postgres  \
-D /pgdata \
--encoding=UTF8 \
--lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8参数说明:
--lc-collate: 字符串排序的顺序
--lc-ctype:字符分类

6.2.场景2:以自定义用户初始化实例

数据库里会创建1个和操作系统用户fuwa同名的用户,该数据库用户fuwa是超级用户。假如创建扩展需要切换的超级用户是fuwa,而不是postgres

--赋予临时目录权限
su - root
chmod -R 777 /var/run/postgresql--创建用户
groupadd -g 5001 fuwa
useradd -G fuwa -g 5001 fuwa
echo "fuwa"|passwd --stdin  fuwa--初始化实例
su - fuwa
/usr/pgsql-14/bin/initdb -D /home/fuwa/data--启库
su - fuwa
/usr/pgsql-14/bin/pg_ctl -D /home/fuwa/data start--登录(需指定postgres用户,不然提示fuwa数据库不存在)
[fuwa@localhost log]$ /usr/pgsql-14/bin/psql postgres--查看用户/模式/数据库(注意和postgres操作用户初始化实例的区别)
postgres=# \duList of rolesRole name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------fuwa      | Superuser, Create role, Create DB, Replication, Bypass RLS | {}postgres=# \dn
List of schemasName  | Owner 
--------+-------public | fuwa
(1 row)postgres=# \lList of databasesName    | Owner | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+-------+----------+-------------+-------------+-------------------postgres  | fuwa  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | template0 | fuwa  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/fuwa          +|       |          |             |             | fuwa=CTc/fuwatemplate1 | fuwa  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/fuwa          +|       |          |             |             | fuwa=CTc/fuwa
(3 rows)--切换用户(注意和postgres操作用户初始化实例的区别)
mix_db=> \c mix_db postgres
connection to server on socket "/var/run/postgresql/.s.PGSQL.5434" failed: FATAL:  role "postgres" does not exist
Previous connection kept
mix_db=> \c mix_db fuwa
You are now connected to database "mix_db" as user "fuwa".

七、启停

7.1、方式1:系统服务

开机自启系统服务文件位置:/usr/lib/systemd/system/postgresql-14.service

  • 默认初始化实例数据目录位置
systemctl start postgresql-14.service
systemctl status postgresql-14.service
  • 自定义数据目录初始化实例
--1.更改开机自启系统服务文件中数据目录位置
vi /usr/lib/systemd/system/postgresql-14.service
Environment=PGDATA=/var/lib/pgsql/14/data/  替换为自定义数据目录--2.启动
systemctl start postgresql-14.service
systemctl status postgresql-14.service

7.2、方式2:命令

--启动命令
pg_ctl start -D /var/lib/pgsql/14/data/
--重启命令
pg_ctl restart  -D /var/lib/pgsql/14/data/
--查看数据库运行状态
pg_ctl status  -D /var/lib/pgsql/14/data/
--停止数据库
pg_ctl stop  -D /var/lib/pgsql/14/data/

八、配置环境变量

echo "##postgres user env configuration" >> /var/lib/pgsql/.bash_profile
cp /var/lib/pgsql/.bash_profile  /var/lib/pgsql/.bash_profile
sed -i 's/^export PATH/#export PATH/'  /var/lib/pgsql/.bash_profile
echo "#add by postgres" >>  /var/lib/pgsql/.bash_profile
echo 'export PGHOME=/usr/pgsql-14' >>  /var/lib/pgsql/.bash_profile
echo 'export PGPORT=5432' >>  /var/lib/pgsql/.bash_profile
echo 'export PATH=$PGHOME/bin:$PATH' >>  /var/lib/pgsql/.bash_profile
echo 'export MANPATH=$PGHOME/share/man:$MANPATH' >>  /var/lib/pgsql/.bash_profile
echo 'export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH' >>  /var/lib/pgsql/.bash_profile
echo 'export LANG="en_US.UTF-8"' >>  /var/lib/pgsql/.bash_profile
echo 'export DATE=`date +"%Y%m%d%H%M"`' >>  /var/lib/pgsql/.bash_profile
source /var/lib/pgsql/.bash_profile	

九、参数配置

配置文件:
位置:数据目录PGDATA目录
postgresql.conf --数据库参数
pg_hba.conf --用户访问权限文件

9.1、数据库参数配置(含归档配置)

--创建归档目录
mkdir -p /var/lib/pgsql/14/pg_archive
--更改配置文件
cd $PGDATA
cp postgresql.conf postgresql.confbak
sed -i "/^#listen_addresses = 'localhost'/s/#listen_addresses = 'localhost'/listen_addresses = '*'/" postgresql.conf
sed -i "s/^#port = 5432/port = 5432/" postgresql.conf
sed -i 's/max_connections = 100/max_connections = 500/' postgresql.conf
sed -i "/^#wal_level/s/^#//" postgresql.conf #去掉注释
sed -i 's/#archive_mode = off/archive_mode = on/' postgresql.conf
sed -i "/^#archive_command = ''/s/#archive_command = ''/archive_command ='\/usr\/bin\/lz4 -q -z %p \/var\/lib\/pgsql\/14\/pg_archive/%f.lz4'/" postgresql.conf  #-q取消警告-z强制压缩
sed -i "/^#log_destination = 'stderr'/s/#log_destination = 'stderr'/log_destination = 'csvlog'/" postgresql.conf
sed -i "/^#logging_collector = off/s/#logging_collector = off/logging_collector = on/" postgresql.conf
sed -i "/^#log_directory = 'log'/s/^#//" postgresql.conf #去掉注释
sed -i "/^#log_filename/s/^#//" postgresql.conf #去掉注释
sed -i "/^#log_file_mode/s/^#//" postgresql.conf #去掉注释
sed -i "/^#log_rotation_age/s/^#//" postgresql.conf #去掉注释
sed -i "/^#log_rotation_size/s/^#//" postgresql.conf #去掉注释
sed -i "/^shared_buffers = 128MB/s/shared_buffers = 128MB/shared_buffers = 1024MB/" postgresql.conf #物理内存25~40%
sed -i "/^#work_mem = 4MB/s/#work_mem = 4MB/work_mem = 30MB/" postgresql.conf
sed -i "/^#maintenance_work_mem = 64MB/s/#maintenance_work_mem = 64MB/maintenance_work_mem = 256MB/" postgresql.conf
sed -i "/^#temp_buffers = 8MB/s/#temp_buffers = 8MB/temp_buffers = 256MB/" postgresql.conf

数据库能够接受的最大请求连接并发数

max_connections = 100

数据库服务器将使用的共享内存缓冲区量。建议值:数据库独立服务器的1/4内存。

shared_buffers =1GB

9.2、用户访问权限配置

cd $PGDATA
cp pg_hba.conf pg_hba.confbak
cat   > pg_hba.conf << EOF
# TYPE  DATABASE    USER    ADDRESS       METHOD
local      all       all                        trust
host      all       all    0.0.0.0/0        md5
EOF

第一行的内容表示local本机,all所有用户可以访问postgre的所有数据库,并且密码发送方式不需要加密(trust)。
第二行的内容用于远程访问,指定了可以访问postgreSql数据库的远程用户的ip范围, 0.0.0.0/0 表示所有ip都可以。如果你希望指定ip段,可以像这样去配置192.168.3.1/24(表示的ip范围是:192.168.3.1到192.168.3.255)。md5表示数据库访问密码使用md5的加密方式发送。

十、初始化业务数据环境

视情况执行如下脚本

--初始化postgres用户密码
alter user postgres with password '你设置的密码';
--创建新用户
create user top_sjjs with encrypted password 'top_sjjs';
alter user top_sjjs with superuser;
--创建数据库
create database mix_db owner top_sjjs;
grant all privileges on database mix_db to top_sjjs;
grant all privileges on all tables in schema public to top_sjjs;
--创建程序用户,用于操作数据库表里面的数据,完成增删改查
create user top_sjjs with encrypted password 'top_sjjs';
GRANT  update,delete,insert,select  ON  ALL TABLES IN SCHEMA public TO top_sjjs;

十一、参数优化(可选)

包含配置归档参数,默认开启归档。

11.1.参数配置

--更改配置文件
cp /pgdb/data/postgresql.conf /pgdb/data/postgresql.confbak
sed -i "/^#listen_addresses = 'localhost'/s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /pgdb/data/postgresql.conf
sed -i "s/^#port = 5432/port = 5432/" /pgdb/data/postgresql.conf
sed -i 's/max_connections = 100/max_connections = 500/' /pgdb/data/postgresql.conf
sed -i "/^#wal_level/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i 's/#archive_mode = off/archive_mode = on/' /pgdb/data/postgresql.conf
sed -i "/^#archive_command = ''/s/#archive_command = ''/archive_command ='\/usr\/bin\/lz4 -q -z %p \/pgdb\/pg_archive\/%f.lz4'/" /pgdb/data/postgresql.conf  #-q取消警告-z强制压缩
sed -i "/^#log_destination = 'stderr'/s/#log_destination = 'stderr'/log_destination = 'csvlog'/" /pgdb/data/postgresql.conf
sed -i "/^#logging_collector = off/s/#logging_collector = off/logging_collector = on/" /pgdb/data/postgresql.conf
sed -i "/^#log_directory = 'log'/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i "/^#log_filename/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i "/^#log_file_mode/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i "/^#log_rotation_age/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i "/^#log_rotation_size/s/^#//" /pgdb/data/postgresql.conf #去掉注释
sed -i "/^shared_buffers = 128MB/s/shared_buffers = 128MB/shared_buffers = 1024MB/" /pgdb/data/postgresql.conf #物理内存25~40%
sed -i "/^#work_mem = 4MB/s/#work_mem = 4MB/work_mem = 30MB/" /pgdb/data/postgresql.conf
sed -i "/^#maintenance_work_mem = 64MB/s/#maintenance_work_mem = 64MB/maintenance_work_mem = 256MB/" /pgdb/data/postgresql.conf
sed -i "/^#temp_buffers = 8MB/s/#temp_buffers = 8MB/temp_buffers = 256MB/" /pgdb/data/postgresql.conf
--重启数据库
systemctl restart postgres.service

11.2.手动切归档

/pgdb/pgsql/bin/psql -Upostgres -W -d postgres -h127.0.0.1 -p5432 -c "select pg_switch_wal();"

11.3.归档定期删除策略

cat >> /var/spool/cron/postgres << "EOF"
# PostgresBegin
#设置归档策略:每晚零点10分删除7天前归档文件,视情况更改成1个月
10 00 * * * find /var/lib/pgsql/14/pg_archive -type f -name "0000000*" -mtime +7 -exec rm {} \; > /dev/null 2>&1
#设置日志保留2天,视情况更改成半年或3个月
00 01 * * * find /var/lib/pgsql/14/data/log -type f -name "postgresql*.log" -mtime +7 -exec rm {} \; > /dev/null 2>&1
00 01 * * * find /var/lib/pgsql/14/data/log -type f -name "postgresql*.csv" -mtime +7 -exec rm {} \; > /dev/null 2>&1
EOF

十二.常见问题

12.1.安装报错

--问题描述
[root@localhost opt]# ls -l
total 8064
-rw-r--r--. 1 root root 1563508 Oct 22 09:09 postgresql14-14.8-1PGDG.rhel7.x86_64.rpm
-rw-r--r--. 1 root root  704024 Oct 22 09:03 postgresql14-contrib-14.8-1PGDG.rhel7.x86_64.rpm
-rw-r--r--. 1 root root  277080 Oct 22 09:03 postgresql14-libs-14.8-1PGDG.rhel7.x86_64.rpm
-rw-r--r--. 1 root root 5707012 Oct 22 09:03 postgresql14-server-14.8-1PGDG.rhel7.x86_64.rpm
[root@localhost opt]# rpm -ivh *.rpm
warning: postgresql14-14.8-1PGDG.rhel7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY
error: Failed dependencies:libicu is needed by postgresql14-14.8-1PGDG.rhel7.x86_64libperl.so()(64bit) is needed by postgresql14-contrib-14.8-1PGDG.rhel7.x86_64libpython3.6m.so.1.0()(64bit) is needed by postgresql14-contrib-14.8-1PGDG.rhel7.x86_64libicui18n.so.50()(64bit) is needed by postgresql14-server-14.8-1PGDG.rhel7.x86_64libicuuc.so.50()(64bit) is needed by postgresql14-server-14.8-1PGDG.rhel7.x86_64--解决办法:
yum install libxslt libicu python36-libs python2-libs libperl.so

12.2.无权限创建lock文件

场景:以非root用户、postgres用户初始化实例

--创建用户
groupadd -g 5001 fuwa
useradd -G fuwa -g 5001 fuwa
echo "fuwa"|passwd --stdin  fuwa--初始化实例
[fuwa@localhost bin]$ /usr/pgsql-14/bin/initdb -D /home/fuwa/data--启库
[fuwa@localhost log]$ /usr/pgsql-14/bin/pg_ctl -D /home/fuwa/data start
waiting for server to start....2023-10-22 12:54:58.947 CST [12172] LOG:  redirecting log output to logging collector process
2023-10-22 12:54:58.947 CST [12172] HINT:  Future log output will appear in directory "log".stopped waiting
pg_ctl: could not start server
Examine the log output.

启库失败,查看日志提示

--问题描述
[fuwa@localhost log]$ /usr/pgsql-14/bin/pg_ctl -D /home/fuwa/data start
[fuwa@localhost log]$ tail -300f postgresql-Sun.log
2023-10-22 12:54:58.959 CST [12172] FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5434.lock": Permission denied
2023-10-22 12:54:58.961 CST [12172] LOG:  database system is shut down解决办法
[root@localhost lib]# chmod -R 777 /var/run/postgresql

相关文章:

PG14安装_rpm方式

一、前期准备 发现生产环境有用rpm安装&#xff0c;故整理安装rpm安装步骤&#xff0c;目的是准备walminer恢复数据用的环境 二、安装包下载 https://download.postgresql.org/pub/repos/yum/ 含多个版本 https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-7-x…...

水管安装过滤器笔记

文章目录 方案准备工具剪管钳热熔器软管接头及单向阀扳手 操作过程花洒 搬家后&#xff0c;水质不行&#xff0c;洗脸掉皮&#xff0c;洗头以前不掉头皮屑的&#xff0c;居然也掉头皮屑。有必要简单过滤下了。 水质情况&#xff0c;并不是脏脏的的那种水&#xff0c;看上去还比…...

【Objective-C】浅析Block及其捕获机制

目录 Block的基本使用Block的声明Block的实现Block的调用 Block作为形参使用Block作为属性使用给Block起别名Block的copy Block的捕获机制auto类型的局部变量__block浅析static类型的局部变量全局变量 其他问题 Block的基本使用 什么是Block&#xff1f; Block &#xff08;块…...

GitHub和Gitee的区别以及具体使用

文章目录 GitHub和GiteeGitHub和Gitee区别GitHub的使用Gitee的使用 GitHub和Gitee GitHub和Gitee区别 速度不同&#xff1a;GitHub位于美国&#xff0c;而Gitee位于中国。这意味着在中国使用Gitee可能会有更快的访问速度和更好的稳定性。如果我们希望体验Git飞一般的速度&…...

使用Redis实现分布式锁解决商品超卖问题(接上篇文章)

1. RedLock&#xff08;红锁&#xff09;简介 RedLock是一种用于分布式系统的锁定算法&#xff0c;旨在提供分布式锁的高可用性和分布式容错性。它是由Redis的创建者Salvatore Sanfilippo提出的&#xff0c;用于克服Redis单实例的单点故障问题。RedLock的目标是确保在多个Redis…...

2001-2022年全国290+个地级市高铁开通数据

2001-2022年全国290个地级市高铁开通数据 1、时间&#xff1a;2001-2022年 2、范围&#xff1a;298地级市&#xff08;293地级市数&#xff08;其中莱芜市2019年撤市设区&#xff09;4直辖市数 &#xff09; 3、来源&#xff1a;国家铁路局、铁路客货运输专刊及相关统计 国…...

【Java 进阶篇】深入浅出:Bootstrap 轮播图

在现代网页设计中&#xff0c;轮播图是一个常见的元素。它们可以用于展示图片、广告、新闻、产品或任何您希望吸引用户注意力的内容。要实现一个轮播图&#xff0c;您通常需要一些复杂的HTML、CSS和JavaScript代码&#xff0c;这对于初学者来说可能会感到困难。但幸运的是&…...

75. 颜色分类

75. 颜色分类 双指针——快慢指针 class Solution {public void sortColors(int[] nums) {int n nums.length;int p0 0;for(int i 0; i < n; i){if(nums[i] 0){swap(nums, p0, i);p0;}}int p1 p0;for(int i p0; i < n; i){if(nums[i] 1){swap(nums, p1, i);p1;}…...

Multi-Modal Diagnosis of Infectious Diseases in the Developing World

方法 作者未提供代码...

网络协议--IP:网际协议

3.1 引言 IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输&#xff08;见图1-4&#xff09;。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪。 不可靠&#xff08;unreliable&#xff09;的意思是它不能…...

【考研数学】线性代数第六章 —— 二次型(3,正定矩阵与正定二次型)

文章目录 一、基本概念1.1 引例1.2 正定二次型概念 二、正定二次型的判别写在最后 一、基本概念 1.1 引例 &#xff08;1&#xff09;二次型 f ( x 1 , x 2 , x 3 ) x 1 2 3 x 2 2 2 x 3 2 X T A X f(x_1,x_2,x_3)x_1^23x_2^22x_3^2\pmb{X^TAX} f(x1​,x2​,x3​)x12​3…...

【Java 进阶篇】手把手教你创建 Bootstrap 旅游网站

随着互联网的普及&#xff0c;旅游行业在全球范围内迅速发展。人们通过网络规划、预订和分享他们的旅行经历。因此&#xff0c;拥有一个令人印象深刻的旅游网站对于吸引游客和提供有用信息至关重要。在本篇博客中&#xff0c;我们将手把手教您如何创建一个令人兴奋的旅游网站&a…...

一百九十二、Flume——Flume数据流监控工具Ganglia单机版安装

一、目的 在安装好Flume之后&#xff0c;需要用一个工具可以对Flume数据传输进行实时监控&#xff0c;这就是Ganglia 二、Ganglia介绍 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 &#xff08;一&#xff09;第一部分——gmond gmond&#xff08;Ganglia Monitoring Da…...

光学知识整理-偏振光

偏振光 目录基础概念基础概念的补充平面偏振光&#xff08;线偏振光&#xff09;部分偏振光圆偏振光椭圆偏振光菲涅耳公式相位关系 反射折射所引起的偏振态的改变斯托克斯倒逆关系重要参数 目录 基础概念 光是横波&#xff1a;光是电磁波,其电场分量(电场强度)E、磁场分量(磁…...

CUDA纹理内存tex1D/tex2D/tex3D函数

CUDA的tex1D是用于从一维纹理中读取数据的函数。纹理是一种特殊的内存区域&#xff0c;可以用来存储图像、视频或其他数据。tex1D函数可以用于从纹理中读取数据&#xff0c;并将其传递给CUDA程序。 tex1D函数的语法如下&#xff1a; float tex1D(sampler_t sampler, float te…...

【Java基础面试三十八】、请介绍Java的异常接口

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;请介绍Java的异常接口 …...

LabVIEW中的数据通信方法

LabVIEW中的数据通信方法 LabVIEW中包含多种数据通信方法&#xff0c;不同的方法适用于不同的场景。应该先了解概述&#xff0c;确保在应用程序中使用正确的数据通信方法。 数据通信类型&#xff1a; 数据流元素 缓冲接口 变量接口 应用场景&#xff1a; 在多数程序框图对…...

记调试SMBUS的心得

为什么电池电压读的不对 仔细一看是I2C读取数据的时候少了一个CLK I2C是非常严密的 读数据之后&#xff0c;发送 ACK&#xff0c;让从机准备数据 发送NACK&#xff0c;告诉从机别准备了 ACK和NACK的区别是啥&#xff0c;告诉你&#xff0c;就是NACK先拉高SDA&#xff0c;再…...

【C++】:类和对象(中)之拷贝构造函数+赋值运算符重载

拷贝构造函数 概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称其为双胞胎 那在创建对象时&#xff0c;可否创建一个与已存在对象一某一样的新对象呢&#xff1f; 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用…...

C++迭代器失效

在STL中&#xff0c;有些操作会导致迭代器失效&#xff0c;即之前获取的迭代器无法再安全地使用。这是因为这些操作可能会改变容器的结构&#xff0c;例如插入、删除元素等。 具体来说&#xff0c;以下情况下迭代器会失效&#xff1a; 1. 当插入或删除元素导致容器中的内存重新…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...