自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

welcom to Rita's world

知识搬运工

  • 博客(30)
  • 收藏
  • 关注

原创 Linux多线程服务端编程:使用muduo C++网络库》阅读笔记)(1)

《Linux多线程服务端编程:使用muduo C++网络库》阅读笔记线程安全的的对象生命期管理线程安全的的对象生命期管理一、线程安全的的对象生命期管理。1、什么叫线程安全的类?一个线程安全的class需要满足:多个线程同时访问的时候,无论操作系统如何调度这些线程,其表现出正确的行为;并且调用端不需要额外的同步或协调动作。由此可知,标准库中的大多数class都是不是线程安全的,比如string,vector,map。都需要外部加锁才能保证安全。2、互斥锁的可重入和不可重入是什么意思?可重入锁又称

2021-02-25 18:06:58 433

原创 C++11多线程练习

C++11多线程练习3个进程循环打印数字3个进程循环打印数字编写一个程序,开启3个线程,每个线程轮流打印1-100,A打印1,B打印2,C打印3,A打印4。要求输出结果必须按ABC打印的顺序显示;1,2,3,4,5…int prinfNumFlag = 0;std::mutex mu;std::condition_variable con;void PrintNum(int flag){ int i = flag+1; while (i <= 100) { std::uniq

2021-02-24 15:29:07 310

原创 C++11多线程练习 ——生产者与消费者

C++11多线程联系 ——生产者与消费者生产者与消费者问题生产者与消费者问题生产者与消费者问题:所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。struct Repository{ struct Repository(int product_num, int con_num, int pro_num) :products_num(product_num) , consumer_

2021-02-24 15:23:01 361

原创 如何保证代码质量

作为一个线上产品的开发人员,我时时刻刻都被出现线上bug的恐惧支配着。出现bug在所难免,但bug性质各有不同,如果是低级错误,那就必须背锅了。提高代码质量,把自己能做的事情做到最好,再出现其他的问题,就可以坦然接受了。关于如何提高代码的质量,我看到一篇自己觉得不错的博文,推荐给大家https://www.cnblogs.com/murongmochen/p/11695894.html文章中对于保证代码质量主要提出了4个方面1、开发人员自我意识的提高及成文规范2、强大的CI守护系统3、严格的r

2020-06-03 10:18:56 737 1

原创 工厂模式&单例模式

分享一下工作遇到的工厂模式和单例模式结合使用的一个实现。各种类型的产品的创建:Creator创建各种类型的产品,每种产品使用不同类型的 mananger。CCreatorImp继承CCreator,管理一个内存池,负责真实的创建和回收工作。使用模板T。CFactory有一个单例。RegisterCreator创建m_creator_map,m_creator_map维护了不同模板实...

2020-04-23 11:41:21 274

原创 观察者模式

观察者模式今天总结一下在工作遇到的观察者模式的实现方式。谈谈自己的理解观察者模式又叫做发布-订阅模式。当一个事件发生需要通知给别的实体的时候,就可以使用观察模式来实现。这里需要被通知的实体就叫做观察者。类图说明observer:是观察者基类,里面的handle函数用来实现收到通知之后要做的处理。observer1和observer2是具体的观察者,需要根据实际情况,重写handle。...

2020-04-22 16:14:22 124

原创 个人能力提升

个人能力提升最近公司安排职级晋升,我也对自己一年的工作做了一个总结,总体的感觉是和大牛们比起来真的差太多。看他们分享的技术文档,内容上很高深,而且语言组织能力很强,措辞也很高大上,突然让我意思到自己输出技能的薄弱。也第一次意识到要有意识的提升个人能力。认清自己有一个高大上的词汇叫做学习方法提高效率...

2020-04-21 18:13:12 321

原创 自我吐槽

博客长草了好久没有更新~~重启中。。。。好久没有更新~~重启中。。。。

2020-04-15 16:54:31 123

原创 C++11多线程编程

C++11多线程变成多进程与多线程C++11中的并发和多线程初试线程启动一个进程线程结束多进程与多线程临界区:多个线程都可能访问到但不能同时访问的代码。互斥量:可以处于加锁和解锁两种状态之间的变量。C++11中的并发和多线程在C++11之前,只能使用平台提供的多线程方案,这对于移植是很不方便的,但在C++11中提供了线程库。包含线程相关的类和函数。包含原子相关的类和操作函数包含互斥...

2019-02-24 14:17:21 177

原创 最近遇到的面试题

最近遇到的面试题C++方向题目最近处于求职状态,总结一下最近遇到的面试题吧,在此就不详细说是哪儿些公司了。题目1、对于函数声明:void test(int a,int b=7,char *c=&amp;quot; * “),下面的函数调用中,不合法的是:A、test(0,0,0) B、test(1) C、test(5,‘8’) D、test(6,”#&amp;quot;)2、一个栈的入栈序列是ABCDE,则其出栈序列不可能...

2019-02-21 21:01:06 271

原创 C++11中新增的容器

C++11中新增的容器arrayforward_listunordered_map,unordered_set,unordered_multimap,unordered_multiset元组Tuplearray介于数组和vector之间,比vector高效,vector实在堆空间上,array是在栈上。#include &lt;iostream&gt;#include &lt;array...

2019-02-18 22:31:31 867

原创 C++11中的lambda表达式

C++11中的lambda表达式一个例子了解lambda表达式的作用表达式的书写格式关于捕获列表C++11中引入了lambda表达,这种表达式看似高深莫测,其实在很多高级语言,比如python中早就有过。下面来粗浅的介绍一下lambda表达一个例子了解lambda表达式的作用在C++程序中,我们经常会用到一些库函数,比如sort;下面是使用sort的常用方式:#include &amp;lt;io...

2019-02-18 14:07:07 254

原创 C++11中的智能指针

C++11中的智能指针理解智能指针shared_ptr基本使用unique_ptrweak_ptr理解智能指针在C++的程序设计中,经常需要在堆空间上进行内存的申请和释放,为了方便,C++11引出了智能指针,更好的管理堆内存,避免一些儿二次释放空间和未释放空间的情况。这种智能指针是在栈空间存放的。智能指针功能形同指针,但是本质是一个对象。有三种智能指针:shared_ptr,unique...

2019-02-17 18:30:41 170

原创 字节跳动视频面试经历

字节跳动视频面试题 C++方向过程题目参考答案过程投递简历两天后有hr给我打电话说要约视频面试,约了两天后的上午11点(2019.2.14),面试差不多40分钟,虽然邮件中说是要面试项目经历和通用型的业务问题,但是实际上都是技术题。面试官很和善,一看就是技术宅。先让我说了一段自我介绍。我直说了一下毕业院校,就职经历和求职意向。然后面试官就问了一些问题,不难,但是回答的不好,第二天收到了被拒的邮...

2019-02-16 12:45:11 20810

原创 剑指offer(5)两个栈实现队列

剑指offer(5)两个栈实现队列题目分析代码题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析在入队列的时候将所有的元素都存放在stack1,再进入stack1。出队列的时候将所有的元素都放到stack2中,再从stack2中出。代码class Solution{public: void push(int node) { ...

2019-01-28 15:41:32 119

原创 剑指offer(4)重建二叉树

剑指offer(4)重建二叉树题目分析代码题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析通过前序遍历找到根节点,根据中序遍历找到左右子树,然后递归构建左右子树,再将左右子树和根节点结合。代码...

2019-01-28 15:40:06 97

原创 剑指offer(3)从头到尾打印链表

剑指offer(3)从头到尾打印链表题目分析代码题目输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。分析拷贝出一个新的链表,需要在函数中开辟空间。代码/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* ...

2019-01-28 15:38:52 116

原创 剑指offer(2)替换空格

剑指offer(2)替换空格题目分析代码题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。分析一种高效的方式实现这个函数:先计算出一共有多少个空格,空格数*2就是替换后的字符串比原来的字符串增加的长度,从后向前,遇到一个空格就替换。例如:We Are Happy中一共有2个空...

2019-01-28 15:37:33 120

原创 剑指offer(1)二维数组中的查找

剑指offer(1)二维数组中的查找题目分析代码题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析本题中数组从左到右递增,从上到下递增的数组,如果我们单纯使用两层遍历(时间复杂度为n2n^{2}n2显然是浪费了这一条件。有一种方式可以使用一...

2019-01-28 15:36:23 143

原创 二叉树的前中后序遍历,及广度遍历实现

二叉树的前中后序遍历,及广度遍历实现说明:代码使用codeblocks编译,C++实现,个人编写,如有错误,还望指正。#include &lt;iostream&gt;#include &lt;stdlib.h&gt;#include &lt;stack&gt;#include &lt;queue&gt;using namespace std;struct TreeNode{...

2019-01-23 10:59:36 224

原创 各种排序算法分析与实现

各种排序算法分析与实现总结插入排序冒泡排序选择排序快速排序堆排序说明:代码使用codeblocks编译,C++实现,个人编写,如有错误,还望指正。总结排序方法稳定性平均时间复杂度最优时间复杂度最坏时间复杂度空间复杂度插入排序稳定O(n2n^{2}n2)O(nnn)O(n2n^{2}n2)1冒泡排序稳定O(n2n^{2}n2)O(n2n^{2...

2019-01-23 10:53:59 157

原创 顺序查找和二分查找

顺序查找和二分查找说明:代码使用codeblocks编译,C++实现,个人编写,如有错误,还望指正。二分查找要求输入的数据是有序的。如果有重复的元素,查找到的未必是最前面的。#include &lt;iostream&gt;using namespace std;//顺序查找//找到返回下标,没找到返回-1;int order_search(int array[],int l...

2019-01-23 10:51:28 1095

原创 ftell等重定位流相关函数

ftell等重定位流相关函数ftell定义说明示例rewind定义说明示例fgetpos 和 fsetpos定义说明示例说明:本文主要是对man 帮助命令的翻译,若有错误,欢迎指正在上一篇博客中我们介绍了fseek函数,fseek函数可以将一个打开的文件的指示符重新定位到你想定位的位置。使用SEEK_SET,SEEK_CUR,SEEK_END,作为相对位置,相距n个字节,n是long型。本片...

2019-01-23 10:48:14 255

原创 fseek函数

fseek函数说明:本文主要是对man 帮助命令的翻译,若有错误,欢迎指正。在linux学习过程中,如果我们遇到一个陌生函数,都会想赶快查一下,你通常是怎么查询linux系统函数和命令的使用方法呢?google?百度?还是使用man命令?其实对于一个初级程序员,学习使用man命令是很有益的,我们可能看到很多网上的说明都是对man帮助文档的翻译。所以,如果你英文不是很差,就自己来翻译一下你想要...

2019-01-23 10:47:01 2238

原创 popen详解

popen详解说明:本文题目来源于牛客网,答案分析来源个人,仅为参考1、请问下面的程序最后会产生多少个进程:int main( ){ int i; for(i = 0; i&lt;5;i++){ int pid = fork(); if(pid == 0){ //do something ...

2019-01-23 10:45:33 1212

原创 select函数详解

select函数详解背景说明定义介绍、参数说明原理返回值pselect总结案例案例1案例2说明:本文整合网络资源和man帮助文档,请酌情参考。背景select函数是实现IO多路复用的一种方式。什么是IO多路复用?举一个简单地网络服务器的例子,如果你的服务器需要和多个客户端保持连接,处理客户端的请求,属于多进程的并发问题,如果创建很多个进程来处理这些IO流,会导致CPU占有率很高。所以人...

2019-01-23 10:43:15 58504 7

原创 send函数详解

send函数详解sendsendtosendmsg说明:本文主要是对man 帮助文档的翻译,若有错误,欢迎指正。sendsend:是一个系统调用函数,用来发送消息到一个套接字中,和sendto,sendmsg功能相似。概要:#include &lt;sys/types.h&gt;#include &lt;sys/socket.h&gt;ssize_t send(int sockf...

2019-01-23 10:41:14 40422 2

原创 底层文件访问之三:open系统调用

底层文件访问之三:open系统调用Open说明:本文主要是对man 帮助文档和《linux程序设计》第四版的摘录,部分理解来源于个人,请酌情参考。学习了write和read,再理解open也很简单。Openopen:创建文件描述符,所关联的文件可以是直接打来,也可以是创建并打开。简单来说:open建立了一条道文件或者设备的访问路径。如果调用成功,它将返回一个可以被read和write等...

2019-01-23 10:35:30 356

原创 底层文件访问之二:read系统调用

底层文件访问之二:read系统调用说明:本文主要是对man 帮助文档和《linux程序设计》第四版的摘录,部分理解来源于个人,请酌情参考。接着上一篇的write,我们来学习一下read。Read系统调用read的作用是:从与文件描述符fd相关联的文件中读取 n bytes个字节的数据。并把它放入到数据区buf中。概要:read函数在&amp;lt;unistd.h&amp;gt;头文件中定义。原型...

2019-01-23 10:01:32 831

原创 底层文件访问之一:write系统调用

说明:本文主要是对man 帮助文档和《linux程序设计》第四版的摘录,部分理解来源于个人,请酌情参考。在linux学习过程中,如果我们想学习如何使用库函数或者系统调用,都会想赶快查一下?你通常会google,百度,还是使用man命令?其实对于一个初级程序员,学习使用man命令是很有益的,我们看到的很多网上的说明都是对man帮助文档的翻译。所以,如果你英文不是很差,就自己来翻译一下你想要查询的...

2019-01-23 09:51:19 1628

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除