- 博客(42)
- 资源 (5)
- 收藏
- 关注
原创 nginx版本热更新
此时当前master进程收到指令后,会去创建 nginx.pid.oldbin 文件保留旧的master进程id,然后拉起一个新的master进程。此时可以发送WINCH信号通知,旧的master进程关闭其工作进程。也可以通过pid文件(logs目录下)去查看master进程id。发送USR2 信号给master进程,通知更新。查看master work 进程id。此时可以杀死旧的master 进程了。
2023-12-07 09:53:04
235
原创 k8s 1.28安装
前面的docker安装种保护了containerd.io 包,他包含了 runc 但是不包含 CNI plugins,因此需要补充CNI插件。将主节点/run/systemd/resolve 目录下的文件 ,拷贝到节点一样的目录下,没有则自己创建。提取calico.yaml,应用安装,单网卡这样就够了,如果多网卡还要修改calico.yaml文件。至此主节点安装完成,将节点加入集群,执行第三步,你也可以通过指令查看可以安装的指定版本。你可以从找到cni插件的下载连接,你也可以通过指令查看可以安装的版本。
2023-11-06 20:10:04
1101
原创 k8s、docker 卸载
卸载Docker Engine、CLI、containerd和Docker Compose软件包。如果kubernets是1.24以上版本,请先单独卸载containerd。删除kubelet相关信息,可以自行去删除,这个命令可能会误删。
2023-11-06 17:23:03
1436
原创 docker 安装(unbuntu安装)
有时候因为墙的原因,总是不成功,因此我们直接将apt源换成阿里云的。需要在阿里云找到指定版本的源,我这里是Ubuntu20。更换内容(可以先将sources.list备份)也会碰到墙的问题,因此也直接用阿里云的源,
2023-10-16 15:50:07
465
原创 docker ---rabbitmq 安装
1、将插件 放入 /plugins/ 目录下(需要先将插件文件放入宿主机中去)第二步:安装延迟队列插件(因为使用了延迟队列)如果5672端口无法访问,则需要先进入容器,如果是使用nginx转发报错405。第一步:安装rabbitmq。则修改nginx配置执行。3、执行插件安装命令。
2023-10-16 09:27:19
466
原创 mysql 数据备份和恢复
binlog 是mysql 二进制日志 binary log的简称,可以简单理解为数据的修改记录。需要开启binlog,才会产生文件,mysql 8.0 默认开启,开启后可以在 /var/lib/mysql (这是mysql默认数据存储路径,如果用户自己指定则另说) 目录下看到一系列 binlog.xxxxxx 的文件。
2023-08-16 20:12:57
1183
原创 mysql binlog 回滚
严格来说mysqlbinlog 不能算回滚,他只是将过去的数据修改记录 重新执行一遍,但是从结果上来看,他也算把数据恢复到任意时间点了,举例来说在昨天的某一刻误删除了一条数据,导致其他数据存储都是异常,今天才发现,现在我希望回滚到那一刻,那么我只要在binlog中找到昨天删除时的那条语句,然后重新执行之前的所有binlog文件,当然假设你有备份,那么也可以使用备份文件+备份后binlog文件进行恢复。现在我来模拟这个例子,我将执行以下步骤。查看指定时间范围的事件。查看指定时间范围的事件。
2023-08-16 20:11:55
1395
原创 nginx高级数据结构---双向链表
介绍如下图,节点ngx_queue_s分别用2个指针连接起来,prev指向上一个节点,next指向下一个节点,尾节点的next指向头,头节点的prev指向尾节点。使用定义容器管理链表 ngx_queue_t queue_container; ngx_queue_init(&queue_container);定义节点包含数据自己定义节点需要包含一个ngx_queue_t的成员,位置随意,下面是一个示例。struct { u_char* name; ngx_qu
2022-05-20 15:48:05
389
原创 ZLMediaKit 服务器源码解读---WebApi
本文描述了网页请求接口处理类(WebApi)与Http会话类的关系(HttpSession)目的是了解何时触发WebApi处理?怎么处理?既然是http请求,那么肯定是由HttpSession发起的调用,监听http端口,接收到的数据都会到下面这个函数,然后调用HttpRequestSplitter的input函数,作用就是对数据进行分包处理(解决多包黏包的问题)void HttpSession::onRecv(const Buffer::Ptr &pBuf) { _ticker.re
2022-03-02 20:02:55
974
原创 ZLMediaKit 服务器源码解读---广播、通知中心(NoticeCenter)
源码实在是简单,在这就简单描述2个过程一:事件监听当需要监听事件时,调用NoticeCenter的addListener函数,调用者将事件类型(event),标识(tag),处理函数(func),addListener函数根据事件类型先找到事件派发器(没有则会创建),然后调用其addListener函数 template<typename FUNC> void addListener(void *tag, const string &event, FUNC &&a
2022-02-28 17:49:46
1049
原创 ZLMediaKit 服务器源码解读---事件循环
一:事件循环池类事件循环池是一个单例类,管理着EventPoller1、EventPollerPool构造函数EventPollerPool::EventPollerPool() { auto size = addPoller("event poller", s_pool_size, ThreadPool::PRIORITY_HIGHEST, true); InfoL << "创建EventPoller个数:" << size;}2:循环池的添加Event
2022-02-11 13:26:25
1782
2
原创 ZLMediaKit 服务器源码解读---环形数据(RingBuffer)的读写
一:RingBuffer主要的成员变量 typename RingStorage::Ptr _storage; typename RingDelegate<T>::Ptr _delegate; onReaderChanged _on_reader_changed; unordered_map<EventPoller::Ptr, typename RingReaderDispatcher::Ptr, HashOfPtr> _dispatcher_map;
2022-02-10 18:51:31
1504
原创 结构体成员的内存分配
结构体的内存分配举个例子就明白了,如下图,似乎除了结构体名没什么区别,内存大小和内存分布也应该没什么区别,但是实际上: sizeof(A) = 9 sizeof(B) = 16导致这一差异的就是内存对齐,为什么有内存对齐,以及什么是内存对齐在这就不阐述了,可以自行度娘,反正目的是为了加快性能, 内存对齐的规则如下,也是编译器给结构体开辟内存时遵循的规则:1、第一个成员的相对于结构体首地址的偏移(offset)为0.2、每个成员的相对于首地址的偏移(offset)为:对齐值与成员类型长度的
2021-12-23 09:40:46
4004
原创 理解B树的设计与定义
1、索引多到内存存不下的时候,需要把索引存储到磁盘,如果层高过高会导致对磁盘访问次数增多在多叉树的基础上要求所有叶子节点在一个层高B树定义:一颗M阶B树T,满足以下条件每个结点至多拥有M课子树根结点至少拥有两颗子树除了根结点以外,其余每个分支结点至少拥有M/2课子树所有的叶结点都在同一层上有k课子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序关键字数量满足ceil(M/2)-1 <= n <= M-1B树中所有节点的孩子节点数中的最大值称为B树的阶,记为M(
2021-12-15 16:21:30
932
原创 环形数组(ringbuffer)
一:环形数组1、概念**百度百科:**是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流**个人理解:**本身就是一个定长数组,在存储数据时,达到存储上限时会从0继续存储,也就是他在存储数据时是个闭环的过程,举个例子:如下图,假设是个 大小为9字节的数组,当存满了9个字节的数据时,在存入字节时就会从0开始存储,环形数组也称ringbuffer2、优势首先是一个先进先出的队列,当取走数据时不需要移动数组中的其他元素,在单消费者单生产者的模型下,不需要加锁,可以更快的存取数据。
2021-11-19 17:02:03
8748
1
原创 mysql 主从复制搭建与实践
在主服务器数据发送更改时,会将更改过程以“事件”的形式存入binary log,依据记录的更改,会以不同的日志格式存入binary log在你想要将主服务器数据同步到副本时,使用不同的存储引擎将影响同步过程假如你使用MyISAM,在将数据同步到副本之前,你需要停止主服务器处理语句以获得读锁,从而获得binary log的位置,如果不这样会导致主从服务器数据不匹配或者损坏A->B->C 主从复制过程,B从A服务器同步数据,C从B服务器同步数据,此时B既做A的从服务器,也做C的主服务器,要想
2021-10-07 13:57:17
172
原创 mysql connector--c++ 安装
Access denied for user ‘root’@‘localhost’方式一:#sudo 强行登录sudo mysql#替换密码,账号依然是root#insert_password 填自己的密码,密码有一定的要求,大小写字母数字和标点符号#注意最后的 符号";"ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘insert_password’;方式二:找不到my.cnf查找find
2021-08-26 17:35:02
2999
1
原创 qml纯手写的控件表盘,粒子效果,自定义控件,图表,进度盘等
一:按钮二:仪表盘三:进度条四:图表五:粒子效果六:日期七:结语:大部分都是通过自绘实现自定义控件,花了差不多一个月时间去实现,使用的是qml-c++,qt create 12以上基本能完整打开工程,有问题可以留言,保证代码完整跑起来...
2021-08-13 20:57:00
333
原创 grpc环境搭建记录(ubuntu c++)
官方文档一:系统环境建议高版本的操作系统,我使用的是ubuntu 20.04,他安装的g++,可以支持c++17,同时cmake 版本也大于官方给的最低版本3.13你可以直接输入g++ 或cmake,按照终端输出的提示安装g++和cmake的版本就能满足grpc的编译要求二:安装过程也考参考 以官方的为主,可以跳过关于cmake和g++相关的说明,拉取源码1、前置条件(c++,cmake需要提前安装)sudo apt install -y build-essential autoconf
2021-08-13 10:22:52
560
2
原创 google开源算法ceres-solver 库的编译
google开源算法ceres-solver 库的编译一、编译环境 在unbuntu 下(在windows下有个需要找ndk版本的错误,linux下则没有),ndk版本使用最新就行,我自己的是在android studio下载的。二、编译步骤:按照官方的提示1、使用命令行,进入ceres-solver-XXXX 目录下 输入 ndk-build会提示错误:jni/Android.mk:84: *** Ceres requires Eigen; please invoke via EIGEN_P
2021-07-30 20:07:10
1764
原创 tcp/ip的简单理解
一:字节传输在网络中通信的基础单位是字节,1字节(byte) = 8位(bit),这里的bit就是一种数字信号,对应着实际电路中高低电平,举个很通俗易懂的例子:A端为一个开关,B端为一个灯泡,假设定义灯泡“亮”状态为1,“灭”状态为0,如果A端按了8次开关分别是:开、关、开、关、开、关、开、关,那么B端这段时间对应的状态就是“10101010”,如果在A端在加个转换器能将数字“10101010”转换为电路的“开关开关开关开关”,那么就相当于A端把数据“10101010”发送到了B端,图示只是说明了A端
2021-07-23 16:29:58
1695
2
原创 简单描述时间轮
时间轮作用也是用来作定时器触发任务,只是他更高效,时间复杂度为O(1)。运行原理为了方便理解我们参考钟表的形式,它分为3个层次:时、分、秒,只有秒钟在运动同样的,时间轮也分为多层,同样的只有第一层在运动,举个简单的4层时间轮例子(如下左图),我们假设最小计时单位为1(姑且理解为秒),用time来计时,初始为0,随着time递增,则:我们可以知道 time 应该落在第一层的位置int first_index = time%5当 first_index == 0,也就是第一层轮巡完毕,就需要将
2021-07-07 16:35:20
3011
原创 最小堆数据结构与定时器实现
最小堆最小堆的定义1、是一棵满二叉树2、子树也是一棵满二叉树3、左右节点的值都比当前节点的大从定义可知,根节点是树中的最小值,最小堆一般用链表存储,父子节点的关系,用纯数学的关系表示为:假设当前节点的在链表中的索引为n,左子节点为2n+1 ,右子节点为2n+2...
2021-06-29 18:45:57
792
原创 红黑树的实现及源码
红黑树是基于二叉搜索树来的,在增加和删除后,增加了颜色平衡调整。思路可参考:红黑树与二叉搜索树c++源码 与 qt图形化显示:二叉搜索树和红黑树的源码实现git仓库中:rbTress分支为红黑树实现master分支为二叉搜索树的实现以rbTress为准,初步测试没什么大问题,但是没有经过大量测试,并不排除代码中的bug...
2021-05-29 11:22:28
220
原创 二叉搜索树的实现
定义节点节点的定义比较简单,需定义好 索引key,左右子节点,父节点以及用户想要保存的自定义数据template <typename T>class Node{public: Node(int key,T t,Node* left,Node *right,Node *parent){ this->t = t; this->key = key; this->left = left; this->
2021-05-21 15:17:28
264
原创 epoll创建一个简单的tcp服务端
一:原理参考大神的吧 二:实现和select差不多的逻辑1、创建监听套接字,并开启监听2、创建epoll3、将监听套接字加入epoll4、等待事件到来,5、轮询监听事件队列,如果监听的事件的fd是服务器监听的socket,则将接入的客户端的socket fd加入epoll,不是则处理客户端的业务逻辑6、下一轮监听#include <iostream>#include <sys/socket.h>#include <sys/types.h>#i
2021-03-10 21:03:25
301
CustomControl.rar
2021-08-13
ceresShare.rar
2021-08-13
QML_TCP.rar
2019-08-12
qmlBook电子档加书本源码
2018-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人