鹅厂实习生面试

鹅厂实习生面试_第1张图片

如上图所示,并没有通过面试,昨天晚上看书看到2点,一大早起床打了个滴滴到高新区那边参加面试,在车上就感觉很疲倦,然后从学校到面试地点一个多小时车,晕车把人晕的不行了,下车差点吐了。

到面试地点应该是个三星级酒店,去的人很多,看了一下大多是西电西工大的学生,我们学校的学生我没看见多少,鹅厂包了个大会议厅,笔试通过的学生和霸面的同学有两个分开的摊位,霸面的学生简历投递过去等通知就好,通过笔试的坐在大厅,等人叫你名字,叫到之后给你个卡片,卡片上有房间号,自己去找房间,在大厅刚坐下,头还是痛,然后被叫到了,拿着简历就上楼了。

一开始就是做个自我介绍,简单说了一下学校,专业,学习经历,简单的说了一下,然后说到项目,简历上写的TinyWebServer是去年写的,很多细节的东西都记不清了,当时就说的我刚在Udacity上看的CS101,写的一个搜索引擎,然后讲了一下我重构遇到的问题,做这个WebCrawl重构的时候,最开始爬页面的url的时候是自己写的文本的代码,然后我在stack overflow上看到了BeautifulSoup,然后我说到了我为什么用这个,不用自己写的,我解释自己写的爬下来的很多内容不是url,以下是自己写的解析文本提取出url的代码:

  def GetNextTarget(page):
      start_link = page.find('
 def GetAllTheLinks(page):
      links = []
      while True:
         url, end_position = GetNextTarget(page)
         if url:
             link.append(url)
             page = page[end_position + 1 : ]
         else:
             break
     return links  

但是出现的问题是,在网页文本中解析出来的不是url的文本也会当做文本,类似于下面的这样的文本:

解析出来显然不是我们需要的,所以我在google上搜索有没有好的解决方案,就找到了了beautifulsoup中解析出所有url的用法:

  def GetAllTheLinks(page):
    links = []
    for link in BeautifulSoup(page).findAll('a', href=True):
      links.append(link['href'])
    return links

但是这个代码爬出来的url还是存在问题,如下:

鹅厂实习生面试_第3张图片

只是现在可以爬取出网页中所有的url,但是其中也会包含不是url,我认为beautifulsoup底层解析的实现应该和我自己手写的实现类似,但是beautifulsoup的适用性更强,所有我对爬出来的links再做一次过滤,如下:

  def GetAllTheLinks(page):
    links = []
    for link in BeautifulSoup(page).findAll('a', href=True):
      links.append(link['href'])
    links = [link for links if link.startswith('http')]
    return links

当时回答这个问题的时候解释的还算清楚,下面就是让我做了关于C语言的const 的用法和枚举的用法,const的用法答的还可以,但是问到枚举的时候,当时记不清具体的语言规则,只把我记得清楚的说了一下,题目中问到的我直接说记不清楚了,不敢乱说。

后面就让我手写代码了,我觉得这也是这次面试我失败的主要原因,让我写一下拷贝字符串,下面是我当时写的代码:

  char *MyStringCopy(char *src, char *dest)
  {
    size_t length = strlen(src) + 1;
    char *temp_string = (char*) malloc(length);
    return (dest = temp_string);
  }

当时写完,我就觉得哪里不对,但是就说半天看不出来,还有迷一样的temp_string
给面试官看,面试官皱了下眉。。。。唉,后面下楼的时候,发现自己一没检查内存分配不成功,二是循环都没跑,拷毛字符串啊。。。写出来的代码丢死人。。送分题都做错,自己实在是原谅不了自己,下面是我自己写的正确的代码

  char *MyStringCopy(const char *src, char *dest)
  {
    if(!src || !dest)
      return nullptr;

    size_t length = stlen(src) + 1;
    char *temp_string = (char*) malloc(sizeof(char) * length);
    dest = temp_string;

    if(temp_string){  // allocation succeeds
      while(*src){
        *temp_string = *src;
        ++temp_string;
        ++src;
      }
    }
    return dest;
  }

字符串拷贝,主要的陷阱就是内存分配不成功的情况,其他的如果dest和src为null,还有就是src和dest指在一起时,这里我对题目的理解时自己手动分配内存,所有没有加入这种情况,这里相等的情况是is和equal的的区别,我倾向与后一种理解

后面问了一下网络的知识,讲了一下TCP三次握手,我捎带提了一下SYN洪泛,嘴贱又说了一下SYN Cookies,这里给自己挖了个坑,后面还问了一下判断图是否有环,这个以前没遇到过,我想了一下用并查集给面试官讲了一下,貌似面试官也没听懂,回来搜了一下解法


判断无向图是否有环路的方法 -并查集 -BFS
并查集(1)-判断无向图是否存在环
判断一个图是否有环


后面还问了一下http的状态码,只记得清楚403 404,问了一下ICMP属于哪一层(网络层)和滑动窗口的序号确认

第一次现场面试,有一点紧张,面试的时候状态不好,这次面试对自己主要不满意就是把送分题做错,面试写出来的代码一点也不专业,没有什么BAT情节,能不能进大厂其实我不太在意,只是希望以后能进个待遇不错,技术氛围浓厚的公司,希望正式找工作的时候能够找到这样的公司。


Keep focus and have fun

你可能感兴趣的:(鹅厂实习生面试)