面试Java后端

2023-09-20 16:22:17

sql

五表联合查询

面试八股

JDK,JRE,JVM之间的区别

在这里插入图片描述
JDK,Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。
JRE(Java Runtime Environment),Java运行环境,用于运行lava的字节码文件。JRE中包括了JVM以及JVM工作所需要的类库,普通用户而只需要安装JRE来运行Java程序,而程序开发者必须安装JDK来编译、调试程序。
JVM(Java virtual Mechinal),Java虚拟机,是JRE的一部分,它是整个java实现跨平台的最核心的部分,负责运行字节码文件。

String、StringBuffer、StringBuilder的区别

1.String是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuffer和StringBuilder是可变的
2.StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下stringBuilder效率会更高

==和equals方法的区别

.==︰如果是基本数据类型,比较是值,如果是引用类型,比较的是引用地址
equals:具体看各个类重写equas方法之后的比较逻辑,比如String类,虽然是引用类型,但是sting类中重写了equals方法,方法内部比较的是字符串中的各个字符是否全部相等。

hashCode()与equals()之间的关系

如果两个对象的hashCode不相同,那么这两个对东肯定不同的两个对象
如果两个对象的hashCode相同,不代表这两个对象一定是同一个对象,也可能是两个对象。
如果两个对象相等,那么他们的hashCode就一定相同
在Java的一些集合类的实现中,在比较两个对象是否相等时,会根据上面的原则,会先调用对象的hashCodel)方法得到hashCode进行比较,如果hashCode不相同,就可以直接认为这两个对象不相同,如果hashCode相同,那么就会进一步调用equals0)方法进行比较。而equals)方法,就是用来最终确定两个对象是不是相等的,通常equalsj法的实现会比较重,逻辑比较多,而hashCode)主要就是得到一个哈希值,实际上就一个数字,相对而言比较轻,所以在比较两个对象时,通常都会先根据hashCcode想比较—下。

泛型中extends和super的区别

  1. <? extends T>表示包括T在内的任何T的子类
  2. <? super T>表示包括T在内的任何T的父类

ApplicationContext和BeanFactory有什么区别

BeanFactory是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory ,所以ApplicationContext拥有
BeanFactory
所有的特点,也是一个Bean工厂,但是AplicationCcontext除开继承了ReanFactoy之外,还继承了诸如EnvironmentCapable、MessageSource、ApplicationEventPublisher等接口,从而ApplicationContext还有获取系统环境变量、国际化、事件发布等功能,这是BeanFactory所不具备的

ArrayList和LinkedList区别

1,首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的
2.由于底层数据结构不同,他们所适用的场景也不同,Arraylist更适合随机查找,LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同
3.另外ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口,所以LinkedList还可以当做队列来使用

B树和B+树的区别,为什么Mysql使用B+树

B树的特点:
1.节点排序
2.一个节点了可以存多个元素,多个元素也排序了
B+树的特点:
1.拥有B树的特点
2.叶子节点之间有指针
3.非叶子节点上的元素在叶子节点上都冗余了,也就是叶子节点中存储了所有的元素,并且排好顺序
Mysql索引使用的是B+树,因为索引是用来加快查询的,而B+树通过对数据进行排序所以是可以提高查询速度的,然后通过一个节点中可以存储多个元素,从而可以使得B+树的高度不会太高,在Mysql中一个nodb页就是一个B+树节点,一个imodb页默认16kb,所以一般情况下一颗两层的B+树可以存2000万行左右的数据,然后通过利用B+树叶子节点存储了所有数据并且进行了排序,并且叶子节点之间有指针,可以很好的支持全表扫描,范围查找等sQL语句。

explain分析语句

通过对explain语句的分析,可以了解查询语句的执行情况,找出查询语句执行的瓶颈,从而优化查询语句。

explain语句的基本语法如下:

explain [EXTENDED] select * from table where name = “zhangsan”;

Innodb是如何实现事务的

Innodb通过Buffer Pool,LogBuffer,Redo Log,Undo Log来实现事务,以一个update语句为例:
1.Innodb在收到一个update语句后,会先根据条件找到数据所在的页,并将该页缓存在Buffer Pool中
2.执行update语句,修改Buffer Pool中的数据,也就是内存中的数据
3.针对update语句生成一个RedoLog对象,并存入LogBuffer中
4.针对update语句生成undolog日志,用于事务回滚
5.如果事务提交,那么则把RedoLog对象进行持久化,后续还有其他机制将Buffer Pool中所修改的数据页持久化到磁盘中
6.如果事务回滚,则利用undolog日志进行回滚

Java死锁如何避免

造成死锁的几个原因:
1.—个资源每次只能被一个线程使用
2.一个线程在阻塞等待某个资源时,不释放已占有资源
3,一个线程已经获得的资源,在未使用完之前,不能被强行剥夺
4.若干线程形成头尾相接的循环等待资源关系

这是造成死锁必须要达到的4个条件,如果要避免死锁,只需要不满足其中某一个条件即可。而其中前3个条件是作为锁要符合的条件,所以要避免死锁就需要打破第4个条件,不出现循环等待锁的关系。

在开发过程中:
1.要注意加锁顺序,保证每个线程按同样的顺序进行加锁2.要注意加锁时限,可以针对所设置一个超时时间
3.要注意死锁检查,这是一种预防机制,确保在第一时间发现死锁并进行解决

Java中的异常体系是怎样的

. Java中的所有异常都来自顶级父类Throwable。
. Throwable下有两个子类Exception和Error。

·Error表示非常严重的错误,通常这些错误出现时,仅仅想靠程序自己是解决不了的,可能是虚拟机、磁盘、操作系统层面出现的问题了,所以通常也不建议在代码中去捕获这些Error,因为捕获的意义不大因为程序可能已经根本运行不了了。
·Exception表示异常,表示程序出现Exception时,是可以靠程序自己来解决的,比如NulPpointerBxception .llegalAcessException等,我们可以捕获这些异常来做特殊处理。
. Exception的子类通常又可以分为RuntimeException和非RuntimeException两类
. RunTimeException表示运行期异常,表示这个异常是在代码运行过程中抛出的,这些异常是非检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生,比如NullPointerException、IndexOutOfBoundsException等。
. 非RuntimeException表示非运行期异常,也就是我们常说的检查异常,是必须进行处理的异常,如果不处理,程序就不能检查异常通过。如OException、SQLException等以及用户自定义的Exception异常。

java中有哪些类加载器

JDK自带有三个类加载器: bootstrap ClassLoader、ExtClassLoader、AppClassLoader。
.BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME%lib下的jar包和class文件。
.ExtClassLoader是AppClassLoader的父类加载器,负责加载%JAVA_HOME%/lib/ext文件夹下的jar包和class类。
. AppClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。

Jdk1.7到Jdk1.8 HashMap发生了什么变化(底层)?

1.1.7中底层是数组+链表,1.8中底层是数组+链表+红黑树,加红黑树的目的是提高HashMap插入和查询整体效率

更多推荐

深度学习100例 | 第31天-卷积神经网络(DenseNet)识别生活物品

🚀我的环境:语言环境:Python3.6.5编译器:jupyternotebook深度学习环境:TensorFlow2.4.1显卡(GPU):NVIDIAGeForceRTX3080数据:📌【传送门】🚀本文选自专栏:《深度学习100例》🚀深度学习新人必看:《小白入门深度学习》小白入门深度学习|第一篇:配置深度学

基于Java生活缴费系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题

Vue项目中可能存在的问题和解决方案

相比其他的框架来说,Vue中更容易产出不合格代码;因为Vue中的options就是一个大对象,导致js本身的很多检测都失效了,比如一个函数没有用到的话会“变灰”,template中代码提示比较少,较多的mixins等等;遇到不合格代码,大多数人第一反应就是这谁写的代码这么差,其实大多数公司大多数人至少曾经都写过一些不合

Greenplum的并发控制概述

注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/admin_guide-intro-about_mvcc.htmlGreenplum数据库使用PostgreSQL多版本并发控制(MVCC)模型来管理堆表的并发事务。数据库管理

【资源推荐】一站式机器学习学习资料

我之前向大家推荐了许多关于人工智能数学原理与应用的资料,其中包括线性代数、机器学习和深度学习等方面的内容。交互式线性代数学习网站沉浸式线性代数学习网站Kaggle大神教你机器学习今天我将继续向大家推荐一个一站式学习机器学习的绝佳资源:《鸢尾花书:从加减乘除到机器学习》。https://github.com/Visual

Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能

1.引言前序博客有:Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私Aztec.nr,为:面向Aztec应用的,新的,强大的智能合约框架使得开发者可直观管理私有状态基于Noir构建,Noir为AztecLabs作为核心贡献者开发的通用zk编程语言。使得开发者使用Noir来编写隐私智能合约,并借助模

安卓机型固件系统分区的基础组成 手机启动规律初步常识 各分区的基本含义与说明

此贴为基本常识。感兴趣的友友可以了解手机的启动顺序和各模式的基本操作与意义。另外了解手机系统分区各文件夹的含义分区说明对应贴:安卓机型固件中分区对应说明手机开机基本启动顺序当我们按下手机开机键的时候。基本的启动顺序为注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。当按下电源键手机上电启动后,首先从b

【Purple Pi OH RK3566鸿蒙开发板】OpenHarmony音频播放应用,真实体验感爆棚!

本文转载于PurplePiOH开发爱好者,作者ITMING。原文链接:https://bbs.elecfans.com/jishu_2376383_1_1.html01注意事项DevEcoStudio4.0Beta2(BuildVersion:4.0.0.400)OpenHarmonySDKAPI9创建工程类型选择Ap

ARM 汇编指令集——汇编中三种符号(汇编指令、伪指令、伪操作)、汇编基本格式、数据操作指令、跳转指令、特殊功能寄存器操作指令、内存操作指令、混合编程

目录一、汇编中三种符号(汇编指令、伪指令、伪操作)二、汇编基本格式三、数据操作指令3.1数据搬移指令mov/mvn①示例②立即数3.2移位操作指令lsl/lsr/asr/ror示例3.3位运算操作指令and/orr/eor/bic①示例1②示例23.4算数运算操作指令add/adc/sub/sbc/mul①实现两个64

数字化管理平台建设实践

在勘察设计行业,各企业加速推进数字化转型。通过管理要素数字化,不断优化内部组织运营效率;通过生产手段数字化、技术产品数字化,提升服务质量,改善客户体验;通过数字化营销,精准对接市场需求,挖掘发展蓝海。本文基于勘察设计企业数字化管理系统普遍存在的问题,结合湖北省交通规划设计院股份有限公司(以下简称“湖北交规院”)的数字化

vue的组件化编程的详细讲解加代码演示

😀前言本片文章是vue系列第5篇整理了vue的组件化编程的详细讲解加代码演示🏠个人主页:尘觉主页🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉在csdn获奖荣誉:🏆csdn城市之星2名⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣💓Java全栈群星计划t

热文推荐