JVM和数据库面试知识点

JVM内存结构

主要有几部分:堆、栈、方法区和程序计数器
堆是JVM中最大的一块内存区域,用于存储对象实例,一般通过new创建的对象都存放在堆中。堆被所有的线程共享,但是它的访问时线程不安全的,通常通过锁的机制来保证线程安全。当堆中的对象超出内存无法回收时,会出现OOM异常。
方法区。(在JDK8之后也叫做元空间)它是被所有线程共享的内存区域,存储了类的结构信息、常量池、静态变量和方法编译后的字节码等。方法区也有可能发生OOM(比如大的静态数据、大的反射和动态代理生成的类)可能消耗大量方法区空间。
程序计数器是每个线程私有的,用于记录当前线程执行的字节码指令的地址。每个线程都有一个独立的线程计数器,用来控制线程的执行流程。
栈主要是用来存储方法调用和局部变量。每个线程运行时都会有一个独立的栈,栈中的每个方法调用,都会创建一个栈帧。栈帧中包含了方法的参数、局部变量和返回值等信息。栈中的数据时线程私有的,不会被其他线程访问的,所以时线程安全的。本地方法栈与虚拟机栈的区别是,虚拟机栈执行的是 Java 方法,本地方法栈执行的是本地方法(Native Method),其他基本上一致,在 HotSpot 中直接把本地方法栈和虚拟机栈合二为一,这里暂时不做过多叙述。

对象一定分配到堆中嘛
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OOM一定会引起JVM退出嘛

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
java进程占用内存有哪些部分
在这里插入图片描述
A
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ava提供了四种类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。以下是它们的主要区别:

强引用(Strong Reference):
这是我们最常用的引用类型。如果一个对象具有强引用,那么它永远不会被垃圾回收器回收,直到这个引用被显式地设置为null或者从集合中移除。
示例:Object obj = new Object(); 这里obj就是一个强引用。
软引用(Soft Reference):
软引用主要用于实现内存敏感的缓存。如果一个对象只具有软引用,那么在内存充足的情况下,垃圾回收器不会回收它;但是在内存不足时,垃圾回收器会回收这些对象以释放内存。
软引用可以和SoftReference类一起使用,通常用于缓存场景。
示例:SoftReference softRef = new SoftReference<>(obj); 这里softRef就是一个软引用。
弱引用(Weak Reference):
弱引用比软引用的生存期更短,因为弱引用所指向的对象只能存活到下一次垃圾回收发生之前。当垃圾回收器工作时,无论内存是否充足,都会回收只被弱引用指向的对象。
弱引用可以和WeakReference类一起使用,适用于创建临时的缓存或者引用那些不需要强引用的对象。
示例:WeakReference weakRef = new WeakReference<>(obj); 这里weakRef就是一个弱引用。
虚引用(Phantom Reference):
虚引用是最弱的一种引用类型。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象的实例。
虚引用的主要作用是在对象被垃圾回收器回收时收到一个系统通知。
虚引用需要和PhantomReference类一起使用,并且必须和引用队列(ReferenceQueue)联合使用。
示例:
PhantomReference phantomRef = new PhantomReference<>(obj, refQueue);
这里phantomRef就是一个虚引用。

在这里插入图片描述
常见的垃圾回收器

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

可以打破双亲委派机制嘛
在这里插入图片描述
JVM中完整的GC流程

在这里插入图片描述

在这里插入图片描述
指针碰撞:—前提:内存空间是连续的
维护一个指向空闲内存块的指针,管理和分配内存空间;
分配内存时,指针会向前移动,指向下一个可用的内存块------不需要额外的数据结构来跟踪可以内存块;
是否内存时,指针会向后移动;

为什么适用元空间替代了永久代

永久代是JVM内存是有上限的,而元空间是存储本地内存里,内存上限比较大。避免频繁出现OOM问题。
永久代对象是通过Full GC进行内存清理,元空间是由操作系统内存管理机制处理,简化FullGC,提高性能

在这里插入图片描述

加密后的数据如何支持模糊查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
常见的索引数据结构个区别:二叉树、红黑树、B+树、B树;区别:树的高度影响获取数据的性能(每一个树节点都是一次磁盘的I/O)
在这里插入图片描述
在这里插入图片描述

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

在MySQL中,当查询语句中对索引列使用某些函数时,确实可能导致索引失效,迫使数据库执行全表扫描。这是因为函数应用于列值后,数据库无法直接利用索引中存储的排列信息。
在这里插入图片描述
在这里插入图片描述

什么时候索引失效会提升效率

索引失效在某些特定情况下可能会提升查询效率,这听起来可能有些反直觉,但在特定条件下是可能发生的。以下是一些索引失效可能提升效率的情况:
全表扫描更快:
对于小表或结果集非常小的查询,全表扫描可能比使用索引更快,因为索引需要额外的查找和排序开销。
索引选择性不高:
如果索引的选择性不高(即索引列中重复值很多),使用索引可能不会显著减少扫描的行数,优化器可能会选择全表扫描。
索引维护开销:
对于写入操作频繁的表,索引需要频繁更新,这会带来额外的开销。在某些情况下,禁用索引可能减少维护开销,提高写入效率。
复杂的索引结构:
某些复杂的查询条件可能使得索引的查找效率降低,优化器可能会评估使用索引的成本高于全表扫描。
数据分布不均:
如果数据分布极不均匀,导致索引树的某些部分非常深,查询优化器可能认为使用索引不如全表扫描高效。
查询条件导致索引分裂:
某些查询条件可能导致索引分裂,产生大量的内部碎片,影响索引性能,此时全表扫描可能更高效。
索引列上的函数操作:
对索引列进行函数操作可能会导致索引失效,但如果这个函数操作使得查询条件更加严格,减少了结果集,那么全表扫描可能会更快。
JOIN操作中的索引失效:
在某些JOIN操作中,如果JOIN条件复杂或者参与JOIN的表数据量差异很大,索引失效可能因为减少了不必要的JOIN操作而提升效率。
强制索引:
有时候,数据库优化器选择的索引并不是最优的,通过强制使用某个索引(即使它失效了),可能会因为减少了优化器的计算开销而提升效率。
缓存影响:
如果查询的数据已经被缓存在内存中,即使索引失效,全表扫描也可能因为直接从缓存中读取数据而变得高效。
需要注意的是,这些情况并不常见,通常索引是用来提高查询效率的。在实际应用中,应当通过分析和测试来确定是否应该使用索引,以及如何设计索引以达到最佳性能。数据库优化器通常会自动做出这些决策,但有时也需要数据库管理员或开发者进行手动调优。

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

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

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

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

在这里插入图片描述
在这里插入图片描述
一条SQL的执行流程

  1. 连接器(Connection Phase)
    首先,客户端与MySQL服务器建立连接,这一阶段由连接器负责处理,包括进行身份验证和权限确认等
  2. 查询缓存(Query Cache) MySQL会检查查询缓存,如果所需查询的结果已经存在于缓存中,便直接返回缓存结果,从而省略后续的查询过程。查询缓存可以提高查询效率,特别是对于重复执行的查询。
  3. 解析器和预处理器(Parser and Preprocessor) 当查询未命中缓存时,MySQL会运用解析器和预处理器对查询语句进行解析,验证语法正确性,并将查询语句转换为内部数据结构。
  4. 优化器(Optimizer) MySQL优化器根据查询语句的结构、表的统计信息等因素,生成多个可能的执行计划,并通过成本估算器挑选出最优的执行计划。
  5. 执行器(Executor) 执行器按照优化器选定的执行计划,调用存储引擎的API来执行查询,获取所需数据。
  6. 存储引擎(Storage Engine) 存储引擎负责实际的数据存储和检索,根据执行器的请求,读取或写入数据。
  7. 返回结果给执行器
    在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask-admin+Flask-WTF 实现实现增删改查

背景&#xff1a; flask-adminflask-wtf在网上可以搜索到很多资料&#xff0c;但有价值的很少&#xff0c;或许是太简单&#xff0c;或者是很少人这么用&#xff0c;或者。。。&#xff0c;本文将作者近礼拜摸索到的一点经验分享出来&#xff0c;给自己做个记录。 材料&#…

C++简明教程(文章要求学过一点C语言)(3)

一、编程工具大揭秘——IDE 当我们准备踏入 C 编程的奇妙世界时&#xff0c;首先要认识一个重要的“魔法盒子”——集成开发环境&#xff08;IDE&#xff09;。IDE 就像是一个全能的编程工作室&#xff0c;它把我们写代码所需要的各种工具都整合到了一起&#xff0c;让编程这件…

STM32-笔记5-按键点灯(中断方法)

1、复制03-流水灯项目&#xff0c;重命名06-按键点灯&#xff08;中断法&#xff09; 在\Drivers\BSP目录下创建一个文件夹exti&#xff0c;在该文件夹下&#xff0c;创建两个文件exti.c和exti.h文件&#xff0c;并且把这两个文件加载到项目中&#xff0c;打开项目工程文件 加载…

实现 WebSocket 接入文心一言

目录 什么是 WebSocket&#xff1f; 为什么需要 WebSocket&#xff1f; HTTP 的局限性 WebSocket 的优势 总结&#xff1a;HTTP 和 WebSocket 的区别 WebSocket 的劣势 WebSocket 常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 WebSocket 心跳机制 …

leetcode-80.删除有序数组的重复项II-day12

总结&#xff1a;不必过于死磕一道题目&#xff0c;二十分钟没做出来就可参考题解

RTOS之邮箱

邮箱 邮箱 (Mailbox) 服务是实时操作系统中一种常用的线程间通信机制。它提供了一种高效、低开销的消息传递方式&#xff0c;允许线程之间交换固定大小的数据。 1. 邮箱的应用场景 考虑一个简单的示例&#xff1a;线程 1 负责检测按键状态并将状态信息发送出去&#xff0c;线程…

凯酷全科技抖音电商服务的卓越践行者

在数字经济蓬勃发展的今天&#xff0c;电子商务已成为企业增长的新引擎。随着短视频平台的崛起&#xff0c;抖音作为全球领先的短视频社交平台&#xff0c;不仅改变了人们的娱乐方式&#xff0c;也为品牌和商家提供了全新的营销渠道。厦门凯酷全科技有限公司&#xff08;以下简…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…

数据集-目标检测系列 车牌检测识别 数据集 CCPD2019

车牌检测&识别 数据集 CCPD2019 DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” 贵在坚持&#xff01; 数据样…

安全算法基础(一)

安全算法是算法的分支之一&#xff0c;还的依靠大量的数学基础进行计算&#xff0c;本文参照兜哥的AI安全样本对抗&#xff0c;做一个简单的算法安全概括&#xff0c;从零学习。 最新的安全算法对于我们常规的攻击样本检测&#xff0c;效果是不理想的&#xff0c;为了探究其原…

[SZ901]JTAG高速下载设置(53Mhz)

SZ901最高支持JTAG 53MHz的时钟频率&#xff0c;下载bit文件和固化程序的速度提升非常明显。 首先设置参数 1&#xff0c;将JTAG0 分频系数修改为3 2&#xff0c;设置参数&#xff0c;更新参数。&#xff08;完成&#xff09; 打开VIVADO VIVADO 正常识别FPGA&#xff0c;速…

图漾相机-ROS1_SDK_ubuntu版本编译(新版本)

文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机&#xff08;可以放在最后可以参考在线文档&#xff09;**…

openbmc hwmon与sensor监控

1.说明 参考文档: https://github.com/openbmc/entity-manager/blob/master/docs/entity_manager_dbus_api.mdhttps://github.com/openbmc/entity-manager/blob/master/docs/my_first_sensors.md 1.1 简单介绍 注意: 本节是快速浏览整个sensor框架&#xff0c;了解大致open…

Java --- 多线程

目录 前言&#xff1a; 一.线程的创建&#xff1a; 1.通过继承 Thread 类来创建线程&#xff1a; 2.通过Runnable接口创建线程&#xff1a; 3.通过Java8引入的lambda语法&#xff1a; 线程的优先级&#xff1a; 二.线程的生命周期&#xff1a; 三. 中断线程&#xff1a…

使用 acme.sh 申请域名 SSL/TLS 证书完整指南

使用 acme.sh 申请域名 SSL/TLS 证书完整指南 简介为什么选择 acme.sh 和 ZeroSSL&#xff1f;前置要求安装过程 步骤一&#xff1a;安装 acme.sh步骤二&#xff1a;配置 ZeroSSL 证书申请 方法一&#xff1a;手动 DNS 验证&#xff08;推荐新手使用&#xff09;方法二&#xf…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件&#xff0c;它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏&#xff08;AppBar&#xff09;、内容区域&#xff08;body&#xff09;、抽屉菜单&#xff08;Drawer&#xff09;、底部导…

YOLOv8目标检测(七)_AB压力测试

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

SpringBoot的创建方式

SpringBoot创建的五种方式 1.通过Springboot官网链接下载 注意SpringBoot项目的封装方式默认为Jar 需要查看一下&#xff0c;自己的Maven版本是否正确 创建成功 2.通过 aliyun官网链接下载 修改服务路径为阿里云链接 创建成功 3.通过Springboot官网下载 点击&#xff0c;拉到最…

批处理理解

初识批处理 如何批处理&#xff1a; 命名&#xff1a;.bat 方法&#xff1a;创建一个记事本文件&#xff0c;然后将其扩展改为.bat 批处理作用&#xff1a;自上而下成批处理每一条DOS命令&#xff0c;直到执行到最后一条。运行环境&#xff1a;当然是我们cmd了 回归我学过的…

概率论得学习和整理29: 用EXCEL 描述二项分布

目录 1 关于二项分布的基本内容 2 二项分布的概率 2.1 核心要素 2.2 成功K次的概率&#xff0c;二项分布公式 2.3 期望和方差 2.4 具体试验 2.5 概率质量函数pmf 和cdf 3 二项分布的pmf图的改进 3.1 改进折线图 3.2 如何生成这种竖线图呢 4 不同的二项分布 4.1 p0.…