- 博客(40)
- 收藏
- 关注
原创 c/c++替换字符串中的关键字(包括\等转义字符)
最近工作的时候有碰到一个问题,输入字符串中存在“\”,处理程序在读取到的时候会将其当做转义字符,导致输入字符串错误。所以产生了两个需求:1.需要将“\”替换为“\\”。2.又因为,其他需求也存在在目标字符串中寻找对应的子串,将子串替换成目标子串的需求。找了一下网上的相关替换都是针对单个char类型字符的,这种场景适合适合第一个需求,第二个需求就不合适了,所以现在写了一个同时满足两个需求的代码。在这...
2020-02-18 15:37:33
3748
2
原创 一致性哈希的原理
一致性哈希一般使用在有均衡分配需求上。解决类似于在一个服务器集群之中,只有其中某几台服务器接受了大量的请求,而剩下的服务器接受的请求寥寥无几的情况。一致性哈希可以将所有请求大致均匀的分配给所有的服务器,可以解决某几个单独服务器由于请求过多导致的响应变慢的情况。一致性哈希的核心设计 将服务器(或者线程等各种需要分配的)视为一个节点分布在一个环上。并为每个节点生成一个哈希...
2019-06-21 13:54:41
643
原创 一致性哈希的使用与优缺点分析
最近用到了一致性哈希,写一写总结一下。一致性哈希常用在的负载均衡方面。比如:在服务器的服务节点选择,线程池中线程的选择,路由等等。我们可以将一致性哈希分配的单个节点看做是某个单个服务器,某一条线程,某一个单独的路由目标。一致性哈希在负载均衡方面效果很好,因为它的设计目标是为了解决因特网中的热点(hot spot)问题。但是一致性哈希在某些特殊情况下的均衡效果反而不是特别的好(比...
2019-03-14 17:19:44
8136
原创 vector的实现
磨磨蹭蹭了三个月终于吧vector的实现给写了一遍 = =/* * Vector.h * * Created on: Dec 6, 2018 * Author: clh01s */#ifndef VECTOR_H_#define VECTOR_H_//#include <vector>#include <bits/stl_iterato...
2019-03-06 16:23:56
310
转载 syscall的原理
引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app、framework、native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到进入kernel函数的入口。本文主要讲解ARM架构相关源码:/bionic/libc/kernel/uapi/asm-arm/asm/unistd.h/bionic/libc/arch-arm/...
2018-12-27 16:22:51
1068
原创 红黑树的删除
这篇为红黑树删除,可以算作上一篇红黑树的构建与插入的下一篇这里单独贴出删除节点的代码:__rb_tree_node_base* _Rb_tree_rebalance_for_erase(__rb_tree_node_base* const __z, __rb_tree_node_base& __header){ __rb_tree_node_base*& __ro...
2018-11-22 15:32:37
291
1
原创 红黑树的构建与插入
最近在看《stl源码剖析》,看到了红黑树的一章,就想根据书上的代码自己动手实现一下。现在只实现到树的构建与插入功能;节点删除和修改功能还未实现。写完之后发现自己用的Ubuntu16.04的g++5.4.0上与书上的g++版本相差太大,比如其中的空间分配器的使用已经完全不同。我只得照着g++5.4.0的源码再修改已经写好的代码,所以代码中有着很多c++11标准的语法与书上的老标准的语法穿插的情况。现...
2018-10-22 10:53:59
417
原创 c++线程安全的map
参考了 《c++并发编程实战》这本书上的代码写了一个线程安全可以并发的map/* * threadsafe_map.cpp * * Created on: May 11, 2018 * Author: clh01s * 线程安全的查找表 * 通过boost的shared_mutex实现读写锁 * 假设有一定数量的桶,每一个键都有一个桶 * ...
2018-05-17 14:55:36
19076
原创 c++使用细粒度锁以及傀儡节点的线程安全队列
研究了一下线程安全的数据结构,参考了 《c++并发编程实战》这本书上的代码写了一个能够编译运行的版本这份代码解决的核心问题是在细粒度锁的并发情况下可能出现的多个锁同时锁住一个节点解决的方法是使用傀儡节点即在队列为“空”的情况下依然有两个节点一个为空的头节点一个为尾的空的傀儡节点实现代码:/* * wait_lock_thread_queue.cpp * * Created on: Apr ...
2018-05-10 16:24:10
537
转载 CMakeLists入门学习笔记
0、前言因为在使用OPENCV以及caffe的过程中都接触到了许多关于CMake的使用,于是就想了解一下CMake究竟是怎样一个东西,有什么作用。顺便做一个学习笔记。 本文参考《CMake Practice》这篇文章完成,旨在指导用户快速使用CMake,如果需要更详细的内容,请通读《CMake Practice》这篇文章。下载路径:http://sewm.pku.edu.cn/src/paradi...
2018-04-16 11:15:27
1049
原创 c++使用智能指针的线程安全队列
整理自C++并发编程实战使用std::shared_ptr<>的线程安全队列/* * threadsafe_queue_ptr.cpp * * Created on: Mar 2, 2018 * Author: clh01s@163.com * 为了防止在wait_and_pop()中引发异常, * 所以将shared_ptr<>...
2018-03-06 10:10:02
2647
2
原创 c++线程安全的栈
整理自c++并发编程实战/* * threadsafe_stack.cpp * * Created on: Nov 30, 2017 * Author: clh01s@163.com * 线程安全的栈 */#include <exception>#include <iostream>#include <mutex>#include <stack>#inclu
2017-11-30 16:18:41
1313
原创 FP风格以及并发的快速排序
这是整理自C++并发编程实战4.12的代码/* * FP_sort.cpp * * Created on: Nov 23, 2017 * Author: clh01s@163.com * FP模式的快速排序以及使用future的并发快速排序 */#include <iostream>#include <list>#include <algorithm>
2017-11-25 13:37:57
397
原创 访问者模式(visitor)c++版本(设计模式完)
这是大话设计模式中的访问者模式的c++版本/* * visitor.cpp * * Created on: Nov 16, 2017 * Author: clh01s@163.com * 访问者模式:表示一个作用于某对象结构中的各个元素的操作。 * 它使你可以在不改变各个元素的类的前提下定义 * 作用于这
2017-11-16 15:24:30
325
原创 解释器模式(interpretr)C++版本
这是大话设计模式中的解释器模式的c++版本/* * interpretr.cpp * * Created on: Oct 26, 2017 * Author: clh01s@163.com * 解释器模式:给定一个语言,定义它的文法的一种表示, * 并定义一个解释器,这个解释器用该表示 * 来解释语言中的句子。 */#inc
2017-11-15 14:52:54
325
原创 享元模式(flyweight)c++版本
大话设计模式中的享元模式的c++版/* * flyweight.cpp * * Created on: Oct 25, 2017 * Author: clh@163.com * 享元模式:运用共享技术有效的支持大量细粒度的对象。 */#include <iostream>#include <string>#include <map>using namespac
2017-10-25 18:56:54
289
原创 中介者模式(mediator)c++版本
这是大话设计模式是中的中介者模式的c++版本/* * mediator.cpp * * Created on: Oct 20, 2017 * Author: clh@163.com * 中介者模式:用一个中介对象来封装一系列的对象交互。 * 中介者使各个对象不需要显式的相互引用, * 从而使其结构松散,而
2017-10-24 15:00:12
261
原创 职责链模式(chain of responsibility)c++版本
这是大话设计模式中的职责链模式的c++版本/* * chain_responsibility.cpp * * Created on: Oct 17, 2017 * Author: clh01s@163.com * 职责链模式:使多个对象都有机会处理请求, * 从而避免请求的发送者和接收 * 者之间的耦合关
2017-10-19 14:37:01
269
原创 命令模式(command)c++版
这是大话设计模式中的命令模式的c++版本(略微完善了一下比较功能以及展示删除功能,原版只会提示鸡翅不够不能根据不同的材料提出不同的提示且没有展示删除功能)/* * command.cpp * * Created on: Oct 16, 2017 * Author: clh01s@163.com * 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参
2017-10-16 19:45:15
296
原创 桥接模式(bridge)c++版
这是大话设计模式中桥接模式的c++版本/* * bridge.cpp * * Created on: Oct 13, 2017 * Author: clh01s@163.com * 桥接模式:将抽象部分与它的实现部分分离, * 使它们都可以独立的变化。 * 实现指的是抽象类和他的派生类用来实现自己的对象。 *
2017-10-14 15:25:45
386
原创 组合模式(conposite)c++版本
这是大话设计模式中的组合模式的c++版本/* * conposite.cpp * * Created on: Oct 9, 2017 * Author: clh01s@163.com * 组合模式:使得用户对单个对象 * 和组合对象的使用具有一致性。 */#include <iostream>#include <vector>#include <s
2017-10-12 20:26:04
511
原创 备忘录模式(memento)C++版本
大话设计模式中的备忘录模式的c++版本/* * memento.cpp * * Created on: Sep 29, 2017 * Author: clh01s@163.com * 备忘录模式:在不破坏封装性的前提下, * 捕获一个对象的内部状态,并在该对象 * 之外保存这个状态。这样就可以在之后 * 将该对象恢复到保存的状态。
2017-09-30 11:57:35
307
原创 适配器模式(adapter)c++版本
大话设计模式中的适配器模式(adapter)c++版本/* * adapter.cpp * * Created on: Sep 28, 2017 * Author: clh01s@163.com * 适配器模式将一个类的接口转换成客户希望的另外一个接口 */#include <iostream>#include <string>using namespace
2017-09-28 18:33:20
251
原创 状态模式(state)c++版本
此为大话设计模式中的状态模式的c++版本 因为此代码中各个类的相互依赖比较严重,所以加入了头文件将声明放置在头文件之中 state.h/* * state.h * * Created on: Aug 10, 2017 * Author: clh01s@163.com */#ifndef _STATE_H_#define _STATE_H_#include <iostrea
2017-08-10 19:55:08
819
原创 抽象工厂(abstract_factory)c++版
大话设计模式抽象工厂abstract_factory模式的c++版本/* * abstract_factory.cpp * * Created on: Aug 5, 2017 * Author: clh01s@163.com * 抽象工厂模式 * 提供一个创建一系列相关或相互依赖对象的接口, * 而无需指定它们具体的类. * 以数据
2017-08-07 14:24:30
238
原创 观察者模式(OBSERVER)c++
大话设计模式中的观察者模式c++版本/* * observer.cpp * * Created on: Jul 31, 2017 * Author: clh01s@163.com * 观察者模式: * 定义对象间的一种一对多的依赖关系, * 当一个对象的状态发生改变时,所有依 * 赖于它的对象都得到通知并被自动更新 *
2017-08-03 19:00:18
427
原创 建造者模式(builder)c++版本
此为大话设计模式中的建造者模式的c++版本/* * builder.cpp * * Created on: Jul 25, 2017 * Author: clh01s@163.com * 生成器(建造者)模式 * 将一个复杂的对象与它的表示分离, * 使得同样的构建过程可以创建不同的 * 表示. */#include <iostr
2017-07-31 11:58:31
325
原创 外观模式(facade)c++版本
大话设计模式中的外观模式c++版本/* * facade.cpp * * Created on: Jul 25, 2017 * Author: clh01s@163.com * 外观模式 * 为子系统中的一组接口提供一个一致的界面, * 此模式定义了一个高层接口,这个接口使得这 * 一个子系统更加容易使用. */#include
2017-07-25 14:32:15
350
原创 模板方法(template method)c++版本
大话设计模式中的template method c++版本/* * template_method.cpp * * Created on: Jul 24, 2017 * Author: clh01s@163.com * 模板方法 */#include <iostream>#include <string>#include <unistd.h>using nam
2017-07-24 18:41:12
299
原创 原型模式(prototype)c++版本
这是大话设计模式中的原型模式的c++版本/* * prototype.cpp * * Created on: Jul 21, 2017 * Author: clh01s@163.com * 原型模式 */#include <iostream>#include <string>using namespace std;class Resume{public:
2017-07-24 10:58:42
372
原创 工厂方法模式(factory method)c++版本
参考大话设计模式中的工厂方法模式/* * factory_method.cpp * * Created on: Jul 21, 2017 * Author: clh01s@163.com */#include <iostream>using namespace std;//基础操作类,加法类,减法类,乘法类,除法类的父类class Operation{public:
2017-07-21 14:42:56
307
原创 代理模式(proxy)c++版本
这是大话设计模式中的代理模式的c++版本/* * proxy.cpp * * Created on: Jul 20, 2017 * Author: clh01s@163.com * 代理模式 */#include <iostream>#include <string>using namespace std;class Girl{public: Gi
2017-07-20 16:59:21
467
原创 装饰模式(decorator)c++版本
此为大话设计模式decorator的c++版本/* * decorator.cpp * * Created on: Jul 19, 2017 * Author: clh01s@163.com * 装饰模式 */#include <iostream>#include <string>using namespace std;class Person{public:
2017-07-20 09:50:48
347
原创 策略模式c++版本
这是大话设计模式中的策略模式的c++版本//策略模式#include <iostream>using namespace std;enum Cash_type{ NORMALL_CASH = 0, RETURN_CASH = 1, DISCOUNT = 2,};//虚基类cashsuperclass CashSuper{public: //打折函数
2017-07-17 17:19:12
237
转载 在C++程序中如何调用标准C语言编译的动、静态库
在C++程序中如何调用标准C语言编译的动、静态库 前面已经转过一篇文章关于在C++与C程序之间函数互相调用的问题。具体到在使用库函数时,只须在库的头文件上动动小手术便可正常使用一般来说 C语言编写的库只提供标准C接口的头文件有两种方案可使其C++程序中可用1.在引用头文件时将其包含在extern "C" {}中,例如extern "C"{#include //这是C
2017-07-12 14:05:17
649
原创 简单工厂模式的c++版本
研究了一下大话设计模式,顺手吧简单工厂模式的c++版本写出来了,放上来分享一下/*简单工厂模式*by clh01s@163.com 2017年7月11日*/#include <iostream>#include <string>using namespace std;//基础操作类,加法类,减法类,乘法类,除法类的父类class Operation{public: doub
2017-07-11 18:23:25
340
原创 Linux 下 互斥锁的使用
#include <list>#include <mutex>//互斥锁头文件#include <thread>#include <algorithm>#include <iostream>//此list被它下方的some_mutex保护std::list<int> some_list;std::mutex some_mutex;void add_to_list(int new_valu
2017-07-08 11:11:58
882
原创 Ubuntu 基础操作命令
mkdir filename//创建文件夹 rm -rf filename//删除文件夹 sudo nautilus//打开sudo权限的图形界面 touch filename //创建文档重启命令: 1、reboot 2、shutdown -r now 立刻重启(root用户使用) 3、shutdown -r 10 过10分钟自动重启(root用户使用) 4、shutdown ...
2017-07-08 10:59:05
518
转载 PIMPL设计模式的理解和使用
以下两段不同程序的比较 //file a.h#include "a.h"#include “ b.h”class A{void Fun(); B b;}//file:a.cpp#include "a.h" //无形中也引入了b.hvoid A::fun(){ b.fun();//调用类a的fun方法}
2017-07-08 10:42:02
759
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人