这个电面鄙视得真彻底。
别人都1小时,我半小时,根本没法聊下去,一问一个不会一问一个不会,一问一个只会一点。最后自己都没信心了,回问了个很没信心的问题:潜力股怎么样?
唉,看来这个基础太薄弱了,写写教训,好好准备吧。
1.简历项目那部分写得更具体一些,不然人都不知道你项目到底做了什么。
2.电面都是随机找的问题,根据职位的需求对你进行相应的提问。
3.什么都不懂是真的会紧张的,没话说。
题目要再往深问下去,肯定不止这个难度,这都是很简单的。。。
题目按模块来看:
1数据结构与算法
1.1 链表排序的最快速度?
基于“关键字比较”的排序在最差情况下的最少比较次数为O(n*log(n)),这是可以证明的。如果要达到线性复杂度的排序,一般都不是基于“关键字比较”的方法,通常会依赖于关键字的类型。如最典型的就是“基数排序”。
归并排序和堆排序都可以在最差情况下达到O(n*log(n)),但它们在一般情况下没有“快速排序”效率高。其中“归并排序”可以直接用于链表。
如果是双向链表,也可以用“快速排序”,不过要修改分界值的计算(因为不能随机访问序列了)和两个方向的游标关系的判断方法(因为不能使用索引或指针的比较了)。
1.2 10万个整数中取前100个最大的?
建一个100个元素的最大堆,之后其他的树拉进来比较,堆在这里比快排快是因为这100个堆内不要求全排,但是快排不一样,所以移动快一些
1.3 红黑树?特性、作用和应用场合?
平衡二叉树,实现比AVL简单,效率跟它接近,STL中set和map都是用自顶向下的红黑树实现,另外,linux内核中调度中也用到了红黑树
2多线程
2.1 父线程结束后,子线程会怎样?
return 的话整个进程结束,pthread_exit的话子线程继续
3编程语言
3.1 虚析构函数的作用?
为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
3.2 如何获得一个函数的地址?
int test(int a);
//显示函数地址
cout<<test<<endl;
//将函数test的地址赋给函数学指针fp
int (*fp)(int a);
fp=test;
cout<<fp(5)<<"|"<<(*fp)(10)<<endl;
//上面的输出fp(5),这是标准c++的写法,(*fp)(10)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题!
3.3 如何写交换两个数的函数?(简直侮辱智商了。。。)
补充一个c字符数组的:
char a[] = "nihao";
char b[] = "nihao/0";
char c[] = "nih/0ao";
cout << strlen(a) << endl; //5
cout << strlen(b) << endl; // 5
cout << strlen(c) << endl; //3
cout << sizeof(a) << endl; //6
cout << sizeof(b) << endl; //7
cout << sizeof(c) << endl; //7
看来strlen以/0为结束标志,在char数组中会自动加上一个/0。