内推申请时间:2014年7月15日
面试时间:2014年8月2日
结果:悲剧了
注解:斜体表示是面试官问的问题
申请了内推以后,等了将近半个月的时间,就在以为没有消息的时候,电面降临了。
当时和女朋友、同学一起在帝都郊外自驾游中(当然当时我是个乘客),电话就在这个时间来了。
早晨9点左右,我在车的后面坐着,路上还算安静。
项目相关的事情:
1.你做的哪个项目比较有难度,对你有挑战,你是如何解决的?
a.我觉得比较有挑战的就是XXX项目,那个项目是从申请、制订计划、开发到最后的整理论文和文档,都是自己全程参与的,责任和压力相对来说大一些。
b.本来以为项目是php后端开发的,但是这次需要一个比较好的演示效果,因此需要做一个基于bootstrap的前端界面,这对于我来说是一个新的,从未接触的内容,因此从时间的角度来说,难度和压力算是比较大的,好在最后解决了。
总结:这个地方准备的不好,一直没有当回事,一般都会通过这种方式来确定一个需要主要发问的项目,回去好好准备一下,顺便改改简历吧。
2.介绍项目的内容和框架,10人的团队分工是怎样的
a.整个项目分为三个部分,blabla,介绍了一下整体的内容
b.介绍我这负责部分的内容,采用相关的算法,面试官问我算法采用的什么模型,我忘了。
c.我就说我是项目负责人,是这个模块的负责人
总结:我在介绍的时候有点问题,就是把项目说的太简单了,太谦虚了,虽然项目确实不咋地,但是就按照我这么说的话几乎是不占什么优势的,以为我这就是个CURD的转存数据库的东西(其实本来就是)。后来,其中他问我了说你这个算法采用的是什么模型,我说地含含糊糊,说是模型是在论文上写的,现在有点忘记了,唉,对于这个项目的准备实在是太草率了,这可是要主要说的项目啊
3.你们项目中的squid,memcache,nginx是怎么使用的
电话里面试官一直说什么squid我都没听懂,这说明我对自己的项目是得多么地不熟悉哈。我最后说我们项目里的数据量没有达到很大,最后varnish和squid都没有用上,只是配置了。这些对话更加深了面试官对于我“仅仅是配置”的工作内容的判断。
技术方面:
1.如何查看某个进程占用的内存
我不会,然后我就说了个用ps 加上某个参数肯定可以,但是我忘了是什么参数。我嘴贱然后又说了free,结果人到时候问我free这个命令是干什么的,我又说的特别含糊。就用top吧,可以实时查看
相关的链接在这里:http://www.cnblogs.com/gaojun/p/3406096.html
2.栈的特点,stl里面的栈是怎么实现的?实现一个最大栈,如何设计测试的数据
第一问很简单,我就说是Lifo,我以为就这样简单地完了,后面我傻呵呵的说了只要实现相应的方法,pop,top,empty之类等等的。最后我补了一句,简单的int类型的可以使用一个数组和游标来模拟一个栈。
第二问,我说我不懂,他说没关系,唉。
http://blog.csdn.net/mdl13412/article/details/6647793
看了这篇博客,我感觉他其实是想问的有两点:
1.stl的stack内部是用deque来实现的
2.内部数据的形状如下:
-
// 栈底 当前栈顶 预留的内存边界
-
// ↓ ↓ ↓
-
// --------------------------------------------------------------------
-
// | | | ...... | | | | | | | | ...... | | | X |
-
// --------------------------------------------------------------------
添加修改版--来自C++ Primer
stl里面的stack是一种容器适配器,属于一种适配器(容器适配器,迭代器适配器,函数适配器)
其他容器适配器还有queue,priority_queue两种
第三问就是所谓的算法题了。我在剑指offer上看到了,心中窃喜,直接答了说用一个辅助栈来维护最大值,当大于等于的时候就把元素也推到辅助栈里。
这没有完,面试官让解释为什么等于要这么处理,我在车上回答的特别慌乱,而且本身也不善于在这种情况下思考。面试官引导我说你已经把关键字说出来了,就差组成一个完整的句子了,说如果这种你不能坚持去思考解决问题,我怎么敢雇你呢。最后冷静了一下,坚持把这个说完了。
他又发问,那么假设这个数组重复元素非常多的话,这种方法是非常没效率的,怎么来解决呢?我说用hash表来存储元素和次数,这样重复的元素就不用忘里面放而占用时间了。
然后问我c++里哪些容器是实现hash表的,我说了map和unordered_map。他说你这个地方用这么复杂的数据结构没有必要。
然后我说可以用一个struct来表示这么一个结构,作为辅助栈里存放的元素,但是他说这样还是不好,然后我就想不出来怎么办了。
第四问,我就搞了一些说什么输入的数据直接溢出(面试官搞了半天没搞懂),重复非常多的数据,空值之类的,我感觉他不是很满意
测试用例的面试官问的意思我完全给miss了,附上剑指offer上的原文:
1.新元素的比之前的最大值小
2.比之前的最大值大,应该还有等于的时候的处理
3.弹出的是最大的元素
4.弹出的是不是最大的元素
{主要是没搞清楚要问的啥}
把我自己写的答案附上吧:
template <typename T>
class simplePair{
public:
int val;
int count;
simplePair(int x) : val(x), count(1) {}
};
template <typename T>
class maxStack{
public:
void push(const T& val) {
if(assistant.empty() || val > assistant.top().val){
simplePair<T> pair(val);
assistant.push(pair);
}
else if(val == assistant.top().val)
assistant.top().count += 1;
data.push(val);
}
size_t size() {return data.size();}
void pop() {
if(data.empty()) return;
const T cur = data.top();
if(cur == assistant.top().val){
assistant.top().count -= 1;
if(assistant.top().count == 0)
assistant.pop();
}
data.pop();
}
T max(){
if(data.empty()){
T tmp;
return tmp;
}
return assistant.top().val;
}
size_t assistant_stack_size(){
return assistant.size();
}
private:
stack<T> data;
stack<simplePair<T> > assistant;
};
最后:
后来问了问我想去哪个bu,说为什么要报测试开发这个职位。这些就不详细说了,都是自己随便扯的。
总结:但是事实证明,如果能把这个问题好好准备一下,也能留下好印象的,只是我实在是太2了,准备的时候还是没多想,就是傻呵呵的看面试宝典了,看那感觉基本都没啥用。
他说我的问题问完了,下面你问我一个问题吧:
我问了说如果有机会的话今年能去实习么?他答说如果拿到offer的话自然是可以的,但是我没有了。
准备的时候还是要有条不紊,不急不躁,相信等待是一个人最需要拥有的品质,而我正在一边练习一边实践之中,just waiting for a chance.