自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

转载 回调函数

1.https://blog.csdn.net/lixiaogang_theanswer/article/details/80400259;

2018-07-22 17:47:39 118

原创 为什么unsigned (-1)表示无符号整数的最大值

1、整数在计算机中的表示。在计算机中,整数采用补码表示。当前主流编译器中整型在内存中占用四个字节,共32位。2、原码、补码、补码。原码:第一位为符号位,其余位表示数值,如-1的原码:1,000...0001(两个1之间32个0)。反码:正数的补码就是其原码;负数的反码为符号位不变,数值位按位取反。如-1的补码为1,111...1110。补码:正数的补码就是其原码。负数的补码为=...

2018-07-20 17:54:17 18060 3

原创 使用STL algorithm来轻松解决几道面试题

1、生成一个序列的全排列。题一:生成N个不同元素的全排列。测试代码://测试函数int main(){ char elements[]={'a','b','c','d'}; const int N=sizeof(elements)/sizeof(elements[0]); std::vector<char> intArray(elements,...

2018-07-18 09:32:33 564

原创 STL复习之算法五

1、next_permutation() 。next_permutation()会取得[first,last)所标示之序列的下一个排列组合。如果没有下一个组合,便返回为false;否则,当前序列被排序成当前序列的下一个序列并且返回为true。算法实现:template <class _BidirectionalIter, class _Compare>bool __ne...

2018-07-17 20:15:10 147

原创 STL复习之算法四

   1、unique。算法unique能够移除重复的元素。每当在区间[first,last)内有重复元素群,它便移除该元素群中的第一个以后的连续的重复元素。注意,unique只能移除连续的相邻的连续元素,如果想要移除所有(包括不相邻的元素)重复元素,需要先对序列排序,使所有重复的元素都相邻。测试代码:void traverseEle(const std::vector<int&g...

2018-07-17 16:09:20 198

原创 STL复习之算法三

1、rotate(s,m,l),将区间[m,l)序列的元素整体移动到区间[s,m)前面。返回为void。函数原型:template<class ForwardIterator,class Distance>void __rotate(ForwardIterator first,ForwardIterator middle,ForwardIterator last,Dist...

2018-07-17 10:59:22 142

原创 STL复习之算法二

  1、search(s1,e1,s2,e2)。在序列[s1,e1)内寻找序列[s2,e2)第一次出现的位置,若后者并不在前者的区间内,则返回前者区间的末尾,即e1。函数原型: template<typename _ForwardIterator1, typename _ForwardIterator2, typename _BinaryPredicate> ...

2018-07-16 14:51:16 164

原创 STL复习之算法一

1、set_uinon。即求两集合之并集。注意到两个set集合必须是有序的。实现: template<typename _InputIterator1, typename _InputIterator2, typename _OutputIterator, typename _Compare> _OutputIterator __set_un...

2018-07-15 13:45:14 150

原创 STL复习之——hashtable

1、二叉搜索树具有对数平均时间的表现,但这样的表现依赖于输入数据具有足够的随机性。hashtable在插入、删除。搜寻等操作上也具有“常数平均时间”的表现,而且这种表现是以统计为基础,不依赖与输入数据的随机性。2、在找元素的存储位置时的使用的hash函数主要有三种。这三种方法都是为了解决不同的元素被hash函数映射到同一位置,引起冲突的问题。一、线性探测法;二、二次探测法;三、开链法。下图是以开链...

2018-07-14 17:58:13 190

原创 STL复习之——红黑树

1、应用:STL中的关联容器,如set、map等都是以红黑树作为底层容器。2、基本定义:2.1、每个节点不是红色就是黑色;2.2、根节点为黑色;2.3、如果节点为红,则其子节点必须为黑。2.4、任一节点至NULL(树尾端),所含 之黑节点数必须相同。 2、插入节点需要旋转的四种情形,《STL源码剖析》第210页~211页。3、调整红黑树的结构的代码。3.1、左旋。template <clas...

2018-07-13 15:46:54 159

原创 Revolver源码解析之——RUDP Socket类实现解析

1、类间关系类图。【1】类间关系。【2】类图。//To do

2018-07-11 21:13:46 1525

原创 Revolver源码解析之——RUDP发送速率控制器

1、功能:实现带宽评估、发送窗口决策、RTT与RTC的计算。2、成员函数解析。[1].处理接收到的ACK。void RUDPCCCObject::on_ack(uint64_t ack_seq){ if(ack_seq <= last_ack_id_) { return; } uint32_t space = (uint32_t)(ack_seq - last_ack_i...

2018-07-11 15:04:21 736

原创 Revolver源码解析之——接收缓冲区与其滑动窗口

1、基本定义:接受缓冲区的滑动窗口的定义。typedef map<uint64_t, RUDPRecvSegment*> RecvWindowMap;key为数据片的ID,value为指向数据片的对象指针。用来接收连续的数据片的队列缓冲定义typedef list<RUDPRecvSegment*> RecvDataList;记录丢失的数据片的ID与丢失时间戳的map。ty...

2018-07-10 21:05:42 308

原创 Revolver源码解析之——发送缓冲区与其滑动窗口

1、发送数据片的结构体定义。//发送数据片typedef struct tagRUDPSendSegment{ uint64_t seq_; uint64_t push_ts_; //进入发送队列的时刻 uint64_t last_send_ts_; //最后一次发送的时刻 uint16_t send_count_; //发送的次数 uint8_t data_[MAX_SE...

2018-07-10 20:29:03 253

转载 Revolver中的服务器负载均衡选取算法

1、服务器负载均衡选择算法;参考:【1】.https://blog.csdn.net/yuanrxdu/article/details/19924027;

2018-07-09 21:16:21 202

原创 muduo的高性能异步日志

1、一个日志库大体可分为前端(frontend)与后端(backend)。前端是供应用程序使用的接口(API),并生成日志信息;后端则是负责将日志信息写到目的地。每个线程都有自己的前端,而整个程序共用一个后端。对于生产者(前端)而言,要尽量做到低延迟、低CPU开销、无阻塞;对消费者(后端)而言,要尽量做到足够大的吞吐量,并占用较少的资源。    对C++程序而言,最好整个程序(包括主程序和程序库)...

2018-07-09 18:07:37 1630

原创 Revolver源码解析之——单例模式

1、基本概念。在整个程序运行期间只需要某个类的一个实例化对象,在程序结束运行时,销毁这个类对应的对象。2、单线程安全的版本。【实现】#ifndef __BASE_SIGNLETON_H#define __BASE_SIGNLETON_H#include <stdlib.h>#include "base_os.h"template<class T>class C...

2018-07-09 10:10:49 231

原创 Revolver源码解析之——日志系统的实现解析

1、BaseLog类。.hclass BaseLog{public: BaseLog(const char* _pfile_name); virtual ~BaseLog(); //写入日志 void write_log(const string& str_log); void flush(); void change_path(const std::string...

2018-07-08 21:56:37 304

原创 Revolver源码解析之——协议对象的序列化与反序列化

1、基本原理。序列化:将对象转化为字节序列的过程。反序列化:从字节序列中恢复对象的过程。小端模式:低地址上存放低字节,在高地址上存放高字节。大端模式:低地址上存放高字节,在高地址上存放低字节。网络字节序采用大端模式。参考:[1].https://blog.csdn.net/qqliyunpeng/article/details/68484497;[2].https://www.cnblogs.co...

2018-07-07 15:47:18 213

转载 UDP中一个包的大小最大能多大

1.UDP中一个包的大小最大为多大;

2018-07-06 20:48:02 5621

原创 Revolver定时器部分源码解析

1、定时器单元模板类定义,实现对定时器参数的管理。.h文件/**************************************************************************************filename: timer_node_t.h**to do: 定义定时器单元模版,实现对定时器参数的管理*Create on: 2012-04*Auth...

2018-07-06 16:05:36 237

原创 Revolver对象池实现

源码:/**************************************************************************************filename: object_pool.h**to do: 定义对象池*Create on: 2012-04*Author: zerok*check list:********************...

2018-07-05 20:50:26 159

转载 select函数API

1.select函数API;

2018-07-04 13:53:46 747

原创 开源项目revolver解析系列之——Reactor

1、基本理论。2、类图。基础的接口类是CReactor。在windows平台下继承CReactor,实现CSelectReactor类,实现CReator抽象类里面定义的纯虚函数open_reactor()、close_reactor()、event_loop()、stop_event_loop()、register_handler()、remove_handler()、delete_handle...

2018-07-02 15:13:08 557 1

空空如也

空空如也

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

TA关注的人

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