本树于公元2014年8月29号上午10点半面试的百度NLP,职位是情感分析。面试过程就不多提了,只能说让本树汗颜羞愧不已,看来本树真的要好好提升下自己的姿势水平了。在此对面试中所遇到的题目做一个简单梳理。
----------------------------------------------------------------------------------------------------------------
题目1:描述以下两行代码的区别
int a[1000];
int* p = (int *)malloc(1000);
回答这道题目的时候,我说前者是定义了1000个整数,大小为4000个字节,而后者只是开辟了一块1000个字节的大小,如果想让后者的大小与前者相同,应该写为int* p = (int *)malloc(1000*sizeof(int))。于是面试官接着问我还有什么区别,我当说想不起来了。面试官就问我知道堆栈的区别么,我做恍然大悟状说前者是定义在栈中的,而后者是定义在堆之中的。于是面试官接着问我知道calloc么,我说不太熟悉。然后面试官就没有接着往下问calloc的东西了,不过面试官又提到了操作符new int[1000],问我new int与前者malloc的区别在哪里,我只说记不清楚了,面试官接着问我malloc如果分配错误,会返回什么,我说是NULL,然后他又问new int如果分配错误又会返回什么呢,我当时瞎诌说是void *,后来翻了翻C++的书籍才发现会抛出错误异常。
更多相关的知识见博文http://blog.csdn.net/wusecaiyun/article/details/38949487
----------------------------------------------------------------------------------------------------------------
题目2:怎么确定两个链表交叉并进而确定交叉点的位?
题目的解答以及相关扩展题目见博文http://blog.csdn.net/wusecaiyun/article/details/38961559
----------------------------------------------------------------------------------------------------------------
题目3:要求写出快速排序的代码
见博文http://blog.csdn.net/wusecaiyun/article/details/38961105
----------------------------------------------------------------------------------------------------------------
题目4:const int *p与const * int p的区别
见博文http://blog.csdn.net/wusecaiyun/article/details/38948851
---------------------------------------------------------------------------------------------------------------
题目5:static的所有用法
---------------------------------------------------------------------------------------------------------------
题目6:下面的程序代码会执行if还是else
int a=2;
int b=5;
if(b&a>0) {
} else {
}
题目6主要考察的是运算符的优先级以及位运算,我当时的回答是2的二进制表示为00000000 00000000 00000000 00000010,而5的二进制表示为00000000 00000000 00000000 00000101,因此将2&5结果为0,故执行else。当时我回答完,面试官还让我考虑以下,是不是要注意下优先级什么的,我当时肯定了我的回答,等到回来在电脑上编写代码之后,才知道自己当时回答的是错误的。因为逐位与操作符优先级要低于>、>=、<、<=等比较操作符,故先运算a>0,返回1,然后将1与b逐位与,得到1。故会执行if。
---------------------------------------------------------------------------------------------------------------