JDK高频面试题(包重点)
一、什么是JDK
JDK(Java Development Kit)即 Java 开发工具包,是 Java 编程的基础与核心,由 Sun Microsystems(现归属于 Oracle 公司 )开发,主要作用如下:
1、提供编译环境
它包含了javac
这一编译器,能把 Java 程序员写好的以.java
为后缀的源文件,编译成 Java 虚拟机(JVM)可识别并执行的字节码文件(.class
) 。例如,开发一个简单的 “Hello World” 程序,编写完HelloWorld.java
源码后,就需借助javac
将其转换为字节码。
2、配备运行环境
JDK 整合了 Java 运行时的基础环境 JRE(Java Runtime Environment),JRE 里有 Java 虚拟机、Java 核心类库等,这保障了编译好的 Java 程序能顺利运行起来,无论该程序是一个桌面应用、Web 应用,还是移动端的安卓应用底层部分。
3、开发工具
JDK 还带有一系列实用开发工具,像是java
命令,用于执行字节码文件;jar
工具,可将相关的类文件打包成一个.jar
归档文件,方便程序分发与复用;javadoc
能依据 Java 代码里的注释,自动生成规范的 API 文档 。
4、丰富类库支持
JDK 内置海量的类库,这些类覆盖了从基础数据结构操作、文件读写、网络通信,到图形界面绘制、数据库连接等多方面的功能,程序员开发时只需引入对应的类,调用相关方法,就能快速搭建起应用的各项功能,极大减少了开发成本与周期。
二、JVM的内存结构
1、 程序计数器
(1)作用
它是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下,由于线程会频繁切换,程序计数器用于记录每个线程当前执行到的位置,以便线程切换回来时能精准恢复执行。
(2)特点
线程私有的内存区域,生命周期与线程相同。此区域不会发生内存溢出(OutOfMemoryError ,简称 OOM)情况。
2、虚拟机栈
(1)作用
用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每当一个方法被调用时,就会在虚拟机栈中创建一个对应的栈帧,方法执行完毕,栈帧出栈。
(2)特点
也是线程私有的,它的大小可以通过参数-Xss
来设定。如果线程请求的栈深度大于虚拟机所允许的深度,就会抛出StackOverflowError
;若虚拟机栈无法申请到足够内存来扩展,会抛出OutOfMemoryError
。
3、本地方法栈
(1)作用
与虚拟机栈类似,不过它是为虚拟机使用到的 Native 方法服务,也就是那些用非 Java 语言(如 C、C++ )编写并通过 JNI(Java Native Interface)调用的方法。
(2)特点
线程私有的内存区域,同样可能出现StackOverflowError
和OutOfMemoryError
异常。
4、堆
(1)作用
堆是 JVM 所管理的最大的一块内存区域,几乎所有的对象实例和数组都在堆上分配内存。这也是 Java 垃圾回收器(GC)重点关注和管理的区域。
(2)特点
它是线程共享的,堆的大小可以通过参数-Xmx
(最大堆容量)和-Xms
(初始堆容量)来调整。由于对象不断创建,当堆内存无法满足新对象的分配需求时,就会抛出OutOfMemoryError
。
5、方法区
(1)作用
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
(2)特点
它是线程共享的,在 Java 8 之前,方法区由永久代(PermGen)实现,容易出现内存溢出;Java 8 之后,使用元空间(Metaspace)替代了永久代,元空间直接使用本地内存,理论上受限于本地机器的内存大小,减少了因永久代设置不当引发的 OOM 风险。
三、JDK8的新特性
1、Lambda表达式,允许把函数当作参数传递进方法,替代传统匿名内部类的复杂语法。
2、Stream API,提供了一种声明式处理集合数据的方式,代码简洁且高效。能对集合进行过滤、映射、排序、归并等操作。
3、接口的默认方法,打破传统接口只能有抽象方法的限制,接口可以有默认实现的方法。当接口升级添加新方法时,已实现该接口的类无需全部修改,只要新方法定义成默认方法就行。
4、静态接口方法,直接属于接口,不能被实现类重写,为接口提供了更多工具性的功能整合。
5、新的日期和时间API,摒弃了Date
和Calendar
类,他们式线程不安全的。新引入LocalDate
(表示日期)、LocalTime
(表示时间)、LocalDateTime
(表示日期时间)等类,使用起来更加直观、便捷。
6、Optionnal 类,用来解决空指针问题,它包装一个对象,通过一系列方法判断对象是否存在,存在则获取值,不存在则优雅返回默认值,避免了繁琐的if - null
判断。
7、Base64编码的支持,提供了便捷的 Base64 编码与解码工具,可用于处理文本、二进制数据的编码转换,有标准、URL 安全、MIME 兼容等多种编码模式。
四、java垃圾回收(GC)机制
1、引用技术法
就是给每个对象添加一个引用计数器,每当有一个新的引用指向该对象时,计数器加 1,当引用断开时,计数器减 1,一旦计数器归零,就意味着该对象没有任何引用,可以标记为垃圾;不过 Java 虚拟机并没有采用这种算法,因为它难以解决对象间循环引用的问题。
2、可达性分析
以根对象为起始点,沿着对象之间的引用关系,层层遍历,构建出一个引用关系图。所有能从根对象通过引用链触达的对象,都被判定为存活对象,会被标记下来;而那些无法通过引用链关联到根对象的对象,就会被认定是可回收的垃圾对象。例如,在一个简单的 Java 类实例关系中,若类 A 的对象 a 被某个根对象引用,类 A 里有个成员变量指向类 B 的对象 b,那么对象 a 和 b 通过这条引用链都属于可达对象;反之,若某个对象切断了和所有根对象的引用关系,即使它内部还有自身循环引用,依然会被标记成垃圾。
相关文章:
JDK高频面试题(包重点)
一、什么是JDK JDK(Java Development Kit)即 Java 开发工具包,是 Java 编程的基础与核心,由 Sun Microsystems(现归属于 Oracle 公司 )开发,主要作用如下: 1、提供编译环境 它包含了…...
本地部署 LLaMA-Factory
本地部署 LLaMA-Factory 1. 本地部署 LLaMA-Factory2. 下载模型3. 微调模型3-1. 下载数据集3-2. 配置参数3-3. 启动微调3-4. 模型评估3-5. 模型对话3-6. 导出模型3-7. 使用 vllm 推理 1. 本地部署 LLaMA-Factory 下载代码, git clone https://github.com/hiyouga/…...
内置ALC的前置放大器D2538A/D3308
一、概述 D2538A/D3308是芯谷科技推出的带有ALC(自动电平控制)的前置音频放大器芯片,最初产品为单声道/立体声收录机及盒式录音机而开发,作为录音/回放的磁头放大器使用;由于产品的高增益、低噪声及ALC外部可调的特性&…...
20241227解决使用向日葵远程工具连接ubuntu20.04.5出现黑屏的问题
20241227解决使用向日葵远程工具连接ubuntu20.04.5出现黑屏的问题 2024/12/27 14:40 参考资料: 百度:先日葵 https://sunlogin.oray.com/ 贝锐向日葵 百度:向日葵 连接 ubuntu22.04.5 黑屏 https://blog.csdn.net/catssi/article/details/139…...
Thinkphp 使用workerman消息实现消息推送完整示例
1.版本说明:ThinkPHP6.0 、PHP8.0 2.实现原理 应用场景,监听用户登陆,修改用户登陆状态,通过心跳时间计算用户是否下线,其他应用场景自行修改逻辑即可。 第一步:安装workerman composer require topthin…...
Word论文交叉引用一键上标
Word论文交叉引用一键上标 1.进入Microsoft word使用CtrlH快捷键或单击替换按钮 2.在查找内容中输入[^#] 3.鼠标点击,标签为“替换为:”的文本框,注意光标一定要打在图红色方框圈中的文本框中! 4.点击格式选择字体 5.勾选上标…...
使用vue3搭建前端模拟增删改查
主要工具 vue3 element-plus axios mockjs 使用mockjs模拟数据 import Mock from "mockjs"; // 内存模拟数据 const arr []; for (let i 0; i < 10; i) {arr.push({id: Mock.mock("id"),name: Mock.mock("cname"),place: Mock.mock("c…...
Stream API 的设计融合了多个经典设计模式
Stream API 的设计融合了多个经典设计模式: 1. 策略模式(Strategy Pattern) 策略模式定义了一个算法的家族,将每个算法封装起来,并使它们可以互换。Stream API 中的每个操作(如 filter(), map()ÿ…...
京东零售数据可视化平台产品实践与思考
导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分: 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者:梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…...
mysql高频面试题
1. mysql里的索引类型 2. 聚簇索引和非聚簇索引的区别 聚簇索引适合场景: 主键、唯一性要求高的字段。需要对数据进行范围查询时。对数据的读取频繁,并且数据行的插入和删除较少时。非聚簇索引适合场景: 较多的查询条件,或者需要基于某些非主键字段进行查询时。需要创建多个…...
MySQL中Performance Schema库的详解(下)
昨天说了关于SQL语句相关的,今天来说说性能相关的,如果没有看过上篇请点传送门https://blog.csdn.net/2301_80479959/article/details/144693574?fromshareblogdetail&sharetypeblogdetail&sharerId144693574&sharereferPC&sharesource…...
算法day_7 算法练习
这是我在2024年12月25日的算法练习,加油!(▽) 题目一 💪 1337. 矩阵中战斗力最弱的 K 行 已解答 | 简单 题目描述 📝 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。…...
一文详解MacOS+CLion——构建libtorch机器学习开发环境
对于希望在本地环境中进行深度学习开发的开发者来说,配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上,利用 CLion IDE 和 PyTorch 的 C依赖库——libtorch,快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下…...
CSS系列(39)-- Shapes详解
前端技术探索系列:CSS Shapes详解 ✨ 致读者:探索形状布局的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Shapes,这个强大的形状布局特性。 基础形状 🚀 圆形与椭圆 /* 基础圆形 */ .circle {widt…...
kafka的备份策略:从备份到恢复
文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言:Kafka的备份的单元是partition,也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互,follow从leader副本进…...
Android着色器SweepGradient渐变圆环,Kotlin
Android着色器SweepGradient渐变圆环,Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.SweepGradient import android…...
SQL 实战:聚合函数高级用法 – 多层分组与动态统计
在数据分析中,聚合函数如 COUNT()、SUM()、AVG()、MAX()、MIN() 等是最常用的工具之一。它们允许我们对大量数据进行汇总和统计。然而,随着业务需求的复杂化,我们常常需要进行更复杂的统计操作,例如多层次的分组统计、动态分组等。…...
从零创建一个 Django 项目
1. 准备环境 在开始之前,确保你的开发环境满足以下要求: 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL,确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境ÿ…...
Spring Boot 3.4新特性:RestClient和RestTemplate的重大更新详解
本文将深入探讨Spring Boot 3.4版本中关于RestClient和RestTemplate的重要更新。。 1. 背景介绍 在Spring生态系统中,HTTP客户端一直是一个重要的组件。从最早的RestTemplate,到WebClient,再到现在的RestClient,每一次演进都带来…...
ANSYS EMC Plus:谐振腔中的天线
概述 本博客说明了如何使用 EMA3D 和 MHARNESS 模拟工具来模拟腔内天线产生的电场。下面简要概述了完成模拟所需的步骤,视频链接中提供了完整的演示。 步骤1:定义模拟域 准备模拟的第一步是定义模拟域。该域应包含所有需要分析的几何图形。在此演示中…...
lv_ffmpeg学习及播放rtsp
lvgl8.3有ffmpeg支持 FFmpeg support typedef struct {lv_img_t img;lv_timer_t * timer;lv_img_dsc_t imgdsc;bool auto_restart;struct ffmpeg_context_s * ffmpeg_ctx; } lv_ffmpeg_player_t;typedef enum {LV_FFMPEG_PLAYER_CMD_START,LV_FFMPEG_PLAYER_CMD_STOP,LV_FFMP…...
Java前端基础—HTML
Java前端基础—HTML 目录 Java前端基础—HTML1.简介2.基础语法2.1HTML页面固定结构2.2标题标签2.3段落标签2.4换行标签2.5水平线标签2.6文本标签2.7图片标签2.8音频标签2.9视频标签2.10链接标签2.11列表标签2.12表格标签2.13表单标签2.14语义标签 1.简介 1.网页组成࿱…...
salesforce 控制 Experience Cloud 站点用户可以看到哪些用户
在 Salesforce 的 Experience Cloud 中,您可以通过多种方式控制站点用户(如社区用户)之间的可见性。这包括用户之间的信息可见性以及他们可以访问的其他用户数据。以下是几种方法和设置,用于实现对 Experience Cloud 站点用户可见…...
C语言实现尼科彻斯定理
1.题目: 2.分析 【1】怎么输出连续奇数:下面是输出m个连续奇数的代码 #include<stdio.h>int main(){int m,x;scanf("%d",&m);for(int i0;i<m:i){printf("%d",x);xx2;}return 0; } 【2】啥叫尼科彻斯定理?…...
【Ubuntu添加右键wine运行exe程序文件】
【前提】你在Ubuntu中安装了wine 【效果展示】右键在打开方式中显示用wine运行 以bilibli安装包为例,在B站安装包右键选择打开方式 省去了在终端中输入wine命令 【步骤】如何添加右键wine运行exe程序文件 新建一个文本文档 其中填入以下内容 [Desktop Entry]…...
7. Linux网络服务配置全面指南
本章目录: 引言7. 网络服务配置7.1 DNS服务器配置安装BIND配置区域文件创建区域文件测试与重启DNS服务示例图:DNS解析流程 7.2 Web服务器部署(Apache/Nginx)Apache与Nginx的选择安装Apache示例:部署静态网站安装Nginx配…...
深入探讨 Nginx 性能优化:从基础到高级的最佳实践
目录 引言Nginx 性能优化的意义Nginx 性能优化的主要方向系统层面的优化 4.1 优化操作系统的文件描述符4.2 调整 TCP 参数4.3 使用高效的磁盘 I/O 调度器 Nginx 配置优化 5.1 优化 worker 进程和连接数5.2 使用异步和非阻塞 I/O 模式5.3 配置 Gzip 压缩5.4 开启缓存和缓存控制…...
纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效
纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了,今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现,包含闪烁的星星、随机彩灯等元素,非常适合节日气氛!…...
Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)
教程概述 本教程先是幽络源初步教学分析掌阅书籍的网络结构,最后提供完整的爬取源码与使用说明,并展示结果,切记勿将本教程内容肆意非法使用。 原文链接:Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明…...
Linux网络——UDP的运用
Linux网络——UDP的运用 文章目录 Linux网络——UDP的运用一、引入二、服务端实现2.1 创建socket套接字2.2 指定网络接口并bind2.3 接收数据并处理2.4 整体代码2.5 IP的绑定的细节 三、用户端实现3.1 创建套接字3.2 指定网络接口3.3 发生数据并接收3.4 绑定问题 四、代码五、UD…...
axios
文章目录 [TOC](文章目录) 一、axios的基本使用axios请求1、引用axios,并发送请求axios发送请求的简化写法2、接受响应数据,并对响应的数据进行处理 三、axios拦截器(instance)1、请求拦截2、响应拦截 axios拦截器、vue中的路由守卫、servlet…...
MacOS下TestHubo安装配置指南
TestHubo是一款开源免费的测试管理工具, 下面介绍MacOS私有部署的安装与配置。TestHubo 私有部署版本更适合有严格数据安全要求的企业,支持在本地或专属服务器上运行,以实现对数据和系统的完全控制。 1、Mac 服务端安装 Mac安装包下载地址&a…...
vue2/3,Spring Boot以及生产环境跨域解决方案
vue2和vue3跨域解决方案 Vue 2 (基于 Webpack) 的跨域解决方案 1. 创建或编辑 vue.config.js 文件 Vue CLI为Webpack项目提供了简单的代理配置方式。你可以通过创建或编辑项目的根目录下的 vue.config.js 文件来设置开发服务器的代理规则: // vue.config.js mod…...
TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化
相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后,Design Compiler内置的HDL Compiler工…...
Elasticsearch:analyzer(分析器)
一、概述 可用于将字符串字段转换为单独的术语: 添加到倒排索引中,以便文档可搜索。级查询(如 生成搜索词的 match查询)使用。 分析器分为内置分析器和自定义的分析器,它们都是由若干个字符过滤器(chara…...
蓝桥杯——异或森林
问题描述 在一个神秘的世界中,存在着一个称为"异或森林"的地方。异或森林中的每个树木都拥有独特的力量。肖恩进入了这片森林,他得到了一个任务:找出数组中满足条件的连续子数组,使得连续子数组中所有元素异或运算结果…...
第一个C++程序 - Hello World, 编译与运行
引言 编写并运行你的第一个 C 程序是学习这门语言的第一步。通过这个简单的例子,你将了解如何创建、编译和运行一个基本的 C 程序。本文将详细介绍每个步骤,并确保初学者能够顺利上手。 一、编写 "Hello World" 程序 1. 创建源代码文件 首先…...
学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PerspectiveCamera透…...
测试 - 4 ( 9000 字详解 )
一:性能测试 1.1 什么是性能测试 性能测试和功能测试虽然都在系统测试阶段进行,但两者有本质区别。功能测试主要关注系统“能否完成特定功能”,例如一辆车是否具备四个轮子、方向盘、挡风玻璃,以及是否能够正常行驶。而性能测试…...
从 Coding (Jenkinsfile) 到 Docker:全流程自动化部署 Spring Boot 实战指南(简化篇)
前言 本文记录使用 Coding (以 Jenkinsfile 为核心) 和 Docker 部署 Springboot 项目的过程,分享设置细节和一些注意问题。 1. 配置服务器环境 在实施此过程前,确保服务器已配置好 Docker、MySQL 和 Redis,可参考下列链接进行操作࿱…...
NIPS2014 | GAN: 生成对抗网络
Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...
WebGPU入门初识
什么是 WebGPU? WebGPU 是一种现代图形 API,旨在取代 WebGL,提供更高性能和更灵活的 GPU 加速能力。它基于 Vulkan、Metal 和 Direct3D 12,为 Web 开发者带来了类似于原生图形 API 的性能和控制力。 与 WebGL 不同,Web…...
Go语言基础语法
文章目录 Go语言基础语法一、引言二、基础语法1、变量声明与作用域1.1、全局变量1.2、局部变量1.3、块作用域 2、基本数据类型3、控制流程3.1、条件语句3.2、循环语句 4、函数5、并发编程 三、使用示例四、并发编程示例五、变量作用域详解六、总结 Go语言基础语法 一、引言 G…...
易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 肝细胞癌(hepatocellular carcinoma,HCC)早期复发仍然是一个具有挑战性的领域,其中涉及的机制尚未完全被理解。尽管微血管侵犯(…...
layui动态拼接生成下拉框验证必填项失效问题
利用 jQuery 动态拼接下拉框时,lay-verify"required" 失效了,有以下几种原因。 1. <form></form>标签 加入 layui 类,class"layui-form" 。提交按钮上加自动提交,lay-submit ""; 。需…...
Speckly:基于Speckle文档的RAG智能问答机器人
前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人,它能像一位经验丰富的工程师,理解你的问题,并从 Speckle 文档中精准地找到答案。更厉害的是,它甚至可以帮你生成代码片段!🚀 本文将详…...
NodeRed使用心得,实现增删改查等
使用场景介绍 在VUE中使用nodeRed实现对节点的 增删改查等功能,且储存成功之后下点击时启动对应流程 安装与配置 1.安装NodeRed npm install -g --unsafe-perm node-red 安装完成后,你可以通过运行以下命令来启动Node-RED node-red-start2. 配置文件 N…...
万物皆有解法(序)
万物皆有解法(序) 《万物有解》一:解的存在 解:可做解释解答,此文引申为原因。可做解除、解围,此文引申为解法、方法。 先有事物存于世-what,再有原因为何存-why,再有解法如何除去…...
OpenCV相机标定与3D重建(37)计算两幅图像之间单应性矩阵(Homography Matrix)的函数findHomography()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵(Homography Matrix)的…...
从虚拟到现实:AI与AR/VR技术如何改变体验经济?
引言:体验经济的崛起 在当今消费环境中,产品与服务早已不再是市场竞争的唯一焦点,能够提供深刻感知和独特体验的品牌,往往更能赢得消费者的青睐。这种转变标志着体验经济的崛起。体验经济不仅仅是简单的买卖行为,而是通…...