fkdz7372

拿下阿里、头条、滴滴的 offer 后谈谈面试经验(上)

  fkdz7372 · Mar 19, 2019 · 27127 views
This topic created in 2645 days ago, the information mentioned may be changed or developed.

本人两年开发经验、18 年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、滴滴等公司 offer,岗位是 Java 后端开发,最终选择去了阿里巴巴。

面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在阿里也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角

更多文章见个人博客:https://github.com/farmerjohngit/myblog

面试流程

先说下面试流程,一般大公司都有 3-4 轮技术面,1 轮的 HR 面。就阿里而言,我共经历了 4 轮技术面,前两轮主要是问基础和项目实现,第 3 轮是交叉面,两个面试官,主要是问项目实现和拓展。第 4 轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。

HR 面主要就是跟你聊聊天,看看你的个人稳定性、价值观、主动性之类的,一般 HR 是不会挂人的,但很多人在 HR 面后挂了,原因其实不是你在 HR 面的表现不好(少数情况除外),而是你之前几面的表现一般,比 60 分要高一点(所以没在前面的面试直接挂了你),但是又没达到 80 分,这个时候公司基于 hc、人才配比、与其他候选人的对比等多个维度考虑,最终决定是否给你 offer。

另外要特别说下的是,今日头条对算法的考察会比较多,我面了 4 轮技术,每一轮都会问 1 到 2 个算法题,大概是 leetcode 上 easy 和 medium 难度。所以想去头条的同学最好先去 leetcode 上刷刷题。

要注意的点

  • 简历一到两页为最佳,将项目经历写 2-3 个左右就差不多了,一定要写最有亮点的项目
  • 工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司
  • 博客没什么好文章,github 没好项目就不要写在简历中了
  • 对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的
  • 遇到不会的问题直接说不会,不要不懂装懂
  • 遇到比较确定的问题,要有自信一点,有时候面试官可能会故意用怀疑的语气来考察你
  • 面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清,导致原本会的问题也会让面试官觉得你没答到点上(尤其是电话面)
  • 面试过程中可以自信但不要与面试官争执
  • 面试完后不要直接问面试结果
  • 面试保持自信而不自大,曾经问一位候选人说对 hashmap 是了如指掌,结果问到 hashmap 扩容时需不需要重新计算 hash 就懵逼了。对于很多人来说,面试官总有办法把你问倒的。
  • 每次面试后都总结有哪些答的不好的地方,有哪些知识点的盲区,解决掉。
  • 被问到为什么想跳槽的时候,因该从自身发展等角度出发,而不是吐槽前公司

另外,在求职的过程中也碰到过少数没有素质的面试官,比如一上来就一副很不屑的语气,话没说两句开始 diss 你的项目,给人的体验很不好。所以也请各位面试官或将来要做面试官的同学,能在面试的过程中保持基本的礼貌和尊重,就像在阿里常说的:你面试别人的时候,别人也在面试着你

最重要的一点,不要因为几次的面试失败就开始怀疑自己,永远记住,面试的结果=实力+运气。有时候你擅长的东西可能面试官根本不会,所以他也不可能花很多时间去问他不懂的东西;有时候可能他问你的你都会,但是可能因为对方提问方式、语气等原因,答的就是不顺畅。

接下来说技术相关的考察。

总的来说,技术相关的考察主要分为两大块,一是基础,二是经验。

基础包括 java 基础、数据库、中间件等,来自于日常的积累和面试前的准备。

经验包括以往做过的项目、解决的问题、以及一些场景题(比如你的项目如果流量大了十倍如何保证可用)。

本文主要说基础,下篇文章将说经验。

基础

以下都是我认为面试中经常会被考察到的知识点的整理,不够完整,但大部分都是常见面试题。

java 基础

集合

集合分为两大块:java.util 包下的非线程安全集合和 java.util.concurrent 下的线程安全集合。

List

ArrayList 与 LinkedList 的实现和区别

Map

HashMap:了解其数据结构、hash 冲突如何解决(链表和红黑树)、扩容时机、扩容时避免 rehash 的优化

LinkedHashMap:了解基本原理、哪两种有序、如何用它实现 LRU

TreeMap:了解数据结构、了解其 key 对象为什么必须要实现 Compare 接口、如何用它实现一致性哈希

Set

Set 基本上都是由对应的 map 实现,简单看看就好

常见问题

  • hashmap 如何解决 hash 冲突,为什么 hashmap 中的链表需要转成红黑树?
  • hashmap 什么时候会触发扩容?
  • jdk1.8 之前并发操作 hashmap 时为什么会有死循环的问题?
  • hashmap 扩容时每个 entry 需要再计算一次 hash 吗?
  • hashmap 的数组长度为什么要保证是 2 的幂?
  • 如何用 LinkedHashMap 实现 LRU ?
  • 如何用 TreeMap 实现一致性 hash ?

线程安全的集合

Collections.synchronized

了解其实现原理

CopyOnWriteArrayList

了解写时复制机制、了解其适用场景、思考为什么没有 ConcurrentArrayList

ConcurrentHashMap

了解实现原理、扩容时做的优化、与 HashTable 对比。

BlockingQueue

了解 LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue、SynchronousQueue

常见问题

  • ConcurrentHashMap 是如何在保证并发安全的同时提高性能?
  • ConcurrentHashMap 是如何让多线程同时参与扩容?
  • LinkedBlockingQueue、DelayQueue 是如何实现的?
  • CopyOnWriteArrayList 是如何保证线程安全的?

并发

synchronized

了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和 ReentrantLock 的区别

CAS

了解 AtomicInteger 实现原理、CAS 适用场景、如何实现乐观锁

AQS

了解 AQS 内部实现、及依靠 AQS 的同步类比如 ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier 等的实现

ThreadLocal

了解 ThreadLocal 使用场景和内部实现

ThreadPoolExecutor

了解线程池的工作原理以及几个重要参数的设置

常见问题

  • synchronized 与 ReentrantLock 的区别?
  • 乐观锁和悲观锁的区别?
  • 如何实现一个乐观锁?
  • AQS 是如何唤醒下一个线程的?
  • ReentrantLock 如何实现公平和非公平锁是如何实现?
  • CountDownLatch 和 CyclicBarrier 的区别?各自适用于什么场景?
  • 适用 ThreadLocal 时要注意什么?比如说内存泄漏?
  • 说一说往线程池里提交一个任务会发生什么?
  • 线程池的几个参数如何设置?
  • 线程池的非核心线程什么时候会被释放?
  • 如何排查死锁?

推荐文章:

死磕 Synchronized 底层实现--概论(比较深入)

引用

了解 Java 中的软引用、弱引用、虚引用的适用场景以及释放机制

常见问题

  • 软引用什么时候会被释放
  • 弱引用什么时候会被释放

推荐文章:

Java 引用类型原理剖析(比较深入)

类加载

了解双亲委派机制

常见问题

  • 双亲委派机制的作用?
  • Tomcat 的 classloader 结构
  • 如何自己实现一个 classloader 打破双亲委派

IO

了解 BIO 和 NIO 的区别、了解多路复用机制

常见问题

  • 同步阻塞、同步非阻塞、异步的区别?

  • select、poll、eopll 的区别?

  • java NIO 与 BIO 的区别?

  • refactor 线程模型是什么?

JVM

GC

垃圾回收基本原理、几种常见的垃圾回收器的特性、重点了解 CMS (或 G1 )以及一些重要的参数

内存区域

能说清 jvm 的内存划分

常见问题

  • CMS GC 回收分为哪几个阶段?分别做了什么事情?
  • CMS 有哪些重要参数?
  • Concurrent Model Failure 和 ParNew promotion failed 什么情况下会发生?
  • CMS 的优缺点?
  • 有做过哪些 GC 调优?
  • 为什么要划分成年轻代和老年代?
  • 年轻代为什么被划分成 eden、survivor 区域?
  • 年轻代为什么采用的是复制算法?
  • 老年代为什么采用的是标记清除、标记整理算法
  • 什么情况下使用堆外内存?要注意些什么?
  • 堆外内存如何被回收?
  • jvm 内存区域划分是怎样的?

推荐文章:JVM 垃圾回收历险

中间件、存储、以及其他框架

Spring

bean 的生命周期、循环依赖问题、spring cloud (如项目中有用过)、AOP 的实现、spring 事务传播

常见问题

  • java 动态代理和 cglib 动态代理的区别(经常结合 spring 一起问所以就放这里了)

  • spring 中 bean 的生命周期是怎样的?

  • 属性注入和构造器注入哪种会有循环依赖的问题?

Dubbo (或其他 Rpc 框架)

了解一个常用 RPC 框架如 Dubbo 的实现:服务发现、路由、异步调用、限流降级、失败重试

常见问题

  • Dubbo 如何做负载均衡?
  • Dubbo 如何做限流降级?
  • Dubbo 如何优雅的下线服务?
  • Dubbo 如何实现异步调用的?

RocketMq (或其他消息中间件)

了解一个常用消息中间件如 RocketMq 的实现:如何保证高可用和高吞吐、消息顺序、重复消费、事务消息、延迟消息、死信队列

常见问题

  • RocketMq 如何保证高可用的?
  • RocketMq 如何保证高吞吐的?
  • RocketMq 的消息是有序的吗?
  • RocketMq 的消息局部顺序是如何保证的?
  • RocketMq 事务消息的实现机制?
  • RocketMq 会有重复消费的问题吗?如何解决?
  • RocketMq 支持什么级别的延迟消息?如何实现的?
  • RocketMq 是推模型还是拉模型?
  • Consumer 的负载均衡是怎么样的?

Redis (或其他缓存系统)

redis 工作模型、redis 持久化、redis 过期淘汰机制、redis 分布式集群的常见形式、分布式锁、缓存击穿、缓存雪崩、缓存一致性问题

推荐书籍:《Redis 设计与实现》

推荐文章:

https://github.com/farmerjohngit/myblog/issues/1

https://github.com/farmerjohngit/myblog/issues/2

https://github.com/farmerjohngit/myblog/issues/5

常见问题

  • redis 性能为什么高?
  • 单线程的 redis 如何利用多核 cpu 机器?
  • redis 的缓存淘汰策略?
  • redis 如何持久化数据?
  • redis 有哪几种数据结构?
  • redis 集群有哪几种形式?
  • 有海量 key 和 value 都比较小的数据,在 redis 中如何存储才更省内存?
  • 如何保证 redis 和 DB 中的数据一致性?
  • 如何解决缓存穿透和缓存雪崩?
  • 如何用 redis 实现分布式锁?

Mysql

事务隔离级别、锁、索引的数据结构、聚簇索引和非聚簇索引、最左匹配原则、查询优化( explain 等命令)

推荐文章: http://hedengcheng.com/?p=771

https://tech.meituan.com/2014/06/30/mysql-index.html

http://hbasefly.com/2017/08/19/mysql-transaction/

常见问题

  • Mysql(innondb 下同) 有哪几种事务隔离级别?
  • 不同事务隔离级别分别会加哪些锁?
  • mysql 的行锁、表锁、间隙锁、意向锁分别是做什么的?
  • 说说什么是最左匹配?
  • 如何优化慢查询?
  • mysql 索引为什么用的是 b+ tree 而不是 b tree、红黑树
  • 分库分表如何选择分表键
  • 分库分表的情况下,查询时一般是如何做排序的?

zk

zk 大致原理(可以了解下原理相近的 Raft 算法)、zk 实现分布式锁、zk 做集群 master 选举

常见问题

  • 如何用 zk 实现分布式锁,与 redis 分布式锁有和优缺点

HBase (如简历有写)

HBase 适用的场景、架构、merge 和 split、查写数据的流程。

推荐文章: http://hbasefly.com/2017/07/26/transaction-2/ 及该博客下相关文章

Storm (如简历有写)

Storm 与 Map Reduce、Spark、Flink 的比较。Storm 高可用、消息 ack 机制

算法

算法的话不是所有公司都会问,但最好还是准备下,主要是靠刷题,在 leetcode 上刷个 100-200 道 easy 和 medium 的题,然后对应公司的面经多看看,问题应该不大。

招聘

我所在的部门是阿里巴巴菜鸟网络下的国际事业部,主要是为速卖通、天猫海外、lazada 等跨境电商提供国际物流解决方案。国际化是阿里巴巴集团未来三年五年的战略目标之一,目前业务也是高速发展的阶段,集团这几年也是往菜鸟这边在大量投入人才和资源。另外,菜鸟 p6 就有期权(集团是 p7 )。

邮箱: [email protected]

招聘岗位:Java 开发,base 杭州

要求:

  1. 计算机相关专业本科及以上学历,三年以上软件开发经验;
  2. Java 基础扎实,熟悉 JVM 原理、Java 高级特性、Java 网络编程、Java 多线程编程;
  3. 熟悉 Java 主流开源框架,如 Spring、Dubbo、Netty 等,掌握底层原理和机制;
  4. 熟悉 MySql、MyBatis 等数据库相关技术,对 SQL 性能优化有经验;
  5. 了解分布式系统原理:CAP、最终一致性、幂等操作、分布式事务等;
  6. 了解大型网络应用架构:MQ、缓存、负载均衡、集群技术、数据同步、高可用、可容灾等;
  7. 良好的团队合作精神和沟通能力,能主动寻求挑战、采取行动、达成目标;
  8. 持续学习,追求卓越,能为团队引入创新的技术和方案,用创新的思路解决问题
122 replies    2020-03-22 17:53:11 +08:00
1  2  
phieo2018
    101
phieo2018  
   Mar 20, 2019
蚂蚁金服招人,欢迎回复。。。
asd123456cxz
    102
asd123456cxz  
   Mar 20, 2019
@ifxo #86 不太懂,好奇问下,内推和面试真的有联系吗?额,我个人挺佩服楼主的,想按照他的成长速度提升,就是项目不够好有点怂
diveIntoWork
    103
diveIntoWork  
   Mar 20, 2019
竟然发现跟楼主是一个部们的,可以加个微信不咯,我应届还没入职 :[doge]
BBCCBB
    104
BBCCBB  
   Mar 20, 2019
楼主,想咨询下国际事业部是传言的那样没什么技术含量和出差+加班很严重的吗?
tlriavsihd
    105
tlriavsihd  
   Mar 20, 2019
期待(下)
fkdz7372
    106
fkdz7372  
OP
   Mar 20, 2019
@saltxy 应该有,具体可以去阿里招聘官网看下。我们部门都是在杭州的
fkdz7372
    107
fkdz7372  
OP
   Mar 20, 2019
@phieo2018 大兄弟 过分了啊 哈哈
fkdz7372
    108
fkdz7372  
OP
   Mar 20, 2019
@diveIntoWork 才发现没有私聊的功能,你邮件我把
fkdz7372
    109
fkdz7372  
OP
   Mar 20, 2019
@BBCCBB 你说的国际事业部是集团下面的还是菜鸟国际?
BBCCBB
    110
BBCCBB  
   Mar 20, 2019
楼主,集团下面的国际事业部是比较惨,菜鸟国际好一点是吗 ==
LongV2
    111
LongV2  
   Mar 20, 2019
校招生的基础也应该达到这个水平吗?现在看 spring 源码看得头疼...
lincanbin
    112
lincanbin  
   Mar 21, 2019 via Android
头条比阿里总包高百分之几?
我怎么感觉今年同岗位薪酬不升反降。
nekolr
    113
nekolr  
   Mar 21, 2019 via Android
@fkdz7372 想问实习算工作经验不,听说有的算
fkdz7372
    114
fkdz7372  
OP
   Mar 21, 2019
@BBCCBB 集团下面的不太了解。 我们这边业务发展很快、想象空间也很大,做的事情从技术上来说也很有挑战。
fkdz7372
    115
fkdz7372  
OP
   Mar 21, 2019
@LongV2 校招生肯定要求低很多的
fkdz7372
    116
fkdz7372  
OP
   Mar 21, 2019
@nekolr 工作年限的限制都不是硬性的。
windsage
    117
windsage  
   Mar 21, 2019 via Android
thx
zhangkc
    118
zhangkc  
   Mar 21, 2019 via iPhone
能力还不错,底层了解很多啊
ofblyt
    119
ofblyt  
   Mar 21, 2019
城市套路深,我要回农村
c4f36e5766583218
    120
c4f36e5766583218  
   Apr 3, 2019
```扩容时避免 rehash 的优化```指哪方面?
chunrong918
    121
chunrong918  
   Apr 19, 2019
我直接问面试结果了,会对我的面试结果产生影响吗
God365
    122
God365  
   Mar 22, 2020
谢谢分享总结,可以为后来新入门的人指方向
1  2  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2527 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 83ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
♥ Do have faith in what you're doing.