2024年150道高频Java面试题(四十七)

93. 说一下堆栈的区别?

堆(Heap)和栈(Stack)是Java虚拟机(JVM)中的两种内存区域,它们在内存分配和管理方式上有显著的区别:

  1. 生命周期管理

    • :栈内存中的变量生命周期由编译器自动管理。栈内存中的变量只在当前方法调用中有效,当方法结束后,这些变量的生命周期就结束了,所占用的内存会自动释放。
    • :堆内存中的对象生命周期不固定,由Java垃圾回收器管理。当没有任何引用指向一个对象时,垃圾回收器可能会回收它所占用的内存。
  2. 内存分配

    • :栈内存的分配速度快,因为它只需要简单的移动指针。栈内存的大小通常较小,容量有限。
    • :堆内存分配速度相对较慢,因为它涉及到更复杂的内存管理。堆内存的大小远比栈大,可以动态扩展,依赖于系统内存。
  3. 数据结构

    • :栈是一种后进先出(LIFO)的数据结构,意味着最后压入栈的元素会最先被移除。
    • :堆是一种可以视为二叉树的完全二叉树结构,具有动态分配的特性,主要用于存储Java对象实例。
  4. 访问方式

    • :栈内存中的变量访问速度通常比堆快,因为它的访问模式更加简单和固定。
    • :堆内存中的对象访问速度相对较慢,因为需要使用指针进行访问。
  5. 用途

    • :栈内存主要用于存储局部变量和函数调用的上下文信息。
    • :堆内存用于存储所有创建的对象和数组的实例。

以下是一个简单的代码示例,说明栈和堆的使用:

public class StackHeapExample {
    public static void main(String[] args) {
        // 局部变量,存储在栈上
        int stackVar = 1;

        // 创建对象,存储在堆上
        Object heapObject = new Object();

        // 方法调用,参数和局部变量在栈上
        method(stackVar, heapObject);
    }

    public static void method(int localVar, Object param) {
        // localVar 和 param 存储在栈上,但param所引用的对象存储在堆上
        // 方法结束后,localVar和param的栈内存会被释放,但堆上的对象不会被释放
        // 除非没有任何引用指向该对象,垃圾回收器可能会介入
    }
}

总之,堆和栈在内存管理上的不同,主要体现在生命周期、内存分配、数据结构、访问方式和用途上。这些差异使它们适用于不同的编程场景和需求。

94. 队列和栈是什么?有什么区别?

队列(Queue)和栈(Stack)是两种基本的数据结构,它们主要用于存储和管理集合中的元素。

队列
队列是一种先进先出(First In First Out, FIFO)的数据结构。这意味着插入队列的元素将按照插入的顺序一个接一个地移出队列。队列的操作主要包括:

  • enqueue(E element): 在队列尾部插入一个元素。
  • dequeue(): 移除队列头部的元素并返回。
  • peek(): 获取队列头部的元素但不移除。
  • isEmpty(): 检查队列是否为空。
  • size(): 获取队列中的元素数量。

队列示例代码:

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(2);
        queue.add(3);

        System.out.println(queue.poll()); // 输出 1
        System.out.println(queue.peek()); // 输出 2
    }
}


栈是一种后进先出(Last In First Out, LIFO)的数据结构。最后压入栈的元素将首先被移出。栈的操作主要包括:

  • push(E element): 在栈顶部插入一个元素。
  • pop(): 移除栈顶部的元素并返回。
  • peek(): 获取栈顶部的元素但不移除。
  • isEmpty(): 检查栈是否为空。
  • size(): 获取栈中的元素数量。

栈示例代码:

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println(stack.pop()); // 输出 3
        System.out.println(stack.peek()); // 输出 2
    }
}

区别

  1. 数据访问顺序:队列是FIFO,而栈是LIFO。
  2. 功能操作:队列的操作主要集中在两端,即入队列和出队列;而栈的操作主要集中在同一端,即压栈和出栈。
  3. 用途:队列常用于实现消息队列、任务队列等场景;栈常用于实现递归、后退操作、表达式求值等场景。

这两种数据结构在处理集合元素时有着根本的区别,选择哪一种取决于特定场景下的需求。

编程资料包领取:https://pan.quark.cn/s/601cbea644ff
更多编程、AI、副业相关内容,请看:https://t.zsxq.com/19zcqaJ2b
领【150 道精选 Java 高频面试题】请 go 公众号:码路向前 。

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

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

相关文章

与Apollo共创生态:探索自动驾驶的未来蓝图

目录 引言Apollo开放平台Apollo开放平台企业生态计划Apollo X 企业自动驾驶解决方案&#xff1a;加速企业场景应用落地Apollo开放平台携手伙伴共创生态生态共创会员权益 个人心得与展望技术的多元化应用数据驱动的智能化安全与可靠性的重视 结语 引言 就在2024年4月19日&#x…

简约大气的全屏背景壁纸导航网源码(免费)

简约大气的全屏背景壁纸导航网模板 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"zh-CN"> <!--版权归孤独 --> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible…

pyqt QSplitter控件

pyqt QSplitter控件 QSplitter控件效果代码 QSplitter控件 PyQt中的QSplitter控件是一个强大的布局管理器&#xff0c;它允许用户通过拖动边界来动态调整子控件的大小。这个控件对于创建灵活的、用户可定制的用户界面非常有用。 QSplitter控件可以水平或垂直地分割其包含的子…

阿里云开源大模型开发环境搭建

ModelScope是阿里云通义千问开源的大模型开发者社区&#xff0c;本文主要描述AI大模型开发环境的搭建。 如上所示&#xff0c;安装ModelScope大模型基础库开发框架的命令行参数&#xff0c;使用清华大学提供的镜像地址 如上所示&#xff0c;在JetBrains PyCharm的项目工程终端控…

交通 | 电动汽车车辆路径问题及FRVCP包的调用以及代码案例

编者按&#xff1a; 电动汽车的应用给车辆路线问题带来了更多的挑战&#xff0c;如何为给定路线行驶的电动汽车设计充电决策是一个需要解决的难题&#xff0c;本文介绍了开源python包frvcpy使用精确式算法对该问题求解。 文献解读&#xff1a;Aurelien Froger, Jorge E Mendo…

前端开发框架Vue

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Vue概述 Vue.js&#xff08;简称Vue&#xff09;是由尤雨溪&#xff08;Evan You&#xff09;创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…

06_电子设计教程基础篇(学习视频推荐)

文章目录 前言一、基础视频1、电路原理3、模电4、高频电子线路5、电力电子技术6、数学物理方法7、电磁场与电磁波8、信号系统9、自动控制原理10、通信原理11、单片机原理 二、科普视频1、工科男孙老师2、达尔闻3、爱上半导体4、华秋商城5、JT硬件乐趣6、洋桃电子 三、教学视频1…

【openLooKeng集成Hive连接器完整过程】

【openLooKeng集成Hive连接器完整过程】 一、摘要二、正文2.1 环境说明2.2 Hadoop安装2.2.1. 准备工作2.2.2 在协调节点coordinator上进行安装hadoop2.2.3、将Hadoop安装目录分发到从节点worker2.2.4、在协调节点coordinator上启动hadoop集群2.3 MySQL安装2.4 Hive安装及基本操…

讯饶科技 X2Modbus 敏感信息泄露

讯饶科技 X2Modbus 敏感信息泄露 文章目录 讯饶科技 X2Modbus 敏感信息泄露漏洞描述影响版本实现原理漏洞复现修复建议 漏洞描述 X2Modbus是一款功能很强大的协议转换网关&#xff0c; 这里的X代表各家不同 的通信协议&#xff0c;2是To的谐音表示转换&#xff0c;Modbus就是最…

【C++题解】1035. 判断成绩等级

问题&#xff1a;1035. 判断成绩等级 类型&#xff1a;多分支结构 题目描述&#xff1a; 输入某学生成绩&#xff0c;如果 86 分以上(包括 86 分&#xff09;则输出 VERY GOOD &#xff0c;如果在 60 到 85 之间的则输出 GOOD (包括 60 和 85 )&#xff0c;小于 60 的则输出 …

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下&#xff1a; 注意 basedir 和 datadi…

企业气候风险披露、报表词频、文本分析数据集合(2007-2022年)

01、数据介绍 企业气候风险披露是指企业通过一定的方式&#xff0c;将气候变化对其影响、自身采取的应对措施等信息披露出来。这有助于投资者更准确地评估企业价值&#xff0c;发现投资机会&#xff0c;规避投资风险。解企业在气候风险方面的关注度和披露情况。 可以帮助利益…

JavaEE_操作系统之进程(计算机体系,,指令,进程的概念、组成、特性、PCB)

一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 现代的计算机, 大多遵守冯诺依曼体系结构 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个…

Pixelmator Pro for Mac:简洁而强大的图像编辑软件

Pixelmator Pro for Mac是一款专为Mac用户设计的图像编辑软件&#xff0c;它集简洁的操作界面与强大的功能于一身&#xff0c;为用户提供了卓越的图像编辑体验。 Pixelmator Pro for Mac v3.5.9中文激活版下载 该软件支持多种文件格式&#xff0c;包括常见的JPEG、PNG、TIFF等&…

原生IP和住宅IP有什么区别?

原生IP和住宅IP在多个方面存在显著的区别。 从定义和来源来看&#xff0c;原生IP是指未经NAT&#xff08;网络地址转换&#xff09;处理的真实、公网可路由的IP地址&#xff0c;它直接从互联网服务提供商&#xff08;ISP&#xff09;获得&#xff0c;而不是通过代理服务器或VP…

springboot3整合redis

redis在我们的日常开发中是必不可少的&#xff0c;本次来介绍使用spring boot整合redis实现一些基本的操作&#xff1b; 1、新建一个spring boot项目&#xff0c;并导入相应的依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><…

【前端探索者:从零到精通的Web前端实战专栏】

🚀 在这个代码编织梦想的时代,Web前端作为互联网的颜值担当,正以日新月异的速度重塑数字世界。想要在前端江湖里游刃有余,你需要的不仅仅是一把锋利的剑,更是一套完整的武功秘籍!今天,我们就为你揭开【Web前端】专栏的神秘面纱,带你从菜鸟到大神,一飞冲天! 📚 专栏…

hadoop学习---基于hive的航空公司客户价值的LRFCM模型案例

案例需求&#xff1a; RFM模型的复习 在客户分类中&#xff0c;RFM模型是一个经典的分类模型&#xff0c;模型利用通用交易环节中最核心的三个维度——最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)细分客户群体&#xff0c;从而分析不同群体的客户价值。在某些…

能源监控新方案:IEC104转MQTT网关在新能源发电中的应用

需求背景 近些年&#xff0c;我国新能源产业快速发展&#xff0c;光伏、风电等新能源项目高速增长&#xff0c;新能源发电已经成为国家能源结构的重要组成部分。 打造数字化、智能化、信息化的电力物联网系统&#xff0c;实现光伏风电等新能源发电站的远程监控、远程维护是新能…

240 基于matlab的飞行轨迹仿真程序

基于matlab的飞行轨迹仿真程序&#xff0c;多种不同的飞行轨迹&#xff0c;输出经度、纬度、高度三维轨迹&#xff0c;三个方向的飞行速度。程序已调通&#xff0c;可直接运行。 240 飞行轨迹仿真 三维轨迹 飞行速度 - 小红书 (xiaohongshu.com)
最新文章