- 博客(29)
- 资源 (2)
- 收藏
- 关注
原创 《Redis设计与实现》第7章 压缩列表(ziplist)
压缩列表(ziplist)是列表键和哈希键的底层实现之一。 当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来作为列表键的底层实现。 当一个哈希键只包含少量键值对,并且每个键值对的键和值要么就是小整数值,要么就是长度较短的字符串时,那么Redis就会使用压缩列表来做哈希键的底层...
2018-08-05 10:56:39 484
原创 《Redis设计与实现》第6章 整数集合(intset)
整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。6.1 整数集合的实现 整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保证类型为int16_t、int32_t或者int64_t的整数值,并且保证集合中不会出现重复的元素。集合结构保...
2018-08-05 10:22:35 348
原创 《Redis设计与实现》第5章 跳跃表(skiplist)
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。 如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。 Re...
2018-07-25 10:00:12 249
原创 《Redis设计与实现》第4章 字典
字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。 字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键更新值,又或者根据键删除整个键值对,等等。 字典在Redis中的应用相当广泛,比如Redis的数据库就是使用字典来作为...
2018-07-06 20:54:09 249
原创 《Redis设计与实现》第3章 链表
链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。 除了列表键之外,发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态消息,以及使用链表来构建客户端输出缓冲区(output buffer)。3.1 链表和链表节点的实现 链表使用adlist.h/listNode结构来表示。 多个listNode可以通...
2018-07-06 10:21:13 161
原创 《Redis设计与实现》第2章 简单动态字符串(SDS)
Redis自己构建了一种名为简单动态字符串(simpledynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。 Redis中,C字符串(以空字符结尾的字符数组)只会作为字符串字面量(stringliteral)用在一些无须对字符串值进行修改的地方。2.1 SDS的定义 注意:保存空字符的1字节空间不计算在SDS的len属性里。遵循空字符结...
2018-07-06 09:28:05 222
原创 《TCP/IP网络编程》第18章 多线程服务器端的实现
本章所有示例代码>>gtihub18.1 理解线程的概念1. 引入线程的背景 多进程模型的缺点:创建进程的过程会带来一定的开销;为了完成进程间数据交换,需要特殊的IPC技术;“每秒少则数十次、多则数千次的‘上下文切换’(ContextSwitching)是创建进程时最大的开销。” 单CPU系统中,系统将CPU时间分成多个微小的块后分配给了多个进程,为了分时使用C...
2018-07-05 10:58:37 206
原创 《TCP/IP网络编程》第17章 优于select的epoll
本章所有示例代码>>gtihub17.1 epoll理解及应用1. 基于select的I/O复用技术速度慢的原因 两点不合理:调用select函数后常见的针对所有文件描述符的循环语句;每次调用select函数时都需要向该函数传递监视对象信息; “每次调用select函数时向操作系统传递监视对象信息。” 应用程序向操作系统传递数据将对程序造成很大负担,而且无...
2018-07-05 10:45:23 201
原创 《TCP/IP网络编程》第16章 关于I/O流分离的其他内容
本章所有示例代码>>gtihub 调用fopen函数打开文件后可以与文件交换数据,因此说调用fopen函数后创建了“流”(Stream)。此处的“流”是指“数据流动”,但通常可以比喻为“以数据收发为目的的一种桥梁”。16.1 分离I/O流1. 2次I/O流分离第10章中,通过调用fork函数复制出1个套接字文件描述符,以区分输入输出中使用的文件描述符。虽然文件描述符本...
2018-07-05 10:26:15 245
原创 《TCP/IP网络编程》第15章 套接字和标准I/O
本章所有示例代码>>gtihub15.1 标准I/O函数的优点 fopen、feof、fgets、fputs函数等。1. 标准I/O函数的两个优点标准I/O函数具有良好的移植性(Portability)(ANSIC)标准I/O函数可以利用缓冲提高性能 创建套接字时,操作系统将生成用于I/O的缓冲。此缓冲在执行TCP协议时发挥着非常重要的作用。此时若使用标准I/O...
2018-07-05 10:21:10 230
原创 《TCP/IP网络编程》第14章 多播与广播
本章所有示例代码>>gtihub向大量客户端发送相同数据时,可以使用多播技术解决。14.1 多播 多播(Multicast)方式的数据传输是基于UDP完成的。区别在于,UDP数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,采用多播方式时,可以同时向多个主机传递数据。1. 多播的数据传输方式及流量方面的优点多播服务器端针对特定多播组,只...
2018-07-05 10:15:39 286
原创 《TCP/IP网络编程》第13章 多种I/O函数
本章所有示例代码>>github13.1 send & recv函数1. Linux中的send & recv函数#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t nbytes, intflags); -sockfd: 表示与数据传输对象...
2018-07-05 10:07:56 207
原创 《TCP/IP网络编程》第12章 I/O复用
12.1 基于I/O复用的服务器端1. 多进程服务器端的缺点 为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作系统中采用的一种方案,但并非十全十美,因为创建进程时需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要求采用相对复杂的方法(IPC属于相对复杂的方法)。2. 理解复用 “在1个通信频道中传递多个数...
2018-07-05 09:48:55 277
原创 《TCP/IP网络编程》第11章 进程间通信
11.1 进程间通信的基本概念 进程间通信(InterProcess Communication,IPC)意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应该提供两个进程可以同时访问的内存空间。1. 对进程间通信的基本理解 只要有两个进程可以同时访问的内存空间,就可以通过此空间交换数据,但进程具有完全独立的内存结构。就连通过fork函数创建的子进程也不会与父进程...
2018-06-26 22:47:01 675
原创 《TCP/IP网络编程》第10章 多进程服务器端
10.1 进程概念及应用1. 两种类型的服务器端 按序处理客户端请求,如果每个客户端的平均服务时间为0.5秒,则第100个客户端会对服务器产生相当大的不满。 所有连接请求的受理时间不超过1秒,但平均服务时间为2~3秒。2. 并发服务器端的实现 同时向多个客户端提供服务的并发服务器端,具有代表性的并发服务器端实现模型和方法: A、多进程服务器: ...
2018-06-26 22:26:57 348 1
原创 《TCP/IP网络编程》第9章 套接字的多种可选项
套接字具有多种特性,这些特性可通过可选项更改。9.1 套接字可选项和I/O缓冲1. 套接字的多种可选项 由上表看出,套接字可选项是分层的。IPPROTO_IP层可选项是IP协议相关事项,IPPROTO_TCP层可选项是TCP协议相关的事项,SOL_SOCKET层是套接字相关的通用可选项。2. getsockopt& setsockopt 可选项的读取(G...
2018-06-26 20:07:07 405 1
原创 《TCP/IP网络编程》第8章 域名(DNS)及网络地址
8.1 域名系统 DNS(DomainName System,域名系统)是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。 域名是赋予服务器端的虚拟地址,而非实际地址。因此,需要将虚拟地址转化为实际地址。 所有计算机中都记录着默认DNS服务器地址,就是通过这个默认DNS服务器得到相应域名的IP地址。 >ping www.baidu.com ping命令...
2018-06-26 19:36:44 284
原创 《TCP/IP网络编程》第7章 优雅地断开套接字连接
本章所有示例代码>>github7.1 基于TCP的半关闭1. 单方面断开连接带来的问题 Linux的close函数(Windows的closesocket函数)意味着完全断开连接。完全断开连接不仅指无法传输数据,而且也不能接收数据。 主机A发送完最后的数据,调用close函数断开了连接,之后主机A无法再接收主机B传输的数据。最终,由主...
2018-06-26 19:27:45 361
原创 《TCP/IP网络编程》第6章 基于UDP的服务器端/客户端
6.1 理解UDP1. UDP套接字的特点 信件的例子。(无法确认对方是否收到、可能发生信件丢失) UDP在结构上比TCP更简洁,UDP不会发送类似ACK的应答消息,也不会像SEQ那样给数据包分配序号。因此,UDP的性能有时比TCP高很多。 流控制是区分UDP和TCP的最重要的标志。2. UDP内部工作原理 UDP最重要的作用就是根据端口号将传到主机...
2018-06-26 19:07:38 188
原创 《TCP/IP网络编程》第5章 基于TCP的服务器端/客户端(2)
5.1 回声客户端的完美实现1. 回声服务器端没有问题,只有客户端有问题。 回声客户端传输的是字符串,而且是通过调用write函数一次性发送的,之后还调用一次read函数,期待着接收自己传输的字符串。2. 回声客户端问题解决方法 解决:因为可以提前确定接收数据的大小,若之前传输了20字节长的字符串,则在接收时循环调用read函数读取20个字节即可。3. ...
2018-06-26 18:34:31 422
原创 《TCP/IP网络编程》第4章 基于TCP的服务器端/客户端(1)
4.1 理解TCP和UDP TCP是TransmissionControl Protocol(传输控制协议)的简写。 以多个标准为依据设计的系统称为开放式系统。 TCP和UDP层以IP层提供的路径信息为基础完成实际的数据传输,故该层又称传输层(Transport)。 IP层是面向消息的、不可靠的协议。只关注1个数据包(数据传输的基本单位)的传输过程。若只利用IP层传输数据,...
2018-06-26 18:27:17 394
原创 《TCP/IP网络编程》第3章 地址族与数据序列
3.1 分配给套接字的IP地址与端口号 IP是InternetProtocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。 端口号并非赋予计算机的值,而是为区分程序中创建的套接字而分配给套接字的序号。1. 网络地址(Internet Address)IPv4 4字节地址族IPv6 16字节地址族 IPv4标准的4字节IP地址分为网络地址和主机(指计算机)地...
2018-06-26 11:20:45 206
原创 《TCP/IP网络编程》第2章 套接字类型与协议设置
第2章 套接字类型与协议设置 2.1 套接字协议及其数据传输特性1. 关于协议(Protocol) 计算机间对话必备通信规则。2. 创建套接字#include <sys/socket>int socket(int domain, int type, int protocol); -domain:套接字中使用的协议族(ProtocolFami...
2018-06-26 10:57:39 203
原创 union联合体与字节序
union联合体与字节序1.union联合体union{ short value; char union_bytes[sizeof(short)];}test;union联合体所有数据成员共享一段内存,后写入的成员数据将覆盖之前的成员数据,成员数据都有相同的首地址。上述代码段的short型数据与char型数组在同一地址空间。2.字节序大端字节序...
2018-06-14 09:10:48 2163
原创 C++中的移位运算
C++中的移位运算逻辑移位:逻辑移位: 逻辑移位 :移出位丢弃,空缺位用“0”填充。 算术移位:算术移位: 算术移位:移出位丢弃,空缺位用“符号位”填充。1、无符号数不论是左移(&lt;&lt;)还是右移(&gt;&gt;)都是逻辑移位2、有符号数左移(&lt;&lt;):逻辑移位右移(&gt;&gt;):算术移位...
2018-06-10 00:47:33 641
原创 leetcode647 回文子串
leetcode647 回文子串1.题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例:输入: “aaaba” 输出: 9 解释:”a”、”aa”、”a”、”aa”、”aaa”、”a”、”b”、”aba”、”a” 2.思路奇回文(如 aba)和...
2018-05-21 16:41:29 869
原创 leetcode5 最长回文子串
leetcode5 最长回文子串(Manacher算法)1.题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例:输入: “babad” 输出: “bab”注意: “aba”也是一个有效答案。2.manacher算法奇回文(如 aba)和偶回文(如abba)归一化处理在字符串s的前端添加 $** ...
2018-05-15 20:21:41 1083
转载 控制台输出中文乱码问题
原文出处:http://blog.csdn.net/dreamtdp/article/details/8025514问题描述:cout 在控制台输出时出现乱码。解决办法:重新点出菜单,选“默认值”项,发现“默认值”里的“当前代码页”是可以设置,有两个选项:“437 (OEM - 美国)”和“936 (ANSI/OEM - 简体中文 GBK)”,将“当前代
2016-08-10 12:32:05 1423
原创 关于登录mysql时遇到的 error1045 错误
error 1045(28000):access denied for user 'root@localhost' (using password:yes)解决该问题,网上普遍给出了以下的方法:1.运行命令行界面,net stop mysql,然后修改my.ini文件,在[mysqld]下添加这句:skip-grant-tables;然后再net start mysql开启MySQL服务;
2015-01-14 08:56:10 471
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人