- 博客(96)
- 资源 (1)
- 收藏
- 关注
转载 kmalloc, vmalloc分配的内存结构
对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_
2011-09-20 21:20:15
1042
转载 信号量和自旋锁的差别 .
1)内核同步措施 为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操
2011-09-20 21:05:49
750
原创 1000!末尾 有几个0
题目:1000!末尾有几个0 1到1000中2的个数远多于5的个数,2*5可得到一个0。所以求得1到1000中有多少个5就可以求得1000!的末尾有几个0. 分析5的1次幂5的倍数增加1个0 (5,10,15,20,25,30,.....)5的2次幂
2011-09-19 10:15:24
6848
原创 有1,2,3一直到n的无序数组,排序
题目:有1,2,3,..n 的无序整数数组,求排序算法。 时间复杂度 O(n) 空间复杂度O(1) 分析: 对于一般数组的排序显然 O(n) 是无法完成的。 既然题目这样要求,肯定原先的数组有一定的规律,让人们去寻找一种机会。
2011-09-15 16:18:34
2993
转载 内存对齐问题
一、内存对齐的原因大部分的参考资料都是如是说的:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为
2011-09-13 19:52:00
624
转载 struct msghdr
我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构。在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1。我们使用系统调用sendto发送这个icmp包。 ssize_t sendto(int
2011-08-16 15:58:06
979
原创 fd_set
select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内
2011-08-15 22:35:13
546
转载 59.用C++ 设计一个不能被继承的类
题目:用C++ 设计一个不能被继承的类。分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有f
2011-08-12 16:10:33
537
原创 53.字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab 和cba。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试
2011-08-10 17:29:46
648
原创 45.递减左旋数列中查找一个数
题目:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}克移两位形成的,在这种数组中查找某一个数。 思路:在此序列不断二分的过程中,由于原序列是一个递减序列经过旋转得到的,将它从任何位置分开,都会得到两个序列,其中一个是
2011-08-09 14:55:16
1904
转载 递归非递归实现树的遍历
1.先序遍历从递归说起void preOrder(TNode* root){ if (root != NULL) { Visit(root); preOrder(root->left); preOrder(ro
2011-08-05 12:26:04
853
原创 40.给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
题目:一串首尾相边的珠子(m个),有N种颜色,设计 一种算法,取出其中一段,要求包含所有N种颜色,并使长度最短。 给一个字符串s1,和一个小串s2,求算法能在s1中找到包含s2里所有字符的最小子串。比如:s1 = “ADOBECODEBANC”
2011-08-04 12:40:26
3728
原创 39.二叉树中任意两个节点间的最大距离
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。 思路:1.对二叉树中的任一个节点,求得它到左子树中最深的结点的距离ldis,再求得它到右
2011-08-03 12:25:41
6947
原创 抛鸡蛋(玻璃球或围棋)
题目:一个100层的大厦,你手中有两个相同的鸡蛋(玻璃球或围棋)。从这个大厦的某一层扔下鸡蛋((玻璃球或围棋))就会碎,用你手中的这两个鸡蛋(玻璃球或围棋),找出一个最优的策略,来得知那个临界层面。分析:这道题比较直观的想法是通过二分来寻找,但是二分的解法应该不是最优的。这里
2011-07-31 22:22:07
1446
转载 linux内核中的链表
双循环链表传统实现在传统的双循环链表实现中,如果创建某种数据结构的双循环链表,通常采用的办法是在这个数据结构的类型定义中加入两个(指向该类型对象的)指针next和prev。例如:typedef struct foo { … struct foo *pr
2011-07-31 16:16:52
543
转载 最大子序列、最长公共子串、最长公共子序列
最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没
2011-07-31 11:03:03
959
原创 37.最长字符串链接
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。 思路 :分析一下,将各个字符串作为一个节点,首尾链接就好比是一条边,将两个节点连接起来,于是问题就变成
2011-07-27 10:39:43
2985
2
原创 36.比赛获胜顺序
谷歌笔试:n 支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,比如or
2011-07-26 22:02:57
883
原创 32.交换使两个序列差最小
题目: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];被PASS的思路一:
2011-07-25 11:20:06
2378
3
转载 atof(),atoi(),itoa(),sprintf()等用法总结
这几个都是C语言中原有的字符格式转换函数,包含在头文件或中,C++自然而然地也把它们加进来了。一、 atof()头文件#include/include原型:double atof(const char *nptr);作用:把字符串转换成浮点数,直至遇到第一个空格。 二、 itoa
2011-07-23 12:35:20
25046
1
原创 30.从1到n的正数中1出现的次数
首先观察N=123456的情况:十万位1的个数: 23456+1 = 23457万位 1的个数: (1+1)*10000 = 20000千位 1的个数: (12+1)*1000 = 13000百位 1的个数: (123+1)*100 = 12
2011-07-22 21:48:57
1092
原创 29.栈的push、pop 序列
题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。如果我们希望pop 的数字正好是栈顶数字,直接pop 出栈即可;如果希望pop 的数字目前不在栈顶,我们就到push 序列中还没有被push 到栈里的数字中去搜索这个数字,并
2011-07-22 10:42:33
744
转载 c++位运算
什么是位(bit)? 很简单,位(bit)就是单个的0或1,位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。一个字节(BYTE)由八个位组成,一个字(WORD)是二个字节或十六位,一个双字(DWORD)是二个字(WORDS)或三十二位。如下所示: 0
2011-07-21 19:58:56
465
原创 28.整数的二进制表示中1 的个数
这一题好像很经典啊,5月分腾讯面试的时候还问过这个题目,而且这个题在笔试里也出过,只不过是形式变了! 题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。分析:这是一道很基本的考查位运算的面试题。包括微软在内的…
2011-07-20 21:42:12
649
原创 27.跳台阶问题
题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。求总共有多少总跳法,并分析算法的时间复杂度。首先我们考虑最简单的情况。如果只有1 级台阶,那显然只有一种跳法。如果有2 级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1 级;另外一种就是一次跳2 级。现在我们
2011-07-20 21:35:35
1252
原创 26.左旋转字符串
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n 的字符串操作的复杂度为O(n),辅助内存为O(1)。分析:如果不考虑时间和空间复杂度的限制,最简单的
2011-07-20 21:19:52
600
原创 25.找出字符串中的最长数字串
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存。例如:"abcd12345ed125
2011-07-19 15:14:27
1192
2
原创 感谢声明
微软、谷歌、百度等公司经典面试100题作者:July、Sorehead。时间:二零一一年三月二十五日。出处:http://blog.csdn.net/v_JULY_v答案出处:谷歌,百度等和自已的一些整理 要找工作了,在CSDN上找到这么好的面试题,当然要好好学习了,因是刚入门的
2011-07-18 09:05:11
376
原创 18.圆圈中最后剩下的数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。分析:既然题目有一个数字圆圈,很自然
2011-07-17 16:19:30
748
原创 16.从上往下遍历二元树
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\5 7 9 11输出8 6 10 5 7 9 11。分析:这曾是微软的一道面试题。
2011-07-17 11:24:47
493
原创 14.在排序数组中查找和为给定值的两个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我
2011-07-17 09:59:12
767
原创 13.查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法
2011-07-16 13:00:27
868
原创 10.翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习
2011-07-14 11:29:38
722
原创 9.判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \
2011-07-14 10:23:32
509
原创 5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解
2011-07-13 13:09:57
554
原创 4.在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10
2011-07-12 12:18:10
418
原创 3.求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10
2011-07-12 10:08:07
369
转载 automake之hello例子
一,主要过程新建三个文件: helloworld.c configure.in Makefile.am然后执行:aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld 就可以
2011-07-11 21:29:49
690
原创 2.设计包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1) 借助辅助栈,保存最小值,且随时更新辅助栈中的元素。如先后,push 2 6 4 1 5stack A stack B(辅助栈)4
2011-07-03 19:00:14
370
转载 程序员必看 c++笔试题汇总
本文通过对程序员笔试过程的总结,对程序员c++笔试题进行了汇总。希望能与大家共同分享。下面是一些常见题型:1.求下面函数的返回值(微软){ int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999. 答案:8思路:将x转化为2进制,看含有的1的个数。2. 什么
2011-06-14 20:33:00
847
算法导论原作者所写《算法导论教师手册》
2010-11-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人