程序员面试题精选
Baocai3000
技术源于需求又高于需求
展开
-
关于铁道部的那点事
1.对火车购票网的登录页面的分析http://user.qzone.qq.com/386861941/blog/1326166461最近很多人经历了比较痛苦的网上购票,有人叹其为2012最慢的网站。为什么会这么慢?我同意很多业内人士的看法,除了管理方面的问题, 网站的设计存在一些重要的问题,第一是购票流程可能不是很科学,从而增加了系统的复杂性和数据锁定(lock)的几率,使得很多人转载 2012-01-13 09:54:58 · 911 阅读 · 0 评论 -
数组的子数组最大之和
<br />题目1:有一个int型数组Num,里面存放着若干的正数和负数,请你设计一个算法,在数组中截取一段Num[start]--Num[end],使得这一段的整数之和最大,并返回最大值max。<br />// findMaxPart.cpp : Defines the entry point for the console application.//#include "stdafx.h"#define max(x,y) ((x)>(y))?(x):(y)/***************原创 2010-10-22 18:50:00 · 698 阅读 · 0 评论 -
将一个字符串中的各个位按递增排序的最大整数打印出来
<br />// Qunshuo1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <ctype.h>#include <string.h>/**将一个字符串中的各个位按递增排序的最大整数打印出来。输入字符串"abc123def2345gh6567",打印出"2345"。 输入字符串"hello345world567",输出"567"。基本思路:原创 2010-10-21 00:18:00 · 923 阅读 · 0 评论 -
两个有序数组求交集
1.m==nvoid merge(int*a,int m,int *b,int n){ int max=m>n?m:n; int *p=(int*)calloc(sizeof(int),max); int i=0,j=0,k=0; while(i*(b+j)) { j++; }else if (*(a+i)原创 2010-10-16 16:25:00 · 3223 阅读 · 0 评论 -
拓扑排序算法
<br />、、TraceBack:http://www.cnblogs.com/shanyou/archive/2006/11/16/562861.html<br />查看Castle的代码,在Castle.Core中内部的数据结构采用图,排序使用的拓扑排序算法:<br /> 对于一条有向边(u,v),定义u < v;满足所有这样条件的结点序列称为拓扑序列。拓扑排序就是求一个有向图的拓扑序列的算法。<br />一个有向图顶点的拓扑序列不是惟一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图转载 2010-10-16 16:32:00 · 1087 阅读 · 0 评论 -
打印Hello World,填空题
<br />int main(){ if(/*在此填入一个语句*/) printf("Hello"); else printf(" World!");} <br />int main(int argc, char* argv[]){ //print_N(5); //print_less_k(10); if (!printf("hello")) { printf("hello"); }else{ printf(" world"); } ret原创 2010-10-15 09:51:00 · 1369 阅读 · 0 评论 -
小于k的非负整数
<br />输入参数是k,打印出小于等于k的所有整数,不能用if, switch, for, ?:等等一系列关键字。<br />思路:(1)利用类的静态变量的属性,每次构建构造函数就加1,只需创建k个数组即可。<br /> (2)递归实现,减1,结束条件采用-1!=k && print(k)的方式。<br />//第一种方法,利用类的构造函数和静态变量的特质class test{public: test(){ printf("%d/n",N++); }private原创 2010-10-15 09:39:00 · 807 阅读 · 0 评论 -
Union大小
<br />union{ int i; char x[2];}a;int main(int argc, char* argv[]){ a.x[0]=10; a.x[1]=1; printf("%d/n",a.i);//266 return 0;} <br />分析:(1)union的size是有最大的类型决定的,因此为max(sizeof(int),2*sizeof(char))=4<br /> (2)分布:00000000 00000000 0000原创 2010-10-15 11:20:00 · 924 阅读 · 0 评论 -
如何用栈实现递归与非递归的转换
一.为什么要学习递归与非递归的转换的实现方法? 1)并不是每一门语言都支持递归的. 2)有助于理解递归的本质. 3)有助于理解栈,树等数据结构.二.递归与非递归转换的原理. 递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来.需要说明的是,这个"原理"并没有经过严格的数学证明,只是我的一个猜想,不过在至少在我遇到的例子中是适用的. 学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序.理解这三种遍历方式的递归和非递归的表达方式是能够正确实现转换的关键之处,所原创 2010-10-15 10:40:00 · 1163 阅读 · 0 评论 -
从编译器角度分析C语言中数组名和指针的区别
数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变,例如你可以写出下面这样的代码:int*p;p++;却不能写这样的代码:int a[];a++;那么数组名跟指针之间到底有什么区别呢?第一,在声明上,除了作为函数参数的数组名总是编译器转化成指针,其他情况下,数组名就是数组名,指针就是指针,二者不能混淆,你不能在一个文件中定义一个数组,而在另一个文件中把它声明成一个指针。char a[];//定义一个数组a转载 2010-10-15 09:53:00 · 2177 阅读 · 2 评论 -
星号字符串前移
<br />题目:将一个字符串中的'*'号全部移到最前边,而且不可以改变其他字符串的原始顺序。<br />例如,"abcd**def"-->"**abcdef", "hello*w*o*rld"-->"***helloworld"。<br />// permuteStar.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <string.h>/***********原创 2010-10-22 21:33:00 · 1626 阅读 · 0 评论 -
strnumcmp的实现
<br />百度2011笔试题:<br /> <br />实现int strnumcmp(char * str1,char * str2);函数,当两个字符串的比较部分不包含数字时,函数功能和strcmp一样。否则比较字符串中的数字大小。例如:<br />"abc32"<"abc6";<br />"abcd">"abc9";<br />"abcd"<"abce";<br />// strnumcmp.cpp : Defines the entry point for the console applicat原创 2010-10-22 22:24:00 · 1294 阅读 · 0 评论 -
谷歌面试题:将字符串中的小写字母排在大写字母的前面
有一个由大小写组成的字符串,现在需要对它进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序)。// swapString.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include void swapString(char* str,int len){ char* p=str,*q=str+len-1; while (p+1='a'&原创 2010-11-02 00:35:00 · 1972 阅读 · 0 评论 -
线段组成三角形的概率问题
<br />一条长度为l的线段,随机在其上选2个点,将线段分为3段,问这3个子段能组成一个三角形的概率是多少?<br /> <br /><br />1/4。<br />假设我们选择的两个点的坐标是x和y(先假设x < y): <br />那么由三角形两边和大于第三边的性质,有: <br />x+y-x>1-y <br />x+1-y>y-x <br />1-y+y-x>x<br />由上述不等式得到:x < 0.5, 0.5 < y < x+0.5 <br />然后画个图就能得到联合概率为1/8,不要忘了这原创 2010-10-31 23:07:00 · 5719 阅读 · 0 评论 -
整数逆序后放入数组中
<br /> <br />基本思路:递归,还是递归! <br />void convert(int *A,int n){ if(n>=10) convert(A+1,n/10); *A=n%10;}int main(int argc, char* argv[]){ int n=1234567; int result[20]={0}; convert(result,n); for(int i=0;i<7;i++){ printf("%d",result[i]);原创 2010-10-30 22:28:00 · 1239 阅读 · 0 评论 -
停机问题
<br />停机问题 - 所有存储量为N的机器上的程序最多运行多久?<br /><br />有这么一个计算机: 存储量为N bytes,包含了内存、Cache,等等所有表示状态的东东CPU为M赫兹<br />如果在这上面运行一个一定可以结束的程序,这个程序最多可以运行多久?<br /> <br />ans:<br />一个byte是8个bit,这是8的bit,N个byte,就是8N个bit,代表着 2^8N 种状态不论怎么编码,当程序终止的时候,已经是某一个状态,而且这个状态之前没有经过过(否则早就终止了)原创 2010-10-31 22:51:00 · 978 阅读 · 0 评论 -
递归回文
<br />int recursiveHuiwen(char *str,int len){ if(len==1) return 1; if(str[0]==str[len]){ return recursiveHuiwen(str+1,len-1); } return 0;}原创 2010-10-30 22:34:00 · 1001 阅读 · 0 评论 -
重复数字查找
<br />1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?<br />int xor=*data; int i=0; for(i=1;i<len;i++){ xor^=*(data+i); } <br />主要原理就是异或的两个特性:x^x=0;x^0=x;a^b=b^a<br />假设:没有重复元素x的数组异或结果为T,则包含x的数组异或之和为T^x;连着原创 2010-10-29 16:09:00 · 1506 阅读 · 2 评论 -
翻转字符串
<br />限制:只能含有字母或者数字等单字节,最多一个空格<br />void reverse(char *str,int len){ printf("原串:%s/n",str); int i=0; while(i<len/2){ str[i]^=str[len-1-i]; str[len-1-i]^=str[i]; str[i]^=str[len-1-i]; i++; } printf("翻转串:%s/n",str);} voidstrRevers原创 2010-10-29 15:45:00 · 752 阅读 · 0 评论 -
联机算法求最大子序列和
<br />一个无序的数组,找出相邻的任意个元素,使得其和最大。<br />int max_subseq_sum(int *a,int N){ int i,sum=0,max=0; for(i=0;i<N;++i) { sum+=a[i]; if(sum<0) sum=0; else if(sum>max) max=sum; } return max;}int main(){ int sum,s[10]={-1,3,88,45,-原创 2010-10-27 00:36:00 · 792 阅读 · 0 评论 -
100层 2个球问题
dynamic-programming之小球健壮度(n)给2个小球,一个100层的楼,要求用最少的掉落次数确定出球能够掉落而不摔坏的楼层数(在测试过程中,两个球都可以被摔坏)。在最坏的情况下,需要试验多少次?(每一次球出手算试验一次)1.此问题有最优子解结构记 T(n)为n层上最少的实验次数 使得一定可以判断出损坏的楼层。若第一次在第1层试,碎,不用再试;不碎,则还有两个球,要测n-1层。worst=max(1,T(n-1)+1);若第一次在第2层试,若碎,则另一球需要放到第一层试;若不碎,则余两球,要测从转载 2010-10-26 23:56:00 · 2431 阅读 · 0 评论 -
打印奇怪的数据
<br />Please input a number:10<br /><br /> 1 2 6 7 15 16 28 29 45 46<br /><br /> 3 5 8 14 17 27 30 44 47 64<br /><br /> 4 9 13 18 26 31 43 48 63 65<br /><br /> 10 12 19 25 32原创 2010-10-08 00:26:00 · 731 阅读 · 0 评论 -
用Spring写系统日志(AOP技术)
<br />url:http://blog.sina.com.cn/s/blog_4f9ce8f30100k3dn.html<br />导论:为了系统维持和排查错误的需要,有时我们需要程序自动的写日志,将用户的操作记录下来。在这里,可以使用Spring的AOP技术。我们可以写一个切面,并且指定切入的范围(切入点),当系统运行后,日志信息将可以自动记录在指定的文件或数据库中。<br /><br />流程:<br />1、定义切面(Log4jHandlerAOP类,它包含记录信息的内容)--->原创 2010-09-30 10:18:00 · 1378 阅读 · 0 评论 -
字符串逆转(不使用临时变量)
<br />实际上还是那个XOR的操作:<br />void exchange(char *str){ int i=0,j=0; for(i=0,j=strlen(str)-1;i<j;i++,j--){ str[i]^=str[j]; str[j]^=str[i]; str[i]^=str[j]; }}int main(){原创 2010-09-30 09:44:00 · 1019 阅读 · 0 评论 -
Linux面试题大全
<br />一.填空题:<br />1. 在Linux系统中,以 文件 方式访问设备 。<br />2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。<br />3. Linux文件系统中每个文件用 i节点 来标识。<br />4. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块。<br />5. 链接分为: 硬链接 和 符号链接 。<br />6. 超级块包含了i节点表 和 空闲块表 等重要的文原创 2010-09-26 16:45:00 · 1170 阅读 · 0 评论 -
从M个不同字符中任取N个字符的所有组合
<br />#include <string.h>//组合问题(从M个不同字符中任取N个字符的所有组合) void combine(char *source,char *result,int n){ if (1==n) { while (*source) { printf("%s %c/n",result,*source++); } printf("-------------------------------/n"); }else{ int i原创 2010-09-26 16:06:00 · 3349 阅读 · 2 评论 -
面试经典对话
<br />问题1 你为什么觉得自己能够在这个职位上取得成就?<br /><br /> 分析:这是一个相当宽泛的问题,它给求职者提供了一个机会,可以让求职者表明自己的热情和挑战欲。对这个问题的回答将为面试人在判断求职者是否对这个职位有足够的动力和自信心方面提供关键信息。<br /><br /> 错误回答:我不知道。我擅长做很多事情。如果我能得到并且决定接受这份工作,我确信自己可以把它做得相当好,因为我过去一直都很成功。<br /><br /> 评论:尽管表面上听起来这种回答可以接受原创 2010-09-24 23:44:00 · 973 阅读 · 0 评论 -
程序员是怎么读简历的
<br />程序员是怎么读简历的 by 酷壳 - CoolShell.cn <br /><br />人事部门是这样阅读简历的 <br /><br />* (+15分)如果简历中说到了和工作职位相符的技能超过5次以上。 <br />* (+8分)如果简历中说到了和工作职位相符的技能3次到5次。 <br />* (+4分)如果简历中说到了和工作职位相符的技能1次到2次。 <br />* (+4分)Cover Letter(“求职信”或“自荐信”)提到了招聘人员。 <br />* (+2分)简历中有Cover L原创 2010-09-21 21:22:00 · 855 阅读 · 0 评论 -
递归实现判断一个数是否是回文数
<br /> 递归实现判断一个数是否是回文数<br />#include <string.h>//递归实现判断一个数是否是回文数int find(char *str,int n){ if (n<=1) return 1; else if(str[0]==str[n-1]){//递归 return find(str+1,n-2); } else return 0;}int main(int argc, char* argv[]){ cha原创 2010-09-25 21:52:00 · 4577 阅读 · 1 评论 -
大链表数据的排序
<br />typedef struct _node_t{ int a; struct _node_t* next;}node_t;node_t* Mergesort(node_t* L,int count) //链表头及要链表元数个数{ if(count==1) return L; int count1=count/2; int count2=count-count1; node_t* p=L; int i; for(i=0;i<原创 2010-09-20 23:15:00 · 781 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
<br />题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。<br />例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:<br /> 8<br /> //<br /> 6 10<br /> / / / /<br /> 5 7 9 11<br />因此返回true。<br />如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。<原创 2010-09-18 23:34:00 · 711 阅读 · 0 评论 -
找出数组中两个只出现一次的数字
<br />题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。<br />分析:这是一道很新颖的关于位运算的面试题。<br />首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。<br />这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从原创 2010-09-18 22:41:00 · 1029 阅读 · 0 评论 -
在字符串中删除特定的字符
<br /> 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。<br />分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。<br />要 编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符串原创 2010-09-18 22:11:00 · 829 阅读 · 0 评论 -
Spring,struts,hibernate常见的面试笔试题汇总(2)
<br />1.Struts中Action是线程安全的吗?如果不是,请说出理由.在Struts可以定义静态变量吗?<br />参考答案: <br />Servlet是在多线程环境下的。即可能有多个请求发给一个servelt实例,每个请求是一个线程。 <br />struts下的action也类似,同样在多线程环境下。可以参考struts user guide: http://struts.apache.org/struts-action/userGuide/building_cont原创 2010-09-27 00:29:00 · 772 阅读 · 0 评论 -
Spring,struts,hibernate常见的面试笔试题汇总(3)
<br />JAVA相关基础知识 <br />1、面向对象的特征有哪些方面 <br />1.抽象: <br />抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 <br />2.继承: <br />继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承原创 2010-09-27 00:30:00 · 964 阅读 · 0 评论 -
最多的字母
<br />给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。<br />/* ============================================================================ Name : mostLetters.c Author : Version : Copyright : Your copyright notice Description :原创 2010-09-29 17:58:00 · 1053 阅读 · 0 评论 -
2的10000次幂
<br />#include <stdlib.h>#include <stdio.h>int a[10000];int m;void bigpow(int num){ a[0]=1; m=1; int i=0,j=0,temp=0,flag=0; for(i=1,flag=0;i<=num;i++){ //m为当前计算结果的位数,倒序 for(j=0,t原创 2010-10-05 11:42:00 · 1625 阅读 · 0 评论 -
分矿石问题
<br />某地质学院的是三名学生对一种矿石进行分析<br />甲判断:不是铁,不是铜<br />乙判断:非铁是锡<br />丙判断:非锡是铁<br />一个判断完全正确,一个对一半,一个完全说错了,编程确定,谁对,谁错,谁对一半。<br />#include <stdlib.h>#include <stdio.h>int main(){ int a,b,c,x; for(x=1;x<=3;x++){ a=(x!=原创 2010-10-05 00:35:00 · 1455 阅读 · 0 评论 -
C语言实现bitmap,取两个数组的交集等操作
<br />bitmap的基本操作:<br />#include <stdio.h>#include <stdlib.h>#define WORD 32#define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整#define MASK 0x1F //16进制下的31#define N 10000000/* * 置位函数——用"|"操作符,i&MASK相当于mod操作 * m mod n 运算,当n = 2的X次幂的时候,m mod n =原创 2010-09-29 17:30:00 · 4587 阅读 · 0 评论 -
C实现bitmap位图
<br /> 事实上,我们是用每一个元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.<br />基本的操作:<br />#define WORD 32#define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整#define MASK 0原创 2010-09-29 17:08:00 · 8304 阅读 · 2 评论