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. 返回结果给执行器
    在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子发票汇总改名,批量处理电子发票问题

今天给大家推荐一个财务方面工作的软件。可以帮你解决很多财务。发票方面的问题。 电子发票汇总改名 批量处理电子发票问题 这个软件安装之后。会在桌面上分成三个小软件&#xff0c;分别是修改单位信息、自定义命名规则和电子发票汇总改名。 你可以在这个软件里提取PDF或者of…

用 Python 从零开始构建 LLaMA 3

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长(字),期望您能坚…

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后&#xff0c;发现 -fla&#xff08;控制流平坦化&#xff09;并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…

MyBatis通过注解配置执行SQL语句原理源码分析

文章目录 前置准备流程简要分析配置文件解析加载 Mapper 接口MapperAnnotationBuilder解析接口方法注解parseStatement 方法详解MapperBuilderAssistant 前置准备 创建一个mybatis-config.xml文件&#xff0c;配置mapper接口 <mappers><!--注解配置--><mapper…

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后&#xff0c;进一步的操作是实现入侵他人电脑&#xff0c;这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址&#xff08;通过伪造的网页、伪造的Windows窗口、hook&#xff0c;信…

mac 安装graalvm

Download GraalVM 上面链接选择jdk的版本 以及系统的环境下载graalvm的tar包 解压tar包 tar -xzf graalvm-jdk-<version>_macos-<architecture>.tar.gz 移入java的文件夹目录 sudo mv graalvm-jdk-<version> /Library/Java/JavaVirtualMachines 设置环境变…

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

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

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…

深度科普文:细数倾斜摄影数据的缺点

1. 引言 写这篇文章的起因是最近遇到一个使用倾斜摄影数据应标的三维可视化项目&#xff0c;业主认为倾斜摄影数据加载很卡&#xff0c;要求能浏览场景的时候能立刻显示出当前的场景最精细的模型&#xff0c;如下图1所示。其实这个问题遇到的次数还真不少&#xff0c;作为乙方…

React:闭包陷阱产生和解决

在 React 中&#xff0c;闭包陷阱是一个常见的问题&#xff0c;尤其是在处理异步操作、事件处理器、或是定时器时。理解闭包的工作原理以及它在 React 中如何与状态和渲染交互&#xff0c;可以帮助你避免陷入一些常见的错误。 一、闭包陷阱的产生 1、什么是闭包陷阱&#xff1…

【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)

本文项目编号 T 092 &#xff0c;文末自助获取源码 \color{red}{T092&#xff0c;文末自助获取源码} T092&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【Git 常用操作:pull push】

Git 基本概念 Git 是一个先进的开源的分布式版本控制系统&#xff0c;常用于管理工作内容、项目代码等功能。 Git 工作流程 图片来源&#xff1a;https://www.runoob.com/git/git-basic-operations.html 说明&#xff1a; workspace&#xff1a;工作区staging area&#xff…

shell脚本的循环-----while和for循环

一、while 1.格式 while 条件表达式; do 命令 done 2.案例 &#xff1a; ping测试子网段的主机网段由用户输入&#xff0c;例如用户输入192.168.101 &#xff0c;则ping192.168.101.125 — 192.101.131 UP&#xff1a; /tmp/host_up.txt Down: /tmp/host_down.txt &#…

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…

maven-resources-production:ratel-fast: java.lang.IndexOutOfBoundsException

Maven生产环境中遇到java.lang.IndexOutOfBoundsException的问题&#xff0c;尝试了重启电脑、重启IDEA等常规方法无效&#xff0c;最终通过直接重建工程解决了问题。 Rebuild Project 再启动OK

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…

深度学习0-前置知识

一、背景 AI最大&#xff0c;它的目的是通过让机器模仿人类进而超越人类&#xff1b; ML次之&#xff0c;它是AI的一个分支&#xff0c;是让机器模仿人类的一种方法。开发人员用大量数据和算法“训练”机器&#xff0c;让机器自行学会如何执行任务&#xff0c;它的成功取决于…

基于Python Scrapy的豆瓣Top250电影爬虫程序

Scrapy安装 Python实现一个简单的爬虫程序&#xff08;爬取图片&#xff09;_python简单扒图脚本-CSDN博客 创建爬虫项目 创建爬虫项目&#xff1a; scrapy startproject test_spider 创建爬虫程序文件&#xff1a; >cd test_spider\test_spider\spiders >scrapy g…

LabVIEW中的“Synchronize with Other Application Instances“

在LabVIEW中&#xff0c;“Synchronize with Other Application Instances”是一个常见的提示或错误&#xff0c;通常出现在尝试并行运行多个LabVIEW实例时&#xff0c;特别是当你打开多个VI或项目时。这个问题可能影响程序的执行流程&#xff0c;导致不同实例之间的数据同步或…

【Linux】AlmaLinux 9.5虚拟机安装过程记录分享

关于AlmaLinux系统感兴趣的&#xff0c;可以去我之前写的另外一篇博客里面看看&#xff1a; https://blog.csdn.net/cnskylee/article/details/143142690 语言&#xff0c;选择【简体中文&#xff08;中国&#xff09;】&#xff0c;点击【继续】&#xff0c;进入后续设置 在…