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论坛,但我们学校好像没有这个方面的论坛",然后他说,"你们学校有的"于是我感觉有点说谎的感觉,于是我说,"我不是计算机专业的,我对这个可能不太了解"于是就礼貌性的拜拜了....

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

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

  • 相关阅读:
    Linux下gdb调试(tui)
    gdb tui中切换窗口
    gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
    进程间通信
    深入理解计算机系统结构——链接
    系统调用
    模块机制
    其他文件系统
    Oracle数据库逻辑迁移之数据泵的注意事项
    Oracle 10g DG 数据文件迁移
  • 原文地址:https://www.cnblogs.com/moondark/p/2001873.html
Copyright © 2011-2022 走看看