Java热点面试题

1. 什么是Java中的JVM,JRE和JDK,它们之间的关系是什么?

JVM(Java Virtual Machine,Java虚拟机)是Java程序运行时的执行环境,它负责将字节码(.class文件)转换为操作系统能够执行的机器码。JRE(Java Runtime Environment,Java运行环境)包含JVM以及Java类库,是运行Java程序所需的环境。JDK(Java Development Kit,Java开发工具包)包含JRE和开发工具(如编译器、调试工具等),用于开发Java应用。

关系:

  • JDK > JRE > JVM,即JDK包含JRE,而JRE又包含JVM。

2. 为什么Java中String是不可变的(Immutable)?

Java中的String类是不可变的,意味着一旦创建,字符串对象不能被修改。原因如下:

  • 安全性String在很多地方作为参数传递,比如网络连接、文件路径等。不可变性保证了这些参数的安全性。
  • 线程安全:不可变对象是天然线程安全的,多个线程可以安全地共享同一个字符串实例,而不需要进行同步。
  • 性能优化:Java中字符串常量池(String Pool)允许多个字符串对象共享同一内存,这在不可变性前提下成为可能。

3. 什么是Java中的值传递与引用传递?

Java中的参数传递采用的是值传递。当一个对象作为参数传递给方法时,传递的是对象的引用的拷贝,而不是对象本身。因此,方法内部可以通过引用来修改对象的内容,但无法改变引用本身指向的对象。

示例:

public class Test {public static void main(String[] args) {int num = 10;changeValue(num);System.out.println("After change: " + num);  // 输出10StringBuilder sb = new StringBuilder("Hello");changeReference(sb);System.out.println(sb);  // 输出HelloWorld}public static void changeValue(int x) {x = 20;}public static void changeReference(StringBuilder sb) {sb.append("World");}
}

在上述示例中,num的值没有改变,因为Java使用的是值传递;而StringBuilder对象的内容被修改了,因为修改的是对象引用指向的内容。

4. 请解释Java中的多态(Polymorphism)概念,并给出一个简单的例子

多态是面向对象编程的三大特性之一,指同一操作作用于不同的对象时可以表现出不同的行为。多态性通过方法重写(Override)和方法重载(Overload)实现。方法重写通常用于继承中的父类和子类之间,子类可以提供父类方法的具体实现。

示例:

class Animal {public void sound() {System.out.println("Animal is making a sound");}
}class Dog extends Animal {@Overridepublic void sound() {System.out.println("Dog is barking");}
}class Cat extends Animal {@Overridepublic void sound() {System.out.println("Cat is meowing");}
}public class TestPolymorphism {public static void main(String[] args) {Animal myDog = new Dog();Animal myCat = new Cat();myDog.sound();  // 输出Dog is barkingmyCat.sound();  // 输出Cat is meowing}
}

在这个例子中,Animal类具有一个sound()方法,而其子类DogCat重写了这个方法。通过多态性,myDogmyCat在运行时调用的都是其各自类的实现。

5. 什么是Java中的线程安全?如何实现线程安全?

线程安全是指多个线程同时访问某一代码块或资源时,能够保证数据的正确性。线程安全问题通常发生在共享变量或资源的读写上。

实现线程安全的方式有:

  • 同步方法和同步块:使用synchonized关键字来确保线程安全,但可能导致性能下降。
    public synchronized void increment() {count++;
    }
    
  • ReentrantLock:提供了更灵活的锁机制,如超时锁定等。
    Lock lock = new ReentrantLock();
    lock.lock();
    try {// 临界区代码
    } finally {lock.unlock();
    }
    
  • 线程安全的类:如ConcurrentHashMapCopyOnWriteArrayList等。

6. 什么是Java中的垃圾回收机制(GC),它是如何工作的?

Java中的垃圾回收(Garbage Collection)是自动管理内存的机制。JVM会自动检测不再使用的对象并释放它们占用的内存,从而避免内存泄漏。常见的GC算法包括:

  • 标记-清除(Mark and Sweep):标记所有活动对象并清除未标记的对象。
  • 复制算法:将活跃对象复制到另一块内存区域,并清空旧的内存区域。
  • 标记-整理(Mark and Compact):标记活动对象并将它们整理到一端,清空另一端的内存。

JVM提供了不同的GC策略,如Serial GCParallel GCG1 GC等,适用于不同的应用场景。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

240912-设置WSL中的Ollama可在局域网访问

A. 最终效果 B. 设置Ollama(前提) sudo vim /etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target[Service] ExecStart/usr/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 Environme…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

LangChain基础知识大全

LangChain基础知识大全 一、部署ChatGLM-6B1.拉取源码2.安装环境3.下载模型4.修改api.py配置5.运行api.py 二、Models组件1.LLM(大语言模型)2.Chat Model(聊天模型)3.Embedding Model(嵌入模型)3.1 下载中文…

基于Python的自然语言处理系列(16):TorchText + CNN + Teacher Forcing

在本篇文章中,我们将实现 卷积序列到序列学习模型(Convolutional Sequence to Sequence Learning)。与之前介绍的基于循环神经网络(RNN)的模型不同,卷积模型不依赖递归成分,而是通过卷积层&…

增强现实系列—Map-Relative Pose Regression for Visual Re-Localization

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

基于JAVA+SpringBoot+Vue的社区智慧养老监护管理平台

基于JAVASpringBootVue的社区智慧养老监护管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&#x1…

科研绘图系列:R语言多个AUC曲线图(multiple AUC curves)

文章目录 介绍加载R包导入数据数据预处理画图输出结果组图系统信息介绍 多个ROC曲线在同一张图上可以直观地展示和比较不同模型或方法的性能。这种图通常被称为ROC曲线图,它通过比较不同模型的ROC曲线下的面积(AUC)大小来比较模型的优劣。AUC值越大,模型的诊断或预测效果越…

前后端跨域问题及其在ThinkPHP中的解决方案

在现代Web开发中,前后端分离的架构越来越普遍,但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源,浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域? 跨…

一个皮肤科医生长痘的的自救

内服 复方锌铁钙口服液 丹参瞳胶囊 盐酸米诺环素胶囊 (每天一次) 内服 外用: 克林霉素甲硝搽剂 (泛红的痘痘) 人表皮生长因子(痘印)氢醌软膏 (点阵激光留下的色沉 早晚一次) 至少用两个月【痤疮|痘痘用药 一个皮肤科医生的自救】https://www.bilibili.com/video/BV1zu41…

算法题之每日温度

每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…

java计算机毕设课设—企业车辆管理系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—企业车辆管理系统(附源码、文章、相关截图、部署视频) 企业车辆管理系统通过计算机,能够直接“透视”车辆使用情况,数据计算自动完成,尽量减少人工干预,可…

Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+源码+数据库)

目录 目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着…

实战指南:深度剖析Servlet+JSP+JDBC技术栈下的用户CRUD操作

本博客总结基于MVC(JSPServletJDBC)操作用户信息的CRUD(增删改查功能)的完整小项目。包括图片上传和回显,模糊查询,过滤器的登录校验和设置全局字符集以及监听器统计在线用户人数等额外功能,因为代码较多,我…

UnLua实现继承

一、在蓝图中实现继承 1、创建父类,并绑定Lua脚本 2、创建子类蓝图,如果先创建的子类,可以修改父类继承 注意,提示选择继承父类的接口! 二、在Lua中实现继承 1、在父类Lua脚本中实现函数 BP_CharacterBase.lua func…

构建数字化生态系统:打造数字化转型中开放协作平台的最佳实践和关键实施技巧

在数字化转型浪潮中,企业如何确保成功实施至关重要。除了技术上的革新,企业还必须在战略执行、架构优化以及合规性管理等方面掌握最佳实践。随着云计算、大数据、人工智能等新兴技术的迅速发展,企业通过正确的实施技巧不仅能提升业务效率&…

Qemu开发ARM篇-3、qemu运行uboot演示

文章目录 1、运行uboot2、qemu常用命令 在上一篇Qemu开发ARM篇-2、uboot交叉编译文章中,我们搭建了交叉编译工具链,并成功进行了uboot的交叉编译,在该篇中,我们将演示如何利用qemu运行上一篇中交叉编译的uboot程序。 1、运行uboo…

计算机毕业设计之:基于微信小程序的学生考勤系统的设计与实现(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

Redis——redispluspls库hash及zset类型相关接口使用

文章目录 hash类型相关接口hset和hgethexistshdelhkeys 和 hvalshmset和hmget zset类型相关接口zadd和zrangezcard 和 zremzscore和zrank hash类型相关接口 hset和hget std::cout<<"hset 和 hget"<<std::endl;redis.flushall();redis.hset("key&qu…

Java 分布式锁:原理与实践

在分布式系统中&#xff0c;多个节点同时操作共享资源的情况非常普遍。为了保证数据的一致性&#xff0c;分布式锁 应运而生。分布式锁 是一种跨多个服务器的互斥锁&#xff0c;用于协调分布式环境下的资源访问。 本文将介绍 Java 实现分布式锁 的几种常见方式&#xff0c;并结…

OpenAI API: How to catch all 5xx errors in Python?

题意&#xff1a;OpenAI API&#xff1a;如何在 Python 中捕获所有 5xx 错误&#xff1f; 问题背景&#xff1a; I want to catch all 5xx errors (e.g., 500) that OpenAI API sends so that I can retry before giving up and reporting an exception. 我想捕获 OpenAI API…