Redamanc
码龄5年
关注
提问 私信
  • 博客:62,143
    社区:40
    62,183
    总访问量
  • 65
    原创
  • 430,717
    排名
  • 904
    粉丝
  • 2
    铁粉

个人简介:眸子清亮, 脑子灵光。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2020-02-11
博客简介:

YY_Song 's blogs

博客描述:
眸子清亮,脑子灵光。
查看详细资料
个人成就
  • 获得164次点赞
  • 内容获得78次评论
  • 获得529次收藏
  • 代码片获得1,359次分享
创作历程
  • 39篇
    2021年
  • 26篇
    2020年
成就勋章
TA的专栏
  • C++
    31篇
  • 设计模式
    6篇
  • 名为Linux的副本
    9篇
  • IPC
    3篇
  • 排序
    4篇
  • 数据结构整理
    5篇
  • 抓哇:Java
    1篇
  • “C”
    5篇
  • 白手
    7篇
兴趣领域 设置
  • 大数据
    hadoophivestormsparketl
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

IPC - 消息队列(Message Queue)- 使用

Message QueueXSI IPCIPC标识IPC键值IPC对象的访问IPC对象的权限和所有者结构体消息队列消息特性消息队列属性结构体打开或创建消息队列控制消息队列发送消息队列接收消息队列发送消息队列实例代码运行接收消息队列实例代码运行参考资料XSI IPCXSI(Unix System Interface and Headers):代表了一种Unix系统的标准。XSI IPC,依托标识符和键来实现的,如同管道靠文件描述符来实现一样。有三种IPC我们称作XSI IPC,即消息队列、信号量、共
原创
发布博客 2021.06.16 ·
1152 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

IPC - 命名管道(fifo)- 使用

命名管道-FIFO命名管道函数原型注意事项FIFO出错信息简单应用参考资料命名管道我们前面介绍了匿名管道(pipe),匿名管道实际上就是:内存上的一块缓存。它的主要实现方式是借助于fork之后父进程和子进程会共享之前已经打开的文件描述符,并且父进程关闭fd[0]读端,子进程关闭fd[1]写端来实现的。之所以说它是匿名管道,是因为,它在内核中开辟的缓存并没有一个名字。那么,通过名字就能理解了,命名管道就是在内核中开辟的缓存有自己的名字了。其实,这也就是命名管道和匿名管道之间的区别。命名管道的本质
原创
发布博客 2021.06.15 ·
509 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

IPC - 管道(pipe) - 应用

仿写 | 的实现关于IPC为什么需要IPC?IPC的方法?关于管道关于 " | "pipe实现 " | "关于IPCIPC,即Inter-Process Communication(进程间通信)。我们都知道,进程是一段程序的执行过程,是系统进程资源分配和调度的基本单位。那么为什么要引入进程间通信呢?或者说,进程间通信能带来哪些好处?为什么需要IPC?数据传输共享数据通知事件资源共享进程控制上面几点都很好理解,我们可以着重看一下最后一点:进程控制。有一些进程希望能够完全控制另一个进
原创
发布博客 2021.06.13 ·
428 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

C++观察者模式(发布-订阅)的使用

观察者模式 - Observer Pattern模式简介介绍优点缺点代码实现场景说明实现代码关键解读运行结果参考资料模式简介观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。它是一种行为型模式。介绍观察者模式主要关注的是对象的一对多的关系,也就是多个对象依赖于一个对象,当该对象的状态发生改变时,其他对象都能够收到相应的通知。意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变
原创
发布博客 2021.05.23 ·
1767 阅读 ·
5 点赞 ·
7 评论 ·
23 收藏

C++适配器模式的实现及应用

适配器 - Adapter Pattern模式简介介绍优点缺点代码实现情景模拟代码运行结果参考资料模式简介介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式。意图:将一个类的接口转换成为客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些“现存的对象”放到新环境中,而新环境的接口是现有对象不能满足的。优点可以让任何两个没有关联的类一起工
原创
发布博客 2021.05.23 ·
1000 阅读 ·
3 点赞 ·
3 评论 ·
6 收藏

C++装饰器模式的实现

装饰器模式 - Decorator Pattern模式思想模式简介模式优点模式缺点代码实现情景模拟代码实现运行结果参考资料模式思想模式简介装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。何时使用:在不想增加很多子类的情况下扩展类。如何解决:将具体功能职责划分,同时继承装饰器模式。
原创
发布博客 2021.05.23 ·
931 阅读 ·
3 点赞 ·
1 评论 ·
11 收藏

C++代理模式的实现

代理模式 - Proxy Pattern模式思想简介组成优点代码实现情景代码解读结果参考资料模式思想简介代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成抽象角色:通过接口或抽象类声明真实角色实现的业务方法;真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用;代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己
原创
发布博客 2021.05.23 ·
227 阅读 ·
1 点赞 ·
1 评论 ·
1 收藏

C++工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式前言为什么要使用工厂模式优点缺点简单工厂(Simple Factory)代码应用工厂方法(Factory Method)代码应用抽象工厂(Abstract Factory)代码应用前言为什么要使用工厂模式主要是对对象的创建进行了一个封装;因此也属于创建型模式。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。优点一个调用者想创建一个对象,只要知道其名称就可以了;扩展性高,如果想增加一个产品,只要
原创
发布博客 2021.05.22 ·
8864 阅读 ·
28 点赞 ·
1 评论 ·
84 收藏

C++单例模式的实现(懒汉式、饿汉式)

单例模式-Singleton名词解释动机要点饿汉式实现方式运行结果懒汉式常规实现线程安全版实现精简实现参考资料名词解释数学与逻辑学中,singleton定义为:有且仅有一个元素的集合。单例模式最初的定义出现在《设计模式》(艾迪生维斯理,1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点。"动机对于系统中的某些类来说,只有一个实例很重要:例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号
原创
发布博客 2021.05.20 ·
2567 阅读 ·
5 点赞 ·
8 评论 ·
39 收藏

通过自定义vector和string来理解move和forward

move、forward前言自定义vector和string的结合测试代码问题剖析move(移动语义)简单总结forward(类型完美转发)前言在前面,我们分别实现了自定义的vector和string:传送仓:《C++实现自定义vector以及allocator》;《从自定义string类型理解右值引用》。那么今天,我们就将二者结合起来:用自定义的vector来存储自定义的string。看看又会有什么问题产生。自定义vector和string的结合我们将两个自定义的代码融合如下:cla
原创
发布博客 2021.05.20 ·
420 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

从自定义string类型理解右值引用

理解右值引用前言问题复现自定义string(CMyString)遇到问题图示理解右值引用什么是右值添加右值引用参数的成员方法结果对比前言在之前,我写过一篇:通过自定义string类型来理解运算符重载。在文章末尾,我提出了一个问题:那么如何能够实现不泄露内存,并且提高效率呢?那么,今天就来看看如何解决这个问题。问题复现自定义string(CMyString)首先是对string类型的一个简单实现,代码如下:class CMyString{public: CMyString(const
原创
发布博客 2021.05.20 ·
1028 阅读 ·
0 点赞 ·
4 评论 ·
1 收藏

C++实现自定义vector以及allocator

实现vector前言初步实现出现的问题解决问题Allocator(空间配置器)最终结果对比系统自带的前言不知道大家有没有这种感觉,学习了一段时间后,总想着自己能够实现一些标准库里已经提供的东西,比如说STL容器vector、比如数据类型string。一方面是对这个知识可以有进一步的一个认识和了解,另一方面也可以检验自己的掌握程度。基于此,我们今天实现自定义的vector。初步实现通过包含头文件#include <vector>转到文档,我们可以查看系统自带vector的实现:主要
原创
发布博客 2021.05.20 ·
3429 阅读 ·
16 点赞 ·
10 评论 ·
40 收藏

C++线程间的互斥和通信

互斥锁、条件变量、原子类型互斥锁(mutex)模拟车站卖票不加锁的结果加锁后的结果简单总结条件变量(conditon_variable)生产者消费者线程模型产生问题解决问题原子类型(atomic)简单使用改良车站卖票互斥锁(mutex)为了更好地理解,互斥锁,我们可以首先来看这么一个应用场景:模拟车站卖票。模拟车站卖票场景说明:Yang车站售卖从亚特兰蒂斯到古巴比伦的时光飞船票;因为机会难得,所以票数有限,一经发售,谢绝补票。飞船票总数:100张;售卖窗口:3个。对于珍贵的飞船票来说,这个资
原创
发布博客 2021.05.19 ·
1520 阅读 ·
26 点赞 ·
14 评论 ·
90 收藏

C++对象优化

C++对象的优化为什么需要(对象)优化对象使用过程中都调用了哪些方法示例代码:运行结果:结果解释:对象优化及规则优化后的结果具体优化过程对象优化的三条规则为什么需要(对象)优化我们都知道,C语言和C++在程序执行中,都是通过调用一系列的函数来实现的。并且,很多时候,编译器会帮助我们做一系列的事情,比如(在编译类的成员方法的时候,编译器默认添加 this 指针,以此来确定是哪一个对象调用了该成员方法)。得益于编译器或者说系统帮助我们做的一系列事情,我们可以更加方便地使用C++。但是凡事有利必有弊,因为
原创
发布博客 2021.05.18 ·
429 阅读 ·
4 点赞 ·
9 评论 ·
5 收藏

理解虚基类、多重继承的问题

虚基类和多重继承什么是多重继承多重继承的优点关于菱形继承的问题其他多重继承的情况如何解决多重继承的问题什么是虚基类虚基类如何解决问题查看虚基类的内存布局对比普通继承下的内存布局什么是多重继承多重继承,很好理解,一个派生类如果只继承一个基类,称作单继承;一个派生类如果继承了多个基类,称作多继承。如图所示:多重继承的优点这个很好理解:多重继承可以做更多的代码复用!派生类通过多重继承,可以得到多个基类的数据和方法,更大程度的实现了代码复用。关于菱形继承的问题凡事有利也有弊,对于多继承而言,也
原创
发布博客 2021.05.04 ·
608 阅读 ·
6 点赞 ·
0 评论 ·
9 收藏

理解虚析构函数

虚析构函数示例代码(普通析构)存在问题修改代码(虚析构)相关问题构造函数可以是虚函数吗?什么时候需要虚析构函数?示例代码(普通析构)老样子,我们先来看如下代码:class Base{public: Base(int data) :ma(data) { cout << "Base()" << endl; } // 虚析构函数 virtual ~Base() { cout << "~Base()" << endl; } virtual void
原创
发布博客 2021.05.03 ·
175 阅读 ·
0 点赞 ·
1 评论 ·
2 收藏

从编译器角度理解虚函数、静态绑定和动态绑定

虚函数、静态绑定、动态绑定示例代码示例结果对比代码对比结果虚函数静态绑定动态绑定查看虚函数示例代码我们首先来看这么一段代码,设计了两个类:Base、Derive;Base类包含一个保护的成员变量:ma;以及构造函数和两个show方法(一个不带参数,一个带有参数)。Derive类公有继承Base类:class Derive : public Base;包含一个私有的成员变量:mb;以及构造函数和一个show方法(不带有参数)。class Base{public: Base(int dat
原创
发布博客 2021.05.02 ·
468 阅读 ·
1 点赞 ·
1 评论 ·
3 收藏

通过自定义string类型来理解运算符重载

自定义string类型理解系统自带string类型示例代码功能展示自定义string类型比较运算符(>、<、==)重载输出运算符(<<)重载加法运算符(+)重载下标运算符([])重载完整代码功能对比存在问题理解系统自带string类型在C语言中我们一般使用字符数组来保存字符串。存在诸多不方便的地方:比如数组大小、数组长度、数组扩容等等。为了更好地使用字符串,C++提供了string类型。使用它需要引入头文件:#include <string>。示例代码我们可
原创
发布博客 2021.04.27 ·
634 阅读 ·
3 点赞 ·
0 评论 ·
4 收藏

从编译器角度理解C++代码的编译、链接

C++代码的编译链接示例代码编译过程预编译编译汇编链接过程相关面试题参考资料由于Windows操作系统下的IDE不好查看编译链接的详细过程,故本文使用Linux操作系统。具体版本:Linux version 4.15.0-30deepin-generic。示例代码示例代码有两个:main.cpp 和 sum.cpp:// main.cpp#include <iostream>using namespace std;extern int gdata;int sum(int,in
原创
发布博客 2021.04.26 ·
1860 阅读 ·
13 点赞 ·
8 评论 ·
61 收藏

从汇编指令角度理解函数调用过程

从指令角度理解函数调用过程示例代码生成指令具体过程参考资料示例代码我们首先来看如下代码:int sum(int a, int b){ int temp = 0; temp = a + b; return temp;}int main(){ int a = 10; int b = 20; int ret = sum(a, b); return 0;}生成指令int sum(int a, int b)// push ebp// mov ebp,esp// sub
原创
发布博客 2021.04.18 ·
419 阅读 ·
2 点赞 ·
0 评论 ·
4 收藏
加载更多