各大IT公司校园招聘程序猿笔试、面试题集锦

百度一面

1、给定一个字符串比如“abcdef”,要求写个函数编程“defabc”,位数是可变的。这个比较简单,我用的是strcpy和memcpy,然后他问有什么优化的办法,我就不知道了。
2、socket过程就是socket的server和client整个流程写下来,这个还是没啥问题的。
3、数据结构二叉树的遍历,给了个二叉树,前序、中序、后序写出来,这个没什么难度。
http://blog.csdn.net/hackbuteer1/article/details/6583988
4、树的层次遍历,这个开始真忘了,想了半天才想起来用队列。然后他又让我详细写出入队出队的过程,总之还是搞定了。
5、两圆相切转圏问题——一个小圆半径是1厘米,一个大圆半径是5厘米,小圆沿着大圆转圈,请问要转几圈可以转完大圈?这个问题在行测题做过,就是公转自转的问题,不管大小圆半径是多少,外切转圏要转R/r+1圏,外切转圏转R/r-1圈。


百度二面

1、二叉树的前序遍历的递归和非递归的可执行程序
http://blog.csdn.net/hackbuteer1/article/details/6583988
2、写出快速排序的实现代码,一个是字符串拼接函数的实现strcat(),还有大数相乘,都是基本题。
3、归并排序的实现。
http://blog.csdn.net/hackbuteer1/article/details/6568913
4、文件按a~z编号,aa~az,ba~bz...za...zz...aaa...aaz,aba~abz...这样的方法进行编号。给定任意一个编号,输出文件是第几个文件。并写出测试方法。简单,把编号看成26进制,这题就是一个十进制和26进制的进制转换问题了。
5、编程:两个链表,按升序排序,合并后仍按升序,不准用递归,并求复杂度

百度电面:

1、谈谈你对数据库中索引的理解
2、现在普通关系数据库用得数据结构是什么类型的数据结构
3、索引的优点和缺点
4、session、cookie和cache的区别是什么
5、如果有几千个session,怎么提高效率?
6、session是存储在什么地方,以什么形式存储的?

新浪技术部笔试题

一、数据结构和算法
1、简述什么是hashtable,如何解决hash冲突
2、什么叫二叉树,满二叉树,完全二叉树
4、数组和链表有什么区别,分别用在什么场合

二、操作系统
1、什么叫虚拟内存
2、块设备和字符设备有什么区别
3、进程和线程的区别
4、简述TCP网关连接交互细节

三、Lunix
1、写出10个常用的linux命令和参数
2、如何查看磁盘剩余空间                 df -h1
3、如何查看端口是否被占用        
4、如何查看某个进程所占用的内存        用ps命令查看进程的内存

四、程序题(具体题目记不太清了)
1、用两个线程实现1-100的输出
2、把一个文件夹中所有01结尾的文件前十行内容输出





思科一面:

1、C++和Java最大的区别是什么?
2、static、extern、global的作用?(再一次出现了static,上镜率真高挖~)   
http://blog.csdn.net/hackbuteer1/article/details/7487694
3、inline内联函数是否占用运行时间?

思科二面:
1、进程和线程有什么区别?
2、进程的调度算法,把记得的全说出来
3、页面的替换算法都有哪些?
4、用户态和内核态的区别?
5、平面上N个点 没两个点都确定一条直线 求出斜率最大 那条直线所通过 两个点 斜率不存在 情况不考虑 时间效率越高越好
解法:先把N个点按x排序。
斜率k最大值为max(斜率(point[i],point[i+1])) 0<=i<n-2。
复杂度Nlog(N)。
以3个点为例,按照x排序后为ABC,假如3点共线,则斜率一样,假如不共线,则可以证明在AB或BC中,一定有一个点的斜率大于AC,一个点的斜率小于AC。










腾讯一面

1、关系型数据库的特点
2、父类的析构函数为什么要定义为虚函数
3、把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。  (比较难)
4、快排算法实现程序
http://blog.csdn.net/hackbuteer1/article/details/6568913
5、KMP算法实现程序
http://blog.csdn.net/hackbuteer1/article/details/7319115
6、override和overload的区别
7、编程并实现一个八皇后的解法
8、链表的归并排序

腾讯二面:
1、在数据库中如何创建一个表
2、创建后如何添加一个记录、删除一个记录
3、编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配。   (比较难)
4、请编写实现malloc()内存分配函数功能一样的代码。
5、请编写能直接实现strstr()函数功能的代码。
6、已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈, 问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
7、static的作用——再一次出现~
http://blog.csdn.net/hackbuteer1/article/details/7487694
8、写string类的构造,析构,拷贝函数——这题大约出现过4次左右,包括编程和程序填空,程序员面试宝典上有这题,也算是个经典笔试题,出现几率极大~





微软面试题

微软面试题汇总  http://www.cnblogs.com/qlee/archive/2011/09/16/2178873.html
1、给你一个凸多边形,你怎么用一条线,把它分成面积相等的两部分
2、有一条数轴,上有一整数点s,点s两侧分别放了两个机器人,不知道两个机器人分别距离s的距离,两机器人不能相互通信。
现在,给你以下指令:
R(往右一格)
L(往左一格)
IF(S)是否在S点
GOTO A,跳到A代码段。
设计一套指令给两个机器人,让两个器机可以最终在某一点相遇。
3、怎么判断两棵二叉树是否是同构的
4、按层次打印一个二叉树
5、给你一个数n(最大为10000),怎么求其阶乘
6、判断两个单链表是否有交叉





58同城面试题

一面:
1、set(底层基于红黑树实现)的操作;
2、手写快排递归与非递归实现;
http://blog.csdn.net/hackbuteer1/article/details/6568913
3、KMP原理解释
http://blog.csdn.net/hackbuteer1/article/details/7319115
4、聚类分类协同过滤算法;

二面:
1、提示词实现Trie树+hash
2、最快速度求两个数组之交集;
3、文章最短摘要生成;


网易有道

1、试着用最小的比较次数去寻找数组中的最大值和最小值。
解法一:
扫描一次数组找出最大值;再扫描一次数组找出最小值。
比较次数2N-2

解法二:
将数组中相邻的两个数分在一组, 每次比较两个相邻的数,将较大值交换至这两个数的左边,较小值放于右边。
对大者组扫描一次找出最大值,对小者组扫描一次找出最小值。
比较1.5N-2次,但需要改变数组结构
 
解法三:
每次比较相邻两个数,较大者与MAX比较,较小者与MIN比较,找出最大值和最小值。


迅雷面试题

1、写一个字符串插入的函数
2、问了我关于虚函数底层的实现
http://blog.csdn.net/hackbuteer1/article/details/7883531
3、写了快排、堆排
http://blog.csdn.net/hackbuteer1/article/details/6568913
4、问我TCP、UDP的一些知识
http://blog.csdn.net/hackbuteer1/article/details/6845406
5、还问了我一些Linux的知识
6、让我实现红黑树的删除操作
http://blog.csdn.net/hackbuteer1/article/details/7760584





网新恒天一面

1、考察指针int  (*p)[10]和int *p[10]的区别,用法
2、sizeof(),strlen()的区别和用法
3、堆、栈的区别和用法
4、多继承的优点与缺点
5、(1)IO2:30ms, CPU 20ms, IO1 20ms, CPU 30ms

   (2) IO1 20ms, CPU 20ms, IO2 10ms

   (3) CPU 30ms, IO1 20ms

   求三种情况的CPU和IO占用率


网新恒天二面:
1、内联函数与宏的区别
2、与信号量相关知识的考察,具体题目记不清了,反正知道基本概念就会做
3、填空,考察页式虚拟内存的缺页情况,也是知道这部分知识点就会做的题
4、类的继承相关知识点的考察,是一道程序输出分析题
5、栈的类的成员函数的实现,程序填空题。
6、模板函数与函数模板的区别
7、函数模板与类模板的区别








百度笔试题

1、数组,链表的优缺点:这个问题比较简单不过我自己经常会忽略的一点是数组是固定空间,链表是可变空间
2、a[N][20]输入N个长度不超过20的字符串,比较这些字符串中是否有完全相同的字母,且相同字母数是否相等。如何改进该算法,降低复杂度。
3、猜扑克牌——给定一些牌,把花色告诉,把点数告诉乙
              甲:我不知道 乙:我知道你不知道
              甲:现在我知道了 乙:我也知道了
  求是哪张牌。
  给定的牌我不记得,反正这个题很简单,行测中的简单题,网上比比皆是。
4、A:M*M矩阵,求字符串S是否存在A的连续对角线上。(这题应该有涉及到一个之字二维矩阵方面的知识)
  A若为内存装不下的大矩阵该如何处理?
5、系统接收数据包32字节,第1字节为优先级,其余为数据。设计一个调度算法
  (1)优先级高的先处理
  (2)同等条件下,请求次数多的先处理
  (3)优先级高的一定比优先级低的先处理
   写出所用的数据结构的定义,计算空间容量。







阿里巴巴B2B一面

1、各种排序算法的比较次数
2、static、auto未初始化的初始值
http://blog.csdn.net/hackbuteer1/article/details/7487694
3、x*=y+8,给出x,y的值,求该表达式计算后二者的值
4、enum类型的default赋值规则
5、定义函数F(int x){return (x*x);} 求F(3+5)
6、fgets(s,n,f)函数的功能
7、定义*s="ab\0cdef",输出该字符可以看到什么结果
8、还是static相关知识——在此说明一下static这个关键字相当重要,在笔试中出现率为100%,在面试中出现率为50%。
9、数据库中索引,簇索引,非簇,唯一,复合,覆盖索引的区别
10、SQL语句和范式是对数据库有要求的公司笔试必考点之一


阿里巴巴B2B二面
1、通配符的含义
2、死锁的基本知识——死锁是各大笔试面试中出现率50%的知识点
3、信号量P、V原语的相关知识点
4、有向图的邻接表表示
5、STL中迭代器的工作原理,迭代器与普通指针有什么区别?

迭代器和指针相同的地方
1、指针和iterator都支持与整数进行+,-运算,而且其含义都是从当前位置向前或者向后移动n个位置
2、指针和iterator都支持减法运算,指针-指针得到的是两个指针之间的距离,迭代器-迭代器得到的是两个迭代器之间的距离
3、通过指针或者iterator都能够修改其指向的元素
通过上面这几点看,两者真的很像,但是两者也有着下面的几个不同地方
1、out操作符可以直接输出指针的值,但是对迭代器进行在操作的时候会报错。通过看报错信息和头文件知道,迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。
2、指针能指向函数而迭代器不行,迭代器只能指向容器
这就说明了迭代器和指针其实是完全不一样的概念来的。指针是一种特殊的变量,它专门用来存放另一变量的地址,而迭代器只是参考了指针的特性进行设计的一种STL接口。
笔者曾在网上看到这样一种说法:迭代器是广义指针,而指针满足所有迭代器要求。迭代器是STL算法的接口,而指针是迭代器,因此STL算法可以使用指针来对基于指针的非STL容器进行操作。
笔者觉得上面说法也有几分道理,但是到底正不正确就留给看官自己判断了。但是有一点希望大家注意的是:千万不要把指针和迭代器搞混了。也许某些编译器使用指针来实现迭代器以至于有些人会误以为指针和迭代器是一个概念来的。


6、什么是友元?
7、delete、new的用法
8、typename的用法
9、编程判断一个数是否为2的幂
10、你怎样重新改进和设计一个ATM银行自动取款机?
12、10000Mbps万兆交换机怎么实现?
13、操作符重载的相关知识点,大题,具体记不清了





人民搜索的笔试题

1、打印汉诺塔移动步骤,并且计算复杂度
2、计算两个字符串的是否相似(字符的种类,和出现次数相同)
3、定义二叉树,节点值为int,计算二叉树中的值在[a,b]区间的节点的个数
4、动态规划题:一条路有k可坑,每次能跳平方数步长(1 4 9  16。。),不能跳到坑里,从a跳到b最少几步?
5、给一个整数数组,求数组中重复出现次数大于数组总个数一半的数。

 


1、对以孩子兄弟链接的树进行遍历,不能用递归,也不能借助任何辅助空间
2、假设数组B是升序Int数组A循环移若干得到的位,实现对数组B进行查找的高效算法
3、只有整数和+-*/四种运算组成的算术表达书,实现其求值
4、还有一个是考贪心算法的,你让他们看算法导论那本书,关于fractional knapsack problem的那一段,就是0-1背包的一种变形;
5、链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
6、求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)



 
1、实现一个atoi函数==>'注意正负号的判定'
2、翻转一个句子,其中单词是正序的==>两次旋转
3、二叉树两个结点中的最小公共子结点==>求长度,长度之差,远的先走,再一起走
4、三角阵中从第一行到最后一行(给出搜索方向的限制)找一个连续的最大和==>广度优先搜索√
5、实现一个STL中的vector中的尽量多的方法。
6、字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小。
/**  
** author :hackbuteer
** date   :2012-10-03   
**/ 
void Arrange(char *str , int n)
{
	int i , k = n-1;
	for(i = n - 1 ; i >= 0 ; --i)
	{
		if(str[i] != '*')
		{
			if(str[k] == '*')
			{
				str[k] = str[i];
				str[i] = '*';
			}
			--k;
		}
	}
}
7、说说outer join、inner join、left join、right join的区别是什么?
内连接:进行连接的两个表对应的相匹配的字段完全相同的连接。join

外连接又分为左外连接和右外连接。
左连接即LEFT OUTER JOIN:
两个表进行左连接时会返回左边表中的所有的行和右边表中与之相匹配的列值没有相匹配的用空值代替。

右连接即RIGHT OUTER JOIN:
两个表进行右连接时会返回右边表中的所有的行和左边表中与之相匹配的列值没有相匹配的用空值代替。


我们建立两张表,students、class并插入测试数据
students
---------------------------
id     name     classId
1      name1    1
2      name2    null
3      name3    2
---------------------------

class

-----------------------
id       name
1        class1
2        class2
3        class3
-----------------------


实验结果如下:
mysql> select s.name,c.name from students s join class c where s.classId=c.id ; (注:inner join和join一样)
+-------+-------+
| name  | class |
+-------+-------+
| name1 | 1     |
| name3 | 2     |
+-------+-------+
2 rows in set

mysql> select s.name,c.name from students s left join class c on s.classId=c.id ; (left join 和 left outer join 一样)
+-------+-------+
| name  | class |
+-------+-------+
| name1 | 1     |
| name2 | NULL  |
| name3 | 2     |
+-------+-------+
3 rows in set

mysql> select s.name,c.name from students s right join class c on s.classId=c.id ; (right join 和 right outer join 一样)
+-------+-------+
| name  | class |
+-------+-------+
| name1 | 1     |
| name3 | 2     |
| NULL  | 3     |
+-------+-------+
3 rows in set


你可能感兴趣的:(数据结构,算法,数据库,面试,招聘,阿里巴巴)