自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 问答 (14)
  • 收藏
  • 关注

原创 GBase 8a EXPLAIN显示查询计划MATION介绍

GBase 8a EXPLAIN显示查询计划MATION介绍

2021-11-29 11:13:58 797

原创 GBase 8a 哈希索引介绍

Gbase 8a 哈希索引介绍

2021-11-29 10:36:29 1034

原创 GBASE 8a MPP EXplain extended

在sql语句前使用EXplain extended可以在集群客户端查看sql的执行情况其中query plan 部分展示的是分布式查询计划的每个步骤第一步将to2 表拉复制表第二步 将to1 和复制表进行join由于两个表都是随机分布表,所以要将一个表拉复制表,再在每个节点种进行join才能得到结果execstep 步骤中一些信息标记了选择执行器的条件这就是一条jion 语句的分布式计划的展示内容。...

2021-11-01 17:49:30 378

原创 GBase 8a MPP gcdump工具

GBase8a的gcdump工具,能够将数据库、表、存储过程的结构导出。常用于库结构的恢复或者新集群的初始化等。/opt/gcluster/server/bin/gcdump–routines=true -B testdb其中 –routines=true是导出存储过程和自定义函数-B 指定数据库。默认导出脚本里包含了drop database和create database信息,请一定注意,避免表数据被误删除。-n 不输出create database命令-t 不...

2021-11-01 17:48:33 837

原创 关于线程安全的那些事

什么是线程安全?描述的是多个执行流之间对资源的访问操作的安全问题,线程安全就是线程之间对于资源的访问操作不会造成数据二义性线程不安全的现象编写了一个黄牛的抢票程序,黄牛就相当于线程,票相当于临界资源(临界资源就是多个线程共同访问的资源)#include <stdio.h>#include <unistd.h>#include <pthread.h>#define THREADCOUNT 4int g_titcks = 100;void* f

2021-07-29 11:19:53 201

原创 条件变量的接口

本文主要介绍条件变量的接口条件变量就是:pcb等待队列和一些接口条件变量的类型:pthread_cond_t1.初始化1.1 动态初始化int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);cond: 传入条件变量的地址arrt:条件变量的属性,通常传递NULL,采用默认属性1.2 静态初始化pthr...

2020-11-18 23:48:44 169

原创 Base64在线转换工具

项目介绍 计算机中一个字节共有256中,即ascii码表,而ascii码表的128~256之间的值是不可见的字符,对于一些只能支持可见字符的协议,如果传输二进制文件是无法实现的,因此就有了base64编码格式,base64编码格式能将所有的二进制数据,都转换为可显示的字符。项目目标 实现一个在线的base64转换工具,支持文本的base64的可逆转与图片base64转换base64编码原理 base64使用64个字符来对二进制数据进行编码编码过程Base64要求把每三个...

2020-11-18 11:46:41 4656

原创 互斥锁的使用

这里简单介绍互斥锁的使用互斥锁变量类型pthread_mutex_t互斥锁初始化动态初始化int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);参数说明:mutex:传入互斥锁的地址attr:属性,一般传递NULL采用默认属性静态初始化pthread_mutex_t mutex = PTHREAD_MUTEX_I...

2020-11-18 11:44:29 632

原创 指针浅谈

指针的概念:指针首先时C语言中的一种数据类型,T*, 用该种类型定义的变量称为指针变量,该变量中存储的是一个地址,指针变量中存储的是一个地址,指针就是地址,地址就是指针指针的分类:指针分为一级指针和多级指针指针的操作:解引用 -> sizeof(指针) ++ -- + -注意:对指针进行++/--/+/-时,一般针对的是指针指向一段连续的空间才用意义指针的大小32位系统下指针的大小为4字节,64位系统下若编译器按照32位方式编译的大小为4字节,若编译器按照64位的方..

2020-11-17 16:35:58 111

原创 Linux线程的知识点及基本操作

1.线程的概念 在linux内核中是没有线程这个概念的,而是轻量级进程:LWP,我们所说的线程是C库中的概念,轻量级进程它的本质上仍然是一个进程。 在linux中每一个进程都是都是由task_struct结构体是实现的,轻量级进程也是由task_struct实现的,一个进程至少都会有一个主线程,但是它还可以拥有多个工作线程主线程和工作线程,每个线程都由一个task_struct结构体,它们的内存指针指向了同一块虚拟地址空间,因为它们指向同一块虚拟地址所以共享大部分的数据,但是每个线程在共享...

2020-11-16 17:40:33 201

原创 为什么说进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位

进程和线程两个容易混淆,首先在Linux内核中是没有线程这个概念的,我们常说的线程其实是轻量级进程的概念:LWP,线程概念其实是C库中的。我们常说进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位,但这是为什么? 在Linux中每一个进程都是由task_struct结构体来实现的,轻量级进程也就是我们所说的线程它也是一个task_struct结构体实现,当一个程序运行时,操作系用会给这个进程分进程虚拟地址空间,而一个进程中可能存在多个线程来完成不同的事情,把线程的task_struct加.

2020-11-16 11:19:33 12848

原创 httplib实现HTTP服务器流程

httplib的应用流程1.实例化一个Server对象2.在Sever对象中注册请求路由 ----- 传入请求资源的路径以及一个回调函数3.开始搭建一个服务器开始监听4.一旦服务器收到对应资源路径的请求,就会在Sever对象的请求路由信息中找到具体对应的处理函数进行执行,完成请求处理httplib搭建一个HTTP服务器的实现思路1.实例化一个Server对象,Server对象中有一个请求路由表,记录各种请求对应的处理函数。2.注册请求路由,告诉httplib,哪个资源请求应该用哪

2020-09-06 17:49:16 1259

原创 shared_ptr共享智能指针(实现以及缺陷)

shared_ptr共享指针是C++11提供的更加可靠的智能指针,它支持拷贝赋值shared_ptr实现的原理:通过引用计数的方式来实现多个shared_ptr对象共享一份资源。RAII的思想、重载* ->、引用计数解决浅拷贝问题。采用mutex来保证线程安全,mutex只能保证对引用计数的安全性,对于shared_ptr管理的资源由用户去保证。 shared_ptr在其内部,给每个资源都维护了着一份计数,用来记录该份资源被几个对象共享。 在对象被销毁时(也就是析构函数调用)

2020-07-30 16:16:03 1065

原创 C++智能指针的解析

为什么需要智能指针是因为我们在没有使用智能指针之前都是使用原生态的指针来管理资源,程序在退出时,原生态的指针不会自动的去释放资源,而c++中还没有支持垃圾回收机制,资源需要用户自己手动进行释放,这就可能由于用户的操作导致内存泄漏,因此用户在写代码时必须要谨慎。什么是内存泄露,内存泄露的危害什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不 是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而 造成.

2020-07-29 16:49:48 144

原创 以太网协议格式解析

网络层描述了数据的起点和终点,但是在传输的过程中还是要经过很多的小路径传输,而链路层就是负责相邻设备之间的数据传输,那么链路层是如何来识别相邻设备的?通过MAC地址来识别相邻设备,MAC地址就是网卡的物理地址,这样就可以进行数据传输。48位的对端MAC地址、48位的源端地址,描述是哪两个相邻设备进行通信 16位的上层协议类型,用于数据分用上层协议的选择 32位的检验和如何得到MAC地址: ARP协议:介于网络层和链路层之间的协议,可以通过ip地址获取到MAC地址广播ARP请求,请求中.

2020-07-29 10:07:40 614

原创 什么是数据分片

数据分片:在网络数据传输中,限制数据大小的不仅有网络层的报文长度(报文长度小于64K就可以发送),但是链路层中还有一个限制:MTUMTU:最大传输单元 ---- 链路层限制数据帧的大小

2020-07-27 21:51:11 2917

原创 IP协议格式

IP协议是TCP/IP协议族中最重要的协议之一IP协议是不可靠、无连接的 不可靠表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务,任何可靠性的要求都必须由上层来提供(如TCP)。如果传输过程发生错误,IP协议简单的丢弃该数据报,然后发送ICMP消息给发送端。 无连接表示IP协议不维护任何关于后续数据报的状态信息,每个数据报都是相互独立的。这也说明,IP数据报可能不是按照发送顺序被接收到的,很有可能后发送的数据被先收到。 4为版本:ipv4 ipv6 ..

2020-07-27 16:37:24 1206

原创 TCP的粘包问题

TCP是面向字节流的:有序的、可靠的、双向的、基于连接的字节流传输:以字节为单位,像水流一样的传输大量的数据要发送,不一定非要一次性发送,而是将数据放到发送缓冲区中,系统选择合适的时机,合适的大小进行传输,接受方接收到的数据也会放在接收含缓冲区中,不一定要一次性交付给应用层,优点:传输比较灵活,UDP每次必须进行整条数据的收发,缺点:TCP的粘包问题 ----- 将多条数据当做一条数据处理TCP并不关注数据格式数据边界,因此有可能将多条数据当作一条数据处理,解决方案:粘包的本质是因为

2020-07-27 15:38:23 123

原创 TCP如何避免性能损失

快速重传协议:当接收方认为某条数据丢失的时候,则会向发送方发送重传请求,减少等待若接收方接收到的数据并非接受窗口的后沿数据,则认为后沿数据可能丢失,这时候间隔连续发送三条后沿数据的重传请求,要求对方重传后沿数据。为什么要连续发送三条:三条请求时间,肯定小于超时等待的时间 网络中数据有可能延迟到达,因此三次是为了防止延迟到达,捎带应答机制:接收方针对每一条收到的数据都要进行确认回复,每一个确认回复都是一条数据(确认序号),单纯传输一个空报头就有些浪费,如果这时候刚好要给对方发送数据,则确认

2020-07-27 15:01:54 204

原创 TCP避免丢包机制(滑动窗口机制)

滑动窗口机制的作用:滑动窗口机制实现了流量控制(接收方控制发送方的发送速度),如果发送方发送大量的数据可能会占满接收缓冲区,这样就会导致后续发送的数据无法存放在缓冲区中而丢弃,导致发送方产生了大量的丢包重传。通过流量控制可以避免发送方发送数据过多而导致的丢包重传滑动窗口机制如何实现16为窗口大小是实现滑动窗口机制的关键信息接收方接收到每条数据之后,会进行确认回复,在确认回复的窗口中接收方会填入一个值,这个值不能大于接收方剩余缓冲区的大小,发送方在收到这个回复后,通过窗口大小就知道自己最多

2020-07-27 14:07:44 1070

原创 C语言处理错误的传统方式

传统的错误处理机制:1.终止程序: assert 发生内存错误,除0错误时就会终止程序2.返回错误码,缺陷:需要程序员自己去查找对应的错误,如系统都很多库接口函数都是通过把错误码放在errno中表示错误3.C标准库中的setmp和longjmp组合实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。....

2020-07-21 15:21:55 202

原创 C++11 lambda表达式

lambda表达式是为了解决人们在编程时为了实现一个algorithm算法而重新写一个类的情况int main(){ int array[] = {4,1,8,5,3,7,0,9,2,6}; // 默认按照小于比较,排出来结果是升序 std::sort(array, array+sizeof(array)/sizeof(array[0])); // 如果需要降序,需要改变元素的比较规则 std::sort(array, array + sizeof(array) / sizeo

2020-07-21 14:22:42 157

原创 C++11右值引用的用法

什么是右值引用C++98提出引用,引用就是起别名,引用变量和被引用实体公用一块内存空间,C++11新提出了右值引用这一概念,右值引用也是起别名,只是它只能对右值引用区别引用和右值引用引用的表现形式:T& REF = 实体; T&& REF = 右值;什么是右值左值与右值是C语言中的概念,但C标准并没有给出严格的区分方式,一般认为:可以放在=左边的,或者能 够取地址的称为左值,只能放在=右边的,或者不能取地址的称为右值,但是也不一定完全正确。 ...

2020-07-21 09:54:37 257

原创 TCP如何实现的可靠传输

可靠传输:在网络没有问题的情况下保证每个数据都要到达对端TCP能够实现可靠传输是因为这几种机制面向连接 ----------- 前提 确认应答机制 ---------- 确定对方是否收到自己发送数据 超时重传机制 ---------- 发送方等待超时没有,进行数据重传 序号和确认序号 --------- 实现了应答机制,以及进行接收方的包序管理,实现数据有序交付校验和字段 校验和字段 --------- 校验数据一致性,如果不一致则丢弃,对方法发送请求 避免丢包机制超时重传机制seq

2020-07-20 14:31:52 2380

原创 TCP协议特性解析(常见问题)

目录握手建立连接为什么是三次挥手断开为什么是四次握手失败时,两端的处理TIME_WATI状态有什么用一台主机上出现了大量的TIME_WAIT是什么原因一台主机上出现了大量的CLOSE_WAIT的原因是什么服务端收到相同客户端的多个SYN请求如何处理TCP:面向连接、可靠、面向字节流、有状态的协议面向连接:连接管理、状态管理、心跳保活管理连接管理:三次握手建立连接、四次挥手断开连接 状态管理:两端通信的过程中状态迁移变化,无论哪一端,在特定的状态下只能干特定的事.

2020-07-20 10:06:40 354

原创 undordered系列关联式容器

unordered系列容器的介绍: unordered系列容器是C++11中,新增加的4个关联式容器,这四个关联式容器与红黑树结构的关联式容器使用方式基本相同,只是在底层实现的结构不同。unordered_map1.unordered_map是存储<key , value>键值对的关联式容器,其允许通过key快速的索引到对应的value。2.在unordered_map中,键值通常用于唯一的标记元素,而映射值是一个对象,其内容与键值关联,键值和映射值的类型可能不同。3.在内.

2020-07-16 15:22:52 367

原创 红黑树的插入图解

红黑树也属于二叉搜索树,所有它的插入可分为两个步骤步骤1.按照二叉搜索树的规则找到插入新节的位置,并插入新的节点。步骤2.在插入新的节点后,可能会破坏红黑树的性质,所以要对树进行调整。插入 插入的新节点树红色的,若它的双亲节点的颜色是黑色的,则没有破坏红黑树的性质,无需调整,若它的双亲节点的颜色是红色的,则违反了红黑树红色节点不能连在一起的性质,则需要调整:颜色转变 + 旋转情况1:...

2020-07-16 15:17:46 379

原创 TCP/UDP协议格式

UDP协议:无连接,不可靠,面向数据报无连接:通信不需要建立连接,只要知道对方的地址就可以直接传输 不可靠:数据丢了就不管,没有更多的处理丢包机制 面向数据报:无连接,不可靠,固定且有最大长度限制的传输方式 数据长度固定:udp使用sendto发送数据的时候,将数据放到socket发送缓冲区中,数据在缓冲区中不做停留,而是直接取出封装头部 数据最大长度限制:因为udp数据报长度在头部字段中进行了描述,决定了udp报文不能超过64k(包含头部) 64k-8UDP协议格式:16位源..

2020-07-16 11:08:15 367

原创 简单HTTP服务器的编写

http.srv.cpp#include "tcpsock.hpp"#include <iostream>#include <sstream>int main(int argc, char*argv[]){ TcpSock lis_sock; lis_sock.Socket(); std::string ip = "0.0.0.0"; uint16_t port = 9000; lis_sock.Bind(ip,port); ...

2020-07-16 10:35:15 318

原创 HTTP协议的格式

HTTP协议格式首行 请求首行:包含三个要素 请求方法、URL、协议版本,空格间隔、\r\n结尾 请求方法很多,每种方法负责的功能也是不同的GET :主要用于获取实体数据资源,请求某个数据,也可以将某个数据提交到查询字符串中 HEAD:针对请求,只要响应的头部信息,不要实体资源,响应没有正文 POST:向服务器提交表单数据,提交的数据保存在正文中 URL:统一资源定位符,定位某个服务器上的某个资源 响应首行:包含三个要素 协议版本、响应状态码、状态码描述,空格间隔、...

2020-07-16 09:32:35 475

原创 一个完整的URL包含的要素

URL是什么网址URL:统一资源定位符,可以定位网络中的某个服务器上的某个资源一个完整的URL所包含的要素1.协议方案名称 :http / https / fdp ---告诉浏览器本次请求使用什么应用层协议2.用户名密码 : username:password ---早期访问服务器的同时携带认证用户名和密码信息,因为安全度太低了已经不用了3.服务器地址信息(服务器地址与端口)4.资源路径5.查询字符串6.片段标识符...

2020-07-15 08:40:48 1528

原创 哈希结构总结

哈希概念:在以往的查找元素的方法是,通常都是与关键码进行比较而进行查找,这是因为元素关键码与它的存储位置之间没有关系,而哈希方式查找元素是可以不通过任何比较,一次直接从表中得到要查找的元素,因为它的存储结构,是通过哈希函数使元素的存储位置而它的关键码之间建立了映射关系,在查找时可以直接通过函数找到该元素插入:1.先通过hash(key) = key % capacity 计算元素在表格中的存储位置2.让元素key插入到表格的pos位置中查找:1.通过hash(key) =..

2020-07-13 14:30:01 466

原创 编译链接运行原理

预处理删除宏定义并做文本替换 递归展开头文件 处理预编译指令 (#if 0 ,#endif) 删除注释 添加行号和文件标识 保留#pragma的指令编译词法分析 语法分析(建立了语法树) 语义分析 代码优化 生成汇编汇编翻译指令汇编生成的目标文件(可重入的二进制文件),不能直接运行,因为它是不完整的汇编遗留的问题: 预处理、编译、汇编处理的方式都是以源文件为单位,源文件和源文件之间没有关系,而一个项目能由多个源文件构成1.弱符号的处理 (C++没有)...

2020-07-09 15:52:11 147

原创 虚拟地址空间的布局

3G用户空间保留区:位于虚拟地址空间的底层,存放的C的库,不可访问 大小为128M. text 存放程序执行代码,也叫代码段(可读、可执行). data 数据段,用来存放已初始化且初始化不为0的全局变量和静态局部变量 (可读、可写). bss 未初始化数据段,用来存放未初始化或者初始化为0的全局变量和静态局部变量栈 又称堆栈,由编译器自动分配释放用函数内部声明的非静态局部变量提供空间 记录函数调用过程中相关的维护信息 临时存储区,用于暂时存储长算式表达式部分计算结果或al...

2020-07-09 15:18:31 272

原创 红黑树的结构

红黑树的结构:为了后续实现关联式容器简单,所以为红黑树中增加了一个头节点,头节点也是黑色,它的parent指针域指向红黑树的根节点,left指针域指向红黑树的最小节点(最左侧节点),right指针域指向红黑树中的最大节点(最右侧节点)...

2020-07-08 16:04:06 259

原创 红黑树中节点的默认颜色为什么是红色

关于节点默认是红色还是黑色,可以通过给树中插入红色节点或者黑色节点对树造成的影响大小,而判断应该将节点的默认颜色设置为红色还是黑色。根据红黑树的性质:1. 每个结点不是红色就是黑色 2. 根节点是黑色的3. 如果一个节点是红色的,则它的两个孩子结点是黑色的4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点) 插入红色节点树的性质可能不会改变,而插入黑色节点每次都会违反性质...

2020-07-08 15:29:53 4426

原创 红黑树的知识点总结(概念 、 性质)

红黑树的概念 红黑树是二叉搜索树的一种,它在二叉搜索树的基础上给每个结点增加颜色,可以是红色或者是黑色,所以叫做红黑树。通过对对节点颜色的限制,红黑树确保了没有一条路径会比其他路径长出两倍,而达到接近平衡。红黑树的性质每个节点只能是红色或者黑色 根节点必须是黑色的 如果一个结点是红色的,则它的两个孩子结点都要是黑色的 对于每个结点,从该节点到其所有后代叶结点的简单路径上,黑色节点的个数都相等 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)总结:红黑树:二叉搜索数 + 给结点.

2020-07-08 14:59:56 962

原创 UDP服务端的思路以及代码

创建套接字 :int socker(地址域,套接字类型,协议类型)地址域:常用 AF_INET套接字类型: SOCK_STREAM 流式(Tcp)/ SOCK_DGRAM 数据报(udp)协议类型: IPPROTO_TCP / IPPTOTO_UDP / 0 int sockfd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); if(socked < 0) { perror("socker error"); return

2020-07-08 10:58:59 262

原创 生产者与消费者模型的概念

生产者与消费者模型:一种代码的设计模式,大佬们针对典型场景设计的解决方案应对的场景: 数据的产生以及处理的场景示例:写一个程序,进行网卡流量分析 1.获取网卡流量 2.对流量进行数据分析解决方案:生产者与消费者模型 ----- 一个场所,两种角色,三种关系一个场所描述了一个线程安全的数据/任务队列 一种数据产生获取线程,专门用于获取数据,添加到队列中 一种数据分析处理线程,专门用于数据分析,从队列中获取数据生产者消费者模型的优点:解耦合 支持忙闲不均 支持并发耦...

2020-07-07 15:43:43 826

原创 AVL树的旋转 (左单旋)

在向上不断更新的过程中,如果parent平衡因子被更新为2或者-2,即parent的平衡因子违反了AVL树的性质,因此需要对以parent为根的二叉树进行旋转处理左单旋:新节点插入较高右子树的右侧右单旋:新节点插入较高左子树的左侧左右双旋:新节点插入较高左子树的右侧右左双旋:左单旋情况1:1.在树中插入70,根据二叉搜索树的性质新节点应该插入在2.由于树中插入了新的节点,可能会破坏树的平衡性,在检测平衡性发现平衡性被破环,需要向上更新平衡因子3.这时发现某个节

2020-07-07 10:55:50 639

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除