
C++编程
庞叶蒙
没有最牛逼的技术,只有最适合的技术。
展开
-
设计模式--责任链模式
##什么是责任链模式责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。##如何实现责任链模式#include <iostream>using namespace std;class Ha..原创 2021-03-08 12:58:42 · 180 阅读 · 0 评论 -
复习--重载
##什么是重载C++重载分为:函数重载、操作符重载函数重载:函数名相同参数不同操作符重载:对一些常规操作进行重载,这样方便对象之间的操作。反例:返回值不同,不能作为函数重载的差异##重载的用法#include <iostream>#include <string>using namespace std;class OverloadDemo{public: void Print(int i); void Print(...原创 2021-03-05 11:46:44 · 183 阅读 · 0 评论 -
复习--友元
##为什么要有友元?实际开发过程中没有用过,这里只做文字和代码层面的理解和学习。友元的作用:可以让对应的友元函数和类可以访问当前类的私有变量和保护类变量。类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。##代码片段友元函数和友元类..原创 2021-03-04 15:33:41 · 125 阅读 · 1 评论 -
ISE -- I/O Buffer 之 STL vector学习
0x01 缘起 在高性能服务器开发的过程中,良好的IO缓存是整个设计比较重要的环节。带着这方面的兴趣,阅读了开源ISE的IO Buffer设计,不评估其优劣,纯粹学习这方面知识,深度学习下STL vector容器的使用和内存的管理。0x02 IO Buffer介绍 消息缓存,主要存储socket接收和发送的消息。发送消息时,将消息有序的缓存到buffer中;消息接原创 2017-06-15 13:50:51 · 1152 阅读 · 0 评论 -
一次外场宕机引发对linux内存管理的进一步思考--Linux虚拟地址空间如何分布
这边文章主要从一次宕机事故引申对linux内存布局的思考、对内存分配的思考、对linux保护机制的思考、对swap交换去的思考。原创 2017-07-08 15:04:58 · 1711 阅读 · 0 评论 -
路由协议学习
0x01 缘由 熟悉了一些常规应用的协议后,发现对路由间的协议不熟悉。故简单学习下;0x02 路由算法 距离向量协议 链路状态协议:利用图论中的最短路径算法0x03 路由协议 内部网关协议:RIP\OSPF\IS-IS\IGRP\EIGRP 外部网关协议:EGP\BGP 0x04 数据包样本原创 2017-08-16 14:40:38 · 527 阅读 · 0 评论 -
API设计--性能
0x01 缘由 前面学习了一些API编写的原则,作为后期的指导作用。今天关注一些API性能细节和分析方法。0x02 API考虑的性能指标和原则 1.编译时速度。 2.运行时速度。 3.运行时内存开销。 4.库的大小。 5.启动时间。 一个重要的性能优化经验是:绝不应该相信你的“哪些部分会比较慢”直觉,而是应该在实际环境中测量原创 2017-11-08 10:16:18 · 495 阅读 · 0 评论 -
设计模式--Pimpl(pointer to implementation 指向实现的指针)
0x01 缘由 以前学习了一些设计模式,但是实践中使用得较少。用得比较多的是单列模式、代理模式等,这些模式我在其他博文中也有讲解。为什么这些模式没有使用,难道是真的用不到? 我应该不是。现在重新学习设计模式:设计模式是针对软件设计问题的通用解决方案。从基本的原理、优缺点、什么场景下使用等方面考虑和思考。 设计模式是前辈们提炼和总结的一些设计思路,所以掌握它有利无弊。0x02原创 2017-11-01 11:50:44 · 1616 阅读 · 0 评论 -
C++11特性
转载理由:最近在找一些高性能开源库,结果都需要支持C++11特性,然而公司产品开发编译器版本又比较低,所以看看C++11到底啥特性。转载于:http://blog.youkuaiyun.com/linchaolong/article/details/46336501auto自动推导类型。 auto i = 10; std::cout std::endl;转载 2017-11-01 14:08:08 · 212 阅读 · 0 评论 -
设计模式--工厂模式
0x01 缘由 继续学习相关设计模式,在编程中得到进一步利用,在目前的产品开发过程中,有很多地方都用到了工厂模式。0x02 工厂模式 “工厂”现实中的意义是按照某种工艺制造产品。那么为什么要使用工厂模式了?有什么好处? 工厂模式是一个创建型的设计模式。他允许创造对象时不指定要创建的对象的具体类型(可能就某个参数)。本质上,工厂方法是构造函数的一般化。在C++中,构原创 2017-11-03 14:08:07 · 247 阅读 · 0 评论 -
设计模式-包装模式(代理模式、适配器模式、外观模式)
0x01 缘由 编写基于另一组类的包装器接口是一项常见的API设计任务。例如,你的工作可能是维护一个大型的遗留代码库,相比重构所有代码,你更愿意设计一个新的、更简洁的API,以隐藏所有的底层遗留代码;或者你可能已经编写了一个C++ API,后来需要给特定客户提供纯C接口;或者你的API用到了一个第三方依赖库,你想让客户直接使用此库,但是又不想将此库直接暴露给客户。 以上就是包装原创 2017-11-06 15:47:07 · 1559 阅读 · 0 评论 -
boost重要库编码实例
0x01 缘由 最近几周没有再继续学习新的知识点,而是准备一些面试题。大家懂的。。。。0x02 boost::shared_ptr 智能指针介绍请看另外一篇博文:http://blog.youkuaiyun.com/pangyemeng/article/details/72842566example1:#include #include #include class Sha原创 2017-12-12 10:15:34 · 780 阅读 · 0 评论 -
C++基础——用C++实例理解UML类图
目的:学习下UML类图的创建和认识转载于:http://blog.youkuaiyun.com/lanchunhui/article/details/49557083类展示基本概念及术语可见性visibility参数的方向parameter direction类成员变量或者函数的类型类关系关系的多重性multiplicity类关系assocationkonws adep转载 2017-12-14 11:23:16 · 10305 阅读 · 3 评论 -
初窥c++11:从move语义到右值引用
转载理由:一直听C++11特性,没认真学习过,学习学习; 技术人员往往比较傲慢,写c语言的鄙视c++,写c++的鄙视Java,写Java的鄙视c#,要是程序员吵起来怎么办,一个流行的办法就是去github约架,比赛写tokenizer和grammar analyzer啊,写不出来滚出程序界啊,哈哈。说到github,不得不说去github找份好代码真不容易,大量“坏味道”的代码充斥其转载 2017-12-06 09:49:59 · 284 阅读 · 0 评论 -
进程池组件闲聊
0x01 缘由 在开发过程中,某些业务场景可能要使用到进程池或者线程池。主要目标是消除动态创建进程或进程时的开销。一般如果能够准确预测自己每个进程或进程的职责,这个都是在程序启动时就创建的,后期不会动态的去创建线程池或进程池。今天主要从几个方面来学习和探讨进程池或线程池技术。0x02 场景 常见的web服务器(需要处理较多的并发请求): 常见的lightt原创 2018-01-03 16:24:34 · 430 阅读 · 0 评论 -
深入理解STL源码--空间配置器(allocator)
转载于:http://ibillxia.github.io/blog/2014/06/13/stl-source-insight-1-memory-allocator/?utm_source=tuicool&utm_medium=referral转载理由:实践项目中存在大量使用map,set,vector等STL容器,容器使用时内存分配、释放与长规的差异。主要学习了解,方便今后问题的排查。转载 2017-06-15 09:18:06 · 3482 阅读 · 0 评论 -
C++ STL使用,以及注意事项
0x01 缘由 最近在做产品的开发上发现一个问题,发现对待成熟的库和开源组件时,开发者有两种态度: 一类:非常崇拜开源组件和STL,盲目的使用; 二类:喜欢自己去实现一个库,类似造轮子; 这两类人我觉得需要把握好一个度: 1、正确场景使用正确的库; 2、特殊的场景可以用更精炼、效率更高的实现; 3、然后一切根据测试数据和性能数据说服对方;原创 2017-07-13 17:12:50 · 1741 阅读 · 0 评论 -
boost::scoped_ptr
0x01 缘由 我想有些知识点存在即有它的意义,可能在不同的场景有不同的使用场景。有了boost::shared_ptr 为啥还要有一个boost::scoped_ptr呢?带着这个疑问学习了一下。0x02 认识boost::scoped_ptr scoped 意为作用域,表示此智能指针只能在本作用域里使用,不能允许拷贝和赋值,只能在scoped_ptr被申明原创 2017-06-12 14:13:45 · 484 阅读 · 0 评论 -
effective c++学习笔记
条款04确定对象被使用前已被初始化 这应该是一个开发人员的一种习惯,虽然赋值过程会带来执行时的时间消耗,但与出现不可预知的错误相比,是值得我们去做的。 C: 对一些字符数组赋初始化值,可以避免字符串结束符‘\0’带来的问题; 指针等初始化等; C++:原创 2015-12-21 11:23:01 · 424 阅读 · 0 评论 -
effective c++学习笔记
virtual原创 2015-12-22 10:47:41 · 376 阅读 · 0 评论 -
effective c++学习笔记
条款10令operator= 返回一个reference to*this 连续赋值语句a=b=c优先级为从右到左。 为什么返回一个referenceto *this指针要比返回其它类型好? 如果返回类对象,b=c调用一次拷贝构造函数,返回一个临时变量,a=b又调用一次赋值拷贝函数。浪费了拷贝时间。条款11在operator= 中处理“原创 2015-12-23 10:46:32 · 355 阅读 · 0 评论 -
udp如何实现可靠性传输?
如何用udp实现可靠性传输,虽然现在有几个比较成熟的开源库,但是知其所以然还是有必要的。原创 2015-12-23 15:05:03 · 54051 阅读 · 0 评论 -
effective c++学习笔记
条款16成对使用new和delete时要采取相同形式 建议: 如果你在new表达式中使用了[](数组),必须在delete表达式中使用[]。条款19设计一个类需考虑的问题? 从事C++类设计比较少,但是如下问题在一般设计中也是同样需考虑的。 1新type的对象是如何被创建和销毁? 是单列模式,构原创 2015-12-24 11:24:08 · 447 阅读 · 0 评论 -
redis + messagepack 消息队列
0x01缘由: 当需要在不同的服务之间传递状态信息或通知,以及订阅者和发布者的模式时,要使用消息队列。 典型的场景有: WEB和C后台/Python后台/Java后台传递一些消息时,如配置文件、指令等。0x02开源程序版本: msgpack(消息序列化):git clone https://github.com/msgpack/msgpack-c.gi原创 2017-05-26 16:32:24 · 2398 阅读 · 0 评论 -
boost::function与boost::bind 的使用
0x01 为啥? 为啥要用这个?这个用起来有什么好处?查了下资料陈硕大哥的见解:http://blog.youkuaiyun.com/solstice/article/details/3066268 下面也说说我的想法:每个技术点都有适合的用法,使用某项技术点,还是依据整个团队的技术成熟度、熟悉度等。 最近在阅读haoxingeng的服务器框架ise,发现其用法,于是有学原创 2017-06-05 16:01:31 · 5682 阅读 · 0 评论 -
boost::shared_ptr 智能指针在项目中的使用
0x01 智能指针的设计的目的 在linux c/c++编程过程中,对资源的合理使用是一个常遇到的题,如何防止内存泄露是c/c++程序员必须关注的问题。如何规避内存泄露,那就必须要有良好的编程习惯,malloc/free,new/delete需成对出现等。 C++编程中为了防止内存的泄露,boost设计了智能指针,目的消除未delete时的内存泄露。0x02 智能指原创 2017-06-02 11:54:44 · 708 阅读 · 0 评论 -
boost::any 学习
0x01 缘由 阅读源码ise发现此库的用法,于是学习学习,毕竟如果在性能要求不高的情况下,个人是不远造轮子的,而更愿意拿来使用,用好。0x02 boost::any 简介 0x03 boost::any 用法举例// class ObjectContext - 从此类继承给对象添加上下文class ObjectContext{public:原创 2017-06-07 16:36:56 · 546 阅读 · 0 评论 -
explicit关键字
下班回家,回想同事对这个关键字的理解,于是学了一把:转载于:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为impl转载 2017-06-08 20:44:48 · 285 阅读 · 0 评论 -
阅读ISE源码过程中重新对单例模式的理解
0x01缘由最近在项目开发中使用到了日志类,对其封装时采用的单例模式,但是仔细研究后,发现很多细节未考虑,于是学习了下ISE的单例模式设计;0x02单例模式需考虑的场景用于配置文件、日志等公共操作类。注意如下:1、每次instance()返回唯一个对象;2、多线程并发访问;(意味着加锁)3、返回对象效率要高;0x03ISE单例实现templateclass原创 2017-06-21 17:24:17 · 307 阅读 · 0 评论 -
c++中易犯的错误
1声明和定义的区别①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字。④extern关键字:通过使用extern关键字声明变量名而不定义它。 1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定原创 2017-06-11 10:55:00 · 488 阅读 · 0 评论 -
this指针
this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子:1234567voidDate::setMonth(intmn){ month=mn; this->month=mn; (*this).month=mn; //这三句是等价的}1.this只能在成员函数中使用。原创 2017-06-11 10:56:20 · 272 阅读 · 0 评论 -
阅读ISE 复习linux多线程开发时需使用的锁
1、缘由以项目带动学习,主要学习C++一些特性,复习linux编程中锁、信号、条件变量等。2、ISE点示例///////////////////////////////////////////////////////////////////////////////// class AutoInvokable/AutoInvoker - 自动被调对象/自动调用者//// 说明:/原创 2017-06-23 15:53:14 · 466 阅读 · 0 评论 -
const---最近在抓编程规范,谈谈const
0x01缘由 最近团队在做代码规范,所以简单记录下一些自己的思考。顺带复习下相关用法。0x02 const常用用法(1)定义常量(2)修饰函数的参数(3)修饰函数的返回值(4)修饰函数的定义体0x03 常见编程规范中的要求下图华为: 下图google: 0x04 c++中为什么强调对输入原创 2017-07-03 16:54:57 · 424 阅读 · 0 评论 -
effective c++学习笔记
条款01 C++是多种语言的联邦 如果不考虑应用程序的使用场合,仅仅考虑语言的灵活性,我赞成作者的想法。但是不同的应用它会有不同的性能要求,所以语言的选择,应该是用“最适合”条款去选择。条款02 尽量使用const、inline、enum替换#define 使用宏定义常量,若定义在头文件中,则所有包含头文件的都可以使用。 宏定义,在预原创 2015-12-18 11:24:40 · 376 阅读 · 0 评论