面试题--分布式,网络,JVM篇

面试题--分布式,网络,JVM篇

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、加载机制-双亲委派模式
在这里插入图片描述
双亲委派模式,即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器. 父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载.*
优点:

  1. 避免类的重复加载
  2. 避免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个部分:

  1. 对象头
  2. 实例数据
  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四层网络模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

26、说说域名解析详细过程?

在这里插入图片描述

27、 IP 地址分为几类,每类都代表什么,私网是哪些?

在这里插入图片描述

28、说说TCP 如何保证可靠性的?

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单眼皮女孩i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值