- 博客(35)
- 资源 (1)
- 收藏
- 关注
原创 redis 函数表参数分析
最近在改造redis,有必要熟悉一下redis一部分命令的执行过程。先从熟悉命令表开始吧。参考GitHub上的源码解析,自己再熟悉一下。命令表如下:struct redisCommand redisCommandTable[] = { {"get",getCommand,2,"r",0,NULL,1,1,1,0,0}, {"set",setCommand,-3,"w
2018-01-17 16:19:41
373
原创 0x00和'0'
往往小问题才会折腾很久。msmset((void*)virt,0x00,PAGE_SIZE)和msmset((void*)virt,‘0’,PAGE_SIZE)区别就在于0x00只是为了强调就是数字0,就是为了ASCII码转换的数字0!不是字符‘0’!如果手误将数字0写作字符‘0’,那就达不到用‘\0’清空字符串的目的了。所以最近在内核中分配页的时候总是判断最后一级页表项出错,原来是在allo
2017-05-15 14:46:49
4292
原创 在内核中获取pmem设备的虚拟地址
pmem的配置可以参考http://pmem.io/2016/02/22/pm-emulation.html,没有的选项可以不选。不要少选了,不然没有pmem设备滴。配置完之后,想要在内核中获取pmem的虚拟地址,就先来个系统调用吧。我的内核是4.4.4。所以在arch/x86/entry/syscall_64.tbl中添加编号,顺序添加即可。然后在include/linux/sysc
2017-03-14 22:17:03
904
原创 仿函数与函数指针
摘自:STL源码剖析 仿函数的主要用途是为了搭配STL算法,函数指针同样可以达到将"整组操作当做算法的参数",但是函数指针是不能满足STL对抽象性的要求,也不能满足软件积木的要求----------函数指针无法与STL其他组件搭配,产生更灵活的变化。
2017-03-10 11:40:25
455
转载 利用同步机制实现读写锁的四种方法
转自:http://blog.csdn.net/ojshilu/article/details/25244389对于某个临界资源的访问,读操作和写操作是要区别对待的。读操作可以多个线程同时进行,写操作必须互斥进行。读写锁:当已经被加了读锁时,其他的读模式锁请求仍然可以访问,但是写模式锁不能访问;当写模式锁加锁时,其他的请求都不能访问。本文尝试用四种方法来
2017-03-09 22:29:49
1061
原创 AOF后台重写也会造成阻塞
Redis为了解决AOF后台重写造成的数据不一致问题,设置了AOF重写缓冲区。即使设置了no-appendfsync-on-rewrite yes也会造成短暂的主进程阻塞。原因就在于子进程完成AOF重写之后,会发送一个信号给主进程,而父进程会在这个时候调用信号处理函数,主要是将新的AOF文件替换旧的AOF文件,那么在这段时间内, 主进程是阻塞的。
2017-03-08 10:24:26
1761
原创 C++ stringstream clear()和.str("")
今天在使用stringstream时,遇到了第一次写入数据,之后再也无法写入的问题,期间调用了stringstream.str("")方法,但是无法正常输出到字符串,之后看到这篇博客http://blog.csdn.net/jcq521045349/article/details/49888751才明白,还需要调用clear();引用下面一段话:stringstream常用来安全的格式
2017-03-06 20:09:03
1166
转载 Pmem使用小结
转自:http://blog.csdn.net/long19851105/article/details/6600452基本原理Android Pmem是为了实现共享大尺寸连续物理内存而开发的一种机制,该机制对dsp,gpu等部件非常有用。Pmem相当于把系统内存划分出一部分单独管理,即不被linux mm管理,实际上linux mm根本看不到这段内存。Pmem与A
2017-03-06 10:57:30
4891
转载 ubuntu下手工切换低版本GCC
转自:http://blog.csdn.net/zyxlinux888/article/details/6708775GCC是GNU专属C/C++编译器,因为GCC存在着兼容性的问题,工作时必须用指定版本的gcc才能编译通过,因此我们应该适时的切换到相应的GCC编译器下进行工作。1.简述:一般情况下,编译程序都是使用的是:/usr/bin/gcc其实这个/usr/bin
2017-03-06 10:40:55
1194
原创 剑指offer 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。思路:遍历链表,将所有指针存在一个vector里面,最后输出第n-k个节点即可。class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL||k==0)
2017-03-01 21:00:07
200
原创 剑指offer 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像思路:递归,从上到下,交换即可。class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot == NULL) return; TreeNode *left,*right; left = pRoot
2017-03-01 20:48:09
192
原创 剑指offer 对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:既然是对称的,那么二叉树的节点个数肯定是奇数,偶数排除。那么中序遍历的结果也肯定是对称的。所以,通过中序遍历,然后对称的值。当然要处理特殊情况啦。那就是存在单个孩子的节点,一个是左孩子,一个是右孩子,他们的值是相同的,这样就会出现判断错误的问题,那么我们在出现这种情况时,自己添加
2017-02-26 21:21:40
209
原创 剑指offer 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:题目中会出现重复的字母,这里采用了取巧的办法,使用了C++的map来实现,首先map可以过滤到重复的字符串,其次map还可以
2017-02-26 19:51:01
311
原创 剑指offer 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:既然是旋转数组, 那么数据的规律肯定是保持非递减,但遇到第一个递减的数时,就是最小的数了,特殊情况下,数组一直保持非递
2017-02-26 19:31:46
205
原创 剑指offer 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:先找出字符串中有多少个空格(len),那么字符串总体向后移动的距离就可以得出(len*3-len),然后整体向后移动,遇到空格时将%20添加进去即可。class Solution {public: void replac
2017-02-26 19:22:26
332
原创 剑指offer 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从每行的最后一个数开始,如果所查找的数大于当前值,那么行数加一。如果等于直接返回true;class Solution {public: bool Find(int target, vector > a
2017-02-26 18:57:48
180
原创 为什么redis不共享包含字符串的对象
摘录自 :redis的设计与实现。以便没有看的同学能找到,方便自己,方便他人。根本原因:复杂度过高,消耗的CPU时间太多。 当服务器考虑将一个共享对象设置为键的值对象时,程序需要先检查给定的共享对象和键想创建的目标对象是否完全相同,只有两者完全相同,程序才会将共享对象设置为键的值对象。但是!!!!!,如果一个共享对象保存的值越复杂,那么在验证两者(即共享对象和目标对象)是否完
2017-02-24 18:36:33
626
原创 剑指offer 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:e后面不能有小数点的出现,出现e后判断下一位是不是数字,不是就为false,小数点出现后判断下一位是不是数字,不是就为false。小数点最多出
2017-02-23 23:07:38
534
原创 剑指offer 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。思路:主要是区分空节点,val之间用特殊符号隔开,例如用 ‘-’表示节点分隔符,当遇到空节点时用#表示,按层遍历即可,当然也可以用其他遍历方式 。磕磕绊绊也算是AC了。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *
2017-02-22 23:12:53
196
原创 剑指offer 机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:深搜。递归的访问当前坐标的上下左右。访
2017-02-22 20:54:43
204
原创 剑指offer 66题 矩阵中的路径
第一次发剑指offer的博客。做了一晚上的题,做哭了。结果是审题出错了。必须记下来。请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[a b c e s f c s a d e e]是3*4矩阵,其包
2017-02-21 23:00:25
319
原创 redis embstr编码
redis使用redIsObject来表示是string、hash、list、set、zset五中数据类型,具体结构如下typedefstruct redisObject { unsigned type:4; unsigned encoding:4;/* lru time (relative to server.lruclock) */unsigned lru:REDIS_
2017-02-19 21:51:05
3343
原创 C++string所占字节大小
在跑代码时老是出现Segmentation fault (core dumped),同样的代码在不同机器上竟然会出错。结果是g++版本不一样,导致string所占的字节数也不一样。在g++ 4.8.4中string占8个字节,在g++5.4.0中string占32个字节。记录一下,免得再遇见又懵逼了。
2017-01-11 20:38:44
5586
转载 红黑树算法讲解
转自:http://blog.csdn.net/yang_yulei/article/details/26066409一篇醍醐灌顶的红黑树讲解文章。查找(一)我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息。键和值的具体意义取决于不同的应用。符号表中可能会保存很多键和很多
2017-01-09 11:14:55
227
转载 because it is missing required fields:
参考博客:http://blog.csdn.net/turkeyzhou/article/details/9271659 虽然是个很小的问题,还是要记下来,免得又忘记了。 使用protobuf 时出现Can't parse message of type "xxxxx" because it is missing required fields: xxxx。注意
2016-12-19 10:10:16
1284
转载 LinuxC获取到磁盘的使用状况
自己做个笔记。转自http://blog.csdn.net/q1302182594/article/details/473459731 命令 根据参考资料[4]的说明,可以使用df命令查看系统的磁盘空间。2 函数 参考资料[3]介绍了用于获取磁盘容量信息的函数statfs(),并且提供了一个简单的例程。由于参考资料[3]的例程中,单位转换时使用右移代替除
2016-12-12 22:03:35
2338
转载 C++ function was not a member of std
解决办法是需要g++4.8以上和gdb7.6以上。还需要引用C++11的标准。example:g++ -std=c++11 -g test.cpp -o test 参考自:https://my.oschina.net/zenglingfan/blog/169564
2016-12-12 10:54:31
1057
原创 关于使用protobuf出现undefined reference 的问题
菜就是菜,解决一个undefined reference都用这么长时间。 最近计划边学边写一个基于protobuf的RPC框架,结果第一步就遇到这个问题了。网上找了好久才一步一步解决问题,看来还有很长的路要走。 首先参考了这篇博客http://www.cppblog.com/colorful/archive/2012/05/05/173761.html,是protobuf库的问题
2016-12-11 16:14:24
15330
3
原创 编译内核3.11出现multiple definition of `mpihelp_add_1等错误
最近在编译3.11的内核时出现了multiple definition of `mpihelp_add_1等问题,根据网上的说法将external改为static并不能解决根本的问题,其他的一些方法也不能解决,内核本身应该是没有问题的,就是因为系统比较新导致的。系统版本:Ubuntu16.04 gcc版本:5.4内核版本:3.11解决办法:降低gcc版本再次编译,博主是
2016-12-06 17:03:26
1129
转载 win10 VMware 12桥接网卡无效的问题
转自:http://blog.csdn.net/nevsee/article/details/47605385纠结了好几天桥接问题,就差换系统了,结果是没有开启服务,记录下来这个深刻的教训。遇到这种情况需要重新开启两个服务即可,然后开启虚拟机网络配置重置下即可,如下图:
2016-12-02 12:30:25
3074
1
原创 在继续编译bfs时遇到git - fatal: bad revision 'HEAD'以及error: invalid suffix on literal; C++11 requires a spac
按照网上的教程,依次执行:1、删除.git2、git init3、git add .4、git commit -m "Whatever"对于error: invalid suffix on literal; C++11 requires a space between literal and identifier修改对应文件下面的"[%s:%d]"fmt为"[%s:%d]"
2016-11-19 16:41:00
7881
原创 编译BFS出现aclocal.m4和Error: unknown pseudo-op: `.ule'的错误
在编译bfs的时候出现aclocal.m4的错误,原因是没有安装automake,使用install automake安装,再次执行./build/sh即可。继续执行会产生Error: unknown pseudo-op: `.ule'的错误,因为是在虚拟机上部署,内存是1G的,所以在修改了内存之后通过了编译。
2016-11-19 15:34:46
3400
原创 Linux内核编译出现__crc_munlock_vma_pages_all多次定义
编译Linux内核出现__crc_munlock_vma_pages_all多次定义的问题,__crc_munlock_vma_pages_all是在编译的时候自动生成,在内核源码中没有找到。最后原因是因为将munlock_vma_pages_all进行了EXPORT_SYMBOL导出,删除之后错误消失。
2016-11-16 21:50:00
335
原创 编译linux3.11.8内核出现compiler-gcc5.h不存在
依据网上的说法是因为系统版本太高,我使用的是ubuntu16.0。网上的解决办法是下载compiler-gcc5.h即可。暂时没有使用这种方法。而是直接在include/linux中找到compiler-gcc4.h重命名为compiler-gcc5.h编译。编译通过,暂时未出现问题,后续出现问题再更新。
2016-11-01 15:16:20
7605
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人