- 博客(50)
- 资源 (19)
- 收藏
- 关注
原创 0-1背包问题与动态规划的C/C++代码
那一年, 非计算机专业的我听到0-1背包和动态规划, 觉得很高大上, 其实, 动态规划无非就是寻找高中数学中所说的递推公式而已。最近又复习到0-1背包问题和动态规划, 所以打算用代码来玩玩。 0-1背包问题: 一个小偷来出来活动了, 拿了一个背包, 最多可以装50斤的东西的小袋子。 他眼睛一亮, 发现了三件宝贝a, b, c. 其中a重10斤, 价值60元; b重20斤
2015-06-30 23:53:26 33272 11
原创 fibonacci递归算法的“备忘录/Memo”优化法
我们先看一个简单的fibonacci递归程序:#include #include using namespace std;int fun(int n){ if(1 == n || 2 == n) { return n; } return fun(n - 1) + fun(n - 2);}int main(){ int i = 0; int n = 1000; // 计算100
2015-06-28 21:17:40 10218 1
原创 2路bit-map的应用:test.txt中有42亿个无符号整数,从小到大打印其中只出现过一次的数 。限制: 可用内存为1.5GB.
先看这样一个问题:test.txt中有42亿个无符号整数,从小到大打印其中只出现过一次的数 。限制: 可用内存为1.5GB. 前面, 我们已经深入讨论了bit-map, 在本文中, 我们来看看2路bit-map, 其实, 它无非是对bit-map的扩展, 用了两个数组而已罢了。 既然已经熟悉了bit-map, 那我就不多啰嗦了, 直接给出代码:#include #inc
2015-06-28 18:17:11 8125 2
原创 从rand5到rand7的思路和代码验证(某公司社招笔试题)
我们先来看这样一个问题, 已知rand5能等概率产生1, 2, 3, 4, 5, 现要用rand5来实现rand7(rand7的意思是要等概率产生1, 2, 3, 4, 5,6, 7), 该怎么搞呢? 我看了一下网上资料, 很多都是凑出来一个结果, 没有什么过程思路, 我觉得虽然结果正确, 但总感觉所用的技巧性太强。 所以, 在文本中, 我也来凑凑热闹, 看看该如何下手, 并给出程序的实际验证结
2015-06-28 16:42:50 10785 3
原创 利用linux的mtrace命令定位内存泄露(Memory Leak)
一谈到内存泄露, 多数程序员都闻之色变。 没错, 内存泄露很容易引入, 但很难定位。 以你我的手机为例(假设不经常关机), 如果每天泄露一些内存, 那么开始的一个星期, 你会发现手机好好的, 当内存泄露积累到一定程度, 那就是各种卡死了, 系统异常, 最后死机, 不得不重启。 如果搞开发, 遇到内存泄露问题, 那就呵呵了。 你可能先得花好几天来复现问题(泄露积累), 然后需要
2015-06-25 23:33:48 37438 13
原创 linux中的strings命令简介
在linux下搞软件开发的朋友, 几乎没有不知道strings命令的。我们先用man strings来看看: strings-printthestringsofprintablecharactersinfiles. 意思是, 打印文件中可打印的字符。 我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(test
2015-06-25 22:44:19 69598 7
原创 bit-map再显身手:test.txt中有42亿个无符号整数, 求文件中有多少不重复的数(重复的数算一个)。限制: 可用内存为600MB.
来看看这样一个问题:test.txt中有42亿个无符号整数, 求文件中有多少不重复的数(重复的数算一个)。限制: 可用内存为600MB. 思路很简单, 还是用bitmap, 无需多啰嗦, 大家可以直接参考我之前的与bit-map有关的博文: http://blog.csdn.net/stpeace/article/details/46477239
2015-06-24 23:13:15 8257 1
原创 斗地主之洗牌(shuffle)程序的测试程序
在博文http://coolshell.cn/articles/8593.html中, 皓哥已经详细讨论了各种shuffle程序, 并给出了测试的结果, 但博文中没有提供测试代码。 其实, 测试代码也很简单, 在本文中, 我来写一下测试代码。 在之前的博文http://blog.csdn.net/stpeace/article/details/46583277中, 我已经
2015-06-24 22:16:50 8404 2
转载 如何定位Android NDK开发中遇到的错误(内附我的总结补充)
转自:http://www.csdn.net/article/2014-12-30/2823366-Locate-Android-NDK作者: 尹春鹏, Testin云测技术副总裁,Testin崩溃大师研发主管。毕业于清华大学工程物理系;专注于移动应用开发,2011年起参与创建Testin,专
2015-06-23 23:52:06 8317 1
原创 linux程序调试命令addr2line之入门简介(本文先不聊gdb调试)
addr2line有什么作用呢? 可别小瞧它, 它可以定位到代码出错的位置。 下面, 我们来看看这个简单的代码:#include int main(){ int *p = NULL; *p = 0; printf("bad\n"); return 0;} 这个程序很小, 我们可以一眼就看出程序在运行期出错。
2015-06-23 23:07:58 12081 7
原创 bit-map再显身手:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数。限制: 可用内存为600MB.
先看看这个题目:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数. 限制: 可用内存为600MB. 又是大数据。 看到42亿, 有灵感没? 要知道, 2的32次方就是42亿多一点点啊。42亿个无符号整数存在于文件中, 我们可以考虑在内存中用bit-map与之建立二值状态映射。 2的32次方个无符号整数, 需要内存空间为512M, 这个是很容易计算的。
2015-06-22 20:34:54 8184 1
原创 bit-map牛刀小试:数组test[X]的值全部在区间[1, 8000]中, 现要输出test中重复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB
先来看看这个题目:数组test[X]的值全部在区间[1, 8000]中, 现要输出test中重复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB. 好, 我们先给出一个不限空间的解法(为了程序方便, 假设X为10, 实际上可能很大):#include using namespace std;#define X 10#
2015-06-22 18:45:30 8099 6
原创 并查集的“并优化”(leader合并)和“查优化”(路径压缩)
在博文http://blog.csdn.net/stpeace/article/details/46506861中, 我们已经详细地了解了并查集, 不过, 那个程序略显粗糙, 下面我们考虑来优化一下。 先给出没有优化的代码吧:// taoge的并查集#include using namespace std;#define N 1000int leader[N
2015-06-22 16:45:53 9516
原创 不要被sizeof(i++)、sizeof(++i)、sizeof(fun())给绊倒了------杜绝写这种易误导人的代码
看程序:#include using namespace std;double fun(){ cout << "oh, my god" << endl; return 0.0;}int main(){ int i = 0; int a = sizeof(i++); // sizeof在编译期间计算, i++不执行 cout << i << endl; cout
2015-06-22 14:37:46 8902 3
原创 斗地主之洗牌(shuffle)程序(某公司招聘笔试、面试试题)
一副poker通常有54张, 为了简便起见, 假设现有一副10张的poker牌, 试给出洗牌的C/C++代码。 嗯, 本质就是要生成10个随机数(1到10), 而且不能重复。 其实, 我们完全可以先保证不重复, 然后随机, 于是可以这么考虑:给定数列1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 然后尽可能均匀地打乱这个数列, 最简单的方法莫过于:#in
2015-06-21 18:55:32 8545 2
原创 Effective C++条款36解读: 绝不重新定义继承而来的non-virtual函数
我们来看看这样一个简单的程序:#include #include using namespace std;class A{public: void fun() { cout << "A" << endl; }};class B : public A{public: void fun() { cout << "B" << endl; }};int
2015-06-21 16:40:09 7162
原创 Effective C++条款22解读: 将成员变量生命为private
我们先来看一个简单的程序:#include #include using namespace std;// 类的提供者class Programmer{public: string name; string address; // 如下的两个const不可少 void set(const string &tmpName, const string &tmpAddress
2015-06-21 16:07:39 7261
原创 《生命如一泓清水》俞敏洪
早年在读大学的时, 买了一本老俞的《生命如一泓清水》, 送给一位朋友。 今天, 又把这书看了一遍, 老俞的文字还是还是那么情真意切。 也感觉到岁月从指间流过。 下面这几章节, 是我比较喜欢的, 印象很深, 所以一看到题目就知道讲的啥: 1. 生命如一泓清水 2. 一堆散乱的砖头 3. 人生的地图 4. 少年
2015-06-21 14:58:07 9603 1
原创 当才华配不上梦想,那就静心反思和修炼吧!
今天端午节, 老伴回家去了, 我一个人宅在家里, 看看书, 也不免对近况进行反思。毕竟, 这个月的躁动, 犹如大海波澜, 不停地在心中涌动。 内心总有一种声音在反复告诉自己: 走出去, 走出去, 外面的世界很精彩。
2015-06-20 22:19:16 8866 3
原创 Effective C++条款16解读:成对使用new和delete时要采取相同形式
Scott Meyers说:成对使用new和delete时要采取相同形式。 意思很简单, 但我们程序员应该非常小心, 尤其是在处理堆内存问题的时候。 new和delete使用不恰当, 会产生未定义的不明确行为。 比如, 如下方式就是很好的方式:#include using namespace std;int main(){ int *p = new int; delete p; /
2015-06-20 18:32:20 7141 1
原创 Effective C++条款20解读:宁以pass by reference to const替换pass by value
我们先来看一个简单的程序:#include using namespace std;class A{private: string name; string addr;};void fun(A a){}int main(){ A a; fun(a); return 0;} 我们在调用fun函数的时候, 会有形参的拷贝, 会调用A的构造函数,
2015-06-20 18:04:23 7139
原创 Effective C++条款26解读: 尽可能延后变量定义式的出现时间
Scott Meyers大师在Effective C++中说:尽可能延后变量式的出现时间。 我是很认可这个观点的。 每个人都有自己的习惯, 每次看到这样的代码, 我就感觉到不太舒服:#include using namespace std;int main(){ int a, b, c, d, e, f, g; // ...... a = 1; b
2015-06-20 16:47:01 7236
原创 利用SQL语句查找姓“张”且分数大于80的记录(某公司招聘笔试试题)
某公司招聘的笔试试题中有这样一个题目:利用SQL语句查找姓“张”且分数大于80的记录。 其实, 这个题目很简单, 主要考察求职者有没有用过SQL, 下面, 我们来一起实战一下。 关于SQL练习环境的搭建, 其实非常简单(比如在Windows上, 你只需要下载一个sqlite3.exe即可), 只需要参考我之前的博文即可:“为想学SQLite或练习SQL语言的朋友搭建简单的命令行环
2015-06-20 15:40:33 10926 2
转载 程序员技术练级攻略(皓哥)
转载地址:http://coolshell.cn/articles/4990.html 作者:陈皓(也就是我经常提起的皓哥) 程序员技术练级攻略(皓哥)月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programm
2015-06-20 13:00:12 8295
原创 再次简介grep命令和wc命令(某公司招聘笔试试题)
在某公司招聘的笔试环节中, 有这样一个题目:用shell命令输出a.txt中含有good单词的行数(goodbye这样的不算). 其实, 这个题目还是比较基础的, 考察的是基本命令的用法。 其实主要考察grep和wc. 我们先来看一下错误的方法:$ cat a.txtgood good studyday day upgood boygoodbyegoodby
2015-06-20 12:40:09 7935 2
原创 连awk都不熟悉还搞什么Linux后台开发啊-----顺便分享一下与awk有关的笔试、面试经历
先来看看某公司的某次笔试题目: 如何用shell scrip打印出文件中的第二列? 当然, 可能有很多方法来实现这个功能, 但最简单的莫过于awk了。 下面, 我们来看看:Administrator@51B6904C3C8A485 ~/test$ cat a.txtlucy 90lily 80eric 95Administrator@51B6904C3C8A485 ~/test
2015-06-20 12:09:27 9114
原创 Linux中xargs命令的重要作用------顺便分享一次面试经历和一次实战经历
在某公司的某次面试中, 被问到这样一个题目:如何删除当前目录和子目录下所有的.txt文件? 如果对linux命令不熟悉, 则看到题目就会有点傻眼。 当然, 如果你清楚xargs命令的作用, 那就好说了。 一句话:xagrs会接收管道传过来的参数, 并传给管道后面的命令。 下面, 我们来一起看看:Administrator@51B6904C3C8A485 ~/test$ lsAdmin
2015-06-19 23:45:02 9547 5
原创 绝对不要在析构函数中释放单例-----这个至少3000元的bug让人蛋疼两三天
某系统在某特殊情况下, 会出现bug, 经我非常保守地估计, 这个bug的定位修改费用至少3000元, 这还不包括其他的费用。 脱离具体场景, 我来抽象出一个简单的模型, 示例代码如下:#include using namespace std;class A{private: static A *m_p;public: static A *getSingleTon()
2015-06-19 19:10:19 9615 4
原创 可变参数的add函数的实现: int add(int argc, ...){}
可变参数的函数, 看似神奇, 其实非常简单。 在本文中, 我就不高谈阔论了, 仅仅给出一个示例:#include using namespace std;int add(int argc, ...){ int sum = 0; int *p = &argc + 1; int i = 0; for(i = 0; i < argc; i++) { sum += *p++;
2015-06-18 23:40:53 8666
原创 结构体作为STL map的key时需要注意什么? (某公司招聘面试试题)
某公司招聘的面试环节, 有这样一个题目:结构体作为STL map的key时需要注意什么? 对于懂STL map的同学来说, 这个题目还是比较easy的, 先看程序:#include #include #include using namespace std;struct Info{ string name; int score;};int main(){ Info
2015-06-18 22:51:52 10609 1
原创 Effective C++条款07解读:为多态基类声明virtual析构函数 (某公司招聘面试试题)
经历过某同一家公司的两次面试, 都被问到了基类虚析构函数问题, 其实, 很简单很基础。 下面我们来看程序:#include using namespace std;class A{public: ~A() { cout << "~A" << endl; }};class B : public A{public: ~B() { cout << "~B" <<
2015-06-17 23:08:56 7183
原创 Effective C++条款06解读 : 若不想使用编译器自动生成的函数, 就应该明确拒绝
我们知道, C++编译器经常在背地里捣鬼, 定义一些默认的函数。 那如果不想用编译器生成的这些默认函数, 该怎么办呢? 很简单: 我们自己去明确声明, 不让编译器来骚扰。 比如, 如果我们要阻止类的使用进行对象拷贝和复制, 可采用如下的方式:#include using namespace std;class A{public: // ... A() {
2015-06-17 22:31:29 7094
原创 Effective C++条款05解读: 了解C++默默编写并调用哪些函数
C++编译器会在背后做许多事情, 这也是C++复杂的原因之一。 比如, 如果你写了一个空类:#include using namespace std;class Empty{};int main(){ return 0;} 实际上就好像写了如下的程序一样:#include using namespace std;class Empty{pu
2015-06-16 22:55:15 7250 1
原创 聊聊map和vector的迭代器失效问题(某公司招聘笔试试题)
当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕。 某次笔试, 我遇到这样一个题目: 删除map<int, int>中value为5的倍数的元素。 该题看起来很自然很简单, 实则有迭代器失效的陷阱。 如果对迭代器失效问题一无所知, 则很容易写出如下的错误代码:#include #include using namespace std;typede
2015-06-16 00:12:43 16714 34
原创 并查集的简介及其C/C++代码的实现(某公司招聘笔试试题)
当年, 我在一个公司实习, 某次, 在一次算法交流的过程中, 我第一次听到了并查集这个看似高大上的概念, 也再一次感觉到了自己的无知。 对于一个非计算机专业的人来说, 你跟他说并查集, 就有点像你对着计算机专业的人说Gibbs现象或者FFT一样, 你懂的。 后来, 某公司的招聘笔试题目中, 又出现并查集, 让我们一起来看看这个题目吧: 假如已知有 n 个人
2015-06-15 20:10:24 15678 4
原创 Effective C++ 条款01解读: 视C++为一个语言联邦
我在C/C++语言社区中混迹过一段时间, 发现有一种不太好的现象: 某些C程序员看不起C++, 以显得自己很牛逼。 当然, 一些人尝到C++的甜头后, 又看不起C. 其实, 何必这样呢? 任何语言都有自己的用武之地。 比如, 在图像处理领域, C语言确实让人不敢恭维, 但在嵌入式领域, matlab又能算什么东西呢? C++最初还是从C语言发展来的, 随着C++的慢慢发展
2015-06-14 23:45:29 7493 1
原创 Effective C++ 条款02解读: 尽量以const, enum, inline替换#define
其实, 尽量以const, enum, inline替换#define的意思是:
2015-06-14 22:35:59 7557
转载 为什么要读书,有没有替代方法
基本赞同原作者的观点, 我也很爱读书, 所以转载过来。转载地址:http://blog.csdn.net/chgaowei/article/details/44925919从我的理解上谈一下为什么要读书,以及读书的替代品。读书的好处与本质:好处很明显,增长知识和阅历,锻炼人的思想,提升专业技能。为什么读书有这些好处,这就涉及到读书
2015-06-14 18:17:08 7453 1
原创 进程调度算法之“先来先服务”、“短任务优先”和“时间片轮选”
我们知道, 引入多进程后, 操作系统可以同时将多个进程载入到内存中。 如此一来, 在内存中便有多个进程存在, 但是, 对于单cpu来说, 任何一个时刻, 只有一个进程占据cpu. 那么, 为了让各个进程舒服满意, 操作系统该如何进行进程调度呢(也就是把cpu分配给谁)? 本文, 我们来介绍最简单的三个进程调度算法------“先来先服务”、“短任务优先”和“时间片轮选”。
2015-06-14 17:18:46 18119 7
原创 《计算机的心智:操作系统之哲学原理》 邹恒明(这本书写的不错, 非计算机专业的朋友可以读读, 补补操作系统知识和原理)
现在IT这么火, 大家基本都会写个printf("hello world\n");之类的东东, 很多半路出家的人, 热衷于画画界面之类的, 今天画个iOS的Button, 明天再画个Android的Label, 后天倒腾一下MFC的Edit, 或者用Qt弹个框框, 成就感满满的。 其实呢? 这些东西玩玩, 并无坏处,但倘若以为这样就是一个合格的程序员, 那就有点天真的。
2015-06-14 15:44:33 10885 15
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人