第一次电话面试

第一次电话面试_第1张图片

早上还在上课的时候实验室老师给我发QQ,他好像接了个外面公司的项目,需要人来做开发,下课到办公室去找老师的时候,刚到办公室,老师开始给我讲需求的时候,电话来了。。。。。。对方一开口说是淘宝的什么,我一开始以为是淘宝的客服打的电话,正准备挂的时候。。对面问起你是不是投了阿里巴巴的实习简历。。。。。心里第一想法卧槽。。。卧槽。。。阿里巴巴。。。我还以为我简历挂了,都放弃找实习了你来电话了,赶快快步走向实验室,面试官先让做了个自我介绍,说实话,没经验,又很紧张,边走边答,一开始都语无伦次,坐下之后就开始问我项目的东西,我主要说了一下TinyWebServer的东西,这是上学期写的一个小东西,主要是学完网络,然后想做个项目,刚好问了一下王月,王月推荐说可以写个http server练练手,然后就是在网上查资料,发现C++有很多成熟的网络框架,比如boost里的asio框架,是个跨平台的框架,但是自己不太想要用框架,想自己撸,上google搜how to write http server. 找到了几个老外写的博客,看了看博客,就开始动手了,几个博客都是用C实现的,我打算是用C++实现,写了大概半个月,写完还是很快的,博客作者提供的有源码,主要还是调bug,网络程序没有调试的经验,只能人肉调试,调试很痛苦,写完之后对http报文的一些字段比以前熟悉了一点,然后对网络程序整个通讯过程有了了解,至于阻塞这方面的东西,看了博客上的一些介绍,主要是fork()解决,这个真心不太熟悉,http server在CSAPP上有一点介绍,但是目前还没看到那里。面试官似乎对网络这块不熟悉,问了一点就点到为止了,然后就是问我github上的实现的机器学习算法的项目,这其实是大二的时候实验室老师给了一本《Machine Learning In Action》,这上面主要是讲的算法的实现,跟着敲完了一遍,收获就是觉得其实ML这方面还是要对数据敏感,然后就是经验了,还有就是自己原理不懂,然后寒假的时候在跟Stanford CS229 Machine Learning的课程,这主要是讲原理,很多数学知识,课程的讲义很多,全英文好几十页,目前还没啃完,《Machine Learning In Action》因为写的太早了,每个算法其实后面都有配套的小项目,我都实现过,然后特么的面试的时候想不起来了。。。。再后面就问了一个简单的算法问题,一个链表逆置问题,宝宝大二就撸过链表逆置了,在纸上随便画了两笔就开始讲了。。。。问我有几种方法。。。我说了两种,讲了下递推的方法,就是每次把头指针取下来向前挂,时间复杂度O(n),空间复杂度O(1),然后就是递归,简单来说原理就是开个栈,把链表跑一遍,跑的时候同时push进栈,然后跑完了,把栈里面的元素pop出来,pop一个挂一个。栈空了,链表就逆置了,这个方法当时我答空间复杂度答的有点问题,应该是O(n),因为存在栈的开销,但是这个简单的问题,当时没有给面试官解释清楚,这也是整个过程我觉得我答的最不好,最不专业的地方,然后后面就是让我测试一个简单的计算器软件,因为学长给我内推的是测试,本来想让学长帮我推个开发岗的,学长说其他部门不太好推,我也不太想过多麻烦别人,测试完全没接触过,所以这个问题答的就不行,后来一想,自己的答案答的太烂了,没主要还是没有把语言组织好,后面就问了一下自己的项目中有没有用到自己学得算法,刚好前几天在Udacity上看Web Crawl的时候对建index的时候,将数据结构从链表换成了dictionary,用哈希表实现,当时建了10000条index,lookup一个index从2.6缩减到0.02秒左右,面试三十多分钟就结束了,其他的问题就是一些说说自己的优缺点,这个答的也不是很满意,没有把自己想表达的意思表达出来,面试官理解成我学东西不深入,然后就是问问面试官一些问题,我就问了我简历写的咋样,有没有什么问题,面试官就说最好加上个人评价,我倒是觉得个人评价没有那么重要,面试就匆匆结束了。整个过程,说实话面完自己心里就有底了,没戏。。。。还是自己没准备好,问题不是难到没思路,还有就是在语言组织这块还是存在很大问题,还是得刷刷面经和leetcode,面完花了点时间把链表逆置的程序写完了,如下:

#include 
#include 
/*******************
* @Author: Soyn
* @Brief: Reverse the list, the first telephone interview with Alibaba.What a pity.
* @CreatedTime: 15/3/16.
********************/
struct Node{
  int val_;
  Node *next;
  Node(int val) : val_(val) {}
};
void Print(Node *head)
{
  for(auto *p = head; p; p = p->next){
      std :: cout << p->val_ << " ";
  }
    std :: cout << std :: endl;
  }
Node *CreatedList()
{
  std :: vector int_vector{1, 2, 3, 4, 5};
  Node *head, *tail;
  head = tail = nullptr;
  Node *curr;
  for(auto e : int_vector){
    curr = new Node(e);
    curr->next = nullptr;
    if(head){
      tail->next = curr;
      }else{
      head = tail = curr;
}
    tail = curr;
}
  std :: cout << "Original sequence: " << std :: endl;
  Print(head);
  return head;
}
Node* ReverseListIteration(Node *head)
{
  Node *new_head = nullptr;
  for(auto curr = head->next; head; head = curr, curr = curr->next){
  head->next = nullptr;
  if(new_head || !curr){
  head->next = new_head;
  new_head = head;
  if(!curr) break;
  }else{
   new_head = head;
  }
}
return new_head;
}

Node *new_head = nullptr;
Node* ReverseListRecursion(Node *head)
{
  if(head->next){
    auto curr = ReverseListRecursion(head->next);
    curr->next = head;
    head->next = nullptr;
    return head;
    }else{
      return new_head = head;
  }
}
void Test()
{
  Node *t = CreatedList();
  std :: cout << "I'm iteration version(time cost O(n), space cost O(1)): " 
  << std :: endl;
  Node* h = ReverseList(t); // output ===> 5, 4, 3, 2, 1
  Print(h);
  std :: cout << "I'm recursion version(Time cost:O(n) Space cost O(n)): "
  << std :: endl;
  ReverseListRecursion(h);
  Print(new_head); // output ==> 1, 2, 3, 4, 5
}
int main(int argc, char **argv)
{
  Test();
  return 0;
}

第一次面试还是没经验,后面面试的话应该会比这次要好一点,BAT也没有想象中那么难,希望后面能找到暑期实习吧,艺无止尽,自己还需努力,加油。

你可能感兴趣的:(第一次电话面试)