面试题--分布式,网络,JVM篇
- JVM
- 1、知识点汇总
- 2、知识点详解
- 3、说说类加载与卸载
- 4、简述一下JVM的内存模型
- 5、说说堆和栈的区别
- 6、 什么时候会触发FullGC
- 7、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
- 8、Java内存结构
- 9、说说对象分配规则
- 10、描述一下JVM加载class文件的原理机制?
- 11、说说Java对象创建过程
- 12、知道类的生命周期吗?
- 13、简述Java的对象结构
- 14、如何判断对象可以被回收?
- 15、JVM的永久代中会发生垃圾回收么?
- 16、你知道哪些垃圾收集算法
- 17、调优命令有哪些?
- 18、常见调优工具有哪些
- 19、Minor GC与Full GC分别在什么时候发生?
- 20、你知道哪些JVM性能调优参数?(简单版回答)
- 21、 对象一定分配在堆中吗?有没有了解逃逸分析技术?
- 22、虚拟机为什么使用元空间替换了永久代?
- 23、什么是Stop The World ? 什么是OopMap?什么是安全点?
- 24、说一下JVM 的主要组成部分及其作用?
- 25、什么是指针碰撞?
- 26,什么是空闲列表?
- 27,什么是TLAB?
- 28、对象头具体都包含哪些内容?
- 29、你知道哪些JVM调优参数?
- 30、说一下 JVM 有哪些垃圾回收器?
- 31、如何选择垃圾收集器?
- 32、 什么是类加载器?
- 33、什么是 tomcat 类加载机制?
- 分布式
- 1、分布式幂等性如何设计?
- 2,简单一次完整的 HTTP 请求所经历的步骤?
- 3、说说你对分布式事务的了解
- 4、你知道哪些分布式事务解决方案?
- 5,什么是二阶段提交?
- 6、什么是三阶段提交?
- 7、什么是补偿事务?
- 8、消息队列是怎么实现的?
- 9、那你说说Sagas事务模型
- 10,分布式ID生成有几种方案?
- 11,幂等解决方法有哪些?
- 12,常见负载均衡算法有哪些?
- 13、你知道哪些限流算法?
- 14、说说什么是计数器(固定窗口)算法
- 15、说说什么是滑动窗口算法
- 16、说说什么是漏桶算法
- 17、说说什么是令牌桶算法
- 18、数据库如何处理海量数据?
- 19、如何将长链接转换成短链接,并发送短信?
- 20、长链接和短链接如何互相转换?
- 21、长链接和短链接的对应关系如何存储?
- 22、如何提高系统的并发能力?
- 网络篇
- 1,HTTP 响应码有哪些?分别代表什么含义?
- 2,Forward 和 Redirect 的区别?
- 3, Get 和 Post 请求有哪些区别?
- 4,说说 TCP 与 UDP 的区别,以及各自的优缺点
- 5,说一下 HTTP 和 HTTPS 的区别
- 6,说说HTTP、TCP、Socket 的关系是什么?
- 7,说一下HTTP的长连接与短连接的区别
- 8,TCP 为什么要三次握手,两次不行吗?为什么?
- 9,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?
- 10,TCP 如何保证可靠性
- 11,OSI 的七层模型都有哪些?
- 12,浏览器中输入:“www.woaijava.com”之后都发生了什么?请详细阐述
- 13,如何实现跨域?
- 14,TCP 为什么要三次握手,两次不行吗?为什么?
- 15,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?
- 16,HTTP1.0、HTTP1.1、HTTP2.0的关系和区别
- 17,说说HTTP协议与TCP/IP协议的关系
- 18,如何理解HTTP协议是无状态的?
- 19,什么是长连接和短连接?
- 20,长连接和短连接的优缺点?
- 21,说说长连接短连接的操作过程
- 22,说说TCP三次握手和四次挥手的全过程
- 23、OSI 的七层模型都有哪些?
- 24、OSI这样分层有什么好处?
- 25、说说TCP/IP四层网络模型
- 26、说说域名解析详细过程?
- 27、 IP 地址分为几类,每类都代表什么,私网是哪些?
- 28、说说TCP 如何保证可靠性的?
JVM
1、知识点汇总
JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高.
2、知识点详解
1、JVM内存模型:
线程独占:栈,本地方法栈,程序计数器 线程共享:堆,方法区
2、栈:
又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈.
3、本地方法栈
与栈类似,也是用来保存执行方法的信息.执行Java方法是使用栈,执行Native方法时使用本地方法栈.
4、程序计数器
保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行Native方法时,程序计数器为空.
5、堆
JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,几乎所欲的对象实例都会放在这里,当堆没有可用空间时,会抛出OOM异常.根据对象的存活周期不同,JVM把对象进行分代管理,由垃圾回收器进行垃圾的回收管理
6、方法区:
又称非堆区,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器优化后的代码等数据.1.7的永久代和1.8的元空间都是方法区的一种实现
7、JVM内存可见性
3、说说类加载与卸载
加载过程
1、加载机制-双亲委派模式
双亲委派模式,即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器. 父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载.*
优点:
- 避免类的重复加载
- 避免Java的核心API被篡改
2、分代回收
分代回收基于两个事实:大部分对象很快就不使用了,还有一部分不会立即无用,但也不会持续很长时间.
年轻代->标记-复制 老年代->标记-清除
3、回收算法
a、G1算法
1.9后默认的垃圾回收算法,特点保持高回收率的同时减少停顿.采用每次只清理一部分,而不是清理全部的增量式清理,以保证停顿时间不会过长
其取消了年轻代与老年代的物理划分,但仍属于分代收集器,算法将堆分为若干个逻辑区域(region),一部分用作年轻代,一部分用作老年代,还有用来存储巨型对象的分区. 同CMS相同,会遍历所有对象,标记引用情况,清除对象后会对区域进行复制移动,以整合碎片空间.
年轻代回收: 并行复制采用复制算法,并行收集,会StopTheWorld.
老年代回收: 会对年轻代一并回收
初始标记完成堆root对象的标记,会StopTheWorld. 并发标记 GC线程和应用线程并发执行. 最终标记完成三色标记周期,会StopTheWorld. 复制/清楚会优先对可回收空间加大的区域进行回收
b、ZGC算法
前面提供的高效垃圾回收算法,针对大堆内存设计,可以处理TB级别的堆,可以做到10ms以下的回收停顿时间.
着色指针
读屏障
并发处理
基于region
内存压缩(整理)
roots标记:标记root对象,会StopTheWorld. 并发标记:利用读屏障与应用线程一起运行标记,可能会发生StopTheWorld. 清除会清理标记为不可用的对象. roots重定位:是对存活的对象进行移动,以腾出大块内存空间,减少碎片产生.重定位最开始会StopTheWorld,却决于重定位集与对象总活动集的比例.并发重定位与并发标记类似.
4、简述一下JVM的内存模型
1.JVM内存模型简介
JVM定义了不同运行时数据区,他们是用来执行应用程序的。某些区域随着JVM启动及销毁,另外一些区域的数据是线程性独立的,随着线程创建和销毁。jvm内存模型总体架构图如下:(摘自oracle官方网站)
JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建销毁时间。如下图所示,可以分为两大部分,线程私有区和共享区。下图是根据自己理解画的一个JVM内存模型架构图
JVM内存分为线程私有区和线程共享区
3、本地方法栈
与虚拟机栈作用相似。但它不是为Java方法服务的,而是本地方法(C语言)。由于规范对这块没有强制要求,不同虚拟机实现方法不同。
5、说说堆和栈的区别
6、 什么时候会触发FullGC
7、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
8、Java内存结构
9、说说对象分配规则
10、描述一下JVM加载class文件的原理机制?
11、说说Java对象创建过程
12、知道类的生命周期吗?
13、简述Java的对象结构
Java对象由三个部分组成:对象头、实例数据、对齐填充。
对象头由两部分组成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、
线程持有的锁、偏向线程ID(一般占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型
(即对象代表哪个类)。如果是数组对象,则对象头中还有一部分用来记录数组长度。
实例数据用来存储对象真正的有效信息(包括父类继承下来的和自己定义的)
对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)
14、如何判断对象可以被回收?
判断对象是否存活一般有两种方式:
引用计数:
每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。
可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不可达对象。
15、JVM的永久代中会发生垃圾回收么?
16、你知道哪些垃圾收集算法
17、调优命令有哪些?
Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo
18、常见调优工具有哪些
19、Minor GC与Full GC分别在什么时候发生?
新生代内存不够用时候发生MGC也叫YGC,JVM内存不够的时候发生FGC
20、你知道哪些JVM性能调优参数?(简单版回答)
21、 对象一定分配在堆中吗?有没有了解逃逸分析技术?
「对象一定分配在堆中吗?」 不一定的,JVM通过「逃逸分析」,那些逃不出方法的对象会在栈上分配。
22、虚拟机为什么使用元空间替换了永久代?
「什么是元空间?什么是永久代?为什么用元空间代替永久代?」 我们先回顾一下「方法区」吧,看看虚拟机运行时数据内存图,如下
23、什么是Stop The World ? 什么是OopMap?什么是安全点?
24、说一下JVM 的主要组成部分及其作用?
25、什么是指针碰撞?
26,什么是空闲列表?
如果Java堆内存中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,不可以进行指针碰撞啦,虚拟机必须维护一个列表,记录哪些内存是可用的,在分配的时候从列表找到一块大的空间分配给对象实例,并更新列表上的记录,这种分配方式就是空闲列表。
27,什么是TLAB?
28、对象头具体都包含哪些内容?
在我们常用的Hotspot虚拟机中,对象在内存中布局实际包含3个部分:
- 对象头
- 实例数据
- 对齐填充
29、你知道哪些JVM调优参数?
30、说一下 JVM 有哪些垃圾回收器?
31、如何选择垃圾收集器?
32、 什么是类加载器?
33、什么是 tomcat 类加载机制?
分布式
1、分布式幂等性如何设计?
4,悲观锁
7,保底方案,先查询是否存在此单,不存在进行支付,存在就直接返回支付结果
2,简单一次完整的 HTTP 请求所经历的步骤?
6、客户端根据返回的 HTML 、 CSS 、 JS 进行渲染。
3、说说你对分布式事务的了解
4、你知道哪些分布式事务解决方案?
5,什么是二阶段提交?
问题
6、什么是三阶段提交?
7、什么是补偿事务?
TCC (Try Confirm Cancel)是服务化的二阶段编程模型,采用的补偿机制:
8、消息队列是怎么实现的?
MQ 事务消息
9、那你说说Sagas事务模型
10,分布式ID生成有几种方案?
3. 批量生成ID
10位数据机器位:
11,幂等解决方法有哪些?
12,常见负载均衡算法有哪些?
13、你知道哪些限流算法?
14、说说什么是计数器(固定窗口)算法
15、说说什么是滑动窗口算法
16、说说什么是漏桶算法
漏桶算法是访问请求到达时直接放入漏桶,如当前容量已达到上限(限流值),则进行丢弃(触发限流策略)。漏桶以固定的速率进行释放访问请求(即请求通过),直到漏桶为空。
17、说说什么是令牌桶算法
令牌桶算法是程序以r(r=时间周期/限流值)的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略
18、数据库如何处理海量数据?
19、如何将长链接转换成短链接,并发送短信?
20、长链接和短链接如何互相转换?
21、长链接和短链接的对应关系如何存储?
如果数据量小且 QPS 低,直接使用数据库的自增主键就可以实现。 还可以将最近/最热门的对应关系存储在 K-V 数据库中,这样子可以节省空间的同时,加快响应速度。
22、如何提高系统的并发能力?
网络篇
1,HTTP 响应码有哪些?分别代表什么含义?
2,Forward 和 Redirect 的区别?
3, Get 和 Post 请求有哪些区别?
4,说说 TCP 与 UDP 的区别,以及各自的优缺点
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
5,说一下 HTTP 和 HTTPS 的区别
6,说说HTTP、TCP、Socket 的关系是什么?
7,说一下HTTP的长连接与短连接的区别
8,TCP 为什么要三次握手,两次不行吗?为什么?
9,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?
10,TCP 如何保证可靠性
11,OSI 的七层模型都有哪些?
12,浏览器中输入:“www.woaijava.com”之后都发生了什么?请详细阐述
13,如何实现跨域?
接着浏览器会像简单请求一样,发送一个 CORS 请求,请求头中一定包含 Origin 属性,服务器的响应头中也一定得包含 Access-Control-Allow-Origin 属性。
14,TCP 为什么要三次握手,两次不行吗?为什么?
15,说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?
16,HTTP1.0、HTTP1.1、HTTP2.0的关系和区别
17,说说HTTP协议与TCP/IP协议的关系
18,如何理解HTTP协议是无状态的?
19,什么是长连接和短连接?
20,长连接和短连接的优缺点?
21,说说长连接短连接的操作过程
22,说说TCP三次握手和四次挥手的全过程
三次握手
四次挥手
23、OSI 的七层模型都有哪些?
24、OSI这样分层有什么好处?
25、说说TCP/IP四层网络模型