zoukankan      html  css  js  c++  java
  • 纪念我的第一次求职面试—百度技术电面

      前几天刚知道百度的面试结果,百度的"hrauto"自动发的一封简短的拒信,
      "鉴于对此职位的全面考虑,我们认为您目前暂时不适合该职位的工作,对此我们深表遗憾"
      虽然在意料之中,但是作为第一次面试的结果,我觉得很是失落,粉碎了我之前的诸多幻想......
      其实百度的面试本来就是一个意外,我是在小吴的同学的推荐下,有了一个内推的机会,投的是自然语言处理部门,结果我把简历发过去,若干天都没有任何回音,我以为在简历上我就直接被刷了,结果在若干天之后的周三,突然接到百度hr的电话,跟我说我简历已通过筛选,并预约在周五下午四点进行技术性电话面试,当时我的心情真是紧张激动,人生的第一次真正的技术面试就要来了...于是进行积极的准备,因为两天左右的时间,在技术上只能进行复习,所能准备的只是面试主观回答的一些技巧而已,于是在周四晚上跟我同学一起模拟了一下面试情景..

      周五,面试官打电话过来,我当时看了一下时间,非常的准时,下午3:58,考虑到时差的问题,可能他那里是四点了...
      面试官很友善的问我身边有没座机,因为用座机进行长时间通过比手机要健康一些,我说没有,只能用手机了,于是他就进入正题了...
      面试官很有效率,直接进入主题,连自我介绍都不用,这一点让我肃然起敬.第一个问题,他问我,"我看你的简历,好像你从来没有与自然语言处理有关的经历,那你为什么会报自然语言处理这个部门呢?",我一听有点晕,我为什么会报,肯定是我同学内推什么我就报什么,但显然不能这么讲,于是我就说,"我对自然语言处理是有很大兴趣的,并且也不能说我完全没有接触过自然语言处理这个方向,我在实验室的研究方向是'图像的语义识别',同样是关于人工智能的东西,都有一定的类似性",然后他说,"我看你在简历上所说的在实验室实习也就是今年二月份的事,到现在也没多久,那就以你的理解,说说你对自然语言处理的认识.."惨了,这下感觉有点露馅,不过智能硬着头皮往上顶,"虽然我在实验室的时间比较短,但是我对这种人工智能的东西有一个大体的认识,像在图像处理中,主要是通过分析和提取图形的特征,然后通过匹配图形的特征库,然后就能得到相应的图形语义"...于是就这个问题扯了有些时间,事实上,这里我很有点虚,平心而论,我并没有从理论上去了解很多这方面相关的知识,不过把自己知道的尽量说一下而已...

      接下来,就是传统的对算法的测试...

         面试官说,"对于二叉树,在这里,我们定义两颗二叉树相等,当且仅当它们的左右子树都相等,左右子树相等是不区分左右子树",不区分左右子树,即有两种情况可以相等,左子树等于左子树,右子树等于右子树,或者是左子树等于右子树,右子树等于左子树,"给你两颗树,A,B,写一个函数判断它们是否相等","函数头是IsSame(Tree A,Tree B),你把这个函数补充完整",他刚说完的时候,我有点晕,我很久没做过算法题了,最近复习的算法都是排序的,我想了一下,觉得我一下可能想不出来,为了避免电话太久不讲话,我就跟他说,"这个问题我暂时想不到",然后他说,"给你个提示,考虑用递归",我一听,然后想到网上各种面经说用非递归的方法实现什么什么,我就觉得递归可能会是陷阱,然后我就跟他说,"递归不是很好吧,可能会比较容易出现一些想不到的问题",然后,他说,"就用递归实现,给你个提示,你可以先考虑叶子节点",我想,叶子节点就四次比较……进入递归的核心代码是这样子
    IsSame(Tree A,Tree B){
      if((A->left==B->left&&A->right==B->right)||(A->left==B->right&&A->right==B->left)){
        return IsSame(A->left,B->left)&&IsSame(A->right,B->right) or return IsSame(A->left,B->right)&&IsSame(A->right,B->left)
      }

    }
    然后,他说假设A,B的深度分别为k,t,叫我算其时间复杂度,我记得当时是算了两次才算对,是2^min(k,t)的时间复杂度,然后他说,"这个时间复杂度是个指数级的,你有没有什么方法提高它的效率呢?"(我现在总算知道为什么一般不用递归了...时间复杂度太高,还占内存)我说,"先判断它们不是相等的,因为只要有一步判断出它们不是相等的,那么这个递归就会跳出",他就说,"这个想法是对的,那你怎么快速判断它们是否不相等呢?"(事实上我已经很有点昏了,一系列一年多都没学习的问题),想了想,便说,"不知道","他说,给你个提示,就比如我假设知道k,t就不相等,那能不能直接就判断它们不相等呢?"我说,"显然可以,像这种,还可以通过其节点个数来直接进行判断",其它的东西我就不知道了,他也没问,他说,像这种问题一般都不用递归,用一些图论的算法去解决会得到更好的效果...

      "第二个问题,假设我这里有一个文本,我要统计它里面每个词的词频,你会怎么做?",我直接就说,"假设电脑够强大的话,我可以设计一个大数组,将该文本进行遍历,组成像散列的数据结构,碰到相同的词就加一,如果没有的词,就给它开辟一个空间,并赋初始值1",然后他说,"假设电脑内存有限,放不下这样大的数组呢?"我想了想,这个问题我看过不少面经上出现过,但是就是没有说怎么解决,突然我想到一个我认为可行的方法,"可以像操作系统里面进程优先调度一样,将统计词频的数据分为几个,并且设立优先级,词频越高优先级越高,于是这样优先级最高的常驻内存,每读入一个新词,则与优先级从高到低的进行比较",他说,"这确实是个方法,但是按你的这个方法,假设我的文本无限大,那么你这个方法就需要非常长的时间才能完成统计,你能不能想到更好的?"我想了想,我说没有,他说,"给你个提示,比如一栋房子,一个人造需要20年,两个人难道是需要10年吗?"我回答说,"肯定更快些",他说,"那你能想到什么呢?"我马上想到的是多线程,但我从来没亲自试过,于是我尝试着说,"我没试过那方面的经验,可能是多线程编程吧",然后他说,"在一台电脑上两个线程跟一个线程所占有的资源都一样,那凭什么会更快呢?"我确实对这方面没什么了解,于是我说,我不知道,然后他说,"假设你现在有多台电脑,你会怎么办?"我说,"我会把文本分成若干块,然后分别在各个电脑上处理,最后两两合并",他说,"是这样的,但你怎么合并它呢?说一下你的合并算法"我当时想,合并就正常的合并而已,哪有什么算法,于是说,"合并就是将一台电脑的输出作为另一台电脑的输入",他说,"是这样子的,但你有没有更好的合并方法?"我对这多机操作(我姑且这么认为)确实不知道,所以我说我不知道了...于是他说,"在百度,其实经常要处理这样的文本,我们的处理方法是将文本切成很小一段,然后每一小段先处理"

      于是面试差不多就到此结束,他说,"假设你对NLP有兴趣的话,你可以多上上水木的NLP论坛",我想了想,前段时间我准备电面的时候就上过水木的NLP论坛,但在本学校貌似没见过相关论坛,于是我说,"恩,前段时间群我曾经上过水木的NLP论坛,但我们学校好像没有这个方面的论坛",然后他说,"你们学校有的"于是我感觉有点说谎的感觉,于是我说,"我不是计算机专业的,我对这个可能不太了解"于是就礼貌性的拜拜了....

      作为首次求职面试,我回想起来,当时还是很紧张,并且由于是电面,有些问题可能也不是叙述到很好,加上可能基本功根本就不过关...于是就这样悲剧了...

      谨以此文章,纪念我第一次求职面试...

  • 相关阅读:
    Call KernelIoControl in user space in WINCE6.0
    HOW TO:手工删除OCS在AD中的池和其他属性
    关于新版Windows Server 2003 Administration Tools Pack
    关于SQL2008更新一则
    微软发布3款SQL INJECTION攻击检测工具
    HyperV RTM!
    OCS 2007 聊天记录查看工具 OCSMessage
    CoreConfigurator 图形化的 Server Core 配置管理工具
    OC 2007 ADM 管理模板和Live Meeting 2007 ADM 管理模板发布
    Office Communications Server 2007 R2 即将发布
  • 原文地址:https://www.cnblogs.com/moondark/p/2001873.html
Copyright © 2011-2022 走看看