程序员面试题
文章平均质量分 62
eten
这个作者很懒,什么都没留下…
展开
-
C/C++程序员面试题集
2013年3月20日今天偶然间看到一个关于C++面试的博客,里边介绍的很基础很全面,基本上涵盖了我这半年多来面试时所遇到的各种问题,链接如下:http://edu.yesky.com/84/3041584.shtml2012年10月18号百度PC客户端岗位一面电话面试面试题:前奏:因为阿里巴巴的面试不能由大连调北京,我就风尘扑扑的从北京回到大原创 2012-10-25 17:14:19 · 20882 阅读 · 2 评论 -
[程序员面试题]memcpy的实现
#include #include using namespace std;void *mymemcpy(void *des,const void * src , int size){ char *d = (char*)des; char *s = (char*)src; if(d < s) while(size--) *d原创 2012-10-16 15:14:36 · 1739 阅读 · 0 评论 -
[搜狗笔试]宏定义实现数据交换
#include using namespace std;//单行写#define swapdata1(a,b) (a)=(a)^(b),(b)=(a)^(b),(a)=(a)^(b);#define swapdata2(a,b) {(a)=(a)^(b),(b)=(a)^(b),(a)=(a)^(b);}#define swapdata3(a,b) {int temp;tem原创 2012-10-16 14:51:35 · 1265 阅读 · 0 评论 -
动态规划算法理论阐述及一个小实例
动态规划问题:用来解决最优化问题基本概念:将一个问题,分解成多个阶段来解决,每一个阶段的决策都依赖于当前的状态,决策过后状态又发生了转移,这种多阶段来解决最优化问题的过程就是动态规划。基本思想与策略:基本思想与分治法类似,也是将带求解的问题分解为若干子问题(动态规划称之为阶段),按顺序求解子问题(子阶段),前一个子问题解,为后一个子问题的求解提供了信息。在求解任一个子问题时,列出各种可能的原创 2012-10-16 13:13:50 · 9181 阅读 · 2 评论 -
扔鸡蛋问题详解之深入解析(Egg Dropping Puzzle)
经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该如何用最少的测试次数对于任何答案楼层都能够使问题得到解决。如果你从某一层楼扔下鸡蛋,它没有碎,则这个鸡蛋你可以继续用如果这个鸡蛋摔碎了,则你可以用来测试的鸡蛋减少一个所有鸡蛋的质量相同(都会在同一楼层以上摔碎)对于一个鸡蛋,如果其在楼层i扔下的时候摔碎了,对于任何转载 2012-10-16 14:14:58 · 1569 阅读 · 0 评论 -
楼层扔鸡蛋问题
有限层数和蛋数,求即使最坏情况下需要的最少判断次数两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见两个鸡蛋--一道Google面试题)这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第转载 2012-10-15 10:26:23 · 1699 阅读 · 0 评论 -
C++多态 虚(纯虚)函数 绑定详解及实例分析
多态的概念C++多态即为:多态即为多种形式或形态,在编程语言中描述为同一种操作,可以有多种实现形式!C++中多态产生的必要条件:1、继承2、要求有虚函数3、要求有父类指针或引用指向派生类的对象虚函数、纯虚函数C++为实现多态引入虚函数、纯虚函数的概念!虚函数:在类的函数前边加上 virtual 即可,这样这个函数就变为你想要override的函数!当你引用基类的原创 2012-09-27 17:27:36 · 1391 阅读 · 0 评论 -
判断输入的一个非负的正整数,其是否是2的幂
/**判断输入的一个非负的正整数,其是否是2的幂*/#include #include #include using namespace std;#define max -1/**方法1 、 对2的幂进行判断,如 1、10、100、1000....(二进制数)这些只用高位为 1 , 如何确定高位 为 1 是解题的关键。 对一数 M = 10原创 2012-09-24 14:08:29 · 1659 阅读 · 0 评论 -
[百度笔试题]一个简单的递归实现
由 a-z 0-9 字符构成的三位数密码,要求打印出所有的密码。#include #include #include #include using namespace std;char data[] = "abcd";int len = strlen(data);char outa[4] = "";//memset(outa,0,sizeof(outa));void pri原创 2012-10-13 15:15:32 · 1288 阅读 · 0 评论 -
单行链表寻找倒数第k个节点
/***题目介绍:给出一个单向链表,输出该链表的倒数第k个节点* 设尾节点开始从0编号*/解题思路:两个指针往后移动,一定要注意边界的处理情况。此处我设置了一个头指针,头指针不存数据,仅仅作为头标志。/***题目介绍:给出一个单向链表,输出该链表的倒数第k个节点* 设尾节点开始从0编号*/#include #incl原创 2012-09-21 11:00:41 · 1554 阅读 · 0 评论 -
字符串翻转问题
笔试题:字符串翻转问题: 给定一个 “hello world”,将字符串翻转输出“world hello”;#include #include using namespace std;char str[] = "This translation ah well";inline void swapstr(char &a,char &b){ a=a^b,b=a^b原创 2012-09-21 09:59:11 · 1349 阅读 · 0 评论 -
页面置换、作业调度、进程调度小剖析[转帖]
页面置换、作业调度和进程调度他们之间有很多相似的地方,作业跟进程调度之间尤为相似,之前一直搞不清他们之间的区别跟联系,你是不是也跟我有一样的感受呢?看完这篇文章或许会让你对他们有更清晰的认识。页面置换算法:1,先进先出:淘汰最早进入cache的信息块。2,最近最久未使用:淘汰近期使用频率最低的信息块。3,随机替换:用随机数发生器随转载 2012-10-11 09:56:17 · 796 阅读 · 0 评论 -
字符串朴素匹配算法
#include #include //朴素匹配算法using namespace std;char str[] ="abcacbbc";char pattern[] ="cbbc";int index(){ int slen = strlen(str); int plen = strlen(pattern); //cout<< int i,j,k原创 2012-10-10 13:58:51 · 913 阅读 · 0 评论 -
位运算应用举例
一、位操作符介绍单目操作符1、 & 按位与2、 | 按位或3、~ 按位取反4、>> 右移操作符(非循环) 5、 左移操作符(非循环)双目操作符1、^ 取异或运算二、异或操作的妙用 1. 使特定位翻转 要使哪几位翻转就将与其进行∧运算的该几位置为1即可。原创 2012-09-18 19:12:19 · 1251 阅读 · 0 评论 -
Linux下TCP Socket编程C语言小实例
TCPServer端#include #include #include #include #include #include #include //#include #include //#include #include #include /** 关于 sockaddr sockaddr_in socketaddr_un说明 http://mao原创 2012-10-07 10:59:14 · 21728 阅读 · 1 评论 -
C++中const用法总结
const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nValu原创 2012-09-24 15:28:41 · 793 阅读 · 0 评论 -
海量数据处理常用思路和方法
大数据量,海量数据 处理方法总结大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优转载 2012-04-22 18:36:56 · 1147 阅读 · 0 评论 -
记录C程序员面试题、算法、算法导论、Linux、Qt、NS2、Embedded等相关的的博客汇总
C++ STL 用法总结STL中map用法详解stl hash_map详解算法导论学习总结http://www.wutianqi.com/?cat=515程序员面试编程之美解析博客http://0600310231.blog.163.com/blog/static/47291685201232093451506/http://www.cnblog原创 2012-10-07 13:25:13 · 2132 阅读 · 0 评论 -
链表头结点存在的意义
数据结构中,在单链表的开始结点之前附设一个类型相同的结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。作用1、防止单链表是空的而设的.当链表为空的时候,带头结点的头指针就指向头结点.如果当链表为空的时候,单链表没有带头结点,那么它的头指针就为NULL.2、是为了方便单链表的特殊操作,插入在表头或者删转载 2013-02-22 15:03:38 · 27391 阅读 · 0 评论 -
堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出
简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中转载 2012-11-04 23:08:36 · 1843 阅读 · 0 评论 -
Linux的进程通信(IPC)
进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。转载 2012-10-07 21:43:35 · 881 阅读 · 0 评论 -
多线程和多进程的区别(小结)
总结的很好,学习下:http://blog.csdn.net/hairetz/article/details/4281931/很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。今天终于下了决心,写点东西,以后可以再修修补补也无妨。 一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但转载 2012-11-04 23:00:20 · 1652 阅读 · 0 评论 -
[程序员面试]C++虚函数表详细解释及实例分析
C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图转载 2012-10-01 11:55:33 · 9993 阅读 · 4 评论 -
select函数详解及实例分析
Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻原创 2012-10-22 09:56:14 · 58718 阅读 · 8 评论 -
私有构造函数以及C++单例模型
一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员。C++类的构造函数一般不应该是私有函数,因为私有函数不能被其他类或者全局函数所使用。而创建C++实例需要调用构造函数。所以如果构造函数是私有函数的话,除了类自己的方法之外,其他类不能构造这个类的实例。一般来说,类做出来就是让其他类使用的,而使用一个类必须先构造它的实例。所以转载 2012-10-23 16:26:10 · 2001 阅读 · 0 评论 -
i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
我们通常在写for循环 的时候,要实现变量 i 的自增 1 ;往往会在i++ 和++i中随便挑一种写,对于i++和++i的理解,我们往往停留在返回的值的不同,其实i++与++i在实现效率上也有一定的不同(不考虑编译器优化的原因)。++i的实现效率更高解释如下:i++ (在C++中) 在实现的时候,系统会产生一个 local object class INT的临时变量 用于存储原有的数据原创 2012-10-23 10:50:54 · 4257 阅读 · 1 评论 -
关于数组的几道面试题
集锦查看连接http://blog.csdn.net/huangxy10/article/details/7943823转载 2012-10-31 15:44:59 · 1719 阅读 · 0 评论 -
操作系统的分类
一、批处理操作系统 批处理(Batch Processing)操作系统的工作方式是:用户将作业交给系统操作员,系统操作员将许多用户的作业组成一批作业,之后输入到计算机中,在系统中形成一个自动转接的连续的作业流,然后启动操作系统,系统自动、依次执行每个作业。最后由操作员将作业结果交给用户。批处理操作系统的特点是:多道和成批处理。二、分时操作系统 分时(Time Sharing)操作原创 2012-10-08 09:34:26 · 1395 阅读 · 0 评论 -
[程序员面试题]C/C++中static的作用
面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数 一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变量原创 2012-10-18 14:02:43 · 19630 阅读 · 0 评论 -
动态内存分区分配方式模拟[转帖]
百度面试题:给定一块内存,大小为1M,现有一些内存请求序列1K、2K、4K、10K........要求模拟实现new/delete内存分配过程。对应题目如下: 假设初始态下,可用内存空间为640K,并有下列请求序列,请分别用首次适应算法和最佳适应算法为作业分配和回收内存块,并显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图。作业1申请130K作业2申转载 2012-10-09 15:41:26 · 5098 阅读 · 1 评论 -
堆和栈的区别【转过无数次的文章】
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回转载 2012-10-18 10:10:20 · 1161 阅读 · 0 评论 -
汉诺塔递归算法理解及实现
汉诺塔问题描述: A、B、C 三个桌子,其中A桌子上放了几个大小不同的盘子,盘子的排列顺序为: 从上到下,依次从小到大递增;现要求把这些盘子从 A 桌子上移动到 C 桌子上,盘子移动时有一点要求:每次移动必须保证三张桌子上大盘子在下、小盘子在上;打印移动次序。如 A 上一张 盘子时,移动顺序: A -> C代码实现:#include using namespace std;原创 2012-09-18 14:50:25 · 26585 阅读 · 2 评论 -
(x&y) + ( (x^y)>>1 )证明
对于位运算求两个数的平均值问题,(整形数据)int average(int x,int y){return ( (x&y) + ( (x^y)>>1 ) );}给出两个整数,求出结果。刚开始看到这道题的做法就是x和y转换为二进制,然后计算出结果。在没有办法的情况下这样做也可以得出结果。跟你想象的一点不差,这里确实有捷径。原创 2012-09-18 19:15:41 · 12713 阅读 · 7 评论 -
LCA问题
最近公共祖先问题 : http://poj.org/problem?id=1330#include #include #include #include using namespace std;/**理解:对于节点 a ,左孩子 b ,右孩子 c1、a与b合并的时候 是当 b 全部遍历完时,遍历不完 不会合并 则此时 b的最近祖先是 b 祖先是运行过程中动态更原创 2012-10-08 16:30:14 · 748 阅读 · 0 评论 -
Linux互斥锁的使用代码实现
#include #include #include #include //对临界区的保护问题void *fun1(void *arg);void *fun2(void *arg);int buffer = 0;pthread_mutex_t mutex;int running = 1;int main(void ){ pthread_t pt1; p原创 2012-10-03 11:51:23 · 7526 阅读 · 1 评论 -
MS/Google面试题:寻找丢失的数字
题目:有一组数字,从1到N,其中丢失了一个数字,且顺序也被打乱的存储在一个 size 为N-1的数组中要求:找出丢失的数字,最好能有程序,最好算法比较快BTW1:有很多种方法哦,据说O(n)的方法不止一种BTW2:扩展问题,如果丢失两个,并找出这两个数字;或者,丢失三个,找出三个中的任意一个数字即可BTW3:一定要小心溢出哦BTW4:最好不要多申请 N 多空间题目:原创 2012-10-02 18:28:42 · 1930 阅读 · 0 评论 -
Google面试题:统计1~N中所包含的1的个数
题目:输入:一个正整数N,输出:要求输出从 1 ~ N 中所出现的 1 的个数,如12中所包含的 1 的数为: 1 、10、11、12 总共包含 5个 1 解法1:可以对从1~N的每个数字进行遍历,分别求出每个数字中所包含的1的个数,然后相加求和即可得出最后结果;如下代码:#include using namespace std;int coutOne(unsi原创 2012-10-02 13:37:43 · 2243 阅读 · 0 评论 -
进程死锁及解决办法
一、要点提示:(1)掌握死锁的概念和产生死锁的根本原因。(2)理解产生死锁的必要条件 -- 以下四个条件同时具备:互斥条件、不可抢占、占有且申请、循环等待。(3)记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想(4)掌握死锁的预防策略中资源有序分配策略。(5)理解进程安全序列的概念,理解死锁与安全序列的关系。(6)了解银行家算法。(7)了解资源分配图转载 2012-10-04 14:33:26 · 4509 阅读 · 0 评论 -
循环冗余校验码例题[转帖]
循环冗余较验循环冗余校验码是模2除,也就是说他是异或算法。而假如我们接受到得CRC码在除以循环冗余检验校验码时有余数说明,在传输过程中,出错了!在串行传送(磁盘、通讯)或者TCP/IP协议中,广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。 循环冗余校验码(CRC)的基本原理在K转载 2012-10-03 18:06:26 · 43663 阅读 · 4 评论 -
常用算法经典代码(C++版)
一、快速排序void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中 {int h=x,r=y; int m=a[(x+y)>>1]; //取中间的那个位置的值 while(h{while (a[h] while (a[r]>m) r--; //比中间那个位置的值大,循环直到找一个比中间那个转载 2012-09-13 20:38:33 · 738 阅读 · 0 评论