面试-java常见问题

news2025/2/12 15:15:20

JVM 配置

  • 程序计数器:当前线程所执行的字节码的行号指示器
  • java虚拟机栈:临时变量
  • 元空间:类常量池,运行时常量池
  • 方法区:类信息,静态变量
  • 堆:对象实例,Sting常量池等

类加载过程

加载->链接(验证+准备+解析)->初始化->使用->卸载

加载:将硬盘中的二进制文件转为内存中的class对象

链接:给静态变量赋初始值,符号引用替换为直接引用

  • 验证:检查载入的class 文件数据正确性。
  • 准备:给类变量(静态变量)分配内存(方法区),直接赋值为最终值。
  • 解析:将常量池内的符号引用替换为直接引用。

初始化:执行类变量(静态变量)的赋值和静态语句块
使用:若是第一次创建对象(对象所属的类没有加载到内存中),先执行初始化操作,再堆上为对象分配空间,所有属性设设置默认值,给实例变量赋值,初始化语句,检查是否有父类,有就先执行父类的构造函数。

GC垃圾回收流程

GC垃圾回收,是对堆内存的一清理。
堆内存:
年轻代:(eden[伊甸园],survior[存活区],vlrtual[伸缩区])
老年代:(tenured[旧生代],vlrtual[伸缩区])
永久代:(1.8后就不存在了,换为了元空间)
在这里插入图片描述

ArrayList是否线程安全?如何线程安全地操作ArrayList?

ArrayList 是线程不安全的,如果需要线程安全的List,可以从采用Vector/Collections.synchronizedList/CopyOnWriteArrayList
Vector: 使用synchronized关键字
Collections.synchronizedList: 内每一个方法都加了synchronized 关键字
CopyOnWriteArrayList: 在写操作的时候总是要复制,将原来的数据复制到新的数组进行操作,任何可变的操作都是通过ReentrantLock 控制并发。

线程不安全的原因:
当多个线程同时对一个数组进行操作时,如果线程1 执行 list[i] = “a” ,i++;线程2执行 list[i] = “b” ,i++;
如果线程同步执行了list[i] = 的操作,在执行i++,那么i+1 就有可能出现空值,list[i]的值同样可能出现被覆盖的情况。所以说ArrayList 线程不安全。

HashMap、TreeMap、LinkedHashMap的区别?

相同点:都是属于Map,都是通过K-V存储,K不允许重复。都是线程不安全的。
不同点:

HashMapTreeMapLinkedHashMap
按顺序插入存放不支持不支持支持,遍历时按插入的顺序输出
按Key排序不支持支持,默认按key升序不支持
数据结构数组+链表+红黑树红黑树HashMap+双向链表
nullkey,value都可以为空,但是Key只能有一个为空不允许key,value为空key,value都可以为空,但是Key只能有一个为空

HashMap为什么线程不安全?如何线程安全地操作?

安全使用Map的三种方法:
1.HashTable,在get/put方法上加上了synchronized关键字,性能很差。
2.Collections.synchronizedMap,所有的方法都加上了synchronized关键字,性能很差。
3.ConcurrentHashMap,每次只给一个桶(数组项)加锁,性能好。

HashMap线程不安全的原因:
1.数据覆盖,
2.读出为null
3.JDK1.7会出现死循环。

ConcurrentHashMap原理?

在JDK1.8后,ConcurrentHashMap采用的是HashMap(数组+链表+红黑树)+synchronized +CAS的设计来实现线程安全。
CAS:在判断数组中当前位置为null时,使用CAS把这个新的节点写入对应数组中的位置。
synchronized:当数组中当前位置不为空时,通过加锁来添加这个节点进入数组(链表<8)或者红黑树(链表>=8)

线程池有哪些参数?

1.corePoolSize:线程池的核心线程数,即便没有任务也会有这么多的线程在等候;
2.maximunPoolSize:最大线程数,超过这个数量会触发拒绝策略。
3.keepAliveTime:线程存活时间,当线程大于corePoolSize时,等到这个时间还没有任务执行的话,线程退出。
4.unit:指定keepAliveTime的单位,如TimeUnit.SECONDS 秒。
5.workQueue:阻塞队列,提交的任务会被放在这个队列里。
6.threadFactory:线程工场,用来创建线程。
7.handler:拒绝策略

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

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

相关文章

使用javacv中的ffmpeg实现录屏

今天突发奇想&#xff0c;想自己写一个录屏的软件&#xff0c;上次写了一个专门录音的Demo&#xff0c;但是要把声音和视频放到一起合成一个mp4文件&#xff0c;着实有一点艰难&#xff0c;所以就打算使用ffmpeg来写一个&#xff0c;而这篇博客中会顺便谈一谈我碰到的各种坑。 …

JVM面试题50道

1.JDK、JRE、JVM关系&#xff1f; Jdk (Java Development Kit) : java语言的软件开发包。包括Java运行时环境Jre。 Jre &#xff08;Java Runtime Environment) :Java运行时环境&#xff0c;包括Jvm。 Jvm (Java Virtual Machine) :一种用于计算机设备的规范。 Java语言在不同…

JavaWeb小记——Tomcat

目录 Tomcat简介 Tomcat下载安装 Tomcat启动 Tomcat关闭 常见问题 项目发布 发布方式一 发布方式二 发布方式三 IDEA打war包 Tomcat和IDEA整合 IDEA发布动态项目 Tomcat简介 Tomcat是Apache基金组织下的一款免费的开源的且支持Servelet和JSP规范的服务器 Tomcat下…

Spark大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录 一、学习目标二、搭建Scala的IntelliJ IDEA开发环境&#xff08;一&#xff09;启动IDEA&#xff08;二&#xff09;安装Scala插件&#xff08;三&#xff09;配置IDEA使用的默认JDK&#xff08;四&#xff09;创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Scala…

跨平台潜能解锁:将Ionic框架与小程序容器相结合

Ionic是一个用于构建跨平台移动应用程序的开源框架。它结合了HTML、CSS和JavaScript等技术&#xff0c;帮助开发者创建具有原生应用体验的移动应用程序。Ionic提供了一套用户界面组件和工具&#xff0c;可用于构建高度交互和美观的移动应用界面。 Ionic基于Angular框架&#x…

为什么 Twitter 和 Facebook 的网站页面变得越来越像?

Twitter和Facebook这两个社交媒体平台在不同的领域取得了巨大的成功。Twitter以其独特的推文形式而闻名&#xff0c;而Facebook则以其广泛的社交网络和内容分享功能而著称。 然而&#xff0c;近年来&#xff0c;这两个平台在设计和布局上的相似之处越来越明显。为什么会出现这…

奖金高达534万!2023第四届全国人工智能大赛

2023第四届全国人工智能大赛 报名链接&#xff1a; https://www.datafountain.cn/special/NAIC2023?target13250069&specialNAIC2023 叮咚&#xff0c;已向您发送组队邀请&#xff01;今年最值得参与的第四届全国人工智能大赛开放报名了&#xff0c;3道赛题奖金534万&…

又一重点项目,石岩新能源产业园建面61.6万平,配27班学校

近日&#xff0c;宝安区城市更新和土地整备局发布&#xff0c;关于石岩街道总部经济园区城市更新单元(一期南及二期)“工业上楼”单元规划&#xff08;草案&#xff09;已通过专班会议审议的公告。 公告显示&#xff0c;项目申报主体为深圳市开宝安区投资管理集团有限公司&…

信息系统项目管理师(软考高项)备考总结

简介 信息系统项目管理师&#xff0c;计算机技术与软件&#xff08;高级&#xff09;专业技术资格。 相关考试简称软考&#xff0c;该资质业内简称高项。 证书价值 自行百度吧&#xff0c;决定考的肯定知道他能带来什么价值了。 笔者是因为从事软件开发&#xff0c;服务政…

js的一些工具函数以及方法

部分方法复制于&#xff1a;20 个 JS 工具函数助力高效开发 reduce 举例&#xff1a;数组求和 let a[1,3,6,5,7]; let init0;//累加的初始值&#xff0c;默认为0&#xff0c;可不写 let ba.reduce((pre,cur,index,arr)>{console.log(当前要加序号&#xff1a;,index);cons…

左右排版的PDF,如何转换为单栏排版的word?

将左右排版的PDF转换为单行排版的WORD文字版需要进行以下步骤&#xff1a; 1. 使用PDF转换工具将PDF转换为WORD格式。有很多在线或离线的PDF转WORD工具可供选择&#xff0c;例如金鸣表格文字识别、Adobe Acrobat、Smallpdf、Zamzar等。 2. 打开WORD文档后&#xff0c;选择“页…

24个Jvm面试题总结及答案

1.什么是Java虚拟机&#xff1f;为什么Java被称作是“平台无关的编程语言”&#xff1f; Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台&#xff0c;而不需要程序员为每…

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我&#xff0c;歌曲的歌词和评论怎么生成词云图&#xff0c;想买代码… 当时我就拒绝了&#xff0c;直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例&#xff0c;要对《青花瓷》歌词…

Nacos架构与原理 - 注册中心服务数据模型(2.x版本)

文章目录 服务&#xff08;Service&#xff09;和服务实例&#xff08;Instance&#xff09;定义服务服务元数据定义实例实例元数据持久化属性 集群&#xff08;Cluster&#xff09;定义集群 生命周期服务的⽣命周期实例的⽣命周期集群的⽣命周期元数据的⽣命周期 服务&#xf…

DM Ticket-大麦网自动购票工具 支持Docker一键部署

DM Ticket-大麦网自动购票工具 支持Docker一键部署 DM Ticket&#xff0c;一个大麦网演唱会自动购票工具&#xff0c;支持Docker一键部署&#xff0c;不过小白想要操作的话需要一点命令知识&#xff0c;作者的GitHub项目页面有很详细的介绍&#xff0c;感兴趣的同学可以到GitH…

反汇编分析——全局、局部、静态、堆变量

在可执行文件编译的时候就已经存储在固定的位置了&#xff0c;甚至还可以跨文件共享&#xff0c;因为他本身就是静态的&#xff0c;固定在文件当中的嘛 反汇编窗口就是直接拿指针解引用&#xff0c;也就是拿这个地址来访问的&#xff0c;直接寻址 自动变量&#xff0c;不用我们…

C# .NET ADO.NET介绍和如何使用

文章目录 环境配置ADO.NET简介ADO.NET是什么面向过程和面向对象什么是ORM ADO.NET用于解决什么问题优化开发效率对已存在的数据库&#xff0c;设计多个程序对开发中的程序&#xff0c;动态设计数据库&#xff0c;同步更新 ADO.NET如何使用&#xff0c;以sql server为例ADO.NET如…

多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清…

IPV6综合实验

拓扑结构&#xff1a; 要求&#xff1a; 1、两个局域网基于6 to 4 tunnel可达&#xff0c;公网使用IPV4地址 2、R1可以访问R3的环回 3、保障网络更新安全&#xff0c;全网可达 使用的设备&#xff1a;8台路由器 解决网络拓扑&#xff1a; 1、确定广播域的个数 2、分配网段 …

react---pubsub-js消息订阅与发布

pubsub是一个用Javascript编写的基于主题的发布/订阅库&#xff0c;适用于任意组件间的通信&#xff0c;需要先订阅再发布 &#xff0c;在组件即将卸载时钩子函数中进行取消订阅。 1. 在线文档: https://github.com/mroderick/PubSubJS 2. 下载: 【npm install pubsub-js --sav…