k8s搭建双主的mysql8集群---无坑
《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从,我们能理解到主节点只有1个,那么承担增删改主要还是主节点,如果你在从节点上去操作增删改操作,数据不会同步到其他节点。本章我们将实现多主(双主)集群。实现在多个节点上操作增删改,能同步其他节点。
一,环境准备
1.1 k8s集群服务器
ip | 角色 | 系统 | 主机名 | cpu | mem |
192.168.40.129 | master | centos7.9 | k8smaster | 4 | 8 |
192.168.40.130 | node1 | centos7.9 | k8snode1 | 4 | 8 |
192.168.40.131 | node2 | centos7.9 | k8snode2 | 4 | 8 |
192.168.40.132 | node3 | centos7.9 | k8snode3 | 4 | 8 |
k8s集群操作请参考《K8s安装部署(v1.28)--超详细(cri-docker作为运行时)-CSDN博客》
1.2 nfs服务器器
ip | 角色 | 系统 | 主机名 | cpu | mem | 用图 |
192.168.40.129 | master | centos7.9 | k8smaster | 4 | 8 | k8s主服务器 兼 nfs服务器 |
192.168.40.130 | node1 | centos7.9 | k8snode1 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
192.168.40.131 | node2 | centos7.9 | k8snode2 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
192.168.40.132 | node3 | centos7.9 | k8snode3 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
二,安装nfs服务
2.1 安装(所有节点)
因为需要在三个工作节点上连接nfs,所以工作节点上也要安装
yum install -y nfs-utils
2.2 暴露nfs目录(只暴露nfs主服务器)
要安装四台服务器。
直接在nfs服务器(k8s-master:192.168.40.129)当中创建这三个目录并写入 /etc/exports 文件夹中(创建的目录可以修改):
#创建nfs目录
mkdir -p /data/nfs/{mysql-master-01,mysql-master-02}
vi /etc/exports
#添加
/data/nfs/mysql-master-01 *(rw,sync,no_root_squash)
/data/nfs/mysql-master-02 *(rw,sync,no_root_squash)
如果目录不为空,需要清空
rm -rf /data/nfs/mysql-master-01/*
rm -rf /data/nfs/mysql-master-02/*
2.3 开启nfs服务器
直接在主服务器(192.168.40.129)上启动nfs服务器。
systemctl enable --now nfs-server
2.4 测试nfs服务
我们可以通过这行命令来检查目录是否暴露成功: 注意修改为自己的nfs服务器地址
showmount -e 192.168.40.129
三,搭建MySql集群
3.1 创建命名空间
创建一个命名空间来部署MySQL集群,当然你也可以使用默认的Default命名空间。这里就用 mysql-cluster 命名空间来搭建集群了,首先我们将这个命名空间创建出来:
创建yaml
kubectl create namespace mysql-cluster --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: nullname: mysql-cluster
spec: {}
status: {}
将上面内容 保存到mysql-ns.yaml中
执行命令
kubectl apply -f mysql-ns.yaml
查看名称空间
kubectl get ns
3.2 创建MySQL密码的Secret
创建一个存储了MySQL密码的Secret,直接使用这行命令生成这个Secret的资源清单文件:
注意修改root的密码和命名空间,我的root密码设置为的是123456
kubectl create secret generic mysql-password --namespace=mysql-cluster --from-literal=mysql_root_password=123456 --dry-run=client -o=yaml
apiVersion: v1
data:mysql_root_password: MTIzNDU2
kind: Secret
metadata:creationTimestamp: nullname: mysql-passwordnamespace: mysql-cluster
将上述yaml内容保存到 mysql-secret.yaml
kubectl apply -f mysql-secret.yaml
查看创建的密码
kubectl get secret -n mysql-cluster
3.3 编写MySQL双主节点yaml
3.3.1 主节点1
mysql-master-1.yaml 内容如下
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-master-01-nfs-pvnamespace: mysql-cluster
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:server: 192.168.40.129path: /data/nfs/mysql-master-01storageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-master-01-nfs-pvcnamespace: mysql-cluster
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: mysql-master-01-nfs-pv---
apiVersion: v1
kind: Service
metadata:name: mysql-master-svc-01namespace: mysql-clusterlabels:app: mysql-master
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 3306selector:app: mysql-mastertype: NodePortsessionAffinity: ClientIP---
apiVersion: v1
data:my.cnf: |[mysqld]server-id = 1# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1# 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,...auto_increment_offset = 2auto_increment_increment = 2# 开启bin_log(默认是开启的,直接使用默认),模式为ROW,允许最大日志为1G#log_bin = mysql-bin#binlog_format = ROW#max_binlog_size = 1024M# 主节点master不需要写binlog的数据库binlog_ignore_db = mysqlbinlog_ignore_db = information_schemabinlog_ignore_db = performance_schemabinlog_ignore_db = sys# 从节点slave不进行数据同步的数据库replicate_ignore_db = mysqlreplicate_ignore_db = information_schemareplicate_ignore_db = performance_schemareplicate_ignore_db = sys# 中继日志(默认是开启的,直接使用默认)#relay_log = mysql-relay-bin# mysql5.7以后的版本不需要配置log-slave-updates=1# log-slave-updates = 1#[client]#socket = /var/run/mysqld/mysqld.sock#!includedir /etc/mysql/conf.d/
kind: ConfigMap
metadata:creationTimestamp: nullname: mysql-master-01-cmnamespace: mysql-cluster---apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-master-01namespace: mysql-cluster
spec:selector:matchLabels:app: mysql-masterserviceName: "mysql-master-svc-01"replicas: 1template:metadata:labels:app: mysql-masterspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:8.0.34image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:8.0.34ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/my.cnfreadOnly: truesubPath: my.cnfenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-master-01-nfs-pvc- name: mysql-confconfigMap:name: mysql-master-01-cmitems:- key: my.cnfmode: 0644path: my.cnf
3.3.2 主节点2
主节点2 mysql-master-2.yaml 内容如下
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-master-02-nfs-pvnamespace: mysql-cluster
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:server: 192.168.40.129path: /data/nfs/mysql-master-02storageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-master-02-nfs-pvcnamespace: mysql-cluster
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: mysql-master-02-nfs-pv---
apiVersion: v1
kind: Service
metadata:name: mysql-master-svc-02namespace: mysql-clusterlabels:app: mysql-master
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 3307selector:app: mysql-mastertype: NodePortsessionAffinity: ClientIP---
apiVersion: v1
data:my.cnf: |[mysqld]server-id = 2# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1# 设置自增ID初始值为1,每次自增量为2。即都是偶数2,4,6,8,...auto_increment_offset = 1auto_increment_increment = 2# 开启bin_log(默认是开启的,直接使用默认),模式为ROW,允许最大日志为1G#log_bin = mysql-bin#binlog_format = ROW#max_binlog_size = 1024M# 主节点master不需要写binlog的数据库binlog_ignore_db = mysqlbinlog_ignore_db = information_schemabinlog_ignore_db = performance_schemabinlog_ignore_db = sys# 从节点slave不进行数据同步的数据库replicate_ignore_db = mysqlreplicate_ignore_db = information_schemareplicate_ignore_db = performance_schemareplicate_ignore_db = sys# 中继日志(默认是开启的,直接使用默认)#relay_log = mysql-relay-bin# mysql5.7以后的版本不需要配置log-slave-updates=1# log-slave-updates = 1#[client]#socket = /var/run/mysqld/mysqld.sock#!includedir /etc/mysql/conf.d/
kind: ConfigMap
metadata:creationTimestamp: nullname: mysql-master-02-cmnamespace: mysql-cluster---apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-master-02namespace: mysql-cluster
spec:selector:matchLabels:app: mysql-masterserviceName: "mysql-master-svc-02"replicas: 1template:metadata:labels:app: mysql-masterspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:8.0.34image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:8.0.34ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/my.cnfreadOnly: truesubPath: my.cnfenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-master-02-nfs-pvc- name: mysql-confconfigMap:name: mysql-master-02-cmitems:- key: my.cnfmode: 0644path: my.cnf
3.3.3 配置注意点
- nfs 的地址、路径
- msql的配置中 server-id 要不同,gtid_mode设置为on,enforce_gtid_consistency设置为1
[mysqld]server-id = 2# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1
- mysql的镜像地址 有需要改成能拉取到的镜像
- service 的nodePort端口要设置不同(共用一个service的可以不变)
3.4 启动集群
3.4.1 启动
kubectl apply -f .
3.4.2 k8s查看所有集群信息
kubectl get all -n mysql-cluster -o wide
3.4.3 进入主节点1
kubectl exec -itn mysql-cluster pod/mysql-master-01-0 -- mysql -uroot -p
输入密码·12345
加入集群命令
change master tomaster_host='mysql-master-02-0.mysql-master-svc-02.mysql-cluster.svc.cluster.local',master_port=3306,master_user='root',master_password='123456',master_auto_position=1,get_master_public_key=1;
需要注意下面的几个参数:
- master_host: 这个参数是 节点2的 master的地址,(根据k8s的网络解析,pod名称.service名称.命名空间.svc.cluster.local 。我的是 mysql-master-02-0.mysql-master-svc-02.mysql-cluster.svc.cluster.local)
- master_port: 主节点的mysql端口,我们没改默认是3306
- master_user: 登录到主节点的mysql用户
- master_password: 登录到主节点要用到的密码
- get_master_public_key: 连接主mysql的公钥获取方式 根据上面参数,
如果要修改那么请按照自己的环境进行修改。
启动主从
#启动
start slave;
#查看副本状态
show replica status\G;
看到这两项都为yes表示正常
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
3.4.4 进入主节点2
kubectl exec -itn mysql-cluster pod/mysql-master-02-0 -- mysql -uroot -p
输入密码·12345
加入集群命令
change master tomaster_host='mysql-master-01-0.mysql-master-svc-01.mysql-cluster.svc.cluster.local',master_port=3306,master_user='root',master_password='123456',master_auto_position=1,get_master_public_key=1;
需要注意下面的几个参数:
- master_host: 这个参数是 节点1的 master的地址,(根据k8s的网络解析,pod名称.service名称.命名空间.svc.cluster.local 。我的是 mysql-master-01-0.mysql-master-svc-01.mysql-cluster.svc.cluster.local)
- master_port: 主节点的mysql端口,我们没改默认是3306
- master_user: 登录到主节点的mysql用户
- master_password: 登录到主节点要用到的密码
- get_master_public_key: 连接主mysql的公钥获取方式 根据上面参数,
如果要修改那么请按照自己的环境进行修改。
启动主从
#启动
start slave;
#查看副本状态
show replica status\G;
看到这两项都为yes表示正常
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
四,测试集群
4.1 完整性测试
工具连接两个 是3306、3307,端口,
我们在在节点1上建库,建表
CREATE DATABASE `test_db`;
USE `test_db`;CREATE TABLE `user` (`user_id` BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户id',`username` VARCHAR(50) NOT NULL COMMENT '用户名',`age` TINYINT UNSIGNED DEFAULT 18 COMMENT '年龄',`gender` TINYINT UNSIGNED DEFAULT 2 COMMENT '性别;0=男,1=女,2=未知'
) COMMENT '用户表';
到节点2上查看,是否同步了
我们在节点2上插入2条数据,看下是否能同步
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('oopxiajun', '18', '0');
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('01', '28', '0');
再去节点1上看下是否有这两条数据
已经成功同步。
4.2 宕机其中一台测试
关闭 节点2
kubectl delete -f mysql-master-2.yaml
节点2已经连不上连不上了
这时我们在节点1插入一条数据
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('02宕机数据', '28', '0');
启动节点2
kubectl apply -f mysql-master-2.yaml
查看数据是否同步
这样我们架构就保证我们两台中一台能正常运行,业务就不会停止,发生故障的服务器恢复后可以自动同步数据。
相关文章:
k8s搭建双主的mysql8集群---无坑
《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从,我们能理解到主节点只有1个,那么承担增删改主要还是主节点,如果你在从节点上去操作增删改操作,数据不会同步到其他节点。本章我们将实现多主(双主&a…...
Iterm2配置主题和Oh-My-Zsh
文章目录 一、配置主题1.1 安装使用git1.2 安装手册1.2.1 激活使用主题 二、配置oh-my-zsh2.1、oh-my-zsh插件2.2、oh-my-zsh主题 [Zsh](http://zsh.org/)2.2.1、Install using Git2.2.2、Install manually2.2.3、Activating theme2.2.4、Install using [zplug](https://github…...
html+css+js实现step进度条效果
实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…...
OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 抓取、解码并返回下一个视频帧。 cv::VideoCapture::read() 是 VideoCapture 类的一个成员函数,用于从视频源中读取一帧图像. 该方法…...
深度学习500问——Chapter17:模型压缩及移动端部署(2)
文章目录 17.4.6 低秩分解 17.4.7 总体压缩效果评价指标有哪些 17.4.8 几种轻量化网络结构对比 17.4.9 网络压缩未来研究方向有哪些 17.5 目前有哪些深度学习模型优化加速方法 17.5.1 模型优化加速方法 17.5.2 TensorRT加速原理 17.5.3 TensorRT如何优化重构模型 17.5.4 Tensor…...
【C#】DllImport的使用
DllImport 是 C# 中用于从非托管 DLL(动态链接库)中导入函数的一个特性。这个特性允许你在 .NET 应用程序中调用由其他语言编写的函数,如 C 或 C。使用 DllImport 可以让你重用现有的非托管代码,而不需要重新实现这些功能。 下面…...
基于 Redis 实现滑动窗口的限流
⏳ 限流场景:突发流量,恶意流量,业务本身需要 基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库,具有高性能和支持原子操作的特点,非常适合用来实现限流功能。下面是一个使用 Redis 实现…...
Camera Raw:打开图像
在图像工作流程中,无论是 Raw 格式图像文件还是 JPEG、TIFF 文件,都可以先使用 Camera Raw 打开并调整后,再进入其它 Adobe 软件如 Photoshop 中进行进一步的编辑和处理。 一、打开 Raw 格式图像 1、通过 Adobe Bridge 打开 在 Adobe Bridge …...
RK3588主板PCB设计学习(六)
可以在其它层对过孔进行削盘处理, 可以看到,这里有些过孔用不上,在这一层进行了削盘处理: 对于这种电源层进行铺铜操作的时候,如果不进行削盘处理的话这些焊盘可能导致这个电源层面不完整,存在割裂的风险&a…...
论文阅读(十一):CBAM: Convolutional Block Attention Module
文章目录 IntroductionConvolutional Block Attention ModuleExperimentsConclusion 论文题目:CBAM: Convolutional Block Attention Module(CBAM:卷积注意力机制) 论文链接:点击跳转 代码链接:Git…...
【Kubernetes】常见面试题汇总(四十八)
目录 108.考虑一家拥有非常分散的系统的跨国公司,希望解决整体代码库问题。您认为公司如何解决他们的问题? 109.我们所有人都知道从单服务到微服务的转变从开发方面解决了问题,但在部署方面却增加了问题。公司如何解决部署方面的问题&#x…...
Qt Creator安卓环境配置【筑基篇】
1.前言 由于我的Qt Creator目前就先的14版本IDE老是存在各种莫名奇妙的bug,我都已经成为官方Qt Forum官方论坛的常客了。有一说一新版本的各种设置不小心误触是真的坑死人。不说了给我小主机配置安卓环境了。小主机系统版本window11-23H,Qt-Creator版本是13.01版本…...
利用SpringBoot构建高效社区医院平台
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038
本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 质数、最大公约数、菲蜀定理 LeetCode 1590. 使数组和能被 P 整除 给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空)&am…...
外部引入的 JavaScript 放置位置
部引入的 JavaScript 通常有两种常见的放置位置,每个位置都有其优缺点,具体取决于页面的需求和性能优化目标: 1. 放在页面的 <head> 标签中 这种方式在 HTML 文档的 <head> 部分引入 JavaScript 文件。 <head><scrip…...
【tbNick专享】虚拟机域控、成员服务器、降级等管理
在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器,并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation: 打开 VMware Workstation,点击 “创建新的虚拟…...
Raspberry Pi3B+之Rpanion(gst)和ffmpeg验证
Raspberry Pi3B之Rpanion-gst和ffmpeg验证 1. 源由2. 分析3. 环境搭建步骤1:安装镜像步骤2:系统更新步骤3:安装numpy组件步骤4:安装python3-picamera2组件步骤4:安装cv2组件步骤5:安装ffmpeg组件步骤6&…...
数据结构编程实践20讲(Python版)—04队列
本文目录 04 队列 QueueS1 说明S2 示例普通队列循环队列双端队列优先队列S3 问题:基于普通队列实现的打印机任务管理Python3程序S4 问题:使用循环队列管理玩家移动轨迹Python3程序S5 问题:使用双端队列来管理文档操作历史Python3程序S6 问题:使用优先队列管理车辆调度Pytho…...
Ubuntu开机进入紧急模式处理
文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动,自动进入紧急模式(You are in emergency mode)。具体如下所示: 二、解决办法 按CtrlD进…...
解决无网条件下离线安装缺失的python包
首先在有网的机器上使用conda create --name xx pythonx.x.x 命令创建一个和目标机器(无网)一样的环境 使用 下面命令 pip download opencv-python -d C:\Users\xuhaitao\Desktop\installer pip download pyinstaller -d C:\Users\xuhaitao\Desktop\installer 在目标…...
海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?
在当今瞬息万变的经营环境中,突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力,国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…...
Spring DI 笔记
目录 1.什么是DI? 2.依赖注入的三种⽅式 2.1属性注⼊ 2.2构造⽅法注⼊ 2.3Setter 注⼊ 2.4三种注⼊优缺点分析 3.Autowired存在问题 1.什么是DI? DI: 依赖注⼊ 依赖注⼊是⼀个过程,是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源,⽽资源指的…...
psutil库的使用说明
前言 psutil是一个跨平台的库,用于获取系统的进程和系统利用率(包括 CPU、内存、磁盘、网络等)信息。 目录 安装 应用场景 常用方法 一、系统信息相关函数 二、进程信息相关函数 三、网络信息相关函数 四、其他实用函数 使用样例 监控应…...
PMP--三模--解题--71-80
文章目录 7.成本管理--S曲线--S曲线对累计值进行监督和报告--S曲线可以同时报告成本与进度情况。适用于预测和敏捷项目。14.敏捷--信息发射源--是一种可见的实物展示其向组织内其他成员提供信息在不干扰团队的情况下即时实现知识共享。71、 [单选] 项目经理正在为刚刚进入第三次…...
iTextPDF 一个功能强大的 Java PDF 库
iTextPDF 是一个功能强大的 Java PDF 库,它提供了丰富的 API 用于创建和操作 PDF 文档。以下是一些 iTextPDF 的常用功能: 创建 PDF 文档:可以创建新的 PDF 文档,并设置页面大小、边距、背景颜色等 。 添加文本:在 PD…...
QT C++ 自学积累 『非技术文』
QT C 自学积累 『非技术文』 最近一段时间参与了一个 QT 项目的开发,使用的是 C 语法,很遗憾的是我之前从来没有接触过 C ,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚…...
浅谈虚拟内存(操作系统、Redis)
浅谈虚拟内存(操作系统、Redis) 参考&鸣谢 4.1 为什么要有虚拟内存? xiaolincoding 【简单说下】REDIS的虚拟内存机制,会吗?别翻书 aristo_boyunv Redis 虚拟内存 Java杨永杰 浅谈虚拟内存:操作系统与 Redis 在计算机系统中…...
【LeetCode HOT 100】详细题解之链表篇
LeetCode HOT 100题解之链表篇 160 相交链表题目分析代码 206 反转链表方法一:迭代 234 回文链表方法一:将值复制到数组中方法二:快慢指针 141 环形链表方法一:哈希表方法二:快慢指针 142 环形链表II方法一:…...
二叉树的递归遍历
方法论 确定递归函数的参数和返回值 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件 写完了递归算法, 运行的时候,经常会遇到栈溢…...
国内访问OpenAI API
最近在学习LLM。绕不过去的肯定要学习OpenAI。 国内想直接使用官方API十分麻烦。就到处查资料及网友的分享。发现了这个代理可以在国内很方便的使用OpenAI API。 代理的地址如下: https://referer.shadowai.xyz/r/1014150 经过一段实际体验下来,这个…...
网站建设费用构成/如何宣传自己的网站
1、why: 为啥学NDK开发,其实是为了项目需要调用底层的一些C/C的一些东西;另外就是为了效率更加高些;Android ndk 提供 了 opengls2、what 是什么The NDK is a toolset that allows you to implement parts of your app using nati…...
郑州网站制作天强科技/站长之家 seo查询
转自:MongoDB常用28条查询语句 1、查询所有记录 db.userInfo.find(); 相当于: select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“࿱…...
做网站的主要作用/网站建设的基本流程
皮尔逊Pearson 相关系数:使用前提:大小一致、连续、服从正态分布的数据集;斯皮尔曼spearman等级相关系数:皮尔逊Pearson 相关系数使用前提任何一个条件不满足时可以考虑使用该系数;肯德尔等级kendallta相关系数&#x…...
做网站快速排名/网络营销中的seo是指
#include<stdio.h> #include<string.h> int main() {char a[1005];int b,c,z1;gets(a);bstrlen(a);for(c0;c<b;c){if(a[c]a[c1]){z;}else{printf("%d%c",z,a[c]);z1;}}}...
知名的网站建设公司/关键词免费下载
1.下列除哪组外都是镇心安神药组() A.龙骨、牡蛎 B.朱砂、磁石 C.龟板、鳖甲 D.珍珠、琥珀 E.珍珠母、紫贝齿 2.下列忌火煅的药物是() A.青礞石 B.牡蛎 C.朱砂 D.石决明 E.代赭石 3.既能镇惊安神,平肝潜阳…...
网页版梦幻西游谛听怎么获得/杭州网络排名优化
使用的环境:Xcode V8.3.3 学习OpenGL的过程中,会使用到gltools,glew,glfw3,glut等库文件,glut包Mac自带,故不需要考虑。主要考虑的是另三个包文件怎样安装,配置。本文主要讲两大部分: 1. glew,…...