2009笔试+面试总结(一)
十月份到现在参加了4个公司的笔试和面试,后天打算把三方协议签了,找工作就暂时尘埃落定了。开始专心复习之前,把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想,非原题目。
我面试的这4家IT公司,对于三点都非常重视。一个是基础知识,一个是运用知识,思考的能力,一个组织表达能力。按这三种分类记录下笔试和面试题目。
[基础知识]
考察基础知识,在笔试题目最常见,占比例也最大。
- 有n个节点的二叉树,其中有m个节点有两个孩子,问这棵树有多少颗叶子节点。
这题目其实是数据结构上的原题,不要被n迷惑了。
- 问这段代码输出什么?考察C++基础。
class A{ public: int x(){return 2;} }; class B : public A{ public: int x(){return 3;} }; int main(){ A *a = new A(); A *b = new B(); cout << a->x() << b->x() <<endl; return 0; }
类A中的函数x并非虚函数,所以不会发生动态绑定。
-
下列哪个表达式是错误的?
int a = 10;
1. (a++) += a;
2. (++a) += (a++);
a++其实是分三个步骤的:{tmp=a;++a;return tmp;}所以a++不能作为左值。
-
问下面的程序需要几次才能跳出循环?
unsigned int a =5; int b = 2; while ( a+b >= 0){ b--; }
C++中有符号和无符号类型之间的转换,要遵循一个原则:所定义的转换规则需要保护操作数的精度。比如long和unsigned int类型,只要机器上的long型足够表示unsigned int型的所有值,就将unsigned int转换为long型,否则,将两个操作数都转换为unsigned long。而对于包含signed 和 unsigned int型的表达式,其转换则是将signed型数值转换为unsigned型。如果此时将int转换为unsigned int,而int型数值恰好为负数,那这带来了副作用。此题就是一个例子。
-
union{
int i;
char x[2];
}a;a.x[0] = 8;
a.x[1] = 1;
问 a.i为多少?
首先要了解的是,数据在内存中的存储方式。比如一个int型数,4个字节,表示为ABCD,在内存其实是DCBA保存的。那么看这题,内存中保存的是:00001000 00000001 00000000 00000000.根据上面的规则,那么用int来读取这段数据,即为00000000 00000000 00000001 00001000,即264.
-
map,set,hashmap和multimap,有个与其他三个数据结构不同的是哪一个?
hashmap,采用和其他三种都不同的方式。
-
如果一个数列中的元素距离他们各自最终的位置都很近,那么哪一种算法最省时间?(直接插入,堆排序,快速排序,选择排序)
我感觉是直接插入排序,当然还需要测试。
-
const char *和char * const 的区别。
const char *p;结合的方式是自右向左。所以p首先是个指针,然后个char型指针,然后他指向的是个const,此时,p本身的值可以改变的,但是不能通过p来修改p所指向区域A的值,但A可以通过其他指针修改。同理,char * const p,p首先是个const对象,之后才是指向char型的指针,此时p本身是不能修改的。
-
问下面的结果?
char a = 50;
int i = sizeof( a = (a+205));
问 i 和 a各为多少?
i为1大家都可以看出来,但a为多少相信就不是那么容易答对了。答-1的算好的,说255的就可以回去看计组了。sizeof(A)是个大难点,尤其是A如果是struct类型的时候。此题中,sizeof(A)的值其实是在编译阶段就已经确定了,所以根本没有运行a = a+205 这一步。在编译完成后,这句就相当于int i = 1;
- 计算机网络单播,组播,广播的区别。路由器和交换机的作用和原理。ARP协议的内容,以及其他相关的PPPOE协议的知识。
- 修改错误的代码:快排和堆排序。这完全的基本功了,为了面试,多练习在纸上写程序吧。
类似的题目还有很多。这些题目如果不能拿分的话,给面试官的印象会很不好。这几次面试的时候,面试官手里一般都是我的笔试试卷 + 面试评分单。面试官都会拿我的基础题目说,为什么这道题目都不会?所以把握基础题目至关重要的。
计算机本身是门实践性更强的学科,所以如果平时不怎么编程,是很难发现自己的问题和未知的领域的。tencent的笔试题目考得很细很深,平时不上机code的同学可能很难会想到所考的知识点; 而遇到问题时不刨根问底或者得过且过,则会造成更大的遗憾。const char *和char * const的区别,内存的分配方式和管理方式,内存泄漏等等,平时感觉到有一丁点疑惑时,问题的背后一般藏有更多你不了解的;还有一点也很重要,像PPPOE并不是在书上,但是大家听说的就比较多了。应该及时的去了解这些前沿领域(虽然PPPOE不算前沿),保持对本专业发展方向的敏感,扩大自己的视野。
看完了^.^,如果觉得这篇文章对你有用或者有
问题,请留言告诉我,thank you !
文章为原创的话,转载请注明出处.不敢流泪-《2009笔试+面试总结(一)》
4 Comments are ready?
PPPoE是PPP over Ethernet吗?
[回复]
boluor 回复 于 十一月 5th, 2009 at 13:55
是的呀。
一些智力题目还在写 ^/^
[回复]
就没有一些有意思一点到智力题目?
[回复]
我靠,看了这面试题我郁闷啊,我平时考试就怕那种考细节的题,尤其是像第3-5那种题目。郁闷了,以后好好学基础。
很喜欢看看你的blog,写的很实用~~~
[回复]
boluor 回复 于 一月 28th, 2010 at 15:22
趁着寒假,多看看书,多写点程序吧。离你们找暑期实习也就3个月了。
[回复]
叶雁秋 回复 于 一月 29th, 2010 at 15:34
恩,我现在还没回家,还在学校呆着在,在看驱动开发的书,看的是一头雾水啊,你有什么好的建议没,我由于初学,实在不知道看什么书好,现在在看一本叫”寒江独钓“的书,但是感觉不够基础,看看你知道什么比较基础的书没有,或者你帮我请教下你周围的强人也好啊~~谢谢了·~
[回复]
boluor 回复 于 一月 29th, 2010 at 16:06
你想找什么样的工作?哪个领域?先确定了这些再去看书。
需求决定动力和效率。
[回复]
叶雁秋 回复 于 一月 29th, 2010 at 22:19
我现在申请了一个科研立项,需要做的是驱动级的加密文件系统,所以需要学驱动知识,其实我现在是希望多涉猎点儿东西,毕竟我不像你们,有那么多基础,我现在还停留在广泛涉猎的基础上。不过你说的问题我也是得考虑了,我会好好想想的,想好了再请教你哈~~~~~~~~~
[回复]
学习了,收获不少,自己的基础还很差。。
[回复]