自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通用队列编程设计

我们在设计队列的时候,如何巧妙的设计一种通用的数据结构来保存各种不同的元数据?比如有数据类型A,数据类型B等等。定义一个Task类class A { char buffer[10]; A(const char* p, int len) { if(len > sizeof(buffer)) { len = sizeof(buffer); } memcpy(buffer, p, le

2022-04-28 10:45:42 642

原创 __builtin_expect的作用

将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,减少cpu等待取指令的耗时,从而可以提供cpu的效率。如果存在跳转指令,那么预先取出的指令就无用了。cpu在执行当前指令时,从内存中取出了当前指令的下一条指令。执行完当前指令后,cpu发现不是要执行下一条指令,而是执行offset偏移处的指令。cpu只能重新从内存中取出offset偏移处的指令。因此,跳转指令会降低流水线的效率,也就是降低cpu的效率。综上,在写程序时应该尽量避免跳转语句。那么如何避免跳转语句呢?答

2022-04-19 10:15:37 180

原创 CAS操作

1. CAS原理2. CAS缺点,ABA问题GCC的CAS,GCC4.1+版本中支持CAS的原子操作。1)bool __sync_bool_compare_and_swap (type *ptr, type oldval, type newval, ...) 2)type __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)C++11中的CAS,C++11中的STL中的atomic类的函数可以让你

2022-03-28 10:51:34 420

原创 InfluxDB

什么是InfluxDB从文章开票的介绍里能大概知道它的使用场景,下面介绍来自维基百科:InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。...

2021-03-22 16:44:04 115

原创 RFC3208 PGM协议

https://tools.ietf.org/html/rfc3208

2021-02-02 17:51:47 526

原创 boost Turtle篇

出自http://turtle.sourceforge.net/turtle/motivation.htmlimplements based class function实现函数重载:MOCK_BASE_CLASS( mock_view, view ) // declare a 'mock_view' class implementing 'view'{ MOCK_METHOD( display, 1 ) // implement the 'display' method f.

2020-08-15 17:45:38 230

原创 c++知识点补充

函数对象和普通函数的区别

2020-08-11 16:15:35 83

转载 工厂模式boost::factory

#ifndef MP_OBJECT_FACTORY_H #define MP_OBJECT_FACTORY_H #include <boost/function.hpp> #include <map> /// 工厂模式泛型实现. /// 限制: 生成的对象必须为通过默认构造函数来构造. /// 当然你也可以扩展这个模板让它支持更多参数的构造函数. template<typename IdType, typename ObjectType&gt.

2020-08-11 16:03:16 685

原创 PGM可靠组播协议

PGM,Pragmatic General Multicast(RFC 3208)。基于IP层的传输层协议,与TCP/UDP同级。开源工程OpenPGM,https://www.developerfusion.com/project/66770/openpgm/

2020-06-29 11:22:35 2356

原创 C++11 字符串分割

Using explode function as it used in PHP programming.The code above just a simple function, yet well-tested with various case. Following is the example in main function: int main(){ string str{"the quick brown fox jumps over the lazy dog...

2020-06-28 16:36:58 1277

原创 c++右值引用

rvalue reference lets you modify the value of a temporary object: std::string s1 = "Hello "; std::string s2 = "world"; std::string&& s_rref = s1 + s2; // the result of s...

2020-03-18 15:22:05 91

原创 mybatis关联的嵌套结果

非常详细的配置说明http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html class Infrared { private int freq; private byte[] data;}public class Test { private int id; private String name...

2018-11-05 11:51:34 733

原创 c++之protected

通过一个列子来说明protected属性#include &lt;iostream&gt;using namespace std;class A { protected: int p;};class B : public A{ public: void set(int i) ...

2018-05-30 10:59:45 630

原创 二分查找-递归实现

//二分查找 - 递归实现int binary_search(int array[],int left,int right,int key){ if(array[left] > key || array[right] < key) return 0; if(array[(left+right)/2] > k...

2018-05-24 11:52:26 644

原创 十六进制字符串转整型

//c++#include &lt;sstream&gt;unsigned int CTools::Hexdec(string str)     {        unsigned int x;std::stringstream ss;ss &lt;&lt; std::hex &lt;&lt; str;ss &gt;&gt; x;return x;}//cunsigned l...

2018-04-23 10:37:58 2212

原创 c++ STL

array: 固定大小数组vector:动态扩容数组deque:双端队列。类似vector,支持动态扩容,支持随机访问(通过[]运算符),但不保证元素存储的连续性。为保证效率,插入和删除操作只能从开始端执行。序列较大时可以考虑替代vetor(relloc开销大)。stack: 栈(LIFO)。 默认使用deque作为内部容器queue:队列(FIFO)。默认使用deque作为内部容器(官网说也可以...

2018-03-05 15:47:22 173

转载 深度优先搜索和广度优先搜索

#include &lt;iostream&gt;#include &lt;stack&gt;#include &lt;queue&gt;using namespace std;struct BitNode{ int data; BitNode *left, *right; BitNode(int x) :data(x), left(0), right(0...

2018-03-01 15:36:20 248

原创 一个二分查找树的实现

源自c++数据结构与算法一书#include &lt;iostream&gt;using namespace std;template&lt;class Comparable&gt;class BinarySearchTree{ public: BinarySearchTree(){ root = NULL; } ...

2018-02-26 18:04:57 359

原创 priority_queue指定模板参数

#include&lt;queue&gt;#include&lt;iostream&gt;using namespace std;struct mytype{ int x;};struct comp{ bool operator()(mytype a, mytype b) { return a...

2018-02-24 16:48:22 1049

原创 二叉堆(完全二叉树)

最小堆的实现代码:/* * 最小堆是一颗完全二叉树(这里用数组实现完全二叉树) * index: 0 1 2 3 4 5 6 * value: [空] a b c d * * 任意index,其父亲为index/2,左儿子为2*index,右儿子为2*index + 1 * 时间复杂度: O(logN) */#include&lt;iostream&gt;#incl...

2018-02-09 11:01:08 592

原创 如何从数组中找出两个数,使得其之和等于某个值

2018-01-16 19:07:50 1478

转载 P2P原理及UDP穿透简单说明

P2P原理及UDP穿透简单说明本文章出自cnntec.com的AZ猫著,如需要转发,请注明来自cnntec.comPeer-To-Peer缩写P2P中文称之为对等联网。用途于交流,比如QQ,MSN等等。文件传输、分布式数据计算等等。这里我们主要是是简单讲解一下UDP实现NAT的穿透(俗称打洞)当然TCP与之相似,可以以此类推。NAT最开始出现

2017-09-28 12:27:25 310

原创 冒泡排序、二分查找、单向链表操作

#include #include #include int a[] = {11,2,3,44,58,16,7,8,9,10};//int a[] = {11,2,3,4,5,6,7,8,9,10};//冒泡排序int bubble_sort(int a[],int n){ int i,j; int tmp; for(i

2017-09-15 18:29:23 358

原创 多进程、多线程调试

//启动gdb调试#gdb ./jccc //设置默认跟踪子进程(gdb) set follow-fork-mode child//设置当程序在gdb中停止,只有当前的线程会被停止,而其他的线程将会继续运行(gdb默认进程的所有线程都会停止)(gdb) set non-stop on//接下来设置断点 (gdb) b processCore.cpp:454

2017-06-16 11:51:52 454

原创 HAProxy负载均衡

Tcp负载均衡配置global        daemondefaults        log     global        mode    tcplisten mm        bind 0.0.0.0:3755        balance roundrobin        mode   tcp        timeout connect

2017-05-12 18:42:50 289

原创 初试redis集群

127.0.0.1:7000> cluster nodesb6fec8eac008bccab9e350d6b024f50cf9f4836b 192.168.1.3:7004 slave 7a3aec80bfe082dd7918b615c1561c563f5e7eb0 0 1493883444735 5 connectedd886c73d9b3b3aee239553179919e05dd12

2017-05-04 15:49:36 409

转载 内存池技术

原文:https://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。

2017-04-25 16:36:38 264

原创 循环队列 - 生产者与消费者模型

循环队列可以实现一个生产者与一个消费者模型, 不使用锁。 循环队列:size=10生产者线程:不停地把从0递增的整数push到队列(尾部不存储,也就是最大存9个数),满了就等1s。消费者线程:每3s从队列pop一个元素。[xiongli@localhost data_struct]$ ./a.out             push 0 at data[0]push 1

2017-02-22 18:45:25 2154

原创 判断循环队列满

判断队列为空:rear = front 判断队列满:(rear+1)%maxsize=front 往往很多人,像我一样,未能很好的理解这个表达式。front(读起始位置)和rear(写起始位置)如上图位置:rear移动一步的偏移位置(相对队列起始位置0)是n=(rear+1)%maxsize。如果n=front,表示队列满。 实际应用中,我们在写入一批数据前

2017-02-22 17:10:08 4689

原创 散列表 - Hash Table

源自>散列算法key                                                                                                                                                   table size

2017-02-20 16:37:46 314

原创 linux文件锁-续篇

来自文摘: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html 概要如下:1. fcntl函数用来支持记录锁(recording locking), 防止多个进程同时对一个文件地某些部分访问造成错误。 锁分为共享锁和互斥锁两种。2. read、write函数不检查文件的锁情况(fread,fwrit

2017-02-07 17:48:53 327

原创 linux文件锁

flock和lockf从底层的实现来说,Linux的文件锁主要有两种:flock和lockf。需要额外对lockf说明的是,它只是fcntl系统调用的一个封装。从使用角度讲,lockf或fcntl实现了更细粒度文件锁,即:记录锁。我们可以使用lockf或fcntl对文件的部分字节上锁,���flock只能对整个文件加锁。这两种文件锁是从历史上不同的标准中起源的,flock来自BSD而lockf

2017-02-07 16:13:03 1257

转载 Nginx的负载均衡原理

http://www.jointforce.com/jfperiodical/article/3810

2016-12-21 12:19:02 474

转载 几种IO模型

转自:http://blog.csdn.net/historyasamirror/article/details/5778378当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞 》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link 。写完之后发现很多人都很喜欢,我还是非常开心的

2016-10-10 10:19:53 257

原创 设计模式 - C++单例模式应用

单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。定义如下:class CSingleton{private: CSingleton(

2016-10-09 14:25:12 253

转载 sigsetjmp函数

相关函数:longjmp, siglongjmp, setjmp 表头文件:#include  函数定义:int sigsetjmp(sigjmp_buf env, int savesigs) 函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。 参

2016-09-30 10:17:51 566

原创 巧用alias命令 - 简化开发工作中的重复劳动

[xiongli@10-13-6-227 ~]$ vim aliasalias l='tail -f /jchang/log/jc.log'alias p='ps aux | grep jchangd'alias k='killall jchangd'alias n='a() { tail -n $1 /jchang/log/jc.log; }; a'     //巧用函数,因为可

2016-09-21 16:18:14 3872

原创 man 5 proc

# man 5 proc/proc/sys/fs/file-max              This  file  defines  a  system-wide  limit on the number of open              files for all processes.  (See alsosetrlimit(2), which  can  be  

2016-09-12 11:03:40 712

原创 C语言 冒泡排序和二分查找

#include #include int a[] = {11,2,3,44,58,16,7,8,9,10};//冒泡排序int order_main(){ int i,j; int n = sizeof(a)/sizeof(int); int tmp; for(i=n-1;i>0;i--)

2016-07-15 09:24:43 754

原创 redis命令参考

Redis 命令参考http://doc.redisfans.com/

2016-06-17 10:55:02 378

空空如也

空空如也

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

TA关注的人

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