JAVA面试常见面试问题02

news2025/2/26 14:49:25

1、jvm 

内存结构图

对jvm直观的了解

答:

jvm是一个抽象执行环境,它通过加载字节码、实现跨平台运行、管理内存(包括自动垃圾回收)、优化代码执行等,为Java程序提供运行时支持

2、内存泄漏 和 内存溢出

答:

内存泄漏指的是无效对象持续占用内存导致资源浪费

内存溢出则是程序申请内存时超出JVM可用容量

3、sql执行过长的时间,如何优化,从哪些方面?

答:

做索引

explain分析sql语句,查看是否命中多个索引,查看执行计划,分析索引是否用上,分析扫描行数

看是否能进行业务拆分,相关字段冗余或者合并成临时表

用navicat进行分库分表

4、红黑树

答:

红黑树是一种自平衡二叉查找树,通过确保树的高度平衡(logN级别),维持着高效的插入、删除和查找操作(最坏情况O(logN)时间复杂度),其特点是节点有颜色标记(红或黑),遵循特定规则以维护树的平衡性。

5、红黑树在java和mysql中用处

答:

Java中的应用:在Java的标准库中,红黑树用于实现一些需要排序或快速查找的数据结构,例如 TreeMap 和 TreeSet。这些集合类要求元素保持有序,并提供了高效的查找、插入和删除操作。

MySQL中的应用:传统上,MySQL的InnoDB存储引擎并不直接使用红黑树作为其索引结构。相反,InnoDB主要采用B+树作为索引的数据结构,特别是在存储索引和数据时,B+树的特性(如所有实际数据存储在叶子节点,能够很好地支持范围查询和高扇出率)更适合数据库场景。红黑树虽然在某些数据库系统或特定场景下可能作为索引结构(比如较小的内存索引或者特定类型的内部处理),但并不是MySQL InnoDB默认或主要的索引实现方式。

6、HashMap和HashTable的区别?

答:

HashMap和Hashtable的底层实现都是数组+链表结构实现

Hashtable是线程安全,HashMap是非线程安全

两者计算hash的方法不同

7、java中有2个线程,怎么让a线程访问到b线程

答:

  1. 共享对象/变量:如果线程B需要向线程A传递信息,可以使用共享变量(最好是线程安全的,如 volatile 关键字修饰的变量,或者使用 Atomic 类型,或者通过锁机制如 synchronized 方法/块来保护)。线程B修改共享变量后,线程A能够感知并读取到最新值。

  2. 等待/通知机制:Java提供了 wait()notify()notifyAll() 方法,这些方法需要在同步代码块或同步方法中使用,允许一个线程等待,直到另一个线程通知它条件已改变。

  3. Condition接口java.util.concurrent.locks.Condition 提供了比 wait()/notify() 更灵活的线程间协调机制。它和Lock配合使用,可以实现更复杂的线程间唤醒条件。

  4. CountDownLatch:如果你需要一个线程等待其他线程完成某项操作后再继续执行,可以使用 java.util.concurrent.CountDownLatch。初始化时指定计数器的初始值,线程完成任务后调用 countDown() 减少计数,其他线程通过 await() 等待计数器归零。

  5. CyclicBarrier:与 CountDownLatch 相似,但 java.util.concurrent.CyclicBarrier 可重用,适用于一组线程相互等待,直到到达某个屏障点,然后所有线程一起继续执行。

  6. Semaphore:虽然主要用于控制访问某种资源的线程数量,但也可以用来实现线程间的简单通信,一个线程通过释放信号量,另一个线程通过获取信号量来实现同步。

  7. Future与Callable:如果你想要得到另一个线程执行任务的结果,可以使用 java.util.concurrent.Futurejava.util.concurrent.CallableExecutorService 提交 Callable 任务后返回一个 Future,主线程可以通过 Future.get() 方法等待结果。

每种方法都有其适用场景,选择时应根据具体需求来决定。

8、怎么创建线程池

答:

用ThreadPoolExecutor构造函数

ExecutorService executor = new ThreadPoolExecutor(
    corePoolSize, // 核心线程数
    maximumPoolSize, // 最大线程数
    keepAliveTime, // 空闲线程存活时间
    TimeUnit.MILLISECONDS, // 时间单位
    new LinkedBlockingQueue<Runnable>() // 任务队列
);

9、用什么工具,能同时检测java内存泄漏与溢出

答:

  1. JVisualVM: 作为Java自带的性能分析工具,JVisualVM不仅可以实时监控内存使用情况,帮助发现内存泄漏,还可以设置内存使用阈值报警,从而预防内存溢出的发生。当实际内存使用接近设定的阈值时,它会提醒你,有助于及时采取措施防止溢出。

  2. YourKit Java Profiler: YourKit是一个功能全面的商业性能分析工具,它不仅能够实时监控和分析内存使用,识别内存泄漏,还具备强大的内存溢出预防机制。你可以设置内存使用规则,当达到特定条件时触发警告或自动执行堆转储,以便进一步分析。

  3. Java Mission Control (JMC) with Flight Recorder: JMC结合Flight Recorder可以记录详细的运行时数据,包括内存分配和垃圾收集事件,这对于预测和诊断内存溢出非常有用。它能提供详细的内存使用趋势,帮助你在内存溢出之前发现问题。

  4. Eclipse Memory Analyzer Tool (MAT): 虽然MAT主要用于分析已发生的内存泄漏问题,通过分析堆转储文件,但它也能帮助理解是什么原因导致了内存溢出。在内存溢出发生后,通过分析MAT提供的堆快照,你可以找出占用大量内存的对象或引用链,从而修复潜在的内存泄漏并调整内存使用策略以避免未来发生溢出。

  5. Arthas: Arthas作为一个强大的Java诊断工具,虽然主要不是用于监控内存泄漏或溢出,但你可以利用它动态地查询JVM和应用状态,包括内存使用情况,这对于实时监控和故障排查很有帮助。

  6. Prometheus + JMX Exporter: 结合使用监控系统如Prometheus和JMX Exporter,你可以收集Java应用程序的JVM指标,包括内存使用量。设置警报规则可以在内存接近饱和时得到通知,预防潜在的溢出问题。

10、jvm 最大内存设置。设置的原理。结合垃圾回收

答:

JVM内存可以分为堆内存和非堆内存,堆内存给开发人员用的,非堆内存给JVM本身用的,用来存放类型信息,即使GC时也不会释放空间。

堆内存设置:

-Xms 初始堆内存,默认物理内存1/64,也是最小分配堆内存,当空余堆内存小于40%时,会增加到-Xms的最大限制。

-Xmx 最大堆内存分配,默认物理内存1/4,当空余堆内存大于70%时,会减小打-Xms的最小限制。

非堆内存设置:

-XX:PermSize 非堆内存的初始值,默认物理内存的1/64,也是最小非堆内存。

-XX:MaxPermSize 非堆内存最大值,默认物理内存的1/4。

查看堆大小命令为Runtime.getRuntime().maxMemory()。

11、jvm怎样通过参数调整内存大小

答:

idea右上角 edit configurations选中当前启动类,有个mondify options 选 add vm options

12、进程与线程的区别

答:

线程是进程的一个单元,也是进程内的可调度实体。

区别就是:

1、进程内的线程共享地址空间,进程则自己独立的地址空间。

2、进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。

3、线程是处理器调度的基本单位。

4、两者均可并发执行。

13、如何避免死锁

答:

1. 使用事务时,尽量缩短事务idea逻辑处理过程,及早提交或回滚事务

2. 设置死锁的超时参数为合理范围,如3-10分钟,若超过时间,自动放弃本次操作,避免进程悬挂。

3. 优化程序,检查并避免死锁现象出现。

4. 对所有的脚本和sp都要仔细测试。

5. 所有的sp都要有错误处理。

6. 一般不要修改sql事务的默认级别。不推荐强行加锁。

未完待续...

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

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

相关文章

错题记录(小测)

单选 错题1 错题2 错题3 代码题 反转链表 链表的回文结构

C++语法08 数据类型之间的强制转换

目录 强制类型转换 强制类型转换格式 整型转换成浮点型 整型转换成浮点型其他写法 训练&#xff1a;糖果奖励 糖果奖励参考代码 浮点型转换成整型 浮点型转换成整型其他写法 训练&#xff1a;分离小数 分离小数参考代码 强制类型转换 强制类型转换&#xff0c;就是把…

碳中和研究院OLED透明屏2x2整机项目方案

一、项目背景 随着全球气候变化和环境问题的日益严重&#xff0c;碳中和成为各国政府和企业的重要议题。为了响应这一趋势&#xff0c;黑龙江碳中和研究院计划引入先进的OLED透明屏技术&#xff0c;以展示其研究成果和碳中和理念。本项目旨在为该研究院提供一套高质量的OLED透明…

域策略笔记

域策略 导航 文章目录 域策略导航一、设置客户端壁纸二、重定向用户配置文件路径三、部署网络打印机四、部署共享文件夹为网络驱动器五、通过域策略推送软件安装六、通过域策略限制软件的使用通过路径进行限制通过进程限制 七、通过域策略将文件添加白名单八、通过域策略添加可…

什么是 Solana 节点?

什么是 Solana 节点&#xff1f; 验证交易和维护安全是任何项目进入权益证明领域时必须执行的强制性活动。如果没有节点运营商&#xff08;验证器和 RPC 节点&#xff09;&#xff0c;Solana 网络就无法实现这些目标。 让我们看看这两种类型的节点有何区别。 共识验证者 角色&…

GenICam标准(三)

系列文章目录 GenICam标准&#xff08;一&#xff09; GenICam标准&#xff08;二&#xff09; GenICam标准&#xff08;三&#xff09; 文章目录 系列文章目录6、缓存7、识别并判断相机描述文件的版本7.1. 格式的版本7.2. 相机描述文件的版本7.3. 识别并缓存相机描述文件 参考…

2024年6月14日 (周五) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 WPS免登录一键修改器: 去除烦人的登录且能正常使用 EA招募退伍军人重塑下一代《战地》游戏EA正通过“雇用我们的英雄”计划&#xff08;HOH&#xff09;雇用…

OpenAI函数调用:使用Assistants API函数工具的一个示例

Are you looking to expand GPTs capabilities? Check out this tutorial for a complete example of an AI Assistant that can send emails whenever we ask it to. 您是否希望扩展GPT的功能&#xff1f;查看这个教程&#xff0c;它提供了一个完整的示例&#xff0c;展示了…

多模态革新:Ferret-v2在高分辨率图像理解与细粒度交互的突破

在多模态大模型&#xff08;MLLMs&#xff09;的研究中&#xff0c;如何将视觉理解能力与语言模型相结合&#xff0c;以实现更精细的区域描述和推理&#xff0c;是一个重要的研究方向。先前的工作如Ferret模型&#xff0c;通过整合区域理解能力&#xff0c;提升了模型在对话中的…

开源大模型的新星:ChatGPT-Next-Web 项目解析与推荐

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法&#xff0c;主要有均方误差MSE&#xff0c;R方得分等指标&#xff0c;在分类模型中&#xff0c;我们主要应用的是准确率这个评估指标&#xff0c;除此之外&#xff0c;常用的二分类模型的模型评估指标还有召回率&#xff08;Recall&#xff…

串口屏介绍

一、串口屏简介 串口屏&#xff08;Serial LCD/Serial TFT Display&#xff09;是一种集成了串行通讯功能的显示屏&#xff0c;广泛应用于各种嵌入式系统、工业控制、人机界面&#xff08;HMI&#xff09;等领域。该显示屏通过串口&#xff08;如UART、RS232、RS485等&#xf…

记录一下PHP使用微信小程序支付

记录一下PHP使用微信小程序支付V3版本经历 官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 请详细查看文档中小程序支付接入前准备&#xff08;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml&#xff…

计算机系统的主要概念

这篇文章通过研究“hello&#xff0c;world”这个简单程序的生命周期来介绍计算机系统的主要概念。 1. 信息就是位 上下文 我们以 hello 程序为例&#xff0c;在 linux 系统中&#xff0c;我们编辑文本文件 hello.c&#xff0c;使用编译器将其编译成可执行的 源程序&#xf…

618有什么值得推荐?2024数码产品推荐,轻松拿捏选购!

随着618购物节即将来临&#xff0c;你是否已被琳琅满目的商品所吸引&#xff0c;难以抉择&#xff1f;团团特意为你筛选出一系列经过亲身试验的优质好物&#xff0c;旨在帮助你在这场购物盛宴中迅速锁定心仪之选。这些推荐不仅走在时尚的前沿&#xff0c;更能满足你日常生活的各…

任务3.8.2 利用RDD计算总分与平均分

实战&#xff1a;使用RDD 计算学生成绩的总分与平均分 项目背景 本项目旨在利用 Apache Spark 的强大数据处理能力&#xff0c;对存储在 HDFS 上的学生成绩文件进行处理&#xff0c;计算每个学生的总分和平均分。 项目目标 读取存储在 HDFS 上的成绩文件。计算每个学生的总…

波卡近期活动一览| Polkadot Decoded 2024 重磅来袭,300 万 DOT 将用于 DeFi 增长

Polkadot 生态近期活动精彩纷呈&#xff0c;线上线下火热进行中&#xff01;此外&#xff0c;Polkadot 2.0 的关键升级即将到来&#xff0c;Gavin Wood 博士也将在最新访谈节目中分享更多关于波卡的未来发展蓝图。波卡 DAO 通过提案&#xff0c;分配 300 万 DOT 支持 DeFi 生态…

双向转发检测BFD(学习笔记)

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况 BFD检测机制 BFD的检测机制是两个系统建立BFD会话&#xff0c;并沿它们之间的路径周期性发送B…

企业如何抓住“AI+出海”新机遇?2024光亚展现场,全屋智能出海AI营销第一课行业大咖齐聚点拨

2024年6月9日至12日&#xff0c;第29届广州国际照明展览会&#xff08;光亚展&#xff09;于在中国进出口商品交易会展馆举办。连同同期举行的第21届广州国际建筑电气技术展览会&#xff08;GEBT&#xff09;&#xff0c;雄据广州中国进出口商品交易会展馆A及B区的26个展馆&…