- 博客(269)
- 收藏
- 关注
原创 Raft协议介绍
Raft是一个分布式协议,现在随着用户的增多一台机器来运算后台数据已经不足及支撑当前软件后端的运算量,所以就有了分布式的概念,可是分布式中有一个最大的问题就是他的高可用性,或者说高一致性,比如说我现在有一张银行卡卡里有余额一千元,然后现在在一台atm机上取钱,这时候我们访问了银行后台的一台服务器,atm吐出了五百元给我,这时候服务器后台的数据我的卡内余额应该是五百元,但是由于银行有很多台服务...
2019-03-25 17:38:04
4202
1
原创 Redis
最近接触了Redis数据库,这里对Redis进行一个简单的介绍。 Redis是一个广泛被使用的高性能的存储系统,它具有一下特点:1.存储在内存中,所以读写性能非常高2.由C编写而成,所以跨平台支持的性能非常高3.使用kv存储,同时支持多种数据类型操作,并且其中key是二进制安全的,也就是说所有的二进制序列都可以作为key从字符串甚至到图片内容都可以 4.redis是单线程的,...
2019-02-26 16:42:40
637
原创 WebSocket 介绍
WebSocket 介绍 今天想给大家介绍一下WebSocket技术,在说他之前就不得不先说一下我们当前的HTTP协议,WebSocket和我们现在的HTTP几乎是没有关系的,但是他们两个还是有一部分交集的WebSocket是在HTML5下的一种新的协议,但是他和http一样都是基于tcp/ip的。所以他就有了一写http 协议的特性,这两个都是应用层的协议,并且因为他们都是基于TCP...
2019-02-25 14:33:48
688
原创 gorm
今天接触了orm的概念。orm 全程 object relation mapping 对象映射关系,这到底是做什么的呢?orm是为了解决面向对象和关系数据库之间存在的互不匹配的现象的技术,c++里边我们经常说面向对象,也就是说我的操作都是可以看成以某个对象为基础,让这个对象进行一系列的操作,但是当我们在程序中进行数据库操作的时候,确实在和复杂的sql打交道,我们在程序中操作数据库的时候是通过一些库...
2019-02-17 20:26:28
5600
原创 http 网关 熔断和限流
公司内部很多rpc调用都需要经过gateway 是为了保护后端 这里有两个常见的操作 一个是熔断一个是限流。gateway还能实现很多比如服务的黑名单白名单 防止攻击 灰度控制等等。这里主要就是介绍熔断和限流。什么是熔断? 其实熔断这个词不仅仅是在计算机领域会出现,在很多地方都有熔断的概念,熔断是为了保护后端,比如说我们当前有两个服务一个是qq群音频通话服务 一个是qq群服务,这两个服务都是由...
2019-02-17 17:01:57
6870
原创 go语言学习 五
第一个就是 还是重启电脑 然后在输入密码的时候不要输入 按住shift和关机那的重启按钮 会进入安全操作界面,里边有一个疑难解答进去,然后在里边找到高级选项 里边有一个启动设置,然后点重启,刚刚让你按的是4或者f4选的是安全模式 ,你现在看里边有没一个模式叫做启动带网络连接的安全模式,然后按他对应的序号 如果说有 并且进去了,那就先这么用 能上网 但是我也不确定什么东西会受到限制 遇到问题了再说...
2019-01-23 16:57:07
481
1
原创 go语言学习 三
昨天我们讲到了切片,切片可以用内奸函数make来创建,同样也是创建动态数组的方式,make函数会分配一个元素为零值的数组并返回一个引用了它的切片,一般来说make有两个参数,第一个是你要切片的数据,第二个是要切片的长度,如果需要指定它的容量就需要传入第三个参数,切片可以包含任何类型,甚至包括其他的切片,理解起来就是数组可包含数组 就是二维的数组,二维的切片。 在访问切片的时候 除了单纯的...
2019-01-21 19:30:33
450
原创 go语言学习 二
Go语言里和c语言一样也有指针的概念 var i int = 1var pInt *int = &i//输出:i=1 pInt=0xf8400371b0 *pInt=1fmt.Printf("i=%d\tpInt=%p\t*pInt=%d\n", i, pInt, *pInt)*pInt = 2//输出:i=2 pInt=0xf8400...
2019-01-20 19:55:50
351
原创 go语言学习 一
Go语言学习1.包 每个go语言程序都是由包来构成的,程序从main包开始运行,package mainimport ( "fmt" "math/rand")func main() { fmt.Println("My favorite number is", rand.Intn(10))}每个程序都是从main包开始运行的,这个程序我们引...
2019-01-18 17:59:55
659
原创 rpc im机制和网络优化
什么是rpc? remote procedure call 远程过程调用 ,简单的来说,我们现在实现了一个计算器的程序,通常我们会把这个计算器封装成一个函数,当我们想要计算的时候只需要把我们的参数传给计算器函数,把我们要处理的两个数据和我们要进行的操作传输过去,之后用一个返回值来把计算的结果返回给我们,但是这一整个流程都是在我们本地计算机上实现的,远程过程调用通俗的来说就是主函数运行在我当前的机...
2019-01-17 21:06:53
858
原创 数据库--内置函数
在数据库中有很多内置的函数。比如获得当前时间,甚至还可以在数据库内进行时间的加减操作。可以通过date_add 和date_sub来完成堆某个时间的加减天数操作。还可以求两个日期之间的差值。可以在进行插入的时候直接调用内置函数。创建一个留言表,表中包括主键自增长id,以及留言内容,发送时间三个字段。当插入时间的时候调用now内置函数。可以在查询的...
2018-12-25 11:06:34
1112
原创 数据库--基本查询
对于数据库的查询操作是数据库里边最重要的部分。创建一个goods商品类,插入两条数据。如果查看表中所有数据的话,可以通过select * from表名来查看某一个表中的所有数据。如果说想要批量修改数据库中某个表中某个字段的所有数据可以通过update语句来完成如果说只是想对某一个数据的某个字段进行修改,就要加上筛选语句,甚至还可以对一些整型的数据进行...
2018-12-23 20:13:48
617
原创 数据库--表的约束
之前我们介绍了数据的类型,今天我们主要介绍数据库中表的约束,虽然数据类型对我们的数据进行了一定程度的约束,但是那些约束很单一,很多情况还是难以处理,所以就有了表的约束。对于表的约束主要有:null、not null、default、comment、primary key、auto_increment、uniqu key。 这里我们一一进行介绍,首先是null和not null,通过字面...
2018-12-23 11:44:20
989
原创 数据库--数据类型
数据库和我们平时编程是相同的也有不同的数据类型,这次我们对数据库中的数据类型进行一下介绍。这里我们创建了数据项num的类型是tinyint,这里的int类型只能存储-128到127范围内的数据,也就是和C程序中的char类型存储范围是一样的,这里当我们插入1 的时候自然没有问题,但是当我们插入128的时候会有警告,这里不同的数据库会因为配置不同有不同的反应。如果是这样显示的说...
2018-12-17 21:03:45
488
原创 数据库--表的基础操作
这次我们介绍数据库中对表的一些基本操作。通过语句:CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 存储引擎;来创建表。字符集、校验规则都可以不指定,不指定的话默认的是当前数据库的规则。...
2018-12-17 19:43:15
381
原创 数据库--基础操作
这次我们对数据库再做一些基础的介绍。上次我们介绍了数据库支持的字符串和字符串校验规则。这里我们使用校验规则使用utf8_ general_ ci[不区分大小写]来创建数据库test1,这时候整个数据库的校验规则是不区分大小写的。之后创建一个名字为person的表,为了方便我们里边只包含一项数据name类型是varchar20.这里我们插入了四项数据,分别是a、A、...
2018-12-16 22:12:58
452
原创 数据库--基础
数据库相比文件保存文件来说:数据库比文件更要安全、文件不方便数据查询和管理、文件不利于存储海量数据、文件在程序中不方便控制。所以今天给大家介绍数据库的一些基础知识,这里我用的数据库是MariaDB他的操作和MySQL是一样的。 数据库安装完毕之后需要通过命令来进入,进入之后就不再是我们的shell命令也和之前不同 进来之后也是命令模式,如果想要查看我们现在有几个数...
2018-12-15 21:24:53
351
原创 多路复用----epoll
上次我们介绍了多路复用IO的select。poll和select十分类似,把用户传入的数组拷贝到内核空间,然后查询每个fd的状态,如果对应设备就绪就放入等待队列中,如果没有设备就绪就把进程挂起,直到有设备就绪或者超时了,但是他比select好的一点是他没有数目限制,因为poll是基于链表来存储的,但是还是和select有相同的最大缺点:大量的fd数组从用户复制到内核,并且poll还有一个特点是...
2018-12-10 17:45:16
427
原创 多路复用IO----select
上次我们介绍了五种基本的IO模型,在这五种里边多路转接IO是我们要了解的重点。 为什么他重要,我们先拿他和我们基础的IO来进行一下区分,当我们遇到普通的IO时都会开启一个新的进程来处理这个IO,在现在网络的访问量来开,如果同时有五千个IO来恐怕普通的机器都难以处理,更别说动不动就上亿的点击了,那这时候你的CPU占有率会相当的高,并且他并不是在干活如果没有数据的话就会阻塞在那里,浪...
2018-12-08 11:44:14
589
原创 五种IO模型
了解了什么是阻塞什么是非阻塞和同步和异步理解起来五种IO模型就很容易了。 五种IO模型:阻塞IO、非阻塞IO、信号驱动IO、多路转接IO、异步IO 阻塞IO: 阻塞IO是最简单的一种,也就是所进程在等待某个条件的时候如果条件不满足就一直等待下去,一直到满足了再去执行下一个操作。这里再拿一个比较广泛的例子来说一下,就是钓鱼的例子,在网上浏览一些文章的时候会发现很多都是用这...
2018-12-02 20:22:54
356
2
原创 IO模型--同步/异步 阻塞/非阻塞
到底什么是IO,我们之前经常说的IO就是指进行文件的写入和读取操作所做的操作, 但是在操作系统层面的IO并不是这么狭义。从键盘获取数据从socket都可以称作IO。 在正式介绍IO之前我们需要先弄清楚几个概念。 用户空间和内核空间 我们都听过虚拟内存的概念,现在的操作系统都是采用的虚拟存储器,对于32位系统来说,他的地址位有32个比特位,也就是说他最大可以访问2的3...
2018-12-02 19:15:22
1185
2
原创 IP辅助协议三
如果我们每次上网前都给我们的主机设置一个IP是非常麻烦的事情,到现在IP地址已经不够用了,所以不存在说给每个主机固定一个IP,所以我们的移动端笔记本、平板电脑等每到一个新的地方可能都需要设置一个新的IP,但是这样就十分的繁琐,所以就有了DHCP协议动态主机设置协议,有了DHCP之后我们的计算机只要连接到网络就可以进行通信,DHCP让我们上网变成了即插即用。在没有DHCP服务的网络中,用户接入...
2018-11-27 22:16:37
297
原创 IP辅助协议二
关于IP协议还需要一些其他的协议来辅助,比如我们在访问网站的时候并不会使用IP地址来访问,而是通过一串字符串,也就是我们说的域名来访问。但是网络访问的协议是需要IP地址的,那这是怎么实现的呢?用的就是我们的DNS服务。DNS服务就是将字符串转换成具体的IP地址,因为IP地址对于我们来说十分不便于记忆。TCP/IP协议自一开始就有了一个叫做主机识别码的东西,这种识别方式是给每一台计算机赋予了...
2018-11-26 16:21:31
385
原创 IP辅助协议一
之前我们简单介绍了IP协议,但是在我们访问一个网站的时候很好直接输入IP地址,并且数据包在网络传输的过程种在数据链路层也并不适用IP地址,所以仅仅有IP地址是不能完成我们的数据传输的,今天我们就来介绍一下辅助于IP的其他协议。 我们都听过mac地址这个概念,mac地址是我们网卡的物理地址,世界上每一个网卡都有一个唯一的mac地址,不会有重复的,那有没有想过这个问题,我们在学习IP的时候就...
2018-11-24 17:53:13
560
原创 IP协议 二
上次我们介绍了每个IP地址在网络里边必须是唯一的,不然一旦出现IP地址冲突,就会导致发送端无法区分应该把数据发给哪个地址。但是随着网络技术的不断发展和普及,IP地址不足的问题日趋显著,如果还是按照以前的放大采用唯一的地址的话,就会有IP地址耗尽的危险。对于那些没有连接互联网的独立网络也就是局域网中的主机,只要保证在这个局域网里边的地址设置成唯一的就可以了。 于是就有了私有IP和公有I...
2018-11-20 21:16:32
398
原创 IP协议
之前我们说到来的TCP/UDP等协议是传输层的协议,在网络层中也有一个很知名的协议--IP协议。IP能够让世界上任何两台计算机之间机型通信,IP协议主要负责的是将数据包发送给最终的目标计算机。网络层的主要作用是实现终端节点之间的通信,这种终端节点之间的通信也叫做点对点的通信,之前我们说过,网络层的下一层数据链路层的作用主要是在局域网之间进行包传递,一旦跨越多种数据链路,就需要借助网络层,网络层...
2018-11-19 16:56:09
630
原创 TCP协议机制
今天主要给大家介绍几个在TCP协议中的机制。 在之前介绍对TCP可靠性的时候说到了几个机制:确认应答、超时重传。 确认应答机制是每一个数据包中都带有一个对应的确认序列号,是用来告诉发送者,我收到了哪些数据,接下来你还要给我发哪些数据。第二个超时重传,也就是当我们的发送方发送数据之后长时间没有接收到确认应答他就认为这个数据包可能是自己没有发送到,所以他便会再次重新发送这个数据包...
2018-11-18 21:42:57
1026
原创 fork和vfork有什么区别
自己在刚刚学习Linux进程的时候接触到了一个进程里边的第一个函数fork,最初接触的时候还是感觉比较稀奇的,后来发现也不过如此,之前还写过一个关于fork的博客,fork就是只调用一次,但是却有三个不同返回值的函数,可以通过它的返回值来判断是子进程还是父进程。但是fork和vfrok有什么区别的时候,我只是听说过vfrok并不是很了解两个有什么区别,今天就来总结一下,这两个函数到底有什么区...
2018-11-13 23:18:43
444
原创 TCP--四次挥手
上次我们介绍了TCP链接的三次握手,这次我们来说一下TCP的四次挥手。 三次握手是在创建连接,那顾名思义四次挥手就是在断开连接的。 当我们两个主机想要断开连接的时候就通过四次通信来断开一个存在的TCP链接。那为什么需要四次挥手来断开连接呢?我们先说一下四次挥手的过程。第一次挥手:主动关闭的一方向A向被动的一方B发送断开请求,在发送数据包的时候把TCP首部的FIN设置为1,...
2018-11-13 21:10:22
285
原创 TCP--三次握手
我们再说TCP的时候经常会说他是有连接的,可靠的,面向数据流的三个特点,今天我们就来介绍一下TCP的有连接的。 先说一下什么是面向连接的,我们在创建TCP连接的时候和UDP不一样,我们得先向客户端发送请求,然后客户端回复我们一个确认应答和请求,之后我们再给客户端发送确认应答,也就是经典的三次握手,这时候双方才可以发送数据,UDP不管你有没有连接,上来就直接发,这就好比我们TCP用的是手机...
2018-11-11 20:56:55
373
原创 TCP协议特性--可靠
我们之前简单的讲解了一下TCP的工作方式以及TCP和UDP之间的区别,今天我们再深入的讲一下TCP。 TCP是传输层的协议,在到达这一层的时候TCP会给数据加上一个TCP的首部,TCP首部大小最小为20字节,最长是60字节。并且在TCP首部中没有表示包长度的数据或者数据长度的字段,一般来说都是在IP层获知TCP的包长,然后由TCP包长来计算出当前传输的数据长度。 最开始16位...
2018-11-10 20:16:27
308
原创 端口
学习网络的一定都知道端口这个东西,但是端口到底是什么?他的作用是什么在什么时候使用到它,今天就简单的介绍一下。 首先,要清楚哪里用到了端口在TCP/IP协议中我们经常能够看到端口的身影,在网络中分层传输的时候,每经过一层都会给他加上一个首部,TCP、IP都是如此,虽然我们常常是把TCP和IP在一起说,但是TCP、IP两个协议是属于不同网络层的,TCP位于传输层,传输层的任务是确保数据能够...
2018-11-10 16:46:22
557
原创 LeetCode--电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].最初拿到这个题的时候我想的是通
2018-11-10 11:57:41
713
原创 剑指offer--二叉搜索树的后序遍历
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 我们都知道二叉搜索树的规律是左孩子要比根节点要小,右孩子要比根节点要大。而后序遍历就是最后遍历我们的根节点,这样就让我们的后序遍历存在一定的规律性。这是最正常的情况,我们当前遍历的根节点既有左孩子又有右孩子,因为后序遍历的左右根,所以...
2018-11-06 20:24:05
226
原创 简单HTTP服务器实现
我们这里实现一个简单的HTTP服务器,无论浏览器向我们请求什么数据,我们都返回一个hello world //实现最简单的http服务端程序//返回hello world//http是应用协议,在传输层使用的是tcp协议所以我们的程序本质上是tcp服务器//我们http指定监听10000端口,所以在请求访问的时候也要手动指定否则默认80端口#include<std...
2018-10-30 20:46:03
2166
原创 自定协议实现网络计算器
这里我们的自定执行协议和TCP、UDP、IP这些协议不同,我们自定制的协议是应用层的协议。是我们这两个应用所应用的一种特殊传输和接受数据的方式,这里我们是通过结构体来存储数据的,也可以定义一个字符串,当我们的数据发送过去之后,只有我对应的服务端或者客户端明白我这里是在干什么,如何把这一大块数据进行划分。//这是一个通过自定制协议来实现的网络计算器//客户端传输过来的数据是提前协定好的...
2018-10-29 16:34:06
497
原创 剑指offer--包含mini函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 这个题目的意思就是我们的函数里边有一个min函数,当我们调用这个函数的时候,不需要去遍历我们的栈,直接调用这个函数就可以返回我们栈里边的最小元素。 那我们就一步一步的来分析一下这个问题。第一步:设置一个min变量 这是很好理解的,我们现在定义一个变量,in...
2018-10-29 14:21:03
470
原创 多线程版本TCP聊天程序服务端
这是一个通过多线程来实现可以接受多个客户端的TCP聊天程序。 //这是一个实现多线程TCP的聊天程序服务端#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<unistd.h>#include<s...
2018-10-28 21:01:43
745
原创 多进程版本TCP聊天程序服务端
我们上次写了利用TCP协议来实现的简单的网络聊天程序,我们实现的是一对一的聊天, 但是如果我们通过上次的程序来实现多对一呢? 我们可以看出来其中一个客户端可以和服务端正常交流,但是另一个客户端是链接不上服务端的,即使原来的客户端退出了,新的客户端也是链接不上的。因为我们的程序当链接成功之后会通过while循环来一直调用read函数,并没有再去调用我们的accept函数,所以...
2018-10-28 16:32:07
544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人