前言
学习群的几个小伙伴和我都有面试ebay 大数据岗位的经历,而且也都拿了offer,我特意抽出了一些时间把问题和部分答案就行了汇总,希望对大家有帮助。
全文篇幅1万字左右,从数据结构到Java再到大数据都有整理,可以先收藏起来,补缺补漏。ebay大数据组也持续招人,要投简历的可以把简历私发到我微信。
小提示:绿色的题代表是简单的,黄色的题代表中等,红色代表有点难度;绿色题回答的很全面,很深入,则有可能比红色的题还难;蓝色的是作为扩展,面试的时候问到的不是很多,能答出来挺好,答不出来也没关系
一、 java基础
1、 Queue和Stack你平时有用过么,说说你常用的方法,他们的却别在哪呢?
2、 了解java的异常吗,有什么区别,常见的异常有哪些呢?
3、 两个字面值相同的Integer,它们两个用等于号去比较,结果是true还是false?(这个题要分两部分去回答,结果可能为true,也可能为false。因为有缓存)
4、 可以讲一下你常用的集合类么?他们的实现类有哪些?
5、 ArrayList、LinkedList的区别,底层的实现呢了解吗,有没有什么优缺点,分别适合于什么样的场景,多线程环境下,有没有安全的list的实现类呢?
6、 其他数据结构的了解吗?LinkedHashMap、ConcurrentSkipHashMap(作为一个扩展,面试的时候问到的不是很多,能答出来挺好,答不出来也没关系)
7、 说一说你对HashSet的理解,越详细越好 ( tip:底层是用hashMap实现的),treeSet有了解吗?聊一聊?
8、 HashMap的疯狂试探:
a. HashMap的底层数据结构是什么样子的
b. 了解hash冲突吗?它是如何解决hash冲突的
c. 请你简单叙述一下hashMap的put和get操作,当然,能说多细就说多细?
d. Jdk7和jdk8中对hashMap做了什么改进嘛(红黑树)?
e. 有没有其他的解决冲突的办法呢
f. HashMap中的hash函数了解吗?那他的扩容机制了解吗?
g. HashMap为什么扩容是2倍呢,可以说说嘛?
h. 假如说我加入一个键值对,这个时候出现了冲突,它只怎么把这个节点加入进去?是加入到当前bucket所对应的链表的头结点还是尾节点?(答不上来可以问一个稍微简单的,equals和 == 的区别,以及其中hashCode的作用)
i. 可以说说什么条件下,可以把一个链表转成红黑树呢?它里面的大概流程是什么,了解吗?
j. 有没有想过为什么选用了红黑树,而不是其他的数据结构,譬如说二叉树,二叉查找树,或者其他的树?
k. 在高并发大流量的情况下,hashMap有什么问题吗,会不会造成cpu达到100%?如果会,那是在哪一步可能会出现这个问题呢(插入、删除、查找、扩容)?
9、 ConcurrentHashMap的疯狂试探:
a、 他和HashTable的区别呢?
b、 说说你对JUC包的了解?
c、 ConcurrentHashMap中是怎么加锁的?
d、 1.7和1.8中,ConcurrentHashMap的区别是什么?
e、 ConcurrentHashMap是怎么做到线程安全的呢?(CAS和锁)
f、 为什么会抛弃分段锁,它有什么毛病吗(上面一个题回答上才可以问这个)?
g、 知道红黑树的transfer过程么?简单的描述一下
10、 多线程下的疯狂试探:
a. 多线程了解吗?说说线程的生命周期?
b. 线程池有用到过吗?怎么用的,jdk有提供那些线程池(总共提供了四种)?
c. 线程的状态有哪些呢?
d. 线程池的核心参数有哪些?(核心线程数、最大线程数、时间、时间单位、队列、拒绝策略、默认的线程工厂)
e. Wait,yeild,stop,sleep、join、start、run的区别和如何使用?
f. 接着上题:这四种有什么区别吗,你用过哪一种,可能存在什么问题吗?
g. 接上题:拒绝策略有哪些呢?了解吗?聊聊?
h. 接上题:你刚才说了队列,线程池中的队列有哪些?有界队列、无界队列、同步队列都有了解吗?聊聊?
i. 如何实现一个消费者和生产者的循环消费和生产呢?(有两种方式,一种是通过锁,lock或者Synchronize,还有一个是通过ArrayBlockingQueue实现)
j. 你可以实现线程之间的相互通信吗?如何实现?要不写一个?
11、 线程安全的疯狂试探:
a. Synchronzie了解吗?谈谈你的理解
b. 在一个普通方法上加synchronize和在一个静态方法上加synchronize有什么区别(对象锁和类锁的的区别)?
c. Synchronize和lock有什么区别呢?说说你对lock的理解?
d. Lock的公平和非公平锁?
e. 说一说volitaile为什么保证不了原子性,可以保证可见性嘛?如何保证的(jvm的多线程的内存模型有关系)
f. 了解CountDownLatch么,CyclicBarrier的区别呢?
g. Synchronize的实现原理知道吗?moniter的实现机制呢,为什么加了Synchronzie关键字,就可以在多线程下是安全的(这个回答要从java对象的Object头来回答)
h. 类锁和对象锁的区别呢?字节码的体现呢?
i. Java中的自旋锁、偏向锁、读写锁、重锁等了解吗?
j. 了解java重对象的对象头嘛?有哪些属性和字段呢?
k. Aqs(AbstractQueuedSynchronizer)了解吗?它和lock的关系?说说aqs中的核心思想?
l. Lock中存在锁升级嘛,他是可重入得嘛,那Synchronize是可重入得嘛,有没有锁升级的概念?
m. Volitaile了解吗?他的作用是什么呢,内存语义是什么呢?有没有了解过cpu的缓存一致性协议?
n. 还知道其他的juc类嘛,有哪些呢(譬如lockSupport)?
12、 jvm的疯狂试探:
a. 了解jvm么?jvm的内存模型?
b. Java如何判断一个对象是否还活着呢?
c. Java的类加载了解吗?
d. Java类加载器了解吗,有哪些呢?那它的双亲委派了解吗?
e. Jvm指令你知道哪些(jps,jstack,jinfo,jmap……),都有什么作用呢?
f. Java的垃圾回收算呢,了解吗,G1回收算法了解吗?
g. Jvm参数你了解吗,知道多少说多少?