收集各大公司面试题集锦,让你从容应对各种笔试!
百度一面
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、C++和Java最大的区别是什么?
2、static、extern、global的作用?(再一次出现了static,上镜率真高挖~)
http://blog.csdn.net/hackbuteer1/article/details/7487694
3、inline内联函数是否占用运行时间?
思科二面:
1、进程和线程有什么区别?
2、进程的调度算法,把记得的全说出来
3、页面的替换算法都有哪些?
4、用户态和内核态的区别?
腾讯一面:
1、关系型数据库的特点
2、父类的析构函数为什么要定义为虚函数
3、float型变量定义为0时应该怎么赋值才是正确的
4、快排算法实现程序
http://blog.csdn.net/hackbuteer1/article/details/6568913
5、KMP算法实现程序
http://blog.csdn.net/hackbuteer1/article/details/7319115
6、override和overload的区别
腾讯二面:
1、在数据库中如何创建一个表
2、创建后如何添加一个记录
3、如何删除一个记录
4、请编写实现malloc()内存分配函数功能一样的代码。
5、请编写能直接实现strstr()函数功能的代码。
6、已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈, 问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
7、static的作用——再一次出现~
http://blog.csdn.net/hackbuteer1/article/details/7487694
8、写string类的构造,析构,拷贝函数——这题大约出现过4次左右,包括编程和程序填空,程序员面试宝典上有这题,也算是个经典笔试题,出现几率极大~
微软面试题:
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、写一个字符串插入的函数
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背包的一种变形;
1、实现一个atoi函数==>'注意正负号的判定'
2、翻转一个句子,其中单词是正序的==>两次旋转
3、二叉树两个结点中的最小公共子结点==>求长度,长度之差,远的先走,再一起走
4、三角阵中从第一行到最后一行(给出搜索方向的限制)找一个连续的最大和==>广度优先搜索√
5、实现一个STL中的vector中的尽量多的方法。