20190921 有赞校招 大数据开发工程师(现场两面)

已经收到感谢信了. 不过经历两轮一共差不多2小时的面试, 感觉对自己的知识水平清晰很多了. 有些地方比之前自信多了, 有些地方也深刻认识到了不足

面试质量我觉得很高, 方方面面都考察到了, 也一直听说有赞的技术水平很不错, 可能确实是的. 总之面试体验很不错, 两轮面试都有送一瓶水喝, 然后不清楚的地方会引导我, 但有些属实答不上来, 没办法了就

没有笔试, 直接筛简历. 面试之前HR会给同岗位的拉一个群, 我看了一圈, 三四十个人里我的学校是最菜的, 而且还是本科生, 那可能确实还差点意思吧, 无论是能力还是学历上

每个提问后面的括号中是我的回答

一面(大约70分钟). 基础问题为主, 不是很深凿. 给了很大空间自由发挥, 想说多少都基本不打断
  1. 自我介绍
  2. 讲讲在大华的实习
  3. 项目介绍
  4. 怎么生成项目数据的 (python脚本 + crontab -e的命令. 顺路提到有赞用的Airflow框架, 面试来的路上临时看的)
  5. (我自己的延伸) Kafka对接Spark Streaming的两种方式, offset管理, checkpoint机制
  6. 线程安全的理解 (volatile, synchronized, ThreadLocal, final)
  7. 进程和线程的区别, 进程间通信的方式, 共享变量
  8. 死锁的定义, 以及如何预防死锁
  9. HashMap的底层数据结构 (从ArrayList和LinkedList开始讲它们的设计考虑和联系; JDK1.7 & 1.8; ThreadLocal的开放地址法处理哈希冲突、数据库哈希索引的拉链法处理哈希冲突)
  10. 数据库索引的数据结构 (哈希索引 & B树索引 & B+树索引 & Innodb及其自增主键 & 聚簇索引和非聚簇索引, 全程不打断)
  11. (场景题) 数据库存储着起始时间字段, 有如下几组数据: <2017.1.1-2018.1.1> <2018.1.1-2019.1.1> <2019.7.1-2019.9.1> 如何找出哪段时间的数据缺失了 (意思是2019.1.1到2019.7.1这里没有连着, 找到它, 能解决就可以, 不需要优化解)
  12. TCP和UDP的区别 (有状态的连接, 有拥塞控制 & 滑动窗口 & 超时重发等机制)
  13. 三次握手的过程 (有些序列忘记了, 面试官说没事, 然后我顺带提到了三次握手可能遇到的syn洪水攻击)
  14. 构造方法说一下 (说了下Java中的构造方法及其重载, 我感觉不够, 于是提了一下Scala语言在Spark源码的coalease和repartition方法中用到了普通方法的重载)
  15. 你觉得实习哪些地方做得不好, 现在回看的话觉得该怎么去做
  16. 下一步的学习方向
  17. 后续的职业发展思考
  18. (算法题) 图里面找最近的一段距离 (Kruskal算法秒解. 感觉最近图算法被问得很多, 可能是和图数据库有关?)
  19. 平时学习过程中比较印象深刻的分享一下
  20. 有什么想问的? (团队组成+我的强弱点. 答基础知识可以, 就是实践经验可能缺少一些)

感觉7和8答得不太好, 但是没有深究, 也让过了, 不过这两问应该是给二面伏笔了

面完去等候室呆了2分钟, 本来想补一下操作系统知识的, 结果在等候室遇到一个来面试的浙大直博生, 出于好奇就聊起来了…

二面(大约55分钟). 不给机会自由发挥, 有岔开话题就打断, 注重实现和细节
  1. 自我介绍
  2. 操作系统熟吗? (…不熟)
  3. 进程和线程的区别
  4. 单核CPU下, 单线程一定最优吗?
  5. 线程享有的资源有哪些? 考虑网络IO, 如果单核CPU的一个线程在网络IO时阻塞了, 但是它的资源不调度给其它的线程, 这样情况下仍然是单核CPU单线程最快吗?
  6. 进程间通信的方式. 共享变量知道吗? 说一下操作系统层面的, 不是编程语言那方面的
  7. (海量数据处理题) 1~10000共1万个无序不重复的id号, 丢失了2个, 怎么找到? 如何优化? (先讲了可以用到的排序思想, 然后慢慢优化时间复杂度和空间复杂度, 最后用bitmap解决)
  8. (答出了7之后的延伸) 1~10000000共1000万个呢? 1M空间? 10K空间? (听到10K有点懵… 结束之后重新做了一下, 感觉答对了60%吧, 设计思想都到了, 就是没结合好. 结束后反思的具体解答如下)
    在这里插入图片描述
  9. 讲讲在大华的实习
  10. 数据库三范式 (…临时就忘光了, 无语)
  11. 数据库索引知道哪些? 不是数据结构那几个索引 (联合索引 & 最左前缀原则 & 索引命中与失效)
  12. 表的删除操作知道哪些, 它们有什么区别呢 (delete, truncate, drop)
  13. 项目介绍, 什么时候做的? 说一下你提到的难点
  14. 为什么要用MySQL管理offset呢? (提到了Spark的checkpoint机制, 以及Spark Streaming对接Kafka的两种模式及其细节对比)
  15. 项目有实现数据消费的Exactly Once吗 (没有, 知道用幂等或者事务可以实现, 但是实践遇到了点困难)
  16. 项目中的动态黑名单过滤怎么做的, 黑名单逻辑如果要复杂一点该怎么做?
  17. (场景题, 从22的延伸) 如果爬虫爬数据, 构思一下对于爬虫流量的黑名单过滤逻辑? 以百度的场景为例, 假设你是搜索引擎公司的员工, 怎样设计逻辑去判断爬虫产生的流量?
  18. 项目中HBase的row key是怎么设计的, 为什么需要额外设计row key
  19. 讲一讲HBase的存储结构 (HRegion, StoreFile, HFile, MemStore, HLog)
  20. 有什么想问的? (团队人数和构成+我的特点+如果能入职是做底层组件开发还是业务. 答基础不太出众, 大数据团队大概70多人, 组里有做源码级开发的人, 做哪块并不一定)

表现不佳(主要是4/6/11答得不好, 8/12/15/16/17还有待进步), 于是就没带去见HR面, 面试官陪我到电梯口去了. 其实面这么久时间也算是给很多机会了, 水平不够是根源

总的来说:

  1. 操作系统非常菜. 以进程间通信和死锁为首, 老是背了忘忘了背, 还是得花时间理解清楚逻辑才行
  2. 项目细节还需要加强, 思想到位了但是实践没到位
  3. 缺乏实战经验, 遇到场景题总觉得不自信, 需要去实际工作场景历练历练

你可能感兴趣的:(20190921 有赞校招 大数据开发工程师(现场两面))