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

生产环境中间件服务集群搭建-zk-activeMQ-kafka-reids-nacos

环境:

系统:centos7.9

工作目录:/home

安装包位置:/home/op/tools

1.系统初始化

安装依赖环境
yum -y install net-tools vim screen telnet vim gcc gcc-c++
修改主机名,为另外两台添加hosts文件
[root@mq01 conf]# hostnamectl set-hostname mq01
[root@mq01 conf]# vim /etc/hosts
192.10.30.11 mq01
192.10.30.12 mq02
192.10.30.13 mq03
上传所有服务器安装包
[root@mq01 tools]# ll /home/op/tools/
总用量 459144
-rw-r--r-- 1 root root  53675823 1月   5 16:18 apache-activemq-5.13.2-bin.tar.gz
-rw-r--r-- 1 root root   9890010 1月   5 16:18 apache-zookeeper-3.5.10-bin.tar.gz
-rw-r--r-- 1 root root 179476803 1月   5 16:19 java1-8.tar.gz
-rw-r--r-- 1 root root 107000763 1月   5 16:21 kafka_2.12-3.5.0.tgz
-rw-r--r-- 1 root root 117593603 1月   5 16:19 nacos-server-2.0.3.tar.gz
-rw-r--r-- 1 root root   2508776 1月   5 16:18 redis-6.2.7.tar.gz
进行解压二进制包
tar -zxf apache-activemq-5.13.2-bin.tar.gz 
tar -zxf apache-zookeeper-3.5.10-bin.tar.gz 
tar -zxf java1-8.tar.gz 
tar -zxf nacos-server-2.0.3.tar.gz 
tar -zxf redis-6.2.7.tar.gz 
注意:redis源码包进行编译
tar -zxf redis-6.2.7.tar.gz 
cd redis-6.2.7
make
make install PREFIX=/wespace/redis-7001
make install PREFIX=/wespace/redis-7002
进行将所有服务文件进行重命名到工作目录下
mv java /wespace/java
mv apache-activemq-5.13.2 /wespace/activeMQ
mv apache-zookeeper-3.5.10-bin /wespace/zookeeper
mv nacos /wespace/nacos
mv kafka_2.12-3.5.0 /wespace/kafka

2.准备Java环境

配置java环境变量
[root@mq01 wespace]# vi /etc/profile
export JAVA_HOME=/wespace/java/jdk1.8.0_111
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
export PATH=$JAVA_HOME/bin:$PATH
[root@mq01 wespace]# source /etc/profile
测试[root@mq01 wespace]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

3.部署zookeeper集群

1.拷贝其他服务zookeeper配置文件进行修改
[root@mq01 conf]# pwd
/wespace/zookeeper/conf
[root@mq01 conf]# ll
总用量 16
-rw-r--r-- 1 1000 1000  535 5月  19 2022 configuration.xsl
-rw-r--r-- 1 1000 1000 2712 5月  19 2022 log4j.properties
-rw-r--r-- 1 root root  224 1月   5 17:51 zoo.cfg
-rw-r--r-- 1 1000 1000  922 5月  19 2022 zoo_sample.cfg
2.根据本机情况修改zoo.cfg,和创建data,log目录,myid文件

注意:myid是唯一的,第一台为1,第二台2

[root@mq01 zookeeper]# mkdir log data
[root@mq01 conf]# vi zoo.cfg 
dataDir=/wespace/zookeeper/data
dataLogDir=/wespace/zookeeper/log
tickTime=2000
initLimit=10
syncLimit=5
clientPort=12181
server.1=192.10.30.11:12888:13888
server.2=192.10.30.12:12888:13888
server.3=192.10.30.13:12888:13888
[root@mq01 zookeeper]# echo '1' > data/myid 
3.将当前配置文件进行拷贝到两台服务器

注意:在另外两台修服务上修改myid

scp -Cr zoo.cfg root@192.10.30.12:/wespace/zookeeper/conf/
scp -Cr zoo.cfg root@192.10.30.13:/wespace/zookeeper/conf/
echo '2' > data/myid 
echo '3' > data/myid 
4.启动zookeeper
/wespace/zookeeper/bin/zkServer.sh start
ps -ef |grep zoo
lsof -i:12888

4.部署activeMQ集群

1.拷贝配置文件
[root@mq01 conf]# ll -rt
总用量 76
-rw-r--r-- 1 root users  665 3月   2 2016 client.ts
-rw-r--r-- 1 root users 1357 3月   2 2016 client.ks
-rw-r--r-- 1 root users  665 3月   2 2016 broker.ts
-rw-r--r-- 1 root users  592 3月   2 2016 broker-localhost.cert
-rw-r--r-- 1 root users 1370 3月   2 2016 broker.ks
-rw-r--r-- 1 root users  961 3月   2 2016 users.properties
-rw-r--r-- 1 root users 1016 3月   2 2016 login.config
-rw-r--r-- 1 root users 1207 3月   2 2016 logging.properties
-rw-r--r-- 1 root users 3084 3月   2 2016 log4j.properties
-rw-r--r-- 1 root users  964 3月   2 2016 jmx.password
-rw-r--r-- 1 root users  965 3月   2 2016 jmx.access
-rw-r--r-- 1 root users 1087 3月   2 2016 jetty-realm.properties #账号配置文件
-rw-r--r-- 1 root users  962 3月   2 2016 groups.properties
-rw-r--r-- 1 root users 1121 3月   2 2016 credentials.properties
-rw-r--r-- 1 root users 1172 3月   2 2016 credentials-enc.properties
-rw-r--r-- 1 root users 6117 1月   5 18:06 activemq.xml    #activeMQ集群zk配置文件
-rw-r--r-- 1 root users 8183 1月   5 18:09 jetty.xml     #activeMQ配置文件
2.修改jetty.xml配置文件[root@mq01 conf]# vim jetty.xml 
114         <property name="host" value="192.10.30.11"/>    #修改为当前主机IP地址
115         <property name="port" value="8161"/>            #修改端口号
3.修改activemq.xml配置文件
[root@mq01 conf]# vim activemq.xml 
40     <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"   schedulerSupport="true">      #schedulerSupport="true"启动延迟队列
81         <persistenceAdapter>
82             <replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:61617" zkAddress="192.10.30.11:12181,192.10.30.12:12181,192.10.30.13:12181" hostname="mq01" zkPath="/home/data/activeMQ/leveldb-stores"/>
83        </persistenceAdapter>
#修改zookeeper集群地址和端口  修改集群存放配置文件位置  zkAddress   zkPath
4.修改jetty-realm.properties配置文件
[root@mq01 conf]# vim jetty-realm.properties 
admin: admin, admin
user: user, user
5.将三个配置文件进行拷贝到另外两台服务器中
scp -Cr jetty-realm.properties root@192.10.30.12:/wespace/activeMQ/conf/
scp -Cr jetty-realm.properties root@192.10.30.13:/wespace/activeMQ/conf/
scp -Cr activemq.xml root@192.10.30.12:/wespace/activeMQ/conf
scp -Cr activemq.xml root@192.10.30.13:/wespace/activeMQ/conf
scp -Cr jetty.xml root@192.10.30.12:/wespace/activeMQ/conf
scp -Cr jetty.xml root@192.10.30.13:/wespace/activeMQ/conf
注意:修改配置文件主机IP
6.开启activemq
/wespace/activeMQ/bin/activemq start
ps -ef | grep active

5.部署kafka集群

1.修改kafka配置文件
[root@mq01 config]# pwd
/wespace/kafka/config
[root@mq01 config]# vim server.properties
broker.id=1     #唯一ID
port=9092
host.name=localhost
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/wespace/kafka/log
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.retention.check.interval.ms=300000
zookeeper.connect=192.10.30.11:12181,192.10.30.12:12181,192.10.30.13:12181  #zookeeper集群IP
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.10.30.11:9092  #本机IP地址
2.将配置文件进行拷贝到另外两台服务器
#注意拷贝到其他主机后
1.修改ID
2.确认端口号
3.确认zkIP和端口
4.访问本机IP和端口
3.进行守护进程启动/home/kapai/kafka/bin/kafka-server-start.sh -daemon /home/kapai/kafka/config/server.properties

6.部署nacos集群

1.修改nacos主配置文件
[root@mq01 conf]# pwd
/wespace/nacos/conf
[root@mq01 conf]# vi application.properties19 server.servlet.contextPath=/nacos20 ### Default web server port:21 server.port=8848                #端口号35 ### Count of DB:36 db.num=1                        #指定数据库个数42 db.url.0=jdbc:mysql://192.30.10.99:3316/nacos?characterEncoding=utf8&connect    Timeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC43 db.user.0=nacos             #连接数据库用户名44 db.password.0=2023Nacos!!!  #数据库连接密码
2.修改集群文件
cp cluster.conf.example cluster.conf
[root@mq01 conf]# vim cluster.conf
192.10.30.11:8848
192.10.30.12:8848
192.10.30.13:8848
3.进行将配置文件拷贝到另外两台服务器
4.启动nacos服务
/wespace/nacos/bin/startup.sh 

7.部署redis群集

环境:三台服务器 两个实例

端口:7001 7002

1.创建工作目录
cd /wespace/redis-7001/
mkdir conf data log
cd /wespace/redis-7002/
mkdir conf data log
2.编写redis配置文件
cd /wepsace/redis-7001/etc/
vim redis-7001.conf
daemonize yes
pidfile /wespace/redis-7001/redis-7001.pid
port 7001
bind 192.10.30.11
#requirepass 123456     设置redis密码
timeout 0
tcp-keepalive 0
loglevel notice
logfile /wespace/redis-7001/log/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /wespace/redis-7001/data
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
maxclients 65535
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
maxmemory 20480mb
maxmemory-policy allkeys-lru
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
cluster-require-full-coverage yes
cluster-migration-barrier 1
3.配置redis-7002
cp redis-7001.conf ../../redis-7002/conf/
cd ../../redis-7002/conf
mv redis-7001.conf redis-7002.conf
vim redis-7002.conf
注意:修改配置文件与文件不同的字段如pid,log,目录
4.进行将两个配置文件进行拷贝到另外两台服务器上
#注意
#1.修改IP
#2.端口
#3.日志pid等存放路径
5.启动redis,进行确认
/wespace/redis-7001/bin/redis-server /wespace/redis-7001/conf/redis-7001.conf 
/wespace/redis-7002/bin/redis-server /wespace/redis-7002/conf/redis-7002.conf 
netstat -anptl | grep redis
ps -ef |grep redis
6.自动搭建集群模式

注意:3.以下低版本redis需要手动进行部署集群或者安装第三方工具进行部署

/wespace/redis-7001/bin/redis-cli --cluster create --cluster-replicas 1 192.10.30.11:7001 192.10.30.12:7001 192.10.30.13:7001 192.10.30.11:7002 192.10.30.12:7002 192.10.30.13:7002
7.检测集群redis状态
/wespace/redis-7001/bin/redis-cli --cluster check 192.10.30.11:7001 #更换IP和端口
8.连接redis增加key测试cluster分布,和查看cluster的关系和状态
#注意:/wespace/redis-7001/bin/redis-cli -h 192.10.30.11 -p 7001 #这种方式只适用于主从redis或者单机redis等情况,否则连接添加key测试会报错
#192.10.30.11:7001> set k1 v1
#(error) MOVED 12706 192.10.30.13:7001
/wespace/redis-7001/bin/redis-cli -h 192.10.30.11 -p 7001 -c  #集群连接方式 -c
set k1 v1 #添加key
keys *  #查看所有key
cluster nodes #查看集群状态

相关文章:

生产环境中间件服务集群搭建-zk-activeMQ-kafka-reids-nacos

环境&#xff1a; 系统&#xff1a;centos7.9 工作目录&#xff1a;/home 安装包位置&#xff1a;/home/op/tools 1.系统初始化 安装依赖环境 yum -y install net-tools vim screen telnet vim gcc gcc-c 修改主机名&#xff0c;为另外两台添加hosts文件 [rootmq01 conf…...

Smart Light Random Memory Sprays Retinex 传统图像增强 SLRMSR

文章目录 前言1、Smart Light Random Memory Sprays Retinex概况2、Smart Light Random Memory Sprays Retinex的实现2.1、SLRMSR算法的伪代码2.2、初始化记忆喷雾&#xff08;CreateInitialMemorySpray&#xff09;2.3、更新记忆喷雾 (UpdateMemorySpray)2.4、计算颜色校正因子…...

Oracle数据库实例概述

Oracle数据库实例是由内存结构&#xff08;SGA和PGA&#xff09;及后台进程这两大部分组成。 内存结构 SGA (System Global Area)&#xff1a;这是数据库实例的共享内存区域&#xff0c;所有与该实例连接的进程都可以访问。SGA包含多个内存结构&#xff0c;例如&#xff1a; 数…...

Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类

文/Odoo亚太金牌服务开源智造 老杨 在Odoo最新V17新版中&#xff0c;其突出功能之一是能够构建个性化视图&#xff0c;允许用户以独特的方式与数据互动。本文深入探讨了如何使用 JavaScript 类来呈现表单视图来创建自定义视图。通过学习本教程&#xff0c;你将获得关于开发Odo…...

[RCTF2015]EasySQL ---不会编程的崽

今天也是sql注入的新类型---二次注入。不得不说花样真的多哦。 既然真的是sql注入了。那就不测试其他地方了。现在注册进去看一下界面 单纯的回显了名字。源代码里发现user.php。 可以修改密码&#xff1f;二次注入应该就在用户名这里了。因为修改密码时&#xff0c;用户名会被…...

Memcached-分布式内存对象缓存系统

目录 一、NoSQL 介绍 二、Memcached 1、Memcached 介绍 1.1 Memcached 概念 1.2 Memcached 特性 1.3 Memcached 和 Redis 区别 1.4 Memcached 工作机制 1.4.1 内存分配机制 1.4.2 懒惰期 Lazy Expiration 1.4.3 LRU&#xff08;最近最少使用算法&#xff09; 1.4.4…...

bash: sqlplus: command not found 问题解决方法

一、问题描述 在Linux中Oracle安装成功后&#xff0c;首次启动使用时&#xff0c;出现 sqlplus 命令不识别的问题&#xff0c;现象如下&#xff1a; $ sqlplus / as sysdba bash: sqlplus: command not found...二、问题分析 查看环境变量是否正确配置&#xff1a; $ vim .ba…...

大模型-Prompt

一、prompt是什么 在大型语言模型集成中&#xff0c;"prompt" 是指您向模型提供的输入文本或指令&#xff0c;以引导模型生成特定类型的响应。这个 prompt 可以是一个问题、一段描述、一个任务说明&#xff0c;甚至是一部分对话历史记录等。通过设计和优化 prompt&a…...

Python实战:SQLAlchemy ORM使用教程

一、SQLAlchemy ORM使用教程 SQLAlchemy是一个流行的Python SQL工具包和对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。在本篇博客中&#xff0c;我们将深入探讨SQLAlchemy ORM的核心知识&#xff0c;并…...

能不能绕过c去学c++?

目前做工程开发&#xff0c;基本都是c/c混着用的&#xff0c;c/c是同源的&#xff0c;c/是在c的基础上发展起来的&#xff0c;它们之间有些联系和区别&#xff1a; 区别&#xff1a; 1.可用库不同 c基本是系统底层语言&#xff0c;一般系统底层开发用c&#xff08;例如&…...

Python 小爬虫:爬取 bing 每日壁纸设为桌面壁纸

请求 URLJSON 版示例代码代码片段注意点headers 中的 User-Agent响应头中的 Content-Type终端通过代理API从 bing.com 找Bing 每日壁纸设置为桌面壁纸代码设定计划任务自动执行 python 脚本请求 URL 通过模仿必应(Bing)自己的 AJAX 调用方式获得请求 URL。 JSON 格式:...

利用textarea和white-space实现最简单的文章编辑器 支持缩进和换行

当你遇到一个非常基础的文章发布和展示的需求&#xff0c;只需要保留换行和空格缩进&#xff0c;你是否会犹豫要使用富文本编辑器&#xff1f;实际上这个用原生的标签两步就能搞定&#xff01; 1.直接用textarea当编辑器 textarea本身就可以保存空格和换行符&#xff0c;示例如…...

总结mac下解决matplotlib中文显示问题的几种方法

一、前言&#xff1a; 使⽤matplotlib画图时&#xff0c;由于matplotlib默认没有中⽂&#xff0c;显⽰中文时会出现空⽩⼩⽅块。 二、方法&#xff1a; 2.1 matplotlib中使用SimHei字体 1&#xff09;进入终端后查看matplotlib的字体路径&#xff1a; $ python >>&g…...

探索区块链世界:从加密货币到去中心化应用

相信提到区块链&#xff0c;很多人会想到比特币这样的加密货币&#xff0c;但实际上&#xff0c;区块链技术远不止于此&#xff0c;它正在深刻地改变我们的生活和商业。 首先&#xff0c;让我们来简单了解一下什么是区块链。区块链是一种分布式数据库技术&#xff0c;它通过将…...

GitLab/Github从头开始配置秘钥

1、下载git安装包 CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 拉到页面最底部选择 点进文件夹下载32位或者64位的版本&#xff0c;我的是64位就选择64的版本进行安装 2、傻瓜式安装 3、在相应的文件夹右键选择 UserName为你的用…...

uni.getlocation h5获取定位失败后,阻塞问题

uni.getlocation 在H5中&#xff0c;如果用户未开gps定位或者gps定位信号较差时&#xff0c;定位会失败。这种情况uni.getlocation也不会出现报错&#xff0c;也不会有后续执行&#xff0c;导致代码阻塞&#xff0c;体验极差。 解决方案1&#xff1a;拿不到定位或者定位失败这个…...

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令&#xff0c;会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载&#xff0c;如果没有配置国内镜像&#xff0c;可能会由于其服务器在国外导致资源下载慢或者下载不下来&#xff0c;所以出现了运行 flutter doctor 命令…...

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…...

【iOS】——Blocks

文章目录 前言一、Blocks概要1.什么是Blocks 二、Block模式1.block语法2.block类型变量3.截获自动变量值4._Block修饰符5.截获的自动变量 三、Blocks的实现1.Block的实质2.截获自动变量值3._Block说明符4.Block存储域 前言 一、Blocks概要 1.什么是Blocks Blocks是C语言的扩…...

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具&#xff0c;在 obd V2.5.0 版本之前&#xff0c;其主要功能主要是部署各类组件&#xff0c;例如 oceanbase-ce,obproxy-ce,obagent 等。然而&#xff0c;它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说&#xff1a; 1、若…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...