一、笔试
百度文库(趋势科技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=8;sizeof(a);在编译过程中,它不管a的值是什么,只是被替换成类型 sizeof(int); 结果为4.如果sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完sizeof(a=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是阻塞机制的吗?
[堆1] --> [堆2] -->[堆3] --> ...每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品.