“lz”是非科班自学的java,毕业后进入卡中心,现在是2年开发经验。20年年初先后面了头条、拼多多和阿里(淘宝和支付宝),并成功拿到阿里和头条两家的offer。

面试前我主要是不断的刷题且看了很多大牛的面经进行查漏补缺,所以面试完后也想记录下来,权当给大家提供点信息吧。(面试过了一周了,记忆也有点混乱,争取想到多少就记下来多少)。

顺便提一下面试体验:头条 > 阿里 > pdd
拼多多最垃圾的面试体验,没有之一。我约的视频面,结果面试官说有事给我打电话面,然后给我一个文档,是一个算法。我在写算法的时候没察觉到电话信号不好断掉了。然后我回拨过去,面试官来了一句:你不要故意挂断电话去查答案。我%@#¥@#%@5,保持微笑解释信号不好。后来为了信号好一点我去阳台面试,冻的瑟瑟发抖,这个时候心态已经炸了,又冷又紧张,算法题有思路但是一直被这个人否定,最后挂了。

头条

最开始面的头条游戏中台,当时是第一次面试,没有经验,导致算法题虽然有思路,但是没有写出最优解,直接挂了。后来又被捞起来,因为此时已有阿里的offer,所以胆子也大起来了,收拾心情开始面头条。

头条的面试特点基本就是一个套路:【自我介绍】->【项目介绍】->【手撕算法】->【基础知识】,屡试不爽。

  • 自我介绍:我是xxx,来自xxx,毕业后在xxx几年,期间负责xxx。
  • 项目介绍:xxxxx。项目的时候面试官会问你难点和解决方案,同时会给你提出场景,问你更优化的思路。
  • 手撕算法:多刷题,也可以看看别人面过的算法题,可能会重复。
  • 基础知识:针对简历写的东西问,我被问的较多的是一些中间价,Redis、MySQL、Kafka、ElasticSearch,Java基本没问,因为头条这边使用Go。

一面

  1. Two Sum
  2. 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。给定m个可能重复的字符[a, b, d, d]呢?
  3. 提供一个整型数组以及一个整数s,如果该数组中存在n个连续元素,且元素相加之和大于等于s,则返回满足该条件的连续元素的最小长度;否则返回0
  4. MySQL集群。假如集群出现延迟怎么处理。
  5. Redis的zset实现延时任务
  6. 设计题:如何设计tiny url
  7. 为什么要四次挥手
  8. HTTPS

第二天收到hr小姐姐的电话,约了面试时间。

二面

  1. 自我介绍
  2. 项目介绍
  3. K Group反转链表。写了栈和迭代两种实现方式,链表的题写起来很痛苦,很容易边界出错。
  4. Redis的持久化机制
  5. MySQL的隔离级别
  6. MySQL索引,聚簇索引和二级索引
  7. Redis高可用方案
  8. 介绍一些Kafka的一些概念
  9. Kafka如何保证消息有序
    ...忘了

过了一天又收到hr小姐姐的电话,开心。

三面

  1. 自我介绍
  2. 项目介绍
  3. 第K大的数
  4. 设计题:秒杀系统
  5. MySql的索引优化
  6. HTTPS
    ...忘了

三面完了正好是周五,忐忑的等到了周一,以为挂了。结果下午收到hr加微信,约了hr面。

hr面

  1. 为啥离职,怎么想的
  2. 介绍项目
  3. 怎么和团队的人沟通,和成员出现冲突时怎么解决。
  4. 期望薪资,你现在的薪资

三个工作日收到了offer,头条面试体验还是很棒的。

找朋友内推的蚂蚁金融核心,结果第二天就被拒了,杭州淘宝给我来电话,说我被捞起来了。确认了一下,确实如此,那就面吧。

阿里

还是很想去阿里的,所以也很忐忑,淘宝一共经历了4轮技术+1轮笔试+hr面,流程很长,面的我压力山大。
阿里的面试特点:【自我介绍】->【项目介绍】->【场景解决】->【基础知识】,阿里面试除了基础以外,也很看重候选人的解决问题的思维。还是需要候选人有点积累的,假如你写的项目不是自己的,很容易就被问出来。

一面

  1. 自我介绍
  2. 项目难度介绍
  3. 如何实现延时任务
  4. 如何实现限流
  5. 线程池的参数
  6. 能不能自己实现一个java.lang.String并加载
  7. Redis为什么这么快
  8. epoll和poll的区别
  9. 进程同步的方式

二面

  1. MySQL的索引机制
  2. 如何自己实现内存分配和管理?不太懂,然后说了jvm的垃圾回收机制
  3. 你们公司内部的RPC框架,介绍一下
  4. Redis的key过期策略
  5. 缓存穿透和缓存雪崩
  6. 分布式锁
  7. 如何实现全局的id生成策略
  8. 悲观锁和乐观锁
  9. 红黑树了解么

三面

  1. 如何实现群消息已读
  2. 消息推送如何保证不重复
  3. Kafka如何保证消息的可靠性
  4. RPC是什么,和http调用有什么区别
  5. 说一说你项目的架构
  6. GC
  7. MySQL的索引原理,给了一个场景,如何优化
    ...忘了

面完3面后居然又来了一个笔试题

笔试

  1. producer-consumer
  2. 两线程交替打印
  3. 多线程模拟100分钱随机分给20个人,每个人最少分配到2分钱

四面

  1. 写个producer-consumer吧,我说上次写过了。。傻了。。不该说的,然后面试官换了一道题,还好比较简单,写个二分查找,2分钟写完完事。
  2. 项目难点
  3. MVCC
  4. HTTPS
  5. ElasticSearch的查询过程
  6. Kafka如何保证高可用
  7. Reids的集群和选主
  8. 知道什么分布式一致性算法
  9. 如何实现定时关单
    ...忘了

HR面

阿里的hr面真是让我难忘。

  1. 说说看,假如你是部门技术经理,线上商户数据丢失怎么办
  2. 怎么将一个产品推荐给其他的团队,怎么界定边界
  3. 怎么样协调关系
    (我才2年啊喂,到这里我已经快冒汗了,生怕最后一关毙掉了)
  4. 你和同事相处的情况怎么样,说说你帮助同事的一次经历
  5. 薪资

阿里的面试流程很长,而且一个部门挂了以后,会被另一个部门捞起来,不停的面。总之来说,阿里的面试体验也还不错,就是经常被放鸽子。
支付宝的面试经验其实也大同小异,我就不贴了。

复盘经历

1、众所周知,面试这些大厂算法和底层是必不可少的一部分、所以刷题也是围绕着这方面进行,押题大神左程云的《程序员算法面试指南》对我帮助特别大,学习起算法来也是通俗易懂。(532页,几百道算法题)

image
image
image
image

2、刷题终究是必不可少的,筹备了好几本面试宝典和一份Java核心知识宝典,共计有上千道面试题,抽空就刷题复查,其中技术点概况了:java基础、jvm、多线程、高并发、分布式、Redis、spring全家桶系列、dobbo、mysql、网络协议、mybatis、ZK、nginx、kafka等等

image
image
image
image
image
image

3、Java面经,总结他人之长处弥补自身的不足,来自一群大牛的面试经历亲述,有面试美团、腾讯、阿里等等。

image
image
image
image

整理分享不易,对个人复盘面试资料、面经等等感兴趣的朋友们可以点赞+关注,

祝大家在今年金三银四能拿到心仪的offer!