BAT一面:java高级和算法
java高级内容:
-
你对集合那么熟悉,看过哪些源码?HashMap,HashTable,ConcurrentHashMap等等
-
讲到ArrayList,讲一下初始长度,扩容机制。
-
说一下ArrayList和LinkedList区别
-
大量数据下在LinkedList前1/10处插入效率高,在ArrayList中部以及后部插入效率高,解释原因。
-
JAVA的jvm:内存模型、分代的介绍、每个代的操作,gc算法。
-
类加载器、双亲委派模型、双亲实现,反双亲设计,类隔离。
-
hashmap实现、concurrenthashmap实现、读取时不加锁是因为使用了volatile关键字。long类型作为value存取的加锁,把long也使用分段锁进行加锁。
-
volatile实现,锁分类介绍、AQS介绍、公平锁非公平锁介绍。
-
并发、并发中的threadlocal介绍有,原理。
-
NIO和BIO的区别。
-
spring的AOP和IOC
算法
-
对冒泡与快排的改进。
-
二分查找,与变种二分查找。
-
二叉树、B+树、AVL树、红黑树、哈夫曼树。
-
二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。
BAT二面:性能调优和缓存
-
java gc 算法 垃圾收集器 分代 分区 参数配置
-
Minor GC与Full GC分别在什么时候发生?
-
几种常用的内存调试工具:jmap、jstack、jconsole。
-
java8新特性
-
concurrenthashmap
-
redis数据结构
-
redis线程模型
-
redis数据淘汰机制
-
读过redis源码吗?
-
事务的四个特性
-
mysql实现事务的原理(MVCC)
-
aop事务的隔离级别和传播特性
-
http请求头有哪些
-
三次握手中为什么不是两次?为什么不是四次?
BAT三面:高并发项目
-
具体的秒杀细节怎么做的?秒杀的核心技术在哪儿?你怎么保证的?
-
超卖怎么解决?讲一讲spring的事务特性
BAT面试总结:
基础好+项目经验充分+良好的综合素质=好的Offer
如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础也不好,那么你拿到offer的概率就会比较低,但是你可以多投几家公司,这样拿到offer的几率就要大一点,因为你总有运气好的时候。所以,不要惧怕面试,刚开始失败了没什么的,多投多尝试,面多了你就自然能成面霸了。得失心也不要太重,最后每个人都会有offer的。
基础这东西,各个公司都很看重,尤其是BAT这种大公司,他们看中人的潜力,他们舍得花精力去培养,所以基础是重中之重。之前很多人问我,项目经历少怎么办,那就去打牢基础,当你的基础好的发指的时候,你的其他东西都不重要了。
基础无外乎几部分:语言(C/C++或java),操作系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域。
项目经验:
面试官最喜欢问如下三个问题:
1. 你的最有技术挑战的项目是什么,你扮演的角色?
2. 你在项目中遇到的最大的困难是什么,怎么解决的?
3. 如果给你一个高并发场景,比如:秒杀、抢购(高并发项目)、你来讲讲你的设计思路。
良好的综合素质:
什么是好的综合素质,就是在面试过程中,良好的礼节、流畅的表达、积极的交流。很多公司不光看你的技术水平怎么样,而更看重的是你这个人怎么样的。所以在面试过程中,请保持诚信、积极、乐观、幽默,这样更容易得到公司青睐。