作为 Java 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。JVM 知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的 JVM 面试题目,并给出标准答案,这里小编也整理了一份思维导图分享给到大家,提供给大家学习参考。
小编分享的这份Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等25个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【已完结】
完整版Java面试题地址:2021最新面试题合集集锦。
| 序号 | 专题 | 内容 | 链接 |
|:----|:----|:----|:----|
| 1 | 中间件 | Java中间件面试题(2021最新版) | https://cloud.tencent.com/developer/article/1810657 |
| 2 | 微服务 | Java微服务面试题(2021最新版) | https://cloud.tencent.com/developer/article/1811218 |
| 3 | 并发编程 | Java并发编程面试题(2021最新版) | https://cloud.tencent.com/developer/article/1812085 |
| 4 | Java基础 | Java基础知识面试题(2021最新版) | https://cloud.tencent.com/developer/article/write/1812831 |
| 5 | Spring Boot | Spring Boot面试题(2021最新版) | https://cloud.tencent.com/developer/article/1813377 |
| 6 | Redis | Redis面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814536 |
| 7 | Spring MVC | Spring MVC面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814561 |
| 8 | Spring Cloud | Spring Cloud面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814682 |
| 9 | MySQL优化 | MySQL优化面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814683 |
| 10 | JVM | JVM性能调优面试题(2021最新版) |https://cloud.tencent.com/developer/article/1814684 |
| 11 | Linux | Linux面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814821 |
| 12 | Mybatis | Mybatis面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814879 |
| 13 | 网络编程 | TCP,UDP,Socket,Http网络编程面试题(2021最新版) | https://cloud.tencent.com/developer/article/1814881 |
| 14 | 设计模式 | 设计模式面试题(2021最新版) |https://cloud.tencent.com/developer/article/1816736 |
| 15 | 大数据 | 大数据面试题100道(2021最新版) |https://cloud.tencent.com/developer/article/1818351|
| 16 | Tomcat | Tomcat面试题(2021最新版) | https://cloud.tencent.com/developer/article/1818417 |
| 17 | 多线程 | 多线程面试题(2021最新版) | https://cloud.tencent.com/developer/article/1818432 |
| 18 | Nginx | Nginx\_BIO\_NIO\_AIO面试题(2021最新版) | https://cloud.tencent.com/developer/article/1818676 |
| 19 | memcache | memcache面试题(2021最新版) | https://cloud.tencent.com/developer/article/1819122 |
| 20 | java异常 | java异常面试题(2021最新版) | https://cloud.tencent.com/developer/article/1819397 |
| 21 | Java虚拟机 | Java虚拟机面试题(2021最新版) | https://cloud.tencent.com/developer/article/1820065 |
| 22 | Java集合 | Java集合面试题(2021最新版) | https://cloud.tencent.com/developer/article/1820151 |
| 23 | Git常用命令 | Git常用命令(2021最新版) | https://cloud.tencent.com/developer/article/write/1820273 |
| 24 | Elasticsearch | Elasticsearch面试题(2021最新版) | https://cloud.tencent.com/developer/article/1820285 |
| 25 | Dubbo | Dubbo面试题(2021最新版) | https://cloud.tencent.com/developer/article/1820302 |
思路: 给面试官画一下JVM内存模型图,并描述每个模块的定义,作用,以及可能会存在的问题,如栈溢出等。
我的答案:
JVM内存结构
思路: 先画出Java内存模型图,结合例子volatile ,说明什么是重排序,内存屏障,最好能给面试官写 以下demo说明。
我的答案:
1)Java内存模型图:
Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中 保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。
2)指令重排序。
在这里,先看一段代码
public class PossibleReordering { static int x = 0, y = 0; static int a = 0, b = 0; public static void main(String[] args) throws InterruptedException { Thread one = new Thread(new Runnable() { public void run() { a = 1; x = b; } });Thread other = new Thread(new Runnable() { public void run() { b = 1; y = a; } }); one.start();other.start(); one.join();other.join(); System.out.println(“(” + x + “,” + y + “)”);}
运行结果可能为(1,0)、(0,1)或(1,1),也可能是(0,0)。因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。大多数现代微处理器都会采用将指令乱序执行(out-of-order execution,简称OoOE或OOE)的方法,在条件允许的情况下,直接运行当前有能力立即执行的后续指令,避开获取下一条指令所需数据时造成的等待3。通过乱序执行的技术,处理器可以大大提高执行效率。而这就是
指令重排。
双亲委派模型图:
虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的 java 类型。
当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。