自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

转载 C++11新特性

最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11...

2020-03-31 23:16:58 147

原创 面试题12:矩阵中的路径(M)

问题描述    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径。解题方法深度优先搜索(回溯法)void DFS(vector...

2020-03-31 21:35:05 227

原创 面试题11:旋转数组的最小数字

问题描述    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。解决方法1.循环遍历int findMinNum(vector<int> data) { if(dat...

2020-03-29 14:51:31 110

转载 建堆的时间复杂度分析

现在常有两种建堆的方法,而这两种方法又有着不同的时间复杂度。下面分别陈述:(1)自顶向下的建堆方式这种建堆的方法具有O(n*log2n)的时间复杂度。从根结点开始,然后一个一个的把结点插入堆中。当把一个新的结点插入堆中时,需要对结点进行调整,以保证插入结点后的堆依然是大根堆。其中h = log2(n+1)-1,第k层结点个数为2k个(当然最后一层结点个数可能小于2h)。第k层的一个结点插入之...

2020-03-29 13:53:04 6916 1

原创 面试题8:二叉树的下一个结点

问题描述    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解决方法struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode* next; TreeNode(int x): ...

2020-03-27 21:24:19 89

转载 C++内存管理

C++内存管理 原创 ...

2020-03-27 20:43:32 278

原创 面试题7:重建二叉树

问题描述    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解决方法1.递归法struct TreeNode { int val; TreeNode* le...

2020-03-27 17:16:18 211

原创 面试题5:替换空格

问题描述    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解决方法1.暴力法void ReplaceBlank(char* str) { for(int i = 0; i < strlen(str); ++i) { if(s...

2020-03-27 15:57:33 117

原创 for循环中scanf方法

#include <stdio.h>int main (void){char a, b;puts (“请输入一个整数”);scanf ("%c", &a);puts (“再输入一个整数”);scanf ("%c", &b);printf (“a = %c b = %c\n”, a, b);return 0;}上述程序运行过程中,输入第一个整数后,再...

2020-03-27 15:19:56 8728

原创 面试题3:数组中重复的数字

问题描述    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解决方法哈希表int findDuplicateNum(vecto...

2020-03-27 15:13:20 136

转载 IO多路复用之epoll模型

epoll接口是为解决Linux内核处理大量文件描述符而提出的方案。该接口属于Linux下多路I/O复用接口中select/poll的...

2020-03-26 15:28:01 366

原创 IO多路复用之poll服务端程序简单实现

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>#include <sys/socket.h>#include <poll.h>#include <s...

2020-03-25 22:39:39 175

原创 IO多路复用之select服务端程序简单实现

#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/select.h>#include <sys/time.h>#include <sys/socket.h>#include <unistd.h>#inclu...

2020-03-25 18:53:15 454

转载 操作系统锁的实现原理

    所谓的锁,说白了就是内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功;如果已经上锁,则返回失败。解锁时,则把锁状态修改为空闲状态。为了弄明白锁的实现原理,我们首先看看如果OS不采用任何其他手段,什么情况下会导致上锁失败?假如我们把加锁过程用如下伪码表示:1、read lock;2、...

2020-03-25 14:14:33 1247

转载 vector容器的扩容原理

仔细分析,第5次扩容时,需要寻找16的新空间,第4次释放了8,第3次释放了4,第2次释放了2,第1次释放了1,所以 1 + 2 + 4 + 8 = 15 < 16,也就意味着,之前释放的空间,永远无法被下一次的扩容利用,这对内存与cache是非常不友好的。最普遍的情况下,当扩容因子为2时,最好的评价时间复杂度为2N,发生在N等于2的n次幂时,最差为3N,发生在N等于2的n次幂加1时。总消耗为N+(N-1)/(K-1)。每次扩容之后capacity的情况为:1,2,3,4,6,9,13,19,28。

2020-03-01 16:20:59 2235 4

基于gmock实现的cppmockfree的使用方法总结

C++单元测试中,我们常常需要使用到gmock,但是gmock只能mock虚函数,如果要mock非虚成员函数、静态成员函数、全局函数、重载函数、模板函数以及其他依赖库的函数时,gmock就很难实现。而cppmockfree可以支持这些函数的mock。cppmockfree是基于gmock实现的,相较于gmock更容易使用,并且支持更多场景下的函数mock。本文介绍了cppmockfree的相关使用语法,并针对不同测试场景给出了测试样例,以及如何引入cppmockfree。

2023-08-30

空空如也

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

TA关注的人

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