美文网首页
鹅厂实习生面试

鹅厂实习生面试

作者: UnderwoodY | 来源:发表于2016-04-16 14:09 被阅读285次

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

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

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

      def GetNextTarget(page):
          start_link = page.find('<a href=)
          if start_link == -1:
              return None, 0
          start_quote = page.find('"', start_link)
          end_quote = page.find('"', page[start_quote + 1, : ])
          return page[start_quote + 1 :end_quote], end_quote
    
     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还是存在问题,如下:


    只是现在可以爬取出网页中所有的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

    相关文章

      网友评论

          本文标题:鹅厂实习生面试

          本文链接:https://www.haomeiwen.com/subject/fvonlttx.html