【此文章转自乐字节】
前言
最近看到很多小伙伴都在因为面试烦恼,所以小编总结了一些面试经验,希望能帮助到大家。
Java面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。
这个列表有一点不同,我鼓励你采用类似的方式去分享问题和答案,这样容易温习。我希望这个列表对面试官和候选人都有很好的用处,面试官可以对这些问题上做一些改变以获取新奇和令人惊奇的元素,这对一次好的面试来说非常重要。而候选者,可以扩展和测试 Java 程序语言和平台关键领域的知识。
Java 面试中的重要话题
除了你看到的惊人的问题数量,我也尽量保证质量。我不止一次分享各个重要主题中的问题,也确保包含所谓的高级话题,这些话题很多程序员不喜欢准备或者直接放弃,因为他们的工作不会涉及到这些。Java NIO 和 JVM 底层就是最好的例子。你也可以将设计模式划分到这一类中,但是越来越多有经验的程序员了解 GOF 设计模式并应用这些模式。我也尽量在这个列表中包含最新的面试问题,这些问题可能是来年关注的核心。
一 面试到底在问些什么东西?
首先你要知道,面试官的提问和你简历上写的内容是紧密联系的,所以你简历上写的技能一定要会。
一般面试包括下面几方面知识类型:
Java基础、多线程、IO与NIO、虚拟机、设计模式
数据结构与算法(要有手写算法的能力)
计算机网络(TCP三次握手和四次挥手)
数据通信(RESTful、RPC、消息队列)
操作系统(Linux的基本命令以及使用)
主流框架(Spring底层原理与源码问的很多)
数据存储(最常见的是MySQL、Redis)
分布式
其他问题:
实际场景题
生活方面的问题
性格/其他方面的问题
二、面试常问的知识点
1)集合相关问题(必问)
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现
HashMap和Hashtable的区别
ArrayList、LinkedList、Vector的区别
HashMap和ConcurrentHashMap的区别
HashMap和LinkedHashMap的区别
HashMap是线程安全的吗
ConcurrentHashMap是怎么实现线程安全的
HashMap 的长度为什么是2的幂次方
2)多线程并发相关问题(必问)
创建线程的3种方式
什么是线程安全
Runnable接口和Callable接口的区别
wait方法和sleep方法的区别
synchronized、Lock、ReentrantLock、ReadWriteLock
介绍下CAS(无锁技术),什么是悲观锁和乐观锁
volatile关键字的作用和原理
什么是ThreadLocal
创建线程池的4种方式
ThreadPoolExecutor的内部工作原理
分布式环境下,怎么保证线程安全
synchronized和lock区别以及volatile和synchronized的区别
3)JVM相关问题
介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
垃圾收集有哪些算法,各自的特点。
类加载的过程。
双亲委派模型。
有哪些类加载器。
能不能自己写一个类叫java.lang.String。
4)设计模式相关问题(必问)
设计模式比较常见的就是让你手写一个单例模式(注意单例模式的几种不同的实现方法)或者让你说一下某个常见的设计模式在你的项目中是如何使用的。
另外面试官还有可能问你抽象工厂和工厂方法模式的区别、工厂模式的思想这样的问题。
建议把代理模式、观察者模式、(抽象)工厂模式好好看一下,这三个设计模式很有用。
5)数据库相关问题,针对MySQL(必问)
给题目让你手写SQL。
有没有SQL优化经验。
MySQL索引的数据结构。
SQL怎么进行优化。
SQL关键字的执行顺序。
有哪几种索引。
什么时候该(不该)建索引。
Explain包含哪些列。
6)框架相关问题
Hibernate和Mybatis的区别。
Spring MVC和Struts2的区别。
Spring用了哪些设计模式。
Spring中AOP主要用来做什么。
Spring注入bean的方式。
什么是IOC,什么是依赖注入。
Spring是单例还是多例,怎么修改。
Spring事务隔离级别和传播性。
介绍下Mybatis/Hibernate的缓存机制。
Mybatis的mapper文件中#和$的区别。
Mybatis的mapper文件中resultType和resultMap的区别。
7)其他问题
介绍下栈和队列。
IO和NIO的区别。
接口和抽象类的区别。
int和Integer的自动拆箱/装箱相关问题。
常量池相关问题。
==和equals的区别。
什么是JDK?什么是JRE?什么是JVM?三者之间的联系与区别
Java和C++的区别
重载和重写的区别。
String和StringBuilder、StringBuffer的区别。
静态变量、实例变量、局部变量线程安全吗,为什么。
try、catch、finally都有return语句时执行哪个。
介绍下B树、二叉树。
分布式锁的实现。
分布式session存储解决方案。
常用的linux命令。
HR
- 为什么跳槽?
- 期望的薪资是多少?
- 如何看待加班问题?
- 平时自己是怎么学习技术的,除了Java相关,还会去了解其他什么技术?
- 未来几年有什么规划?
最后
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
我私藏的面试题库:
祝愿各位身体健康,顺利拿到心仪的offer!
注:每周福利均会更新,更多福利等你领取,更多技巧,欢迎在评论区一起交流!
+君羊前面三位606,中间三位846,后面三位127,进君羊暗号T123,领取Python ,web开发,Python爬虫,Python数据分析,人工智能,Java项目,Java基础等精品学习课程。带你从零基础系统性的学好Python和Java!做一名牛逼的程序员!
END
祝大家学的愉快,学的神速。
有帮助的话,各位小伙伴可以点个赞收藏支持下啦!❤️
也欢迎关煮lili,一个在变秃,但能带你变强的程序员~
今天先说这么多,我是乐字节哩哩,一个有趣的灵魂!下期见!
最后给大家推荐几个B站超详细的Java、大数据、python等自学课
从Java零基础到项目实战哦【b站BV: BV1CB4y1A7sk】
十大企业级项目自学课【b站:BV14K411F7HJ】
超棒的前后端分离项目【b站:BV1zf4y1p7wC】
大数据全套完整版【b站:BV1aK4y197TP】
python小白入门到精通完整版【b站:BV1Sp4y1W77E】
将bv号,复制去b站即可