【金三银四系列】之Java基础面试(2023版)

news2024/9/27 7:22:06

Java基础面试题

一: Java基础

1: 简单说说Java中对象如何拷贝?

一、浅拷贝clone()

如果对象中的所有数据域都是数值或者基本类型,使用clone()即可满足需求,如:

Person p = new Person();

Person p1 = p.clone();

这样p和p1分别指向不同的对象。

二、深度拷贝

如果在对象中包含子对象的引用,拷贝的结果是使得两个域引用同一个对象,默认的拷贝是浅拷贝,没有拷贝包含在对象中的内部对象。

如果子对象是不可变的,如String,这没有什么问题;如果对象是可变的,必须重新定义clone方法;

三、序列化可克隆(深拷贝)

四、BeanUtils.copyProperties()

2: 伪代码快速实现一下深拷贝

3: Java是什么类型的语言?

一、你可以说它是编译型的:因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。 
二、你可以说它是解释型的:因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。 
三、但是,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行,所以,又是编译的。

定义: 
(1)编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 
(2)解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束! 
区别: 
(1)编译型语言,执行速度快、效率高;依靠编译器、跨平台性差些。 
(2)解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。

java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以可是说java即是编译型的,也是解释型,但是假如非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中。 
附: 
编译型的语言包括:C、C++、Delphi、Pascal、Fortran 
解释型的语言包括:Java、Basic、javascript、python

image.png

GraalVM 即时编译 graal aot jit c1 c2

4: 什么是Object,有哪些常用的方法,怎么创建对象?

1、使用new关键字;
2、使用Class类的newInstance方法,可调用无参的构造函数创建对象;
3、使用Constructor类的newInstance方法;
4、使用clone方法;
5、使用反序列化。

5: 多态,面向接口编程?聊聊你的认知

image.png

6: 什么是内部类,说说你对他的理解以及实战场景

使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

      1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

      2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

      3、创建内部类对象的时刻并不依赖于外围类对象的创建。

      4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

      5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。

成员内部类
   第一:成员内部类中不能存在任何static的变量和方法;
   第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。

局部内部类

匿名内部类
  1、 匿名内部类是没有访问修饰符的。
  2、 new 匿名内部类,这个类首先是要存在的。如果我们将那个InnerClass接口注释掉,就会出现编译出错。
  3、 注意getInnerClass()方法的形参,第一个形参是用final修饰的,而第二个却没有。同时我们也发现第二个形参在匿名内部类中没有使用过,所以当所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final。
  4、 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。

静态内部类
  1、 它的创建是不需要依赖于外围类的。
  2、 它不能使用任何外围类的非static成员变量和方法。

https://www.cnblogs.com/chanchan/p/8402411.html 局部内部类只能使用final 局部变量

7: 说说 static 和 final 在Java中的意义

使用final的意义:

为方法上锁,防止任何继承类改变它的本来含义和实现。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。
提高程序执行的效率,将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入嵌入调用里(内嵌机制)。

static总结
static修饰成员函数:该成员函数不能使用this对象
static不能修饰构造函数
static不能修饰函数参数
static不能修饰局部成员变量
static修饰成员字段
当类被虚拟机加载时,首先按照字段声明的先后顺序对static成员字段进行初始化
static修饰语句块
当类被虚拟机加载时,按照声明顺序先后初始化static成员字段和static语句块
static所修饰的方法和字段是只属于类,所有对象共享。
在static所修饰的函数和语句块中不能使用非static成员字段。
在Java不能直接定义全局变量,是通过static来实现的
在Java中没有const,不能直接定义常量,通过static final来实现

8: Java中的基本数据类型占多少字节,不同的操作系统一样吗?

image.png

非基本类型BigDecimal引用的对象占用的字节数是可变的,具体大小依赖于你输入的数据量,要求的精度和选择的舍入方法。如果你问的是类型为BigDecimal的引用变量占用的字节数,那只有一个指针变量的大小,目前为4。

9: String,StringBuffer,StringBuild;以及String常用的方法

10: int和Integer有什么关联?为什么需要Integer?装箱拆箱

11: 什么是序列化,反序列化.说说运用场景

https://www.cnblogs.com/binarylei/p/10987540.html

12: 数组有length()方法吗?

13: 构造器是否可以被重写

14: char是否可以存储一个汉字

15: 集合原理系列

ArrayList原理
LinkedList原理
为什么舍弃Vector

HashSet/TreeSet

HashMap/TreeMap 原理
为什么舍弃HashTable

Queue  

  add      增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  remove   移除并返回队列头部的元素          如果队列为空,则抛出一个NoSuchElementException异常
  element  返回队列头部的元素                如果队列为空,则抛出一个NoSuchElementException异常
  offer    添加一个元素并返回true            如果队列已满,则返回false
  poll     移除并返问队列头部的元素           如果队列为空,则返回null
  peek     返回队列头部的元素                如果队列为空,则返回null
  put      添加一个元素                      如果队列满,则阻塞
  take     移除并返回队列头部的元素           如果队列为空,则阻塞

  * ArrayBlockingQueue :一个由数组支持的有界队列。
  * LinkedBlockingQueue :一个由链接节点支持的可选有界队列。
  * PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
  * DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
  * SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。

image.png

16: Enumeration接口和Iterator接口的区别有哪些?

Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

17: 异常

受检查/不受检查

18: 什么是事务?为什么需要事务?如何实现事务?

通常的观念认为,事务仅与数据库相关。

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。

事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确。

通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。

1.JDBC事务
JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。

复制代码
1 java.sql.Connection 提供了以下控制事务的方法:
2 
3 public void setAutoCommit(boolean)
4 public boolean getAutoCommit()
5 public void commit()
6 public void rollback()
复制代码
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。
JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

2.JTA(Java Transaction API)事务

JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。

JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

如果计划用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。
您将需要用应用服务器的管理工具设置 XADataSource .从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。
J2EE应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。
XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() .
相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() .

3.容器事务

容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA事务管理, 我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法加入事 务,一旦指定,容器将负责事务管理任务。这是我们土建的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给J2EE容 器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB.

三种Java事务差异?#
1、JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
2、JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。
事务并发处理可能引起的问题

脏读(dirty read):一个事务读取了另一个事务尚未提交的数据,
不可重复读(non-repeatable read) :一个事务的操作导致另一个事务前后两次读取到不同的数据
幻读(phantom read) :一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

举例:

事务A、B并发执行时,当A事务update后,B事务select读取到A尚未提交的数据,此时A事务rollback,则B读到的数据是无效的”脏”数据。
当B事务select读取数据后,A事务update操作更改B事务select到的数据,此时B事务再次读去该数据,发现前后两次的数据不一样。
当B事务select读取数据后,A事务insert或delete了一条满足A事务的select条件的记录,此时B事务再次select,发现查询到前次不存在的记录(“幻影”),或者前次的某个记录不见了。

19: java修饰符以及个字的作用范围

啊 访问权限 类 包 子类 其他包

public ∨ ∨ ∨ ∨ (对任何人都是可用的)

protect ∨ ∨ ∨ ×    (继承的类可以访问以及和private一样的权限)

default ∨ ∨ × ×    (包访问权限,即在整个包内均可被访问)

private ∨ × × ×    (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

二: Java高级

linux部分

1:什么是linux?如何安装使用linux
2:说说你常用的linux查看文件和文件夹命令
3:常用查看文件的命令有哪些?
4:如何递归删除文件夹和所有文件?
5:如何拷贝,移动一个文件?
6:如何查找一个文件?
7:你还是使用过哪些常用的linux命令?
8:grep是什么命令?man是什么命令?
9:chmod是什么命令?
10:VI、VIM是什么?

 1: chmod命令如何使用?  r,w,x/u,g,o/+,-/1,2,4 各自代表什么含义?
 2:什么是VI、VIM?说说你常用的VI命令和按键?
 3:什么是编辑视图、预览视图?
 4:netstat命令的作用?你如何使用?
 5:kill命令如何使用?
 6:linux下如何解压压缩文件?
 7:ps和grep各自作用是什么?如何使用?
 8:如何部署一个tomcat , linux服务器?
 9:如何部署自己的项目至linux服务器?

三: JavaWeb

1:什么是servlet,jsp?

2: web.xml在web项目中有什么作用?

3: 说说servlet的原理

4: jsp里面的内置对象

5:什么是cookie?有什么作用?

6: 什么是session? 有什么作用?

7: 禁用客户端cookie,如何实现session?

8: dopost doget的区别?还有哪些请求类型?

9: Forward和Redirect的区别?

10: HTTP请求/响应的结构是怎么样的

HTTP响应由三个部分组成:

状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。

HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。

主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。

四: 前端技术

选择器常用语法等

五: 框架技术

1: 什么是框架?如何使用框架?

2: SSM,SSH,JPA,mybatisplus,及其实现原理?

3: 简单说一下Spring的IOC,以及DI

4: 简单说一下SpringAOP

5: 什么是ORM

6: 简要描述一下SSM如何进行整合

7: @RequestMapping及其系列注解

8: springmvc如何处理ajax请求?

9: Mybatis优缺点分析

10: #{}和${}的区别是什么?

11: 实体类属性和数据表字段不一样如何处理?

12: 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

13: 什么是一对一,一对多,多对多? mybatis中如何实现?

六: 微服务部分

nginx

1: 什么是nginx?
2: 什么是负载均衡?
3: 什么是动静分离?
4: 什么是反向代理?
5: nginx如何配置动静分离,反向代理?
6: 如何搭建伪集群?
7: 如何搭建集群?
8: 简要说一下nginx每个配置项的作用.

1: nginx_http节点有什么作用?
2: nginx_http_upstream 节点有什么作用?
3: nginx_http_server节点有什么作用?
4: nginx_http_server_location 节点有什么作用?
5:如何配置nginx伪集群,简要写一下nginx.conf的配置
6:如何配置nginx集群,简要写一下nginx.conf的配置
7:如何配置轮询策略,ip_hash策略,权重策略,备份?

zookeeper+RPC+Dubbo

1:什么是dubbo?
2:简述一下dubbo的原理
3:什么是zookeeper
4:什么是zookeeper的leader和flower和observer?
5:什么是过半机制,为什么zookeeper集群部署奇数台服务器?
6:zookeeper如何选举?
7:zookeeper存储数据的特点?
8:如何实现服务的注册与消费?简要写一下伪代码
9:dubbo框架需要web容器吗
10:dubbo有哪些负载均衡策略

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

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

相关文章

30天自制操作系统(Mac版)读书笔记(day9)

day7和day8都是鼠标和32位的操作,看起来都是理论,先略过。 检测内存块数量 使用中断去检测内存,把这个当成一个函数调用吧。这里面di寄存器给的地址就是结果存在的内存位置。 ComputeMemory:mov ebx, 0mov di, MemChkBuf .loop:mov e…

linux安装vnc服务

1、 如操作系统是最小化安装,那么需要安装GNOME桌面,安装参考:https://blog.csdn.net/carefree2005/article/details/119417234 2、 安装vnc-server yum -y install tigervnc-server3、 复制配置文件模板,将无关的内容清除 cat…

图灵 | 计算机器与智能

【“计算机器与智能”选自《Mind》,no.2236(1950.10),P433-460。牛津大学出版社允许重印。刘西瑞、王汉琦 翻译】1. 模仿游戏我建议来考虑这个问题 :“机器能够思维吗?” 这可以从定义 “机 器” 和 “思维…

Docker数据目录迁移

背景在CentOS中安装了Docker,默认Docker Root目录是/var/lib/docker。但是该目录磁盘空间很有限,后期很容易导致系统盘满了,所以考虑迁移到更大磁盘目录下,比如下面的/fsc目录下。解决在Docker官方文档https://docs.docker.com/co…

excel查找定位:INDEX函数——精确制导导弹

一、认识INDEX函数Index函数:在给定的单元格区域中,返回特定行列交叉处单元格的值或引用。函数结构:index(单元格区域,行号,列号)区域,行号,列号,很像通过坐标瞄准打靶呀。就像下面动…

高阶数据结构之AVL树

文章目录回顾二叉搜索树AVL树在AVL树中插入新节点AVL树中的各种旋转右单旋左单旋左右双旋右左双旋验证是否是AVL树验证是否是二叉搜索树验证是否是平衡树总结AVL树回顾二叉搜索树 二叉搜索树的一些特点回顾: (1)每一个节点左树上所有节点的值都是…

vue多实例的骚操作,主要用于解决组件全局弹窗面板的问题。。。

1.问题背景 主要是自己写了一个组件库&#xff0c;其中涉及到弹出面板的组件遇到兼容性问题。 举个例子&#xff0c; 日期选择组件例如 DaterPicker组件 大概的代码如下&#xff08;省略了细节实现&#xff09; <template> <label>日期</label> <input …

一文详解PHP用流方式实现下载文件(附代码示例)

一淘模板给大家带来了关于PHP的相关知识&#xff0c;其中主要介绍了在PHP中怎么使用流方式来实现下载文件的&#xff0c;下面一起来看一下&#xff0c;希望对大家有帮助。 PHP 中使用流方式下载文件 在 PHP 中&#xff0c;可以使用 fopen() 函数打开一个远程文件&#xff0c;并…

Unity使用本地UPM包的实现方式

实现1&#xff1a;项目根路径实现优点&#xff1a;1.不必有额外操作2.本地包随项目版控&#xff0c;不会丢失包产生错误3.按需升级包缺点&#xff1a;1.包的修改随项目版控&#xff0c;增加日志冗余2.不利于包全局管理建议使用场景多人合作&#xff0c;开发底子较弱的团队。实现…

今年春节,全国物流很稳!

我叫张雄伟&#xff0c;是腾讯安全的一位交付工程师。我和团队的主要工作&#xff0c;是物流行业重点客户的安全防御项目管理工作。近两年&#xff0c;我们开始向顺丰、极兔等多家大型物流公司提供安全产品与服务。在双十一、618等全民购物节、春节等电商旺季&#xff0c;我们和…

百华鞋业开工大吉|起航新征程,扬帆再出发

爆竹声声迎鸿运&#xff0c;开工大吉启新程。2023年农历正月初六&#xff0c;山东百华鞋业有限公司迎来节后开工吉日。百华的家人们迅速集结工作岗位&#xff0c;以饱满的精神状态&#xff0c;按下工作复位键&#xff0c;俯身蹬地冲起跑&#xff0c;努力奋斗再出发&#xff01;…

史上最全测试开发工具推荐(含自动化、性能、稳定性、抓包)

一、UI自动化测试工具 1. uiautomator2 介绍: openatx开源的ui自动化工具&#xff0c;支持android和ios。主要面向的编程语言是python&#xff0c;api设计简洁易用&#xff0c;在开源社区也是很受欢迎。 原理图&#xff1a; 安装&#xff1a; pip install --upgrade --pre…

【C语言】-扫雷-简单版

前言&#xff1a;感谢各位朋友的捧场&#xff0c;这里给大家分享的是扫雷游戏的简单实现 &#xff08;PS&#xff1a;这里简单是指只实现了游戏的基础功能和主要流程&#xff0c;由于当前本人技术知识尚薄弱&#xff0c;相关的优化会通过后续的学习进行更新&#xff09; 《扫雷…

session,cookie和token的区别

session&#xff0c;cookie和token究竟是什么简述cookie&#xff0c;session&#xff0c;token作为面试必问题&#xff0c;很多同学能答个大概&#xff0c;但是又迷糊不清&#xff0c;希望本篇文章对大家有所帮助http是一个无状态协议什么是无状态呢&#xff1f;就是说这一次请…

【Java Swing】Java组件及事件处理

图形用户接口1、Swing概述2、Swing顶级容器3、布局管理器4、事件处理5、Swing常用组件1、Swing概述 Swing是一种轻量级的组件&#xff0c;它由Java语言开发&#xff0c;可以通过使用简洁的代码、灵活的功能和模块化的组件来创建优雅的用户界面Swing组建的继承关系 2、Swing顶…

企业为何都用电子招投标 现代电子招投标系统介绍

在以前的传统招投标工作中&#xff0c;主要采用人工、书面文件的模式操作&#xff0c;往往产品没有得到很好地分类&#xff0c;导致整个招投标流程变得漫长且复杂。在传统招投标过程中通常需要三个月或更长时间&#xff0c;这对于买方或供应商企业而言是非常浪费时间的。如果还…

LIO-SAM代码解析——imageProjection.cpp

目录imageProjection.cpp1. ImageProjection类1.1. imuHandler1.2. odometryHandler1.3. cloudHandler⭐1.3.1. cachePointCloud&#xff1a; 点云消息缓存与检查1.3.2. deskewInfo() &#xff1a; 获得运动补偿信息1.3.2.1. imuDeskewInfo() &#xff1a; imu的补偿信息1.3.2.…

TOOM系统加强网络舆情监控的建议,如何加强网络舆情的引导和管控

网络舆情监控是指在互联网上通过技术手段&#xff0c;对网络上的舆情信息进行收集、整理、分析、评估和处理&#xff0c;以有效地识别、预测、处理网络舆情问题。网络舆情监控工作的目的是促进舆情健康&#xff0c;防止舆情危机。接下来简单了解TOOM系统加强网络舆情监控的建议…

Python基本语法与变量类型

一、Python基本语法 1、Python注释 Python 支持两种类型的注释&#xff0c;分别是单行注释和多行注释。 &#xff08;1&#xff09;单行注释 单行注释指的是从井号#开始&#xff0c;直到这行结束为止的所有内容都是注释。 # 注释内容&#xff08;2&#xff09;多行注释 Pyt…

ccflow-代码

报表设计目录概述需求&#xff1a;设计思路实现思路分析报表设计&#xff0c;流程运维系统&#xff08;三元log&#xff09;数据源管理和维护是否:debug状态. 0 表示不是, 1 是&#xff0c;如果系统发布后&#xff0c;请将此修改成0&#xff0c;以提高执行效率。在流程运行结束…