3月26号下午电话面试,过了三天,收到了reject的回复,虽说一开始并没有多么想去阿里,但是被reject了多少还是有点伤心,回想面试的过程,被拒绝也是理所当然的事,想写点东西记录一下,整理整理还应补补什么方向,做个大致规划吧。
面试中问到的部分内容
一、C++STL库中,map类型的实现方法
当面试官问到这个问题的时候,其实我还是挺庆幸的,因为之前在看 map
和 unordered_map
的区别的时候,偶然看到CSDN博客上,有人写着 map
主要是用哈希表的方法来实现的,于是很自信的回答了HR,HR也没说什么,只是很自然的跟我聊了聊哈希表的实现方法。这个我更开心了,因为之前考研的原因,对于哈希表的感觉似乎是已经掌握得非常好了。
然而还是太天真了,当HR问了一句,如果这个哈希表要扩容,该怎么办?突然懵了,触及了我的知识盲区。数组的扩容还比较清楚,简而言之就是当数组内存不够的时候,扩展为当前的两倍,当数组内存的使用小于当前数组长度的1/4时,数组长度缩短为当前的一半。但是哈希表呢,常用的哈希函数是采用除留余数法的方法,那么除留余数法的被除数和哈希表的长度息息相关,如果要改变哈希表长度的话,除留余数法便是个障碍。
之后,HR跟我说了,实现map的主要方法是红黑树而不是哈希表,好尴尬…(以后再也不信CSDN了…
二、虚函数表
这个东西似乎很久之前在学习C++的时候看到过,但是也没怎么注意过,就完全答不上来了。
三、C++STL库中,sort类型的实现方法
我又膨胀了,又仗着这几天用的多,自以为是了。
在coursera中,普林斯顿大学的算法课上,老师提到了在java中的sort函数主要由快速排序来实现,然后我就又给HR说是快排了。虽然在c++上主要是快排没错,但是快排在序列基本有序的情况下效率不高,这点在c++中肯定会有所注意,所以c++的sort主要是快排,但实际上更加复杂,具体还得再查查,但也说明了一个问题,课上要好好听课,下课还得自己动手去完善和补充,去更深入的挖掘知识。
还需补的知识
一、C++
C++的学习不能止步于会用,还应该去知道它的每个函数甚至每条语句是怎么实现的,了解每个函数的时间和空间复杂度,深入了解分析C++的运行效率,这样才可以更好的去运用它们。
二、数据结构与算法
本以为这块在经历了考研以后应该很稳了,这次面试让我恍然大悟,我所知道的不过是冰山一角,这一块还有许多值得深挖的地方。
三、计算机网络、数据库、操作系统等
作为半道出家,跨专业的我,在这些计算机基础知识方面还很欠缺,HR一看简历就知道我在这些方面比较薄弱,干脆都不问了…
四、设计模式
在项目中,确实存在许多不合理的地方,当项目大了,会有些麻烦,多人合作的时候,设计模式的重要性更加突出,趁着这学期有课,好好学习设计模式。
结语
时间很紧,还需抓紧时间学习,望能收到理想中的offer。