今天是母亲节,首先,必须要祝我的妈妈节日快乐!
本来说写一篇关于面试的文章的,却一直拖着,现在三方已经到手,我也来总结一下我的面经
吧~
首先我必须要声明我的一个观点
所有不根据简历内容提问的面试官都是耍流氓。
我必须告诉我的学弟学妹们,如果有一个面试官问的问题问的问题,和你的简历完全没有关系,或者他根本就不看你的简历,那么相信我,这家企业你完全没有去的必要。
我不相信面试官这么做是因为看不懂你的简历,他肯定能看懂,他之所以不看,只是以为他们根本不在乎应聘者的专业素养如何,他们需要的,只是一个“写代码的”而已。
比如我面试过一家北京的企业,上来就问我会不会ASP
、.Net
什么的,我的简历上明明白白写着熟悉C/C++、Ruby语言,常用开发环境为Mac/Linux
,非得要我口头重复一遍么?面试官刚问这一句,我就已经对这家企业完全失去兴趣了。
不要太看重项目经历,专业知识相当重要
你说你不知道红黑树怎么建立,不知道图的几种最小生成树算法有什么区别,很多时候没关系,一般不搞ACM的人都不会(当然我也不会)。但是你连一个二叉树都写不明白,贪心算法的原理都说不清楚,就别怪面试官怀疑你的那些看起来牛逼轰轰的项目了。
当然,如果你的项目全是课程设计那些东西,这一点当我没说。
你的项目,你一定要懂
那种小组形式的课程设计,大部分由别人写的,你就敲了几行代码的的项目,就不要写到简历上了。
对于一个写到简历上的项目,至少下面几点你需要能毫不迟疑地说出来:
- 你为什么做这个项目;
- 这个项目用了什么技术;
- 通过这个项目你学习了什么技术;
- 完成这个项目你最终有什么收获。
写的是熟悉,但是不能只是熟悉
因为总结了前人在面试时的惨痛教训,很多人现在不在简历上写精通XX语言了
,都写熟悉OO语言
,但是,只是熟悉,真的是远远不够的。比如你写了熟悉C/C++、PHP语言
,当面试官问你这两个语言有什么区别时,如果你只能答出前者一般用来开发本地应用,后者一般用来开发Web应用
这种但凡听说过这两门语言都知道的东西,相信我,你还不如不写。
注意在适当的时候自荐
在技术面试的时候,有时候你觉得你某方面的技能对进入这家企业有帮助,而面试官又没有问到这个技能,你可以用一些方式,把话题转移到你擅长的这个技能上。如果面试官对你已经很满意了,这就属于锦上添花,如果面试过程不是很顺利,那这很可能就是一次翻身的机会。
比如我在面试FreeWheel的时候,算法题答的并不是很好,但是在面试的最后,在面试官没有主动问起的情况下,我主动要求说一下我关于RoR
的看法和以及对Ruby
语言的理解,因为我事先已经知道这家企业使用的就是RoR。所以,在其他问题回答地不是很好的情况下,能够最终获得FreeWheel的Offer,我觉得和我这段自荐经历是不无关系的。
努力让自己与众不同
不要一提到爱好就是看书唱歌音乐这些东西,如果面试官真的问到了这个,他肯定是想听一些不是那么普通的爱好,这点可能不是很重要,但是却是给面试官留下印象的好机会。
比如我在面试广州一家企业的时候,就提到我的课外爱好还有书法,面试官说现在还有能喜欢书法的孩子,真是很少见了。后面的交流,也是相当愉快的。我不敢说这一点给了我拿到Offer提供了多大的帮助,但是的确对后面的交谈起到了良性的催化作用。
让爱好变成特长
如果你爱好硬笔书法,那么请在所有需要手写的地方把字写好;如果爱好唱歌,那么最好能有拿得出手的获奖经历;如果你真的敢说的你的课外爱好就是编程,那么至少也得有一两个拿得出手的个人项目。
喜欢做
和能做好
是两码事。
~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~
1555(未完成)
:这道题的意思还是很好理解的,就是先给出一个人员名单,然后有几组针对这些人的投票,每一轮投票之后,如果最多的人的选票超过了一半,则输出这个人名,并结束;如果没有淘汰的人获得的选票数都一样,则输出所有未被淘汰的人的名字;如果不是上面两种情况,则票最少的人淘汰,投票给他们的人,选票按照顺序,在下一轮投给这张选票接下来没有被淘汰的人。
题意看似简单,但是其实有很多有猫腻的临界条件,跑了一下POJ上一个大神给的例子,都能过,但是在HOJ上始终是WA
,算了,直接放代码了:
#include <iostream>
#include <cstdio>
#include <string>
#include <memory>
#include <map>
using namespace std;
int main(){
int n, m, tmp;
while(scanf("%d", &n) != EOF){
int vote[1010][25], score[25], max, min;
string name[25];
bool flag[25], eql;
memset(flag, false, sizeof(flag));
for(int i = 0; i <= n; i++)
getline(cin, name[i]);
cin >> m;
for(int i = 0; i < m; i++){
vote[i][0] = 1;
for(int j = 1; j <= n; j++)
cin >> vote[i][j];
}
if(m == 1)
cout << name[vote[0][1]] << endl;
else if(m == 2){
if(vote[0][1] == vote[1][1])
cout << name[vote[1][1]] << endl;
else
cout << name[vote[0][1]] << endl << name[vote[1][1]] << endl;
}else{
while(true){
memset(score, 0, sizeof(score));
eql = true;
for(int i = 0; i < m; i++)
score[vote[i][vote[i][0]]]++;
if(n == 1)
cout << name[1] << endl;
else{
for(int i = 1; i <= n; i++){
if(!flag[i]){
tmp = i;
break;
}
}
max = min = tmp;
for(int i = tmp; i <= n; i++){
if(!flag[i]){
if(score[i] > score[max]){
max = i;
eql = false;
}else if(score[i] < score[min]){
min = i;
eql = false;
}
}
}
}
if(eql){
for(int i = 1; i <= n; i++)
if(!flag[i])
cout << name[i] << endl;
break;
}else{
if(score[max] > m / 2){
cout << name[max] << endl;
break;
}
}
for(int i = 1; i <= n; i++){
if(score[i] == score[min]){
if(!flag[i])
flag[i] = true;
}
}
for(int i = 0; i < m; i++){
if(flag[vote[i][vote[i][0]]]){
for(int j = vote[i][0]; j <= n; j++){
if(!flag[vote[i][j]])
vote[i][0] = j;
}
}
}
}
}
}
}