20230911java面经整理

news2025/1/12 16:18:33

1.java线程安全的数据类型

Vector:每个方法都有synchronized
hashttable:每个方法都有synchronized
stack:继承了vector
arrayblockingqueue:阻塞队列
concurrentHashMap:使用segment分段锁
concurrentLinkedQueue:无界队列

2.java类的生命周期

在这里插入图片描述
加载:class字节码载入jvm
验证:class文件不危害虚拟机
准备:为类静态变量分配内存设置初值
解析:符号引用改为直接饮用
初始化:类构造器之类的
使用:用功能
卸载:gc回收等;实例回收,classloader回收,class对象无引用

3.类加载机制

双亲委派机制
在这里插入图片描述
收到了类加载请求,会委托父类加载器执行,如果都没有就自己加载

4.java内存模型

jmm定义了了线程和主内存的关系
每个线程都有一个私有的本地内存。是cpu的寄存器和高速缓存
在这里插入图片描述
线程通信的话,要进行save和load两步操作得到共享变量
解决了线程读同步和可见性、原子性
有时候对没有数据依赖的操作进行指令重排序提高并行度,同时可以使用内存屏障防止冲排序

5.堆内存和栈内存的区别,分别存什么

栈主要存局部变量和对象的引用变量,每个线程有一个独立的栈空间
堆主要存实例化的对象数组,一个jvm只有一个堆内存
栈存取速度快,但大小和生存周期确定,缺少灵活
堆可以动态分配内存,生存期布丁,gc自动抽走;运行时动态分配,存取慢

6.一个类的静态变量实例化存在哪里

成员变量存在于堆内存中。 静态变量存在于方法区
在这里插入图片描述
方法区被线程共享,存储了每个类的信息和静态变量、常量池等

7.一个函数内部的局部变量存哪里

栈。

8.Springboot框架的生命周期

初始化阶段(构造、配置)
运行阶段(准备、applicationContext启动、启动后)
结束
退出

9.springboot和spring的区别

springboot使用约定优于配置原则,减少xml显式配置
springboot通过maven gradle管理依赖
springboot提供注解,更多默认配置和开箱即用功能,简化开发
springboot为服务支持,自动配置话快速启动

10.mysql的索引类型

存储方式:b+tree,哈希,全文索引:搜索文本关键字,char varcahr和text,fulltext配合match against,用倒排索引
逻辑方式
普通索引:可以为空,加快查询
唯一索引:索引值必须唯一
主键索引:不允许空 唯一
组合索引:多字段,最左前缀匹配,用于组合搜索
物理方式:
聚簇索引:叶子结点放行记录
非聚簇索引:放主键,没有索引覆盖时要回表

11.四阶聚簇索引的存储结构?插入过程和查询过程?

四阶聚簇索引通常用于数据库系统,是一种多级索引结构,用于提高数据的检索效率。这种索引结构包含了多个级别,每个级别都存储部分数据的索引信息。以下是四阶聚簇索引的存储结构以及插入和查询过程的简要描述:

存储结构:

四阶聚簇索引通常由以下几个层次组成:

第一级索引: 第一级索引通常是一个 B+ 树或类似的数据结构,用于存储所有数据块的索引。每个索引项通常包括一个键值和一个指向对应数据块的指针。

第二级索引: 第二级索引也是一个 B+ 树,但它的每个叶节点指向第一级索引的某个节点,而不是数据块。这些第二级索引的叶节点按照键值的顺序排列,以支持范围查询。

第三级索引: 第三级索引同样是一个 B+ 树,但它的叶节点指向第二级索引的节点。

第四级索引: 第四级索引是最底层的索引,指向数据块。这些数据块包含了实际的数据记录。

插入过程:

插入新记录时,数据存储在第四级索引的数据块中。如果插入导致某个数据块超过了容量限制,可能需要进行分裂操作,将数据块分成两个。此时,需要更新第三级索引,以便找到新分裂出的数据块。如果第三级索引也需要更新,那么需要逐级更新直到第一级索引。

查询过程:

当执行查询操作时,数据库系统首先使用第一级索引来定位到包含查询键值的数据块。然后,它可以通过第二级、第三级索引依次定位到具体的数据块。最终,在数据块中进行线性查找或其他搜索操作,找到满足查询条件的数据记录。

四阶聚簇索引的优点是能够提高范围查询的性能,因为第二级和第三级索引可以有效地缩小搜索范围。但它也会增加索引的维护成本,因为插入、更新和删除操作可能需要更新多个级别的索引。因此,索引的设计需要根据具体的应用场景和查询需求来权衡性能和维护成本。

12.redis数据类型

String:常规kv缓存
hash:存储对象
list:消息队列,多个端点将日志写入redis;取最新n个数据
set:无序集合求共同关注、共同好友等
zset:权重参数score,跳表,排行榜,待权重的消息队列

13.java的String和redis的String对比,获取len的时间复杂度

redis的String用了简单动态字符串SDS,可以o1获得字符串长度,防止缓冲区溢出,减少修改时内存重分配次数,c字符串不可以出现\0导致不能存二进制数据
java时o1有length变量,c语言需要遍历获取所以是on

14.代码题

在这里插入图片描述
结果:

在这里插入图片描述
解释:
静态块:只执行一次
构造块:创建对象执行
执行顺序:静态块 > main > 构造块 > 构造方法
1.public static B t1 = new B();
2.public static B t2 = new B();
3.static
{
System.out.println(“静态块”);
}
4.B t = new B();
{
System.out.println(“构造块”);
}
在加载类的时候:
所以前两个static的对象作为当构造对象,输出构造块
然后输出静态块
最后创建对象t,再次输出构造块

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

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

相关文章

flink on yarn任务中文乱码问题解决记录

开发反馈预生产部分部分flink任务出现中文乱码的问题 找到乱码的flink任务所在的节点,登录服务器,执行locale命令: 发现是locale没有设置好,使用vim编辑文本,写入中文都直接乱码 对比其他几台机器,发现主…

【算法】常见位运算总结

目录 1.基础位运算2. 给一个数n,确定它的二进制表示中的第x位是0还是13.将一个数n的二进制表示的第x位修改成14.将一个数n的二进制表示的第x位修改成0、5. 位图的思想6.提取一个数(n)二进制表示中最右侧的17.干掉一个数(n)二进制表示中最右侧的18.位运算的优先级9.异…

瞄准热门需求:7个最受欢迎的跑腿小程序开发灵感

跑腿服务在如今快节奏的社会中扮演着重要角色,而跑腿小程序成为满足人们日常需求的利器。如果你正计划开发一款跑腿小程序,那么把握住最热门的需求绝对是成功的关键。在本文中,我作为跑腿小程序开发领域的专家,将分享七个最受欢迎…

【UIPickerView案例07-省市选择界面数据展示03-城市选择Bug修复 Objective-C语言】

一、咱们先把前面的内容捋一下——省市选择界面: 1.首先呢,我们说,实现一个案例,第一步,先看界面, 1)第一步:先看界面, 2)第二步:分析一下它的基本结构, 3)第三步:搭建界面, 4)第四步:加载数据, 5)第五步:显示数据, 是不是五步, 大的就这五步, …

SpringMVC文件上传与下载、JREBEL使用

目录 一、引言 二、文件的上传 1、单文件上传 1.1、数据表准备 1.2、添加依赖 1.3、配置文件 1.4、编写表单 1.5、编写controller层 2、多文件上传 2.1、编写form表单 2.2、编写controller层 2.3、测试 三、文件下载 四、JREBEL使用 1、下载注册 2、离线设置 一…

“文件的上传与下载:实现与优化“

目录 引言1.文件的上传2.文件的下载3. JRebel安装使用4. 文件批量上传总结 引言 在开发过程中,文件的上传与下载是常见的需求。本篇博客将以CSND为例,介绍文件上传与下载的常见方式,以及如何通过优化提升性能和用户体验。 1.文件的上传 使…

【Python算法Algorithm】专栏导读

1 什么是算法(Algorithm)? 算法是一组用于解决特定问题或执行特定任务的有序、精确的计算步骤的集合。它可以被认为是一种计算机程序,但更加抽象和数学化。 算法的主要目标是将输入数据转化为所期望的输出结果,而且要在…

华为云云耀云服务器L实例评测|一键部署,畅享高效华为云MySQL

本文目录 一、前言1、云耀云服务器L实例介绍2、产品优势 二、购买/使用1、首界面购买2、根据自己需求购买对应的3、购买成功过后返回首页面---》启动4、重置密码5、远程登录6、输入账户密码提示登陆成功7、为了方便拷贝安装命令,可以选择本地鼠标8、点击复制粘贴9、…

【Spring面试】五、Bean扩展、JavaConfig、@Import

文章目录 Q1、如何在Spring创建完所有的Bean之后做扩展?Q2、Spring容器启动时,为什么先加载BeanFactoryPostProcess?Q3、Bean的生产顺序是由什么决定的?Q4、Spring有哪几种配置方式Q5、JavaConfig是如何替代spring.xml的?Q6、Com…

InVideo AI:用人工智能轻松制作视频

简介: InVideo AI 是一款在线视频制作工具,使用人工智能来帮助用户快速、轻松地制作高质量的视频。该工具提供多种功能,包括: 链接: ai.invideo.io 仪表盘: 历史记录: 创建视频&#xff1a…

【Linux从入门到精通】信号(初识信号 信号的产生)

本篇文章会对Linux下的信号进行详细解释。主要内容是什么是信号、信号的产生、核心转储等问题。希望本篇文章会对你有所帮助。 文章目录 引入 一、初识信号 1、1 生活中的信号 1、2 Linux 下的信号 1、3 信号进程所得的初识结论 二、信号的产生 2、1 用户通过终端输入产生信号 …

2023年9月NPDP产品经理国际认证报名来这里就对了

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

针对电子企业生产特征,提出MES管理系统解决方案

随着全球经济一体化的不断加剧,中国作为一个制造业大国,在电子组装、SMT贴片、PCB组装等领域取得了很大的突破,企业规模和数量随着不断增加,造成成本压力增加、产品生命周期缩短、设备日益复杂且缺少透明度以及不明需求预测&#…

SLAM从入门到精通(编写第一个package)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们安装了ROS环境,接着就可以开始进行ROS程序的开发了。在开发之前,我们有几个概念需要厘清一下。第一个是workspace&…

linux系统中LVM磁盘动态扩容方案

LVM动态扩展方案 信息确认: 磁盘空间确认 挂载磁盘的文件系统确认 lv卷组信息确认 1、确认磁盘已扩容:首先确认物理磁盘(vdb)已成功扩容至500G。 fdisk -l2、重新分区:将物理磁盘上多出的200G空间格式化为新的分区…

geopandas笔记:汇总连接两个区域的边

比如这样的两个区域,我们想知道从蓝到绿、从绿到蓝都有哪些边 1 读取openstreetmap import osmnx as ox import geopandas as gpdGox.graph_from_place(Singapore,simplifyTrue,network_typedrive)ox.plot_graph(G) 2 得到对应的边的信息 nodes,edgesox.graph_to_…

怎么在图片上编辑文字?这几种图片编辑工具了解下

在图片上编辑文字可以带来许多好处。首先,它可以更好地说明图片的内容和意义。有时候,一张图片可能不够清晰地传达想要表达的信息,但是通过在图片上添加文字说明,可以更好地让观众理解图片的意义。其次,编辑文字可以使…

AliExpress速卖通支付下单流程(测评补单优势及技术要点)

1. 打开全球速卖通官网,点击右上方的Join (注册)填写邮箱和密码,验证完毕后注册成功 2. 点击右上角的Account(账户)进入用户菜单 3. 点击导航了第一个My AliExpress(我的速卖通)选择左边My Shipping Address&#xff0…

VSCode自动分析代码的插件

今天来给大伙介绍一款非常好用的插件,它能够自动分析代码,并帮你完成代码的编写 效果如下图 首先我们用的是VSCode,(免费随便下) 找到扩展,搜索CodeGeeX,将它下载好,就可以实现了 到…

PathVariable注解

postman测试传参:http://localhost:8080/admin/employee/2 PathVariable PathVariable注解用法和作用