自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhougb3的博客

It's been kind of tough, but tough people last.

  • 博客(28)
  • 问答 (5)
  • 收藏
  • 关注

原创 Redis入门指南---读书笔记

第一章 简介Redis的全称是remote dictionary server(远程字典服务器)Redis的优势: 1. 存储形式与在应用程序中存储方式相近 2. 提供对不同数据类型的方便操作(交集) 3. 因此与MySQL数据库相比,使用起来性能更高更方便。Redis是内存存储,但是可以通过异步方式写入硬盘,支持持久化。第二章 准备启动rR...

2018-04-29 20:00:07 681

原创 C 线程池创建

最近学了些网络编程的知识,想要用epoll和多线程尝试搭建一个简单的后台服务程序。epoll负责监听所有连接发生的事件,然后再用一个新的线程来处理这个事件(读取socket并处理)。这样子可以使得事件能够及时处理,epoll也不会阻塞在socketIO上。使用线程池原因因为要处理的事件花费的CPU时间很少,而且因为连接多,处理的事件很多,所以频繁创建线程不是一种明智的做法,这样子会把大...

2018-04-28 17:21:32 425

原创 TCP粘包问题

原因:TCP提供的是一种字节流服务,没有消息保护边界。发送端需要等缓冲区满才发送出去,造成粘包接收方不及时接收缓冲区的包,造成多个包接收解决方法一是对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满;二是对于接收方引起的粘包,则可通过优化程序设计...

2018-04-27 13:33:16 185

原创 我对shutdown和close跟四次挥手关系的理解

在调用close时实际是关闭了减少了文件描述符,当文件描述符引用为0时,则会删除文件,关闭套接字。shutdown是直接对socket的操作,相当于设置了socket的属性,可以设置为只读,只写,或者直接关闭,但不会操作与此socket相关的文件。shutdown() doesn’t actually close the file descriptor—it just changes its...

2018-04-25 11:29:30 1412 1

原创 《TCP IP网络编程》尹圣雨——读书小记

之前学了一些网络编程的东西,但还没有系统看过相关书籍,故先选了这本书来读,并记下一些阅读过程中觉得值得记录的东西,作为回顾之用。这里的记录只有Linux下的相关知识,没有Windows的相关操作。第一章 理解网络编程和套接字接电话套接字:套接字编程就像电话机。首先要安装电话机(socket函数),接着要给电话机分配号码(bind函数),还要给电话机接上电话线(listen),如果电话响...

2018-04-24 21:23:33 2106

原创 memcached初探(一致性哈希算法)

memcached是什么MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。Memcached 进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请,不是每次需要的时候去向操作系统申请。当分配给Memcached的内存足够大的时候,...

2018-04-21 19:25:13 440

原创 C程序理解(栈,GCC,.h文件)

.h .lib .dll文件.h文件是编译器编译时必须要的,预处理会找到相对应的头文件中的声明,才可以顺利完成编译。如果这个文件中某个函数使用没有在本文件中声明,也没有在包含的头文件中声明,就会出错。.lib是链接时必须的, 告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在li...

2018-04-20 20:20:56 611

原创 算法整理(四)全排序——字典序讲解

三种方法:全排序字典序讲解:【例】 如何得到346987521的下一个(即只比这个大一点点) 1,从尾部往前找第一个P(i-1) < P(i)的位置4 6 <- 9 <- 8 <- 7 <- 5 <- 2 <- 1 最终找到6是第一个变小的数字,记录下6的位置i-1 2,从i位置往后找到最后一个大于6的数4 6 ...

2018-04-20 14:24:36 1178

原创 算法整理(三)图中的路径问题

单源最短路BFS如果图中没有权值,直接用BFS就可以解决Dijkstra算法又称迪杰斯特拉算法,是一个经典的最短路径算法,主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,使用了广度优先搜索解决赋权有向图的单源最短路径问题,算法最终得到一个最短路径树。时间复杂度为O(N^2)①先取一点v[0]作为起始点,初始化dis[i],d[i]的值为v[0]到其余点v[i]...

2018-04-20 12:43:11 599

原创 算法整体(二)DFS,BFS,图的环问题,拓扑排序

图的存储结构主要分两种,一种是邻接矩阵,一种是邻接表。邻接矩阵是一个n * n 的数组,n为节点数目,经常表示为vector<vector<int> >&graph 邻接表其实也是类似,只不过如果两个节点之间没有边,那么不需要存储。DFS(深度优先遍历)基本思想:首先从图中某个顶点v0出发,访问此顶点,然后依次从v0相邻的顶点出发深度优先遍历,直至图中...

2018-04-19 16:59:43 1145

原创 82. Remove Duplicates from Sorted List II

题目描述Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example, Given 1->2->3->3->4->4->5, return...

2018-04-18 14:10:42 142

原创 ★★★25. Reverse Nodes in k-Group

题目描述Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.k is a positive integer and is less than or equal to the length of the linked list. If the numb...

2018-04-18 11:38:01 151

原创 23. Merge k Sorted Lists

题目描述Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.Example:Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2-&...

2018-04-17 21:44:04 177

原创 19. Remove Nth Node From End of List

题目描述Given a linked list, remove the n-th node from the end of list and return its head.Example:Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the e...

2018-04-17 19:45:29 129

原创 2. Add Two Numbers

题目描述You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and re...

2018-04-17 10:36:54 146

原创 Linux简述

Linux系统组成部分:Linux内核、shell、文件系统和应用程序。Linux 内核由如下几部分组成:内存管理、进程管理(比较简单的基于优先级的进程调度算法选择新的进程)、设备驱动程序、文件系统和网络管理等。Linux下面的文件类型主要有: 1) 普通文件:C语言元代码、SHELL脚本、二进制的可执行文件等。分为纯文本和二进制。 2) 目录文件:目录,存储文件的唯一地方。 3) ...

2018-04-15 14:21:37 301

原创 《TCP/IP详解 卷1:协议》第二十一到第二十三章

这个写的很好: 《TCP/IP详解》读书笔记TCP不对ACK报文段进行确认,如果一个ACK丢失了,接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方等待允许它继续发送数据的窗口更新。为防止这种死锁,发送方使用坚持定时器(persist timer)来周期性向接收方询查窗口是否已增大。(发出的报文段叫做窗口探查,window probe)窗口更新报文可能会丢失。...

2018-04-11 12:52:50 113

原创 《TCP/IP详解 卷1:协议》 第二十章 TCP的成块数据流

看了TCP的交互数据流和成块数据流,个人觉得如果不使用Nagle算法,那么交互数据流使用的方法应该跟成块数据流一样。 TCP处理一个接收的报文将产生一个经受时延的确认,此ACK并不立即返回,这时分两种情况(隔一个报文或者定时器溢出): (1)TCP处理下一个报文,然后返回一个ACK确认2个报文段(可以想象成捎带ACK); (2)定时器溢出,返回ACK。如果溢出时,TCP接收缓冲...

2018-04-11 11:22:45 173

原创 《TCP/IP详解 卷1:协议》 第十九章 TCP的交互数据流

TCP报文段包含成块数据和交互数据。Rlogin每一个交互按键都会产生一个数据分组,报文段2和3可以进行合并(受时延的确认) Telent有一个选项允许客户发送一行到服务器,通过使用这个选项可以减少网络的负载。受时延的确认:时延的时间是1-200不等。TCP使用了一个 200 ms的定时器,该定时器以相对于内核引导的 200 ms固定时间溢出。由于将要确认的数据是随机到达的(在时刻 ...

2018-04-10 21:55:35 193 1

原创 《TCP/IP详解 卷1:协议》 第十八章 TCP连接的建立与终止

在第1行中,字段1 4 1 5 5 3 1 5 2 1 : 1 4 1 5 5 3 1 5 2 1 ( 0 )表示分组的序号是 1 4 1 5 5 3 1 5 2 1,而报文段中 数据字节数为 0。 t c p d u m p显示这个字段的格式是开始的序号、一个冒号、隐含的结尾序号 及圆括号内的数据字节数。显示序号和隐含结尾序号的优点是便于了解数据字节数大于 0时的 隐含结...

2018-04-10 20:31:55 315

原创 《TCP/IP详解 卷1:协议》 第十七章 TCP:传输控制协议

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据 之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。TCP通过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给I P的信息单位称为报文段或段(s e g...

2018-04-10 20:30:13 184

原创 关联式容器

平衡二叉搜索树:根据平衡条件的不同有AVL树,红黑树等。当在AVL树中插入一个新节点时,导致某个节点的高度差变为了2,则此时需要调整。假设平衡被破坏的最深节点为X,则平衡被破坏的情况有如下四种(插入点不可能直接在左右节点上,否则该树平衡早就被破坏了):k1,k2,k3是以节点X为标准得出的。红黑树问题...

2018-04-07 11:31:11 286

原创 序列化容器

vector使用的是线性连续空间 list是双向链表,增加删除元素迭代器是不会失效的。 deque:双向开口的连续线性空间。map是中控器,存的是缓冲区地址,一开始先让中间块指向一块缓存,再分别往两边扩展。插入删除元素时看是不是首尾,首尾就简单了,不影响迭代器。否则迭代器都会失效,因为要根据前后元素的多少选择左移还是右移操作。stack只是更改了deque的接口,封装其头端...

2018-04-06 23:01:21 492

原创 空间适配器(allocator)

allocator是空间配置器而不说是内存配置器,因为他可以直接向硬盘取空间。SGI也有allocator,但一般使用的都是alloc,因为allocator只是基层内置配置/释放行为(::operator new,这应该是一个全局函数,这也是C++内存配置的基本操作)的一个封装而已,没有效率上的优化。new,malloc和::operator newSTLallocator的默认操作...

2018-04-06 18:28:14 360

原创 STL概述与版本简介

STL是一个标准,因而有各种实现版本。本书使用的是SGI STL ,这个版本对STL做了大量的扩充。术语转换表:STL标准库是一个符合开发性封闭原则的程序库。 gcc 最开始的时候是 GNU C Compiler, 如你所知,就是一个c编译器。但是后来因为这个项目里边集成了更多其他不同语言的编译器,GCC就代表 the GNU Compiler Collection,所以表示一...

2018-04-04 20:36:58 532

原创 poll/epoll用法简述

struct pollfd { int fd; //文件描述符 short events; //要求查询的事件掩码 short revents; //返回的事件掩码 }; int poll(struct pollfd *ufds, unsigned int nfds, int timeout); struct pollfd * fds:是一个stru...

2018-04-03 06:31:58 674

原创 select用法&原理详解(源码剖析)

最近刚接触Linux下的select用法,查阅了很多资料终于懂得了一丁点,故将自己查阅后有用的资料整理在这下面。博客链接都是很有价值,写的很好的文章。在研读源码时主要看的是这篇文章:深入select多路复用内核源码加驱动实现 自己能力精力有限,没有办法自己写一篇完完整整的文章,故只能当个搬运工了,文章先后顺序尽量按照了知识点的先后~~如果有什么问题欢迎一起探讨学习~前期知识在开始接触s...

2018-04-02 20:11:53 70679 10

原创 C++11多线程编程系列(一)左值右值,move,ref 讲解

左值and右值左值指的是可以取地址的变量,记住,左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据。通常临时量均为右值。对于自定义的类型(user-defined types),右值却允许通过它的成员函数进行修改。 右值只能被 const reference 指向。c++中的左值与右值move怎样理解 C++ 11中的move语义若一同提供复制与移动...

2018-04-01 15:25:06 1742

空空如也

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

TA关注的人

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