由于我在自我介绍时提到应聘的是Java岗,因此面试官直接抛出问题:“你对Java这门语言了解的深度是多少”,“是否看过JDK的源码”(当场傻眼...)。如果回答看过,好,进坑了,因为面试官会继续追问:“那来说一下都看过哪部分”(大型懵逼现场)。卡壳了,好,引导来了,“比如Java的集合有看过吗”,于是大胆引出HashMap。好,又进坑了,“那咱们聊一下HashMap,首先说一下它的原理吧,它是以一种什么样的数据结构来实现的”。
面试官问的面试题: 1.HashMap的数据结构——引出Java7跟Java8的区别
2.在什么情况下会做一个链表到红黑树的转换
3.除了数据结构之外,Java8跟Java7在HashMap上还有什么不同
4.扩容的过程,在什么情况下会扩容
5.扩容机制中的capacity初始值为什么是16,可不可以自定义成15,为什么一定要是2的指数次方
6.简单介绍一下hash算法,它的核心性能,或者说判断一个hash算法好坏的指标是什么,indexFor()函数的实现
7.HashMap为了解决什么问题?——引出哈希碰撞
8.介绍ConcurrentHashMap的数据结构
9.ConcurrentHashMap可以支持多少并发线程
10.ConcurrentHashMap属于JOC下的一个类,对JOC这个包的了解
11.是否用过synchronized,之前是否碰到过并发问题,怎么处理
12.在Java技术栈方面,有没有比较擅长或者深入了解的点,是否从源码上看过一些东西
数据库1.对MySQL了解多少——引出必问知识点(划重点!!!事务和索引)
2.MySQL用的隔离级别是什么,这个隔离级别下会出现什么问题——引出数据库的并发问题
3.MySQL使用这种隔离级别时,是如何解决幻读问题的(引申,理解其他并发问题的解决原理)
4.MySQL的调优机制,主要是哪些方面的调优——引出索引
5.在MySQL的InnoDB这个存储引擎下,聚集索引(或者聚簇索引)和非聚集索引这两个概念
6.MySQL中的索引是用什么数据结构存储的——此处应该引出B+树
7.为什么通过索引查询速度会更快一些——此处应该引出二叉树算法
1.自我介绍,主要是针对自我介绍的内容进行提问,包括专业成绩啥的
2.项目经历,由于在简历中提及过自己的项目,所以会针对性的对项目的细节提问,这里要特别注意,一定要对简历里面的内容都很熟悉,并且知道细节
1)自我介绍
2) 介绍项目。目前做的是android项目,所以问了android的架构模型(四层),然后framework层都是有什么。
3) java的第一个问题,Comparator和Comparable的区别和应用场景。(这个简单回答了一些,但是没回答圆满)
4) 正则表达式(一个字符串中的第三个数)(这个正则表达式没有写上来,然后让用java代码实现,说主要思路)
5) OSI七层模型
6) 进程通信
7) 线程同步(为什么线程同步,不同步会发生什么问题,举例场景)
8) 死锁
9) I/O流(文件流是什么,有没有缓冲区,缓冲区这个不清楚:后面查资料,FileInputStream是没有缓冲区的,BufferedIuputSteam才有)
10)然后文件到CPU的过程(存储,没学过,没回答上来)
11) I/O流不关闭会出现什么问题(说会出错误,IOException,然后追问是具体是什么错误,没回答上来)
12) 序列化和反序列化
13)还有我写了熟悉C#,然后介绍java和C#的区别。