Skip to main content

写在百度电面后

· 10 min read

Desperado.

road to the sky

睡得昏昏沉沉的早上,突然接到了电话,在从惊呆到真呆中,就这么面完了百度。


“先作下自我介绍吧!” 自我介绍?天,简历里面不是写了吗?噢,我写了什么? “呃,我叫XXX,是电子科大电子信息工程的大四学生...呃,我喜欢互联网及互联网开发…最近一直在自学…嗯。” “完了吗?” “说完了。” 当时我就在想,完了。脑袋空白。

“电子信息工程的是吗?那你先解释下傅里叶变换吧。” 简直惊呆,我这是面的前端吗?第一个问题就这么脑子转不过来了,都好久没有看专业书。 “嗯,有个复杂信号…呃经过傅里叶变换...分解...单频率信号...嗯...” 七零八落我也不知道我说了什么。

“CSS的优先级知道吗?解释一下。” “呃,是特指度?先是ID,然后是class,然后是标签名....” “确定最后是标签名吗?” “呃嗯...确定。” 虽然最后是对了,但是答得很是不自然。

“嗯,如果这有一个数组,我想删除数组中的重复元素应该怎么做?” 啊,WTF,居然问了算法。曾经想过这个思路的,但是已经好久没有写过C,而且这还是用JS实现。可是我JS的书都还没有看完。 “呃,数组嘛,那就从第一个开始依次遍历咯…有重复的话就标记。” “每个都遍历一遍?如何标记?时间复杂度如何?” 哎,为了看前端的东西,算法好久没有碰过,我要说什么…… (更新: 面试的时候对JS不是很熟悉,还是按着原来写C的思路来处理数组,加上心里有点紧张,思路一时打不开。最近几天又继续啃了《JavaScript高级程序设计》,发现 JavaScript 在数组方面处理真心很强大,贴去除数组中重复元素的函数如下:

function uniqueArray (array) {
var result = [];
array.sort(compare); // 此处不知道如果数组中元素很多的话,先给数组排序效率会不会高点?
for ( var i in array ) {
if ( result.indexOf(array[i]) == -1) {
result.push(array[i]);
};
}
return result;
}
function compare (value1, value2) {
return value2 - value1;
}

)

“学过排序吗?介绍下二分法?快速排序?冒泡排序?” “只学过冒泡…冒泡就是这样的……”

(更新:一个非常好玩的各种排序算法的动画演示,当初学算法的时候要是有这么直观的动画就好了。 快排的思想如下:

(1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0]; //取得基准元素的值
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right)); //递归调用
};

快速排序最差的情况时间复杂度是O(n^2)。

“我看你笔试试卷上JS异步编程那题写了点代码,那么解释下Ajax?" 噢,真是哪壶不开提哪壶。真是惭愧,笔试试卷上的代码是我考试时候翻手机里那本《JavaScript权威指南》,在里面随便抄了一点。我写了什么?我也不知道。 昨晚才真正在图书馆接触到了Ajax,书还没来得及认真看。只能凭靠记忆力一点点说。 “Ajax嘛,异步JS和XML…可以在不重新加载整个页面情况下更新页面的某个部分……” “那么如何用JS实现Ajax?” 噢。昨天看书才看到这点,还没有实现过。 “呃…新命名一个变量(其实是对象)XMLhttprequest……然后接收服务器返回的数据……” 靠,我到底在说什么。 “不好意思,我不会写。”

“好吧,咱们的面试到此结束。你有什么问题吗?” 嗯,我知道我这样肯定没戏了,索性就随便说点吧。 “不好意思,笔试完后我没想过我能进面试,就没有做面试准备,所以这次表现得很糟糕。我是不是基础很不扎实?跨行是不是不容易?” 后来知道,那位面试官也是通信工程转过去的,而且他还开玩笑的说是因为考研没考上。


Desperado, ah, you ain't gettin' no younger. 亡命之徒啊,你已经不年轻了 Your pain and your hunger, they're drivin' you home. 你的痛苦和饥饿,它们在把你赶回原点 Freedom, oh, freedom. That's just some people talkin' 自由,噢自由。那只是有些人说的 You're a prisioner walking through this world all alone. 你是孤独闯世界的囚犯

面完百度后,一直循环在听“亡命之徒”,而心情沮丧得就和上次考完雅思口语一样。 是的,因为我压根没想到我能进面试。 是的,我一定是太不自信。 这个面试官也一定和上次口语考官一样想吧,这个人啥都没准备啥都不会还敢来面试(考试)?

跟妈妈打了电话,想想还是不用太沮丧,虽然是百度,但这是你的第一次面试,所以经验缺乏,应答不自然是正常的。 内功不深厚,肚子里没货,怎么倒腾也是倒不出东西的吧。

对于面试:

  1. 一定一定要准备好一个精彩的自我介绍
  2. 一定一定得有自信,不要认为自学非科班项目经验少就会低人一等,要对自己的能力有信心(自己接电话时就是太不自信了,心里貌似就是有一个暗示,觉得BAT那么高大上的公司怎么进得去),不要过分仰视那些大公司,否则自己永远也进不去。
  3. 试着写个好简历,然后多投递下简历,增加宝贵笔试、面试经验,以后面试时能更加从容面对。

对于能力提升:

  1. 夯实HTML&CSS的基础知识。 多写读书笔记,多总结经验,这样才能在真正需要它们的时候运用自如。
  2. 必须立刻继续JavaScript的学习。 之前断断续续看过一点JS的知识,但是最近倒腾网站就转移了很多注意力到服务器端,导致什么都不精,自己也找不到了方向。一本「JavaScript高级程序设计」啃来啃去。
  3. 开始AjaxjQuery的认真学习。 你看看,连写个异步编程都不会。接下来还有Node.js呢。
  4. 不要好高骛远,不要赶潮流耍花招。 之前真是过于浮躁,看了很多新技术的书,但连最基础的东西都没学好。

让你自己成为一个持续学习和思考的人,并只写你真正思考和总结之后的产物,其他一切就会随之而来。

加油吧,希望能在通往大牛的道路上越走越远。