前言

自 3.31 投递简历以来,有至今没有消息的,有已经挂了,也有拿到 offer 的。真的要早点准备早点投递,有内推就内推,就我头铁直接到处投…… 另外,说话圆滑肯定更讨喜,我的一些反问可能太直接了:(

经过一个多月的笔试面试,最终我决定去亚马逊实习,很幸运能够从测试转到开发,非常非常感谢大家的工作与支持。

接下来按一面时间顺序罗列这段时间的面试经验。

京东科技

投递时貌似还没有暑期实习的岗位,应该是日常实习的岗位。体验不好的一点是面试之后查询不到投递信息,邮件询问的反馈是岗位可能不匹配(那也不用清除记录吧……)。

一面

  1. 自我介绍
  2. 介绍在项目里都做哪些具体的内容
    • 用 Go 做区块链项目,用了哪些包,如何扩展其他的包
    • 用 Python 写的链路追踪工具,是否有看过完整的项目,介绍一下
    • 用 Java 写的静态分析工具,介绍一下(面试官熟悉 Python)
  3. OpenStack 组件都有哪些,都是干嘛的,以及组件内部是如何实现的
  4. 用过 Kolla-Ansible,那它是如何实现的
  5. Docker 常用命令,例如,如何打包镜像
  6. Linux 常用指令
    • 如何查看占用 80 端口的进程
    • 如何杀死 nginx 进程
    • 查找包含特定字符串的文件
    • 字符串替换
    • 如何使用一行命令实现上述功能
  7. Python 相关的内容
    • 基本数据类型、排序操作等
    • 如何打包和发布
    • 有用 Python 做什么东西
    • 装饰器如何实现
  8. 了解 Nginx 引擎吗,反向代理如何实现
  9. 介绍一下了解的 Git 指令
  10. 开源社区贡献
  11. 如何搭建博客(实际上是想问怎么部署到服务器上)

图森未来

印象深刻,使用内推码投递,一面就是考察做题,当时还没怎么做 leetcode 上的题,结果非常艰难地做完第一题,第二题毫无头绪,后续当然是没有后续了。

一面

  1. 自我介绍
  2. 项目相关内容
    • 是否参考开源代码
    • 遇到的难点,如何解决
  3. 算法
    • 贪心 + 小根堆
    • 动态规划

亚马逊

投递了测试(SDET)和开发(SDE)的岗位,收到了测试的笔试,很简单的两道题,次周就约面试了。两轮面试后,通知我需要等待团队匹配,后来得知是原来的团队不缺测试了,但有团队需要开发,兴冲冲地接受了,但需要加面一轮。不过最后还是如愿以偿拿到 offer 了~

一面

  1. 自我介绍
  2. 项目相关
    • 详细介绍一个项目
    • 开发的主要难点
    • 应用情况
    • 追踪云平台与追踪云平台上的软件的差别(开发难点)
  3. 遇到的困难与解决
  4. 算法
    • 删除字符串中的所有回文子串

二面(算法)

  1. 删除倒数第 N 个节点
    • 给出一些 testcase
  2. 设计 Employee 类
    • id、name、title、reporter
    • 返回手下员工数量
    • 找到报告链

三面

  1. 自我介绍
  2. 项目
    • 区块链项目介绍
    • Java 程序分析项目介绍
  3. 算法
    • K个一组翻转链表
    • 二叉树右视图(BFS、DFS)
  4. 项目中遇到的困难与解决

英特尔

接到电话后直接开始电话面,后来线下面发现是二面的面试官打的电话。线下面来到环球贸易中心的办公室,面试地点应该是一个小讨论间,一路走来感觉略沉闷……?可能这就是老牌公司的沉稳。两轮技术面,因为 boss 没空所以没有第三轮,不过后来我也没接到通知。

电话面

  1. 项目
    • 对云计算的理解
    • 为什么用 Jaeger
  2. 算法
    • 最小深度
    • 最左侧的最小深度
  3. 八股
    • 进程与线程
    • 程序内存如何分配(进程堆栈都分配什么)
    • TCP/IP 三次握手
    • Golang 中的协程
    • Linux 中常用的指令
    • Linux 系统中查看磁盘占用情况

一面

  1. 算法(30min):2基础 + 2提升
    • 找出第 k 大的数字
    • 删除字符串中相邻的相同字符,重复操作,返回结果字符串
    • 二叉树,到叶节点路径和为 k 的路径
    • 不含重复元素的数组,找出和为 k 的元素对(集合)
  2. 项目相关
    • 创建 VM 的组件交互
    • 还记得哪些交互
    • 如何收集信息
    • 信息如何传递(调用什么接口、怎么调用)
    • 负责开发哪部分,举例说明
  3. Linux 常用操作有哪些
  4. 操作系统管理的资源
  5. 硬件相关:主板、插槽、USB、总线
  6. 如何实现资源共享(互斥、锁的种类)
  7. 进程间通信都有哪些方式
  8. 学过哪些课程
    • 对称加密、非对称加密
    • 为什么一把加密一把解密(原理)
    • PKI
  9. 读过 Unix 编程吗(好书)

二面

  1. 上一位是否考察英文
  2. 英文如何
  3. 英文谈谈对 Infrastructure 的理解
    • 重点是资源虚拟化、分布式其次
  4. 上一位考察了哪些内容
  5. 用过哪些 Docker 指令,主要用 docker 做什么
  6. 介绍一下目前在做的 Java 项目
  7. 一些 Java 相关问题(完全不会)
  8. 学过哪些课程,喜欢什么
  9. 有考虑内核方向吗,刚喜欢偏下层还是偏上层的(结果认为我喜欢应用开发……)
  10. 为什么觉得北邮的课程水
  11. 保研还是考研
  12. 谈谈自己的优势
  13. 工作规划
  14. 了解 k8s 的什么
  15. 为什么来英特尔
  16. 反问
  17. 为什么想要 transfer
  18. 刷题是为了干嘛

6.2 收到 Intern 的笔试通知(看了下记录是 4.16 投递的,腾讯会议笔试拍照发邮件),然后 6.11 才想起来这是 6.8 的笔试,whatever

美团

美团是不是不要对 Java 不熟悉的啊?既然如此没必要硬面一小时,最好再在招聘信息里说明一下。美团配送两轮面试之后立马被另一个微信小程序的团队捞起一面,很麻。

一面

  1. 自我介绍
  2. Java 技术栈(不匹配,问点别的)
  3. 数据库
    • ACID 属性
    • 举个例子,都对应哪些属性
  4. 计算机网络
    • TCP 和 UDP 的区别
    • TCP 相关机制:确认、重传、拥塞控制
  5. 操作系统
    • 进程和线程的区别
  6. 情境描述
    • 如何设计好一个接口
    • 请求调用非常慢,如何排查/优化
    • 项目中遇到的难题与解决,再次遇到是否会加快处理速度

二面

  1. 自我介绍
  2. 项目
    • 区块链
      • 用来做什么
      • 用什么机制,工作量证明?
      • 主要负责什么内容
      • 如何拿到 OTP(节点入网)
      • 单向 TLS 是什么
      • CA 的作用
    • 链路追踪
      • 介绍
      • 追踪数据如何传递
        • 进程-线程-元数据
      • ES 使用哪种分页
      • 多机部署如果有台主机挂了怎么办,追踪链路断开?
      • 如何保证性能
  3. 对什么语言比较熟
    • Python 底层的垃圾回收机制
  4. 用过哪些数据库,了解到什么地步
  5. MySQL 数据库隔离级别,分别解决哪些问题
  6. 对称加密和非对称加密的区别
  7. TLS 如何建立连接(单向、双向),对称密钥?非对称密钥?
  8. 如何验证证书链
  9. 算法
    • 二叉树上视图

一面

  1. 自我介绍
  2. 项目相关
    • CA 架构
    • 链路追踪如何实现,负责哪些部分
    • Java 程序分析系统如何实现
    • 遇到的问题与解决
    • ES 相关问题
  3. 数据库
    • 隔离级别
    • 并发错误
    • MVCC
    • 如何预防幻读
    • 索引类型
    • 索引底层实现
    • 索引优缺点
  4. 计算机网络
    • 协议对应哪层(HTTP、TCP)
    • TCP 与 UDP
    • TCP 如何确保可靠
    • TCP 其他机制(流量控制、拥塞控制)
    • HTTP 与 HTTPS
  5. Java 数据类型
  6. 字典和集合的区别与实现
  7. 10 亿数据搜索 top10 如何实现
    • 回答堆,堆的底层实现
  8. 看源码时注意什么,是否学习写法
  9. 算法
    • 无重复字符的最长子串

百度

面我的团队只要会 C++ 的,所以没有三连面,直接一面挂。

一面

  1. 自我介绍
  2. 项目中遇到的难点
  3. 进程线程区别
  4. 锁(互斥、共享)
  5. TCP 在哪一层
  6. Linux 查看文本的操作
  7. shell 如何运行指令
  8. 做过多线程编程吗
  9. 算法
    • 合并两个有序数组
    • 实现拷贝函数 char* memcopy(char* source, char* dest, int n) 考虑地址重叠的情况

特斯拉

面试很水,三面体验极差,9 分钟的面试真是让我开了眼了。问想留在特斯拉还是积累经验,就不该诚实回答积累经验,英文问题很突然,既然是重点考察内容就该放在一面……

一面

  1. 自我介绍
  2. 链路追踪
    • 对云平台还是对云平台之上的软件追踪
    • 各个组件的作用
    • 创建虚拟机的组件交互
    • 追踪的数据是什么
    • 能用来做什么,是否做过实际的性能调优,瓶颈检查
    • 虚拟机网络和主机网络的区别
    • 遇到的困难与解决
    • 讲一下 Kolla-Ansible
  3. Java 程序分析系统
    • 简单介绍
  4. 区块链
    • 负责哪些内容
    • 容器化
  5. 对 Devops 的理解

二面

  1. 自我介绍
  2. 项目相关内容
  3. 公有云私有云的运维愿意做哪个(AWS、AZure)
  4. 为什么选择特斯拉这个车企
  5. 接触的编程语言中觉得哪个最好

三面

  1. 做过哪些和岗位相关的工作内容
  2. 对 CI/CD 的理解
  3. 接触过 jerkins、prometheus、grafana 之类的吗
  4. 项目中遇到的困难与解决
  5. 有意愿留在特斯拉吗,还是来积累经验
  6. 英文
    • Why Telsa
    • Benefit of microservice

联想

安全实验室,一面有三五个面试官,一面过了就拿到 offer 了。

一面

  1. 自我介绍
  2. Java 程序分析系统
    • 具体是怎么做的
    • 能够检测什么
    • 如何抽象
    • 静态分析是做什么,污点追踪
    • 介绍一下 Soot 框架
  3. 区块链中负责哪些内容
  4. 接触过一些逆向的东西吗(WinDbg、IDA)

FreeWheel

在看起来很像盗版网站的官网投递,没法查询投递记录,笔试时选择部门意向。二面的面试官不会算法的样子,问就是不知道要不换道题……

一面

  1. 进程与线程
  2. 为什么要线程(分页)
  3. 什么叫无状态
  4. HTTP 1.0、2.0 区别
  5. HTTP Method
  6. HTTP 如何保持连接
  7. POST 和 GET 区别
  8. Session 和 Cookie
  9. ACID、隔离级别、并发一致性问题
  10. MySQL 引擎与区别
  11. 算法
    • 判断图是否连通

二面

  1. 项目中遇到的问题与解决
  2. HTTP 是无状态的吗,如何变成有状态
  3. 用过哪些 python 框架、java 框架
  4. 用过哪些数据库
  5. MySQL 索引都有哪些
  6. 算法
    • 子序列
    • 编辑距离

字节跳动

一面考察比较全面,项目八股算法;二面体验极差,算法不会就换题,提问没有反馈没有 hint,非要写链表快排,体验就像是面对一个随机出题的题库,剩余时间让我介绍一下项目。所以字节面试真的看运气,遇到这种……我当时就该问面试官会不会写。

一面

  1. 自我介绍
  2. Java 程序分析系统是怎样的,做到哪里了
  3. go、python、java 之间的区别/特性
  4. 用过哪些数据库,区别和各自的使用场景
  5. 数据库隔离级别都解决哪些并发错误、多版本并发控制
  6. HTTP Method
    • 作用
    • 安全性
    • 幂等
    • 比较 GET 和 POST
  7. HTTP 与 HTTPS
    • 如何建立 TLS
    • 安全隐患:中间人攻击,展开,如何伪装中间人
  8. 数据库隔离级别、并发错误、多版本并发控制
  9. 索引
    • 对什么列建立索引
    • 索引类型
    • 索引的优缺点
  10. 算法
    • 棋盘问题,下棋(全放满),谁的连通块面积最大就赢了
    • 扩展,如果算正方形面积呢

二面

  1. 自我介绍
  2. 三次握手
  3. 四次挥手
  4. 状态
  5. 线程独占资源
  6. 线程挂掉影响进程吗
  7. MySQL 索引实现方式
  8. 为什么用 B+ 树
  9. HTTP 1.0、2.0、3.0
  10. 算法
    • 读写者
    • 图判环
    • 链表快排
  11. 链路追踪如何实现

腾讯

投递的时候已经错过了笔试时间,所以接到面试通知还是很惊讶的,好像是腾讯云的北京团队,做混沌工程的,面试官应该是做 research 的,还问我发表论文与否。

一面

  1. 自我介绍
  2. 项目相关
    • Java 分析系统与现有分析工具的区别;复现的论文是什么会议,效果如何;白盒自动化
    • 链路追踪系统整体介绍,难题与解决;了解其他链路追踪工具吗;如何测试,性能影响;给漏洞挖掘辅助
    • 项目是否有发论文
    • 编程语言(go、python、java 都接触过)
    • Docker 如何选择基础镜像,减小容器体积
    • 有写过单元测试吗,考虑代码质量吗
  3. 算法
    • 滑动窗口最大值

总结

实际上我投递了有 30+ 公司,基本都没有内推,有些直接挂掉了简历,有些至今没有消息。国内互联网公司的面试体验就是考察谁背得多记得牢……因为我真的很讨厌背书,所以当然表现得一般,不够出众。从用人角度来看确实是省成本的考察方式,不过背得好是否就能做得好呢?

反复背诵和刷题真的消磨心智(不过题还是会继续做的),拿到 offer 终于可以继续学习感兴趣的东西,为入职做准备要系统学习学习 Java 了,想学的和要学的东西真的好多www

PS:外企真香,赶紧把英语提上日程。