2015趋势科技校招笔试面试

一、笔试

百度文库(趋势科技2015校园招聘笔试题)有很多原题,考的范围很广,计算机网络:协议,c++:继承、字节对齐、二维数组等等,总体一般,不深不浅。贴几道印象深的题:

1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?

答案:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.

2.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态在子类的空间里,有没有父类的这个函数,或者父类的私有变量 

答案:只要基类在定义成员函数时已经声明了virtual关键字,在派生类实现的时候覆盖该函数时,virtual关键字可加可不加,不影响多态的实现。子类的空间里有父类的所有变量(static除外)。  

3.构造函数可以为虚函数吗?

不能,构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。

4.常成员函数和非常成员函数可以共存吗?

可以,常量对象调用常成员函数

5.对于下列的程序片段,哪些表达式的结果为6?BC

int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i=1,j=2;

A.**(arr+3*i+j)  B.*(*(arr+i)+j)  C.*(arr[i]+j)  D.*(arr+3*i+j)

6.string str[]={"trend","micro","soft"};

cout<<sizeof(str)<<"   "<<sizeof(string)<<endl;//96 32

*sizeof 不是函数,也不是一元运算符,他是个类似宏定义的特殊关键字;sizeof()括号内在编译过程中是不被编译的,而是被替代类型,如 int a=8sizeofa);在编译过程中,它不管a的值是什么,只是被替换成类型 sizeofint); 结果为4.如果sizeofa=6);呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完sizeofa=6);a的值还是6,是不变的.

二、面试

面试真真是想吐槽一下,也不知道是趋势最近不缺人还是咋的,也有可能我第一个还没安排好流程,我报的是开发,一上来就安排了一个搞测试的,然后聊到一半正到重点被打断,接着换了一个据说来自最有钱的部门的技术经理,然后又重新开始,c++基础、继承、多态、内存分配机制,实现快速插入查找用什么数据结构最好,问得都挺简单的,让写了一个字符串替换的小程序(输入一个带有'\r\n'的字符串,将其中的'\r\n'全部替换为'\r',当时只傻傻的用两层循环实现);

回来后研究了下,可以转string实现:

 1 //用string的replace()或erase()和insert()

 2 const char* replace1(char *input){    

 3     string s=input;

 4     string src="\r\n";

 5     string dest="t";

 6     string::size_type pos=0;

 7     while((pos=s.find(src,pos))!=string::npos){

 8         s.replace(pos,src.size(),dest);//s.erase(pos,src.size());s.insert(pos,dest);

 9         pos+=dest.size();

10     }

11     char *end=new char[strlen(input)+1];

12     strcpy(end,s.c_str());

13     return end;

14     //return s.c_str();//error: s对象被释放

15 }

稍微难一点关于STL里面map底层是通过什么数据结构实现的?TCP是阻塞机制的吗?

C++STL底层数据结构实现 (重要,待研究) :
1.vector      底层数据结构为数组 ,支持快速随机访问 
2.list            底层数据结构为双向链表,支持快速增删 
3.deque       底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问。
deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下:
[堆1] --> [堆2] -->[堆3] --> ...
每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品.
 
4.stack        底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时 
5.queue     底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时 
(stack和queue其实是适配器,而不叫容器,因为是对容器的再封装) 
6.priority_queue     的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现 
7.set                   底层数据结构为红黑树,有序,不重复 
8.multiset         底层数据结构为红黑树,有序,可重复  
9.map                底层数据结构为红黑树,有序,不重复 
10.multimap    底层数据结构为红黑树,有序,可重复 
11.hash_set     底层数据结构为hash表,无序,不重复
12.hash_multiset 底层数据结构为hash表,无序,可重复  
13.hash_map    底层数据结构为hash表,无序,不重复 
14.hash_multimap 底层数据结构为hash表,无序,可重复 

你可能感兴趣的:(面试)