2019年秋招面经

秋季校招面试经验记录和总结

Posted by Leon Ling on November 4, 2019

抱着体验秋招大潮的念头,放弃了之前实习转正的邀请,然后自信满满地被大厂们怼的体无完肤。 从一开始的自我怀疑,到后面慢慢总结刷题,到最后基本可以做到对答如流,感觉不论结果如何这趟秋招之旅也是有了很多收获。下面就记录一下比较印象深刻的面试,简单做一个总结。

[toc]

思科 - PDA大数据工程师

一面:

整体过程是两位面试官交替提问,主要内容分为项目,基础和其他问题。

项目:

  • transaction2vec做的是什么,实际应用场景,用这种方法在未来整个项目中扮演什么样的角色或者这个模块有什么贡献
  • 介绍术语抽取模块,怎么工作,用到nltk哪些方法,怎么评估,候选术语怎么确定和筛选
  • 讲讲区块链论坛,优化做了哪些工作,怎么保证计算量,共识机制 体现在哪

技术:

  • 什么是spark
  • spark里从读文件到完成生成RDD的过程,RDD怎么形成的
  • spark不同节点之间怎么保证传递信息的正确性,怎么验证
  • spark的broadcast广播机制
  • spark RDD之间transformation和action存在哪些依赖关系
  • 用spark处理数据的时候出现什么问题,怎么解决,OOM,数据倾斜
  • XGBoost背后的原理
  • 哪几种正则项

其他问题: 大数据处理问题

  • 现在有两个200g的文件,里面存放了很多URL记录,但是只有一台正常的16g内存的机器,问怎么把这两个文件里面同时出现的URLs都取出来放到一个文件里? 答 分治 哈希取模拆分+hashset小文件查找
  • 追问:换成spark怎么做 repartition distinct groupbykey reduce
  • 给你一堆用户数据和产品数据,怎么做聚类,怎么做推荐

二面:

二面总部交叉面,三轮

一轮:

  • 英语自我介绍
  • 聊项目和实习
  • 说说对Spark的认识
  • 在用spark做数据处理时遇到的问题:数据倾斜和OOM,解决
  • 对面向对象的认识,面向对象的三个特性,what why how
  • 聊聊研究生学习的过程
  • 职业规划
  • 反问环节

二轮:

  • 聊项目
  • 撕代码:就记得题目贼长,理解了不难,具体忘记了。。。
  • 对思科的认识,对思科价值观的认识
  • 觉得自己英语水平怎么样,因为他们这个部门对外交流比较多,有reallocation的想法吗
  • 反问环节

三轮:

  • 对岗位的偏好
  • 撕代码:
    • 两个有序链表的合并
    • 给行和列均为递增的有序矩阵,如何最低复杂度进行元素查找 (剑指原题)
  • 反问

平安科技 - NLP算法工程师

一面:

  • 讲讲前缀树
  • 前缀树应用场景:
  1. 当输入一个词时,如何快速给出若干个可能出现的后缀词提示,如果逐个字输入怎么样,如果逐个词输入怎么样
  2. 系统存储里里有一千万个词,现在系统里每秒来100个词,如何即时判断来的这些词哪些是系统存储里词的前缀
  • 注意力机制,是否可以把注意力机制的系数去掉 - bert 中的确去掉了
  • 知道哪些设计模式, python写一个单例模式
  • 数据库了解多少,用过哪些,说说用过哪些高级操作。。。
  • 撕代码:
    • 知道哪些设计模式,实现一个单例模式
    • 写SQL,表A,表B都有key C,找出表A有但是表B没有的 key 的条目

二面:

高管面,主要问过往的学习经历,项目经历,未来规划等等

快手 - 数据挖掘算法工程师

一面:

  • 撕代码:
    • SQL,给出一张用户关注表,写出查询相互关注用户的SQL语句、
    • 输入字符串,’010101100’ -> ‘000001111’,一次只能交换两个字符,求最少需要多少次交换
    • 给一个矩阵,每个格子一个值,从左上角走到右下角,求sum最小的路径和sum值
  • 讲讲两个实习的工作
    • Spark工具库,transaction2Vector模块怎么做的
    • Web后台开发做了哪些内容
  • Spark 的RDD, 特点,有哪些属性
  • Spark Shuffle做了哪些事

二面:

  • 撕代码:
    • 实现:LRU
    • 如何判断链表是否有环
    • SQL:用户行为日志,有用户打开快手app的记录,需要统计每天活跃次数最多的10个用户
    • hive sql:user_id, launch_time, p_date(yyyyMMdd)
  • Spark作业提交流程
  • Spark Stage怎么划分 整体来说写代码和项目相关的内容问的比较多,基础知识点稍微少一点

三面:

  • 说说Spark的调度机制
  • 说说spark的组件
  • RDD和Dataframe的区别
  • Parquet存储结构的好处
  • Hash表的结构,哈希冲突怎么解决
  • 拉链法 多线程哈希冲突的问题 解决
  • 撕代码:
    • Spark读只有大量数字的文件,实现count distinct *
    • 长度为n,只有[0,1,2]三个元素的数组,不允许计数,最低时间复杂度的排序

头条 - 后台&大数据工程师

一面:

  • 撕代码:LeetCode 239 sliding window max sum
  • 虚拟内存
  • MySQL char 和 varchar
  • TCP 三次握手四次挥手,四次挥手 time wait 和 close wait 分别在哪,为啥要有
  • TCP拥塞控制
  • 等等计算机基础知识

又一面:

  • 撕代码:LeetCode 10
  • Spark的认识 什么是RDD
  • RDD和DataFrame的区别
  • Spark shuffle 的过程
  • 几种shuffle writer,选一种最熟悉的讲讲
  • SortShuffleWritter中sort是对那些部分处理
  • shuffle read做了什么事
  • Spark OOM 发生的原因 解决
  • spark 调度机制,Yarn怎么工作
  • 基本都是围绕spark展开,剩下还有些问题不记得辣

英特尔 - Software Development Engineer

一面:

一面主要以项目为主,具体会问项目里做了什么,然后针对性地问一下问题

  • 在实习公司做的工作,Transaction2Vec模块具体做了什么
  • 说说DBSCAN并行化这个项目具体做了什么
    • 什么是DBSCAN算法
    • 在这个项目里遇到了什么样的困难,怎样克服
    • 讲讲RTree的数据结构
  • 讲讲图像语义分割图像复原这个项目
    • 为什么用ResNet替换Unet
    • 双注意力机制是什么,这个机制怎么和ResNet的网络结构结合到一起
    • local discriminator

二面:

二面结合项目和一些计算机基础来问

  • 在趋势的后台开发做了些什么,做的工作从软件工程的角度来说属于什么样的任务
  • 讲讲你简历里的这些项目,在做的时候遇到了什么样的困难然后怎么解决的

计算机基础

  • Python with 关键字的用法,后面的执行依据是什么
  • 给出一些Python语句,说说这些语句都是什么作用,或者输出了什么

数据结构:

  • 优先队列,最大堆最小堆
  • hashmap
  • 红黑树和二叉搜索树的区别

三面:

  • 说说在香港的学习生活
  • 用三个词描述一下朋友眼中的自己
  • 用英文介绍一些做过的项目,然后英语问答项目中的细节
  • 有什么问题想问的

华为 - 数据工程师:

一面:

  • 笔试题回顾:给一个数学算式字符串,输出算式的结果
  • 图遍历深度优先,广度优先有没有了解,说说这两个方法可以解决什么问题,具体怎么用
  • 进程和线程,使用线程带来的好处和存在的问题 聊项目
  • Transaction2Vec模块的设计和功能
  • 空气质量预测的数据挖掘项目,在特征工程,特征构造和选取这部分问题比较多
  • 撕代码:
    • 有一个包含正负整数的无需数组,如果数组中存在连续子序列之和为0,则把这个序列剔除,输出剔除所有符合要求子序列之后的结果

二面:

  • 聊项目,关注点在于项目中遇到的问题和解决策略
    • 对Transaction2Vec模块提出如果数据是增量更新的,最后输出的明细表怎么出处理
    • 如果有较高的时效性要求,又怎么修改
  • 撕代码:
    • 一个长度不超过10000000的不重复整数数组,输出其中所有和为0的三元组,三元组中元素可以有单个重复计算 注意尽可能减小时间复杂度

三面:

  • 聊项目:
    • 区块链项目,术语抽取系统,空气质量预测这些个项目做了啥
  • 人生规划和职业规划
  • 之前实习和项目经历中遇到的困难和学到了什么
  • 项目开发中一次尽可能做好设计和迭代更新分别在什么场景下适用
  • 对华为有什么看法
  • 这个聊的比较多,加班,薪资,努力,人生规划啥的
  • 反问环节

一面二面主要问的都是项目和学习经历,比较通用的问题有一个,也是海量数据处理问题。

  • 大致意思就是有限内存处理海量整数,求这些数的中位数。

寒武纪 - 分布式训练研发工程师

一面

  • 算法题:
    • 一条长度为n的数组,每个位置里面可以三种颜色的小球,要求相邻小球颜色不一样,首尾颜色不一样,求问有多少种排列方式
    • 如果不用递归怎么解决? DP。 用数学的方法怎么解决
    • 单向链表找环,求环的长度
    • 有序数列,给定一个整数,求有序数列中两个数之和为这个整数的组合
  • C++ malloc free 和 new delete有什么区别
  • C++ class struct区别
  • 线程和进程的区别,线程之间共享什么东西
  • 死锁的发生和避免
  • 聊实习中做过的几个项目
  • 反问

二面总监面

这两部分当时没有及时记录后面不太记得了。总的来说二面和一面差不多,差别在于一面应该是统一安排面试官,二面面试官为本部门员工。总监面的话则是以学习和项目经历为主,侧重点在于遇到什么样的问题和怎么样解决。

依图 - 算法工程师

一面:

三道算法和一道数学题,算法题比较简单,难度在leetcode median这样;数学题是概率题,求一个丢硬币问题的数学期望。

二面:

两道算法题,一道和Cisco二面三轮的一样:尽可能低复杂度的在行列非递减的二位矩阵中找指定的数;另一道也不难不记得了。

项目经历集中在平安的算法工程师实习,具体包括做了哪些工作,说说transacton2vec的项目,数据量级,遇到问题的解决。以及spark相关的配置,trouble shooting,以及迁移到当前部门任务中相关问题的解决思路。

反问环节。


经历过秋招这一关收获还是很多的,尤其被各个大厂的压力测试性格测试小折磨了一下,除了对自己的认知,对未来的发展也大致有了方向。

然后谈谈如何在招聘面试中有不错的表现,有以下几点:

  1. 扎实的基础,像操作系统,数据结构和计算机网络的计算机基础,以及算法功底都应该有充实的储备。前者在于学生阶段的学习,面试前的准备和平常工作中解决问题时的刨根问底,后者则需要养成持续学习和适时做题的习惯。 作为计算机专业的学生或者是从业人员,如何区别“码农”和工程师就在于此吧。
  2. 对自己过往的经历有深入的思考,包括工作和学习。面试的时候很多项目相关的问题,一方面是看对某一方面技术的掌握和理解,对于校招的学生,感觉更重要的是体现对遇到问题时候的解决思路,以及过程中展现的学习能力和交流能力。
  3. 多去了解一下面试公司的企业文化,其他人的面试经验,这样遇到各种问题都会有一些准备。

最后也祝愿还在为了理想工作发愁的同学都能找到一个适合自己的工作吧。