Advertisement

2024年大数据最全大数据开发(Java面试真题-卷一)(2),2024年最新分享面经

阅读量:
img
img

丰富的网络学习资源十分充足,然而若所学知识缺乏系统性,则在遇到问题时往往停留在表面了解便已满足需求,并未进行深入探究的情况下,难以实现实质性的技术进步.

需要这份系统化资料的朋友,可以戳这里获取

单兵作战可达 hundred miles per day, 但是一支队伍才能走得更稳更远. 无论你是 IT 行业的资深从业者或是新兴爱好者, 我们诚邀您加入我们的大家庭(技术交流、学习资源、职场吐槽、大厂内推、面试辅导), 让我们共同成长吧!

内存分配:增大 JVM 环境中的堆容量能够为对象预留更多存储空间并降低垃圾回收频率。通过指定 -Xms 和 -Xmx 参数可以在 JVM 中分别设定初始堆大小与最大堆容量;然而建议谨慎配置内存以避免延长垃圾回收周期并可能影响系统其他进程运行效能

基于应用的具体需求和特性建议采用相应的垃圾回收器;例如,在需要实现低延迟的实时系统中 CMS 或 G1 并发垃圾回收器可能是一个合理的选择方案;而对于能够容忍较长 GC 停顿时间的批量处理任务则更适合采用并行垃圾回收器这样的方案设计

针对不同应用场景可灵活配置新生代与老年代的比例关系新生代区域通常划分为 Eden 区以及两个Survivor 区(S0 和 S1)这些区域的具体划分比例可以通过指定-XX:NewRatio 和-XX:SurvivorRatio参数来进行精细调节;这种参数设置可以根据应用对象的生命周期特征进行合理的优化配置从而有效减少GC频率

适当缩减每个线程的堆栈大小可能有助于降低整体内存占用这一策略既能够有效缓解因过度线程化带来的资源浪费问题还能够显著提升系统的运行效率

类数据共享机制不仅能够加速启动过程还能节省内存资源通过启用CDS选项即可实现这一功能提升性能指标

JVM集成提供了诸如JConsole VisualVM及jstat等内建监控工具这些工具不仅能够实时跟踪当前JVM运行状态还能提供详细的性能分析数据从而帮助定位并解决系统性能问题

3、请解释下Java中的线程池是什么,如何使用线程池来提高程序的性能?

Java中的线 thread pool 是一种管理与复用 thread 的机制,通过预先创建并进行管理,能够提高多 thread 程序运行效率.该机制可有效降低频繁创建与销毁 thread 所导致的成本,并能降低同时处理的任务数量上限.例如如何配置与使用该工具类将详细说明

  1. 采用ExecutorService接口提供的newFixedThreadPool方法来生成并初始化一个固定大小的线程池。
  2. 根据需求创建并实现Runnable接口的任务。
  3. 将任务提交给线程池进行处理,并通过submit()方法提交任务。
  4. 系统会自动分配可用于处理当前任务的工作线程,并在完成之后将这些线程重新放置到队列中以便接收新的任务。
  5. 使用该机制能够有效减少由于频繁创建和销毁而产生的额外开销,并且能够最大化地利用系统的资源利用率;此外还可以方便地控制系统的并发程度以及优化资源消耗情况。

4、请解释Java中HashMap和HashTable的区别?

HashMap和HashTable是两个常用哈希表实现类,在以下几个维度上有所区别:

  1. ** thread-safe性**:Java提供的HashTable通过synchronized关键字实现了 thread-safe性,并被广泛应用于多线程场景中。相比之下,虽然HashMap也声称提供 thread-safe特性(需通过外部同步机制),但其默认状态并不保证 thread-safe性。
  2. HashMap能够存储null键/值(即允许插入null),而该数据结构不允许存储null键/值。
  3. HashMap的迭代器设计遵循 fail-fast原则,在其他线程对数据结构进行修改时会导致异常(因为该类并非基于可变集合实现),而其设计基础来源于Dictionary接口以避免提供迭代功能。

5、什么是JVM垃圾回收?Java中有几种垃圾回收算法?

JVM垃圾回收就是指的就是在Java程序运行的过程中,会自动释放那些不再被访问的对象内存空间,并负责回收和整理这些被释放的资源。JVM提供了多种垃圾回收算法

  1. 标记-清除算法:第一步是识别并标注所有被引用的对象对象;在清理阶段,则会释放未被识别的对象区域。
  2. 复制算法:划分出大小相等的两个区域;仅在其中一个区域内运行操作;当一个内存区域耗尽资源后,则会将其复制至另一个内存区域,并清空原来占用的空间。
  3. 标记-整理算法:依次识别并标注所有被引用的对象对象;接着将存活的对象依次排列至同一侧边缘位置;最后清理位于边界之外的所有对象区域。
  4. 分代收集算法:按照对象的生命周期特点将其分类管理为不同阶段;特别注重年轻一代对象的回收处理;从而降低了整体垃圾收集所需的时间资源消耗量。

6、请解释下Java中的String、StringBuilder和StringBuffer的区别?

属于Java语言中用于字符串操作的类,在功能特性上存在差异

可变性方面:String类型属于不可变类型,在对象创建后其内容无法被修改;而StringBuilder和StringBuffer类属于可变类型,在这些类中提供了修改和拼接字符串的方法。
从线程安全性角度来看:String具备线程安全性;而StringBuilder不具备线程安全性;StringBuffer具备线程安全性但其效率相对较低。
在性能效率方面:考虑到StringBuilder不具备线程安全性且无额外开销,在多线程并发访问场景下表现更为高效;如果需要多个线程共享同一个字符串缓存区,则应选用StringBuffer类进行操作;若字符串内容不需要频繁修改,则可以选择使用String类型更为合适。

7、Java的垃圾回收机制是什么?简要描述它的工作原理

垃圾回收系统是Java语言实现内存自动管理的核心机制。该系统能够主动释放那些不再被引用或无法访问的对象所占用的内存空间。垃圾回收器的基本工作原理是通过标记已访问对象来识别未被访问的对象,并将其释放对应的内存资源。当一个对象不再被其他对象引用时(即该对象被视为已死亡),垃圾回收器会将其标记为已死亡状态,并释放其占用的内存空间。

  1. 标记阶段:以根对象为基础扫描可访问的对象集合,并将每个可访问的目标节点标记为"活跃"状态。
  2. 清理阶段:扫描已占用的内存区域中的对象,并将非活跃或未被标记的对象移除出可用内存区域。
  3. 压缩阶段:处理完成后通过重新排列剩余空间来优化内存使用。

8、Java的内存区域分为几个部分?

内存堆:用于存储对象实例的位置,并包含新生代区域(Eden区)、存活区域中的From区域以及To区域。
类结构信息存储区:负责存储类的运行时常量池、字段以及操作数等数据。
虚拟机操作记录栈:对应线程的操作记录信息包括局部变量、运算器栈以及动态链表状态。
本地Native方法调用记录栈:专门用于管理与本机虚拟机会话的过程记录。
程序计数逻辑单元地址寄存器:指示当前正在执行的操作码地址。

9、什么情况下Java新建的对象不存储在Eden中?

  1. 大对象直接进入老年代 :所谓的“大对象”是指需要大量连续内存空间的Java对象。例如,很长的字符串或者大的数组。由于Eden区和Survivor区可能无法存放这样大的对象,所以大对象在新建时直接被分配到老年代中。
  2. 长期存活的对象进入老年代 :Java的垃圾收集器假设大部分对象都是“照生暮死”的,所以采用了分代收集的方法。当Eden区中的对象在Minor GC(小型垃圾收集)后仍然存活,且年龄(被Minor GC清理的次数)达到一定值(默认15)时,这些对象会被移动到老年代中。这个年龄阈值可以通过-XX:MaxTenuringThreshold参数进行设置。

10、Java中ThreadLocal的原理是什么?

img
img

丰富的网上学习资源浩如烟海;若所学知识缺乏系统性,则仅能浅层次地掌握相关技术而无法深入探究。

需要这份系统化资料的朋友,可以戳这里获取

单兵作战效率高,但集体协作才能走得更远!无论你是IT行业的资深从业者还是对这一领域充满热情的新手,都欢迎加入我们的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

8)**

单兵作战效率高,但团队合作才能走得更远!无论你是IT行业的资深从业者还是新兴领域的学习者,我们都在这里为你提供专业的交流平台和资源库.无论是分享职场感悟还是讨论技术问题,你都能在这里找到志同道合的朋友.这里有内部推荐通道,求职指导服务以及丰富的学习资料,欢迎加入我们共同成长!

全部评论 (0)

还没有任何评论哟~