Java一些面试题(简单向)

news2024/12/26 0:15:58

以下全部简单化回答(本人新手,很多都是直接百度粘贴收集得来的,如有不对请留下正确答案,谢谢)
(问题来源https://www.bilibili.com/video/BV1XL4y1t7LL/?spm_id_from=333.337.search-card.all.click&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
1.重写 重载的区别
重写(override): 对同名,同参数,同返回值的方法进行重写.
重载(OverLoading):同名方法,不同参数和返回值但是同名的方法进行重写,而且可以多个同名(不同参数)方法存在.

2.==和equals()的区别

==对比的是地址
equals()对比的是值

3.重写equals()的时候为什么还要重写hashcode的方法
(来源 https://blog.csdn.net/JokerLJG/article/details/119236911)
如果两个对象通过equals方法比较是相等的,那么它们的hashCode方法结果值也是相等的。
如果两个对象通过equals方法比较是不相等的,那么不要求它们的hashCode方法结果值是相等的。
当在一个应用程序执行过程中, 如果equals方法比较中没有修改任何信息,那么在同一个对象上重复调用hashCode方法时,它必须始终返回相同的值。但如果从一个应用程序到了另一个应用程序,两个应用程序汇中调用hashCode方法的返回值可以是不一致的。

4.线程的创建方式有几种
4.1继承Thread方法
4.2实现Runable接口
4.3实现Callable接口
4.4线程池

5.线程池七大核心参数
https://blog.csdn.net/lhd992692552/article/details/122467521

6.线程池的拒绝策略
AbortPolicy:丢弃任务并抛出 RejectedExecutionException 异常。(默认这种)
DiscardPolicy:丢弃任务,但是不抛出异常
DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程) 。也就是当任务被拒绝添加时,会抛弃任务队列中最旧的任务也就是最先加入队列的,再把这个新任务从队尾添加进去,等待执行。
CallerRunsPolicy:谁调用,谁处理。由调用线程(即提交任务给线程池的线程)处理该任务,如果线程池已经被shutdown则直接丢弃
原文链接:https://blog.csdn.net/lhd992692552/article/details/122467521

7.jvm的内存模型

8.class文件的加载过程
Loading (涉及双亲委派机制)、Linking(Linking链接的过程分3个阶段:Vertification、Preparation、Resolution。)、Initialzing(静态变量的赋值,这里才赋成初始值 ,才调用静态代码块)

9.双亲委派机制
双亲委派机制是当类加载器需要加载某一个.class字节码文件时,则首先会把这个任务委托给他的上级类加载器,递归这个操作,如果上级没有加载该.class文件,自己才会去加载这个.class。
双亲委派的作用
①防止加载同一个.class。通过委托去询问上级是否已经加载过该.class,如果加载过了,则不需要重新加载。保证了数据安全。
②保证核心.class不被篡改。通过委托的方式,保证核心.class不被篡改,即使被篡改也不会被加载,即使被加载也不会是同一个class对象,因为不同的加载器加载同一个.class也不是同一个Class对象。这样则保证了Class的执行安全。

原文链接:https://blog.csdn.net/qq_45084630/article/details/123088154

10.new String(“abc”) 创建了几个对象
如果 abc 这个字符串常量不存在,则创建两个对象,分别是 abc 这个字符串常量,以及 new String 这个实例对象。
如果 abc 这字符串常量存在,则只会创建一个对象
https://blog.csdn.net/q331464542/article/details/125201882

10.1 字符串常量池,运行时常量池,静态常量池
1.静态常量池
常量池分为两个类型,一是.class文件中静态的常量池,二是.class文件中的静态常量池被加载到JVM中而形成的运行时常量池
1.1 静态常量池
.class文件中的常量池可以看作一个数组,数组中存储了一些常量,当需要在字节码指令中用到这个常量的时候,就通过数组的索引来访问它。
1.2 运行时常量池
理解了静态的常量池之后,运行时常量池就很容易想明白了。简单来说,运行时常量池就是.class文件中的静态常量池在JVM中的运行时表示,每一个.class文件的静态常量池都会生成一个对应的运行时常量池。等到JVM在解释String m = #1这条指令时,它可以去这个类的运行时常量池中查找#1的定义。

2 字符串池
字符串池是Java为了重用String对象而设置的一个缓存池,Java1.7之前设置在方法区上,保存的是String对象;Java1.7之后设置在堆上,保存的是String对象的引用,String对象本身存在于堆上的其他位置。下文中以Java1.7之后的情况为标准。

https://blog.csdn.net/weixin_39522312/article/details/110805549

在JDK1.6及之前运行时常量池逻辑包含字符串常量池存放在方法区,此时hotspot虚拟机对方法区的实现为永久代(位于堆内存中)
在JDK1.7 字符串常量池被从方法区拿到了堆中,这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代
在JDK1.8hotspot移除了永久代用元空间取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区(元空间),只不过方法区的实现从永久代变成了元空间(堆外内存)

作者:Himeros
链接:https://www.zhihu.com/question/377418017/answer/1062033254 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

11.GC的算法

12.垃圾收集器

13.CMS和G1的区别
1.cms的内存分布是连续的,G1会被分布多个Region
2.cms young gc没有办法清理大对象, G1可以
3.cms的主要步骤有:初始标识(stw),并发标识,重新标识(stw),并发清理(cms的清理阶段是和应用线程并发进行的,使用的是标记清除算法,会产生大量的内存碎片); g1的mixed gc中的全局并发标识阶段的主要步骤有:初始标识(stw),并发标识,重新标识(stw),初始清理(stw),并发清理, 混合gc中的初始清理+并发清理作用只是回收完全没有引用的region,然后计算要回收的region中垃圾的占比,排好序后为后面混合gc的时候加入CSet回收集中做好准备,比如为后面的8次gc回收做好计划,如每次回收把哪些region加入到cset集合中,真正的回收操作是紧跟着的mixed gc的evacuation阶段,在evacuation阶段中会分8次回收全局并发标识阶段标记的Region,使用的是标记整理的算法,不会产生内存碎片(但是是stw的).
4.g1比cms会使用更多的内存和cpu负载,所以更适合用于大堆的应用
原文链接:https://blog.csdn.net/lixia0417mul2/article/details/124958513

14.知道如何对jvm进行调优
这是一个经验活,自己开发时候用得少,还需要有经验,面对过一些实际场景,针对不同的场景进行优化,还需要查找不同的参数对jvm进行调整优化.

15.hashmap的实现原理
1.HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用NULL建和NULL值,因为key允许重复,因此只能有一个建为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。
2.HashMap是:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构
3.哈希表为解决冲突,可以采用地址法和链地址法等来解决问题,Java中HashMap采用了链地址法。

16.hashmap为什么线程不安全
HashMap的put()方法中,有modCount++的操作,即调用put()时,修改次数加1,“i++”操作,从表面上看 i++ 只是一行代码,但实际上它并不是一个原子操作,它的执行步骤主要分为三步,而且在每步操作之间都有可能被打断。

17.优先队列
https://blog.csdn.net/sheng0113/article/details/123140959


以下 偏向操作系统和多线程了
18.什么是上下文的切换

19.如何减少上下文的切换呢

20.CAS的原理
CAS全称(Conmpare And Swap)比较并交换,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 – 内存地址、预期值和新值。CAS 的实现逻辑是将内存地址的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。

JAVA中CAS是通过自旋操作完成赋值,若值不相等再更新预期值、重新计算新值,接着进行CAS操作,直到成功为止。底层是JVM调用操作系统原语指令unsafe,并由CPU完成原子操作,你要知道并发/多线程环境下如果CPU没有原子操作我们是无法完成。
原文链接:https://blog.csdn.net/h273979586/article/details/103098350

21.synchronize锁升级
无锁->偏向锁->轻量级锁->重量级锁
https://blog.csdn.net/weixin_43847283/article/details/125470618

轻量级锁和偏向锁的比较:
1.偏向锁只会在第一次进入时CAS一次,而轻量级锁不停的CAS;
2.在偏向锁中,线程栈帧中复制的对象头Mark Word里的线程id;而在轻量级锁中,线程栈帧中复制的对象头Mark Word中所有信息。
3.当线程访问同步代码块失败时,使用CAS竞争锁,并将偏向锁升级为轻量级锁。(升级前,会先将偏向锁撤销为无锁,再从无锁到轻量级锁)
4.当其他线程竞争偏向锁时,会有撤销为无锁和升级轻量级锁之分;而当其他线程竞争轻量级锁时,会直接升级为重量级锁。
原文链接:https://blog.csdn.net/sophia__yu/article/details/84104542

22.进程和线程的却别
在这里插入图片描述

作者:biaodianfu
链接:https://www.zhihu.com/question/25532384/answer/411179772
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

23.进程之间的通信方式
https://www.xinzhiweike.com/wenda/1650882761082692

24.线程之间的通信方式

25.spring中IOC和AOP的概念
https://blog.csdn.net/weixin_50989637/article/details/126157645

26.spring如何解决循环依赖的问题
https://blog.csdn.net/DQWERww/article/details/126128229

27.spring的事务

28.隔离界别
一、Spring事务的隔离级别
  1.ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应。
  2.ISOLATION_READ_UNCOMMITTED(读未提交): 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
  3.ISOLATION_READ_COMMITTED(读已提交): 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
  4.ISOLATION_REPEATABLE_READ(可重复读): 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
  5.ISOLATION_SERIALIZABLE(串行(顺序)执行) 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。
  
(Repeatable Read(可重读)是MySQL的默认事务隔离级别)

原文链接:https://blog.csdn.net/faramita_of_mine/article/details/123961701

29.mysql 有幻读吗,它是如何解决的

  1. 通过对select操作手动加行X锁(SELECT … FOR UPDATE )。原因是InnoDB中行锁锁定的
    是索引,纵然当前记录不存在,当前事务也会获得一把记录锁(记录存在就加行X锁,不
    存在就加next-key lock间隙X锁),这样其他事务则无法插入此索引的记录,杜绝幻
    读。
  2. 进一步提升隔离级别为SERIALIZABLE (效率很慢)
    https://blog.csdn.net/zgaoq/article/details/122145949

redis的一些操作
在这里插入图片描述
在这里插入图片描述

29.十几种需要过什么技术难点,如何解决
1.数据库中查询条件过于复杂,耗时大. 1.优化sql 2.从逻辑上优化(因为本身数据量就很大,预算也只有一个oracle,没有涉及什么分库分表)
2.遇到不会的技术,没学过的技术. 很简单,学就是了,同事之间可以交流
3.同一时间超大api请求. 短时间内4000+的请求 1.多线程去请求获得数据 2.流程设计就有些问题.最后是优化了请求流程,减少了请求次数,缩减到10次

30平常如何学习?

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

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

相关文章

dubbo3.0使用

dubbo3.0使用 介绍 官方网址:https://dubbo.apache.org/ 本文基于springCloud依赖的方式演示相关示例:https://github.com/alibaba/spring-cloud-alibaba/wiki/Dubbo-Spring-Cloud dubbo示例项目:https://github.com/apache/dubbo-sample…

9 内中断

内中断 任何一个通用的CPU,比如8086 ,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU 外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,…

S7-200SMART高速脉冲输出的使用方法和示例

S7-200SMART高速脉冲输出的使用方法和示例 S7-200SMART PLC内部集成了高速脉冲发生器,不同的CPU型号,高速脉冲发生器的数量不同。 具体型号可参考下图: 注意:要输出高速脉冲的话,必须选择ST晶体管型号的PLC,SR继电器型的不支持。 S7-200SMART PLC能产生2种类型的高速脉冲…

【瑞吉外卖】公共字段填充

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉瑞吉外卖 ✨欢迎加入社区: 👉不会压弯的小飞侠 ✨人生格言:知足上…

激光雷达标定(坐标系转换)

文章目录1. 旋转矩阵2. 平移矩阵3. 坐标系的转换4. 坐标转换代码1. 旋转矩阵 由于激光雷达获取的点云数据的坐标是相对于激光雷达坐标系的,为了使车最终得到的点云数据坐标是在车坐标系下的,我们需要对点云中每一个点的坐标进行坐标转换。首先是需要对坐…

Docker笔记--创建容器、退出容器、查看容器、进入容器、停止容器、启动容器、删除容器、查看容器详细信息

目录 1--docker run创建容器 2--exit退出容器 3--docker ps查看容器 4--docker exec进入容器 5--docker stop停止容器 6--docker start启动容器 7--docker rm删除容器 8--docker inspect查看容器详细信息 1--docker run创建容器 sudo docker run -it --nametest redis…

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代 通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。 # 非迭代例子 n 0 while n < …

SSM如何

目录 1、整合Mybatis 1.1.新建项目 1.2.添加pom依赖 1.3.application.yml 1.4.generatorConfig.xml 1.5.设置逆向生成 1.6.编写controller层 1.7.测试 2、整合 Mybatis-plus 2.1Mybatis-plus简介 2.2.创建项目 2.3.添加pom依赖 2.4.application.yml 2.5.MPGenerator 2.6.生成…

Stm32旧版库函数1——adxl335 模拟输出量 usart2

主函数&#xff1a; /******************************************************************************* // // 使用单片机STM32F103C8T6 // 晶振&#xff1a;8.00M // 编译环境 Keil uVision4 // 在3.3V的供电环境下&#xff0c;就能运行 // 波特率 19200 串口2 PA2(Tx) P…

equals方法:黑马版

目录 Object类的equals方法 Student类 测试类 第一步&#xff1a;使用比较 第二步&#xff1a;使用equals比较 第三步&#xff1a;在子类-Student类中重写equals方法 代码逐句分析 运行 Object类的equals方法 首先写一个类Student&#xff0c;属性有name和age&#xf…

UE5笔记【十二】蓝图函数BluePrint Function

上一篇讲了蓝图变量&#xff0c;这一篇说蓝图函数。BluePrint Function 函数&#xff0c;一般是为了将一段功能的代码提取出来&#xff0c;然后方便我们反复使用。重复的代码可以提取一个函数。类似的&#xff0c;相同的蓝图&#xff0c;我们也可以提取出一个蓝图函数来。 如…

青龙面板 香蕉

香蕉角本教程 介绍 香蕉视频 app —【多用户版】 一个账户每天稳定1元&#xff0c;可以自己提现&#xff0c;也可以兑换会员&#xff0c;脚本不停会员也不停&#xff01;可注册多个账户&#xff01;&#xff08;多账户福利自行看文章底部&#xff01;&#xff09; 拉取文件 …

【微服务】springboot 整合javassist详解

一、前言 Javassist 是一个开源&#xff0c;用于分析、编辑和创建Java字节码的类库&#xff0c;由东京工业大学数学和计算机科学系的 Shigeru Chiba &#xff08;千叶滋&#xff09;所创建。目前已加入了开放源代码JBoss 应用服务器项目&#xff0c;通过使用Javassist对字节码操…

linux redhat 8 创建逻辑卷

LVM与直接使用物理存储相比,有以下优点: 1. 灵活的容量. 当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷. 2. 方便的设备命名 逻辑卷可以按你觉得方便的方式来起任何名称. 3.磁盘条块化. 你可以生成一个逻辑盘,它的数据可以被…

记录一次Mac本地启动nacos遇到的问题

nacos 官网&#xff1a;https://nacos.io/zh-cn/docs/quick-start.html 我这里下载的是2.0.3稳定的版本 本地启动&#xff1a;sh startup.sh -m standalone 问题1&#xff1a;Caused by: java.lang.IllegalStateException: No DataSource set 这里是数据源连接有问题&#xff…

Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理

目录 1、确认应答机制 2、超时重传机制 3、滑动窗口 4、流量控制 5、拥塞控制 6、延迟应答 &#xff08;各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主wx呦~~~&am…

Apache Flink 水印的工作机制详解与源码阅读

一、时间长河谁能解 在人类生存的地球上&#xff0c;存在着一种很神秘的东西&#xff1a;时间&#xff0c;它看不见摸不着&#xff0c;但速度恒定&#xff0c;单调递增且永无止境的往前推进&#xff0c;人类的历史被淹没在茫茫的时间长河中。同时在地球附近&#xff0c;一个星…

【自动化测试】如何平衡手工和自动化测试

作为一名测试人员&#xff0c;如何平衡手工和自动化测试&#xff0c;是一道绕不过去的课题。不可否认&#xff0c;自动化测试具有提高效率&#xff0c;加快回归速度并因此有助于及时交付项目的好处。但是&#xff0c;在考虑自动化之前&#xff0c;我们应该评估一些要点&#xf…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java毕业生就业管理系统243xa

首先选择计算机题目的时候先看定什么主题&#xff0c;一般的话都选择当年最热门的话题进行组题&#xff0c;就比如说&#xff0c;今年的热门话题有奥运会&#xff0c;全运会&#xff0c;残运会&#xff0c;或者疫情相关的&#xff0c;这些都是热门话题&#xff0c;所以你就可以…

vscode 关闭/忽略/ignore 单个/指定 git 仓库/repository 提示

文章目录1. 问题2. 解决方法2.1 只追踪 打开文件 所在的仓库2.2 忽略指定的仓库3. 参考1. 问题 vscode 当打开的项目中有多个 git 仓库时&#xff0c;默认会显示所有仓库的 status。 有些已经不再使用的仓库可能有多处更改&#xff0c;但我们并不想去处理它。 如果直接关闭 vs…