- 博客(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
681
原创 __builtin_expect的作用
将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,减少cpu等待取指令的耗时,从而可以提供cpu的效率。如果存在跳转指令,那么预先取出的指令就无用了。cpu在执行当前指令时,从内存中取出了当前指令的下一条指令。执行完当前指令后,cpu发现不是要执行下一条指令,而是执行offset偏移处的指令。cpu只能重新从内存中取出offset偏移处的指令。因此,跳转指令会降低流水线的效率,也就是降低cpu的效率。综上,在写程序时应该尽量避免跳转语句。那么如何避免跳转语句呢?答
2022-04-19 10:15:37
229
原创 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
468
原创 InfluxDB
什么是InfluxDB从文章开票的介绍里能大概知道它的使用场景,下面介绍来自维基百科:InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。...
2021-03-22 16:44:04
169
原创 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
277
转载 工厂模式boost::factory
#ifndef MP_OBJECT_FACTORY_H #define MP_OBJECT_FACTORY_H #include <boost/function.hpp> #include <map> /// 工厂模式泛型实现. /// 限制: 生成的对象必须为通过默认构造函数来构造. /// 当然你也可以扩展这个模板让它支持更多参数的构造函数. template<typename IdType, typename ObjectType>.
2020-08-11 16:03:16
1174
原创 PGM可靠组播协议
PGM,Pragmatic General Multicast(RFC 3208)。基于IP层的传输层协议,与TCP/UDP同级。开源工程OpenPGM,https://www.developerfusion.com/project/66770/openpgm/
2020-06-29 11:22:35
2682
原创 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
1319
原创 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
128
原创 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
763
原创 c++之protected
通过一个列子来说明protected属性#include <iostream>using namespace std;class A { protected: int p;};class B : public A{ public: void set(int i) ...
2018-05-30 10:59:45
675
原创 二分查找-递归实现
//二分查找 - 递归实现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
685
原创 十六进制字符串转整型
//c++#include <sstream>unsigned int CTools::Hexdec(string str) { unsigned int x;std::stringstream ss;ss << std::hex << str;ss >> x;return x;}//cunsigned l...
2018-04-23 10:37:58
2250
原创 c++ STL
array: 固定大小数组vector:动态扩容数组deque:双端队列。类似vector,支持动态扩容,支持随机访问(通过[]运算符),但不保证元素存储的连续性。为保证效率,插入和删除操作只能从开始端执行。序列较大时可以考虑替代vetor(relloc开销大)。stack: 栈(LIFO)。 默认使用deque作为内部容器queue:队列(FIFO)。默认使用deque作为内部容器(官网说也可以...
2018-03-05 15:47:22
200
转载 深度优先搜索和广度优先搜索
#include <iostream>#include <stack>#include <queue>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
278
原创 一个二分查找树的实现
源自c++数据结构与算法一书#include <iostream>using namespace std;template<class Comparable>class BinarySearchTree{ public: BinarySearchTree(){ root = NULL; } ...
2018-02-26 18:04:57
399
原创 priority_queue指定模板参数
#include<queue>#include<iostream>using namespace std;struct mytype{ int x;};struct comp{ bool operator()(mytype a, mytype b) { return a...
2018-02-24 16:48:22
1090
原创 二叉堆(完全二叉树)
最小堆的实现代码:/* * 最小堆是一颗完全二叉树(这里用数组实现完全二叉树) * index: 0 1 2 3 4 5 6 * value: [空] a b c d * * 任意index,其父亲为index/2,左儿子为2*index,右儿子为2*index + 1 * 时间复杂度: O(logN) */#include<iostream>#incl...
2018-02-09 11:01:08
631
转载 P2P原理及UDP穿透简单说明
P2P原理及UDP穿透简单说明本文章出自cnntec.com的AZ猫著,如需要转发,请注明来自cnntec.comPeer-To-Peer缩写P2P中文称之为对等联网。用途于交流,比如QQ,MSN等等。文件传输、分布式数据计算等等。这里我们主要是是简单讲解一下UDP实现NAT的穿透(俗称打洞)当然TCP与之相似,可以以此类推。NAT最开始出现
2017-09-28 12:27:25
344
原创 冒泡排序、二分查找、单向链表操作
#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
390
原创 多进程、多线程调试
//启动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
502
原创 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
328
原创 初试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
441
转载 内存池技术
原文:https://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。
2017-04-25 16:36:38
296
原创 循环队列 - 生产者与消费者模型
循环队列可以实现一个生产者与一个消费者模型, 不使用锁。 循环队列: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
2225
原创 判断循环队列满
判断队列为空:rear = front 判断队列满:(rear+1)%maxsize=front 往往很多人,像我一样,未能很好的理解这个表达式。front(读起始位置)和rear(写起始位置)如上图位置:rear移动一步的偏移位置(相对队列起始位置0)是n=(rear+1)%maxsize。如果n=front,表示队列满。 实际应用中,我们在写入一批数据前
2017-02-22 17:10:08
4874
原创 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
366
原创 linux文件锁
flock和lockf从底层的实现来说,Linux的文件锁主要有两种:flock和lockf。需要额外对lockf说明的是,它只是fcntl系统调用的一个封装。从使用角度讲,lockf或fcntl实现了更细粒度文件锁,即:记录锁。我们可以使用lockf或fcntl对文件的部分字节上锁,���flock只能对整个文件加锁。这两种文件锁是从历史上不同的标准中起源的,flock来自BSD而lockf
2017-02-07 16:13:03
1314
转载 几种IO模型
转自:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞 》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link 。写完之后发现很多人都很喜欢,我还是非常开心的
2016-10-10 10:19:53
297
原创 设计模式 - C++单例模式应用
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。定义如下:class CSingleton{private: CSingleton(
2016-10-09 14:25:12
278
转载 sigsetjmp函数
相关函数:longjmp, siglongjmp, setjmp 表头文件:#include 函数定义:int sigsetjmp(sigjmp_buf env, int savesigs) 函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。 参
2016-09-30 10:17:51
638
原创 巧用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
3907
原创 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
764
原创 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
808
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人