07 2017 档案
摘要:可以用cas 以及fetch等原子操作来实现无锁的队列,说是无锁其实感觉也是有锁的,只是锁的力度比较小,能提升性能 使用数组来实现队列是很常见的方法,因为没有内存的分部和释放,一切都会变得简单,实现的思路如下: 1)数组队列应该是一个ring buffer形式的数组(环形数组) 2)数组的元素应该有
阅读全文
摘要:要实现稳定的快排必须使用额外的空间,每次扫两次数组,把大于key和小于key的放在额外数组两侧,然后拷贝到原数组中。
阅读全文
摘要:1、简单工厂 通过不同的参数返回不同的子类对象实体。 2、策略模式 封装算法,根据传入不同的子类实体,调用不同的子类方法 6、装饰模式 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 7、代理模式 代理类与实际工作类继承同一父类,代理模式其实就是在访问对象的时候引入
阅读全文
摘要:map要实现线程安全必须要加锁,如果使用mutex会产生大量的线程等待,可以使用读写锁,一个线程在写的时候别的线程等待,多个线程可以同时读。 rwlock的实现可以基于atomic(c++ 11 的原子操作的类实现),也可以加上raii来实现锁的自动解除。
阅读全文
摘要:Windows消息机制概述 消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Wind
阅读全文
摘要:void *memcpy(void *dst, const void *src, size_t len) { if(NULL == dst || NULL == src){ return NULL; } void *ret = dst; if(dst = (char *)src + len){ ...
阅读全文
摘要:原文地址:http://blog.csdn.net/kangroger/article/details/38864689 01背包问题:一个背包总容量为V,现在有N个物品,第i个 物品体积为weight[i],价值为value[i],现在往背包里面装东西,怎么装能使背包的内物品价值最大? 看到这个问
阅读全文
摘要:C++线程池原理及创建(转) 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行
阅读全文
摘要:测试在软件生命周期中的重要性,不用我多说想必大家也都非常清楚。软件测试有很多分类,从测试的方法上可分为:黑盒测试、白盒测试、静态测试、动态测试等;从软件开发的过程分为:单元测试、集成测试、确认测试、验收、回归等。 在众多的分类中,与开发人员关系最紧密的莫过于单元测试了。像其他种类的测试基本上都是由专
阅读全文
摘要:java中equals方法的用法以及==的用法(转) equals 方法是 java.lang.Object 类的方法。 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。 “==”比较两个变量本身的值,即两个对象在内存中的首地址。 “e
阅读全文
摘要:一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。 在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 1、静态建立类
阅读全文
摘要:Redis技术之旅十 高并发问题 redis为什么会有高并发问题 redis的出身决定 Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访
阅读全文
摘要:1、完全基于内存 2、数据结构简单,操作也简单 3、使用多路I/O复用模型(epoll)
阅读全文
摘要:1.窗口Windows程序是由一系列的窗口构成的,每个窗口都有自己的窗口过程,窗口过程就是一个拥有有固定 Signature 的 C函数,具体格式如下:LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lPara
阅读全文
摘要:我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那
阅读全文
摘要:1、基本类型是传值,string也是传值 2、对象实例是传引用 3、数组是传引用
阅读全文
摘要:Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两
阅读全文
摘要:ls:查看当前目录下的文件 cd:切换当前目录 mkdir:新建文件夹 mv:移动文件 touch:新建文件 rm:删除文件或文件夹 more(less):屏幕行数增加减少
阅读全文