百度2015商务搜索实习面试总结

日期:2014-10-21


今天去面试某Du的商务搜索实习生,是一个学弟给内推的。面我的是一个校友,问题问的很细致,基本就是在给我上课(我的基础相当不好),总之收获颇丰。

面试流程

自我介绍
写一个单链表排序函数;如果单链表节点存放数据较大该如何处理
Cpp vector 尾端插入元素复杂度,Java ArrayList 尾端插入元素复杂度
Java ArrayList, LinkList, TreeList 有什么区别
已知商场30天的销售记录,预估第31天的营业额
我的基础差到只能问我这些问题。可惜基本没回答道他满意。

对应解读
1.自我介绍
自我介绍就不用说了,但我描述的让别人感觉似乎我在学校做的项目都是被迫的,这点不太好,下次注意


2.单链表排序

我写的是这样的:

void bubblesort(Node* head)
{
        Node* ptr = head;
        int isChanged = 1;
        int tempData = 0;
        while (isChanged == 1)
        {
                isChanged = 0;
                while (ptr != NULL && ptr->next != NULL)
                {
                        if (ptr->data > ptr->next->data)
                        {
                                tempData = ptr->data;
                                ptr->data = ptr->next->data;
                                ptr->next->data = tempData;
                                isChanged = 1;
                        }
                        ptr = ptr->next;
                }
                if (isChanged == 0)
                {
                        break;
                }
                /*加上之后正确 ptr = head;*/
        }
}

回来运行测试了下,就完成了一遍冒泡。检查了下,发现内层循环结束,指针没回到头指针head处。修改之后,貌似是OK了。不知道算对么···

如果节点存放的数据较大,那么就交换链表的指向,就是逻辑上换个位置就行。


3.vector
vector 尾端插入元素复杂度是啥???我当时蒙住了,毕竟没怎么用过Cpp,想着如果是O(1)怎么可能问这个问题,就回答了不知道。回来查了维基百科,还真的是O(1)。给自己跪了Orz


4.Java的各种 List
这个我就直接说不会。平时就用到过 ArrayList,另外两个都没用过。


5.机器学习
我给他描述了一遍线性回归,很显然他要的不是这个单一的答案。当他问我代价函数到底表示什么,我就一直说是求得一个合适的theta,是的学习得到的曲线更符合想要的。总之就是吧线性回归的步骤都给他讲了一遍,最后还是他点到说求得的theta使得代价函数最小。同时告诫我以后看的时候自己动手画一画,把别人讲的消化掉。这点我确实没有做到。

总结
面试肯定是悲剧了,但他感觉人很好,等于是一直在给我指导。结束后他给了我一些建议:

把心态放低,端正学习的态度。
学好一门语言并熟练掌握,要明白你写的程序中,为什么用这个数据结构而不用同类的其他结构,相比之下有什么优缺点,各种操作的复杂度是什么,都要了然于胸。
离校招还有一段时间,可以在学校好好看看书。《算法导论》是要看的。
机器学习这方面,课程还继续跟着学,同时可以看看关于这方面的书,再有就是《概率论》、《最优化》,以及要了解一些分布式计算的内容(如Hadoop)。
感想
果然是深度不够,平常只会在各种API之间徘徊,确实要有一门核心技术作为支撑了。定下心,写程序多思考,再回归ACM刷题时代,看公开课的时候不用太急着拿证,一定要学到自己手里。


给自己一个目标,下次在有面试总结,上面出现的问题不能再有!时间还有,努力ing

你可能感兴趣的:(百度2015商务搜索实习面试总结)