前言 写简历时,很害怕自己没什么特点,与别人没啥区分度,而平时又感觉改bug比较多。。。于是在自我评价一栏大胆的写上 热爱trouble-shooting 从此走上被虐之路。。。 正文 因为我自己主要是Linux 下 C/C++ ,所以enmmm 还是这方面做的比较多。之前也写过一篇类似的博客,主要简述的是改bug的思想(见这篇),这篇主要是从实际工具出发,简单介绍工具的使用及思路。(当然反手一个printf也算是一种工具。。) 主要工具 GDB strace pstack valgrind iotop netstat/ss wireshark/tcpdump 辅助性的 top ps 一运行就段错误的。直接生成coredump文件,生成的方法见这篇 如果堆栈的信息完好,可以之间看到问题出在哪里,一般 print 变量,看看是否是地址越界之类的。 运行起来不动的。 可能是死循环/死锁。 对于多线程死锁,建议通过ps 找到pid后, pstack <pid& 继续阅读 >>


康艺杰 18/04/02 21:03:23
正文 What 引用一下知乎@骆梁宸的文章Google 编程之夏(GSoC):海量优质项目,丰厚报酬,你竟然还不知道? 这个问题,我们先来看看 Google 官方是怎么说的:(出自 What is Google Summer of Code?) Google Summer of Code (GSoC) is a global program that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The id 继续阅读 >>


康艺杰 18/02/20 20:38:19
前言 半夜登到云服务器上测代码,结果一个tab补全 bash: 无法为立即文档创建临时文件: 设备上没有空间 行了,代码也不测了,先改bug吧。 正文 出现的问题就是tab无法正常补全 这里也很明显,就是磁盘空间不足。 于是用df 命令查看 额。。。GG 磁盘满了 之前暑假的时候就遇到过这种问题,当时是学姐的电脑,开机无图形界面(我这云服务器不需要图形),查看了一下磁盘就是写满了,当时解决的不好,这次赶紧记下来。 最简单的方式就是排除法,顺着目录树从/开始找大文件。 我们切换到root用户然后到/下看看哪个目录占用空间比较大 # du -h --max-depth=1 --max-depth=1就是递归查看深度为1,我感觉也可以不加直接筛选大文件,但是一开始思路比较简单,就是看看哪个目录占用的空间大。 找了几次之后成功定位某大文件,6个多G,rm之。 可是问题依然没有解决。 在/下du查看只有14G 但是df查看依然是20G满了 文件删除的原理 继续阅读 >>


康艺杰 18/02/14 15:21:04
前言 最简单的动归,依稀记得当年小组免试题最后一关就是这样的(恩,是最后一关的前一部分哈),思路和之前的博客一样,做之前又复习了一遍博客,然后就轻松+愉快(哼,才不是呢,一开始没搞懂m,n怎么处理,又不能在类里全局数组&传数组很麻烦,整了半天表。。) 题目 有一个机器人位于一个 m × n 个网格的右上角。 机器人每一时刻只能向下或者向左移动一步。机器人试图达到网格的左下角。每个网格上有一个数字权值,机器人希望它走到左下角的路径权值和最大。 问这个最大路径权值和是多少? 注意事项 输入一个n x m 的矩阵,保证 n <= 200,m <= 200。(康康提示,nm相等,并且nums数组已经输入好了权值,不用自己手动输入了) 题目数据保证 0 <= i <= n-1 , 0 <= j <= m-1, nums[i][j] <= 100000。 样例 给出 [ [1,2,3,4], [3,5,6,7], [9,10,1,2], 继续阅读 >>


康艺杰 18/01/31 23:59:24
前言 一道感觉不难,但是涉及到负数移位运算的坑的题。 正文 题目 如果要将整数A转换为B,需要改变多少个bit位? (两个数都是32位的整数) 样例 如把31转换为14,需要改变2个bit位。 (31)10=(11111)2 (14)10=(01110)2 思路: 恩,就是找对应位上不同的个数,所以想法就是统计两个数异或后的结果中1的个数,(有1就说明对应位上两个数不相同)。 int bitSwapRequired(int a, int b) { int result = 0; int temp = a ^ b; while(temp){ result += 0x01 & temp; temp = temp >> 1; } return result; } 直接超时,卡在-1,1 这组用例上了。 emmmmm还有负 继续阅读 >>


康艺杰 18/01/24 17:34:14
前言 简单的题,一次就AC的感觉真爽。 正文 题目 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。 样例 给出 s = “abcd”,t=”dcab”,返回 true. 给出 s = “ab”, t = “ab”, 返回 true. 给出 s = “ab”, t = “ac”, 返回 false. 我的想法就是把两个字符串原地排序,排序之后就可以比较了。 直接就是简单粗暴的std::sort…. sort(s.begin(),s.end(),[](const char a,const char b){return a > b;}); sort(t.begin(),t.end(),[](const char a,const char b){return a > b;}); if(s == t) return true; else return false; 692ms,好像有点慢。 继续阅读 >>


康艺杰 18/01/22 23:36:28
前言 今天给1702班的娃们答疑,遇到了一个问题,当时很蒙,后来想了想就是之前的一个问题,当时解决了却忘了总结了,今天赶紧总结下。 正文 源程序是这样的(就作为我们的实验1) char a = '\0x41'; printf("%x",a); 结果是个31,emmmm 看上去结果很有迷惑性,恩 其实我们只要在ASCII表里找一下0x31对应的值就好啦,是’1’。 那么我们再改成’\0x51’,’\0x61’,’\0x71’试试。 结果是一样的。 让我们再做个实验验证我们的结论: char a = '123'; putchar(a); 这时直接打印3。 需要注意的是,上面的两个实验都会报warning,而且都是相同的 1.c:10:11: 警告:多字节字符常量 [-Wmultichar] char a = '\0x41'; ^~~~~~ 1.c:10:11: 警告:隐式常量转换溢出 [-Woverflow] 那么这和哪个警告有关 继续阅读 >>


康艺杰 18/01/06 15:08:08
前言 最近发现一个公众号,每天一道题,难度也不大,而且题干很短,搜了下,题都是LintCode这个平台的,今天注册了小号做了做,中文很友好(和LeetCode相比,可以说造福广大吃瓜群众),然后可以看到哪个用例过不去(造福非ACMer,看到WA就“卧槽,咋可能错了”的选手),并且类似LeetCode,只用写关键的方法,不用去管格式化输出输入。 正文 LintCode 144 交错正负数 描述: 给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。 样例: 给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案. 我的思路很简单,因为没有要求必须是正开头或者必须是负开头,只要A[1]A[3]A[5]….与A[0]符号不同,A[2],A[4],A[6]…与A[0]符号相同就满足要求。 于是就写下这样的代码: class Solution { public: /* * @ 继续阅读 >>


康艺杰 17/12/31 15:47:29
前言 有时结果和你想的不一样,并不一定是你想错了。。。可能是编译器优化了。 正文 在给学弟讲题时遇到了这样一个问题,代码如下 class A{ public: A() = default; A(const A &a): str(a.str){ cout << "copy" << endl; } A(const string &d):str(d){ cout << "str" << endl; } string str; }; void func(A a) { cout << a.str << endl; } int main() { func(string("hello world")); } 大家想一想输出结果是什么? Ok,我的思路是这样的: 首先调用std::string 的构造函数,通过一个字符串 继续阅读 >>


康艺杰 17/12/30 20:42:38
前言 圣诞节到了,身为单身狗保护协会的一员是不是应该关心一下身边的单身狗呢? 那么就在节日喜庆氛围而单身狗还打开电脑撸码之时,送他一份特别的惊喜吧。 效果如下: 正文 没错,我们要的效果就是 一句惊艳的祝福,然后一切回归正常,就像什么都没发生过~ 整个操作可以分为3部分 1.绘图(就是准备好你的祝福啦)。 2.设置惊喜的开关。 3.清除操作痕迹。 绘图 这里因为要在终端上显示,所以我找到一个将字符转换为“画”的软件 Figlet,这个软件也有很多年的历史啦。 在Fedora 25上直接dn安装即可 $ sudo dnf install figlet 使用也很简单,比如我想输出kangkang,就直接 $ figlet kangkang 便绘制好输出在终端上了,当然你也可以进行重定向输出到文件里 当然啦,既然我们要绘图,就一定要画得好看。 我们可以通过-f 参数选择字体。 $ figlet -f bannner kangkang figlet自带了一 继续阅读 >>


康艺杰 17/12/25 18:39:10