前言
我最初是投的阿里的某部门,在10月18号之前提前批面了四次,貌似是那个部门的好几个团队都来面我,所以导致最后只算过了两面.
10月18号之后进入系统,参加了10月23号的笔试,结果是1AC,另一题由于看错题目只过了0.1,然后过了几天阿里的HR打来电话约了交叉面,
交叉面是一个p9的大佬,先让我准备一段最能体现我编程能力的代码,然后面试问题主要就是根据这个代码来(我把我在学校做的一个分布式的项目中的一部分拿出来讲了),
然后10月31号面完HR面
在11月初收到了offer!
简历面
-
简历面是一个晚上突如其来的电话面试。
-
论文是什么方向?
-
本科大三未写论文
-
Java有学过专业的课程吗?
学过 -
有了解过JVM相关的问题吗?能大概介绍一下吗?
讲了一下类加载机制、内存结构和GC算法 -
各个垃圾回收器有什么区别?
-
什么情况下会Stop The World?
各个垃圾回收器STW的时机不完全相同,需分别讨论。 -
什么情况下用G1?
实时性要求高 -
G1和CMS有什么区别?
GC算法不同,G1为标记-整理、CMS为标记-清除,以及内存结构不同 -
对Java的集合了解吗?知道底层是怎么实现的吗?
讲了一下ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、LinkedHashMap、HashSet的实现原理 -
Tip:Java集合几乎是面试必考题,尤其是HashMap和ConcurrentHashMap请务必深入理解其用途和实现原理,这两个集合在Java 7及以前和Java 8及以后的实现原理是不一样的,尽可能都了解一下
-
哪些集合可以存放null?
上述集合除了Hashtable和ConcurrentHashMap都可以。 -
哪些集合可以存放重复的元素?
Set不能重复,Map的key不能重复。 -
Java多线程中一般使用哪些锁?
讲了ReentrantLock和synchronized关键字的用法和实现原理 -
synchronized关键字可以加在static方法上吗?锁的是什么?
可以,锁的是Class对象 -
synchronized关键字加在非static方法上时锁的是什么?
锁的是类的实例 -
ReentrantLock的特点和使用方法?
讲了“可重入”的概念及实现方式以及lock、tryLock、unlock等基本的方法,以及使用这些方法实现一个简单的自旋锁的原理
Tip:ConcurrentHashMap在Java 7及以前使用的是可重入锁,不妨了解一下其如何使用可重入锁来实现线程安全
线程之间共享哪些内容?
不共享JVM调用栈、本地调用栈和程序计数器 -
如何访问这些共享的内容?
先访问CPU缓存,再访问Java内存,会有缓存一致性问题,可以使用volatile关键字
volatile和synchronized的区别?
一个保证缓存一致性