java面试题(2022最新)()

  本篇文章为你整理了java面试题(2022最新)()的详细内容,包含有 java面试题(2022最新),希望能帮助你了解 java面试题(2022最新)。

  1.

  JDK 和 JRE 有什么区别?
JRE:Java Runtime Environment(java运行时环境)。即java程序的运行时环境,包含了java虚拟机,
java基础类库。
JDK:Java Development Kit(java开发工具包)。即java语言编写的程序所需的开发工具包。

  2.

  String是基本数据类型么?

  基本数据类型有 byte8 short16 int32 long64 char16 float32 duoble64 Boolean
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean

  3.

  int 和integer区别
int是基本数据类型,integer 是一个包装类

  引用数据类型 string
引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型

  4.

  两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,hash值相等,并不一定得出的键值对相等。

  5.final 在 java 中有什么作用?
用修饰类,该类不能被继承,方法不能重写,赋值不能修改。

  6.java 中的 Math.round(-1.5) 等于多少?

   -1

  
3.

  JAVA中几种集合(List、Set和Map)的区别?
list 和set 都继承了colletion 接口
lis里包含arraylist 和linklist ,
区别:arrarylist 采用数组形式保存对象的,对象在连续的位置中,缺点就是插入删除非常麻烦,
linklist 双链表,对象存在独立的空间中,保存下一个连接的索引,但查询非常麻烦,从第一个索引开始擦寻。

  4.

  HashMap和Hashtable的区别?
HashMap线程不安全,效率高。可以存储null键值对,链表中的元素超过了8个后, 会将链表转换为红黑树
Hashtable线程安全(每个方法中都加入了synchronized),效率低,不可以存储null键值

  
5.

  list中常用的方法

  remove (移除) add ,adds 添加数组

  6.

  public,friendly,protected,private的区别?
public权限最大

  protect不同包的其他类不可用

  friendly子类不能调用

  (什么都不写的时候) private只能本类调用

  
7.

  方法重载和重写的区别?
重载在一个类里面方法名相同,参数不同的两个方法
重写是在不同类里面的而且必须是集成关系,返回值类型和参数必须相同

  8.

  equals方法跟==有什么区别
equals ():用来检测两个对象是否相等,即两个对象的内容是否相等。.
==:用于比较引用和比较基本数据类型时具有不同的功能

  
9.

  静态变量和实例变量的区别
类的静态变量在内存中只有一个,而实例变量取决于类的实例。
每创建一个实例,就会生成一个实例变量,而且生命周期也不同

  10.

  final,finally,finalize,friend的区别?
friend表示在碧昂辆中没有任何修饰符
final是一个关键字,定义完变量就不能改变了,
finally是处理 异常用到的,
finalize是一个垃圾回收器准备释放内存方法

  11.

  String能否被继承?

  不能被继承,因为它是final,常量

  12.

  Final类有什么特点?
属性常量 方法不可以overridding类 不可以继承

  13.

  异常和错误的区别
Error表示系统级的错误和程序不必处理的异常,
Exception表示需要捕捉或者需要程序进行处理的异常

  14.

  super()与this()的区别?

  this调用本类的对象,super()调用父类的对象。

  15.

  java的核心优势是什么?
电脑和电脑之间通过互联网连在了一起,但是没个电脑的系统都不一样,
这个时候我们需要一个语言可以在任何的系统上面跑,就出了java语言跨平台么,
而且java发展悠久所以java遇到的问题比较完善。

  16.

  解释一下线程和进程?
一个程序员需要最少需要一个进程,而一个进程最少需要一个线程,所以线程是程序执行的最小单位。

  
17.

  普通类和抽象类有哪些区别?
普通类不能包含抽象⽅法,抽象类可以包含抽象⽅法。
抽象类不能直接实例化,普通类可以直接实例化。

  
18.

  java 中操作字符串都有哪些类?它们之间有什么区别?

  Java 中,常用的对字符串操作的类有 String、StringBuffer、StringBuilder
共同:都是final 类,不被继承。
string:不可变的类,一旦创建就不可以修改。String实现了equals()方法和hashCode()方法。
StringBuffer:继承自AbstractStringBuilder,是可变类。是线程安全的,可以通过append方法动态构造数据。多线程下使用。
StringBuilder:线程不安全,执行效率高,是非线性安全的。

  

  19.

  Java获取反射的三种方法:
第一种,使用 Class.forName 静态方法。
第二种,使用类的.class 方法
第三种,使用实例对象的 getClass() 方法。

  
20.

  Java 中 hash 值的含义
hash 值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率,如HashMap、
HashTable等;
如果两个对象相同,那么这两个对象的 hash 值一定相等;
如果要重写对象的 equals 方法,那么尽量重写对象的 hashCode 方法;
两个对象的 hash 值相等,并不一定表示两个对象相同。

  
21.

  hashmap 原理
数据结构是数组和链表的结合,key和value值都允许为空,key为null的键值对永远放在以table【0】
为结点的链表中。

  22.

  java多线程中sleep和wait的4个区别
sleep是线程中的方法,但是wait是Object中的方法,sleep方法不会释放lock,但是wait会释放,
而且会加入到等待队列中。
sleep不需要被唤醒,但是wait需要

  
23.

  MVC
MVC是一种设计模式,将软件分为三层,分别是模型层,视图层,控制器层。其中模型层代表的是数据,
视图层代表的是界面,
控制器层代表的是逻辑处理,是连接视图与模型之前的桥梁。降低耦合,便于代码的维护

  
24。

  什么是多线程?
多线程是指程序中包含多个流,即在一个程序中可以同时进行多个不同的线程来执行不同的任务

  25.

  多线程的优劣?
​ 优点:可以提高CPU利用率, 提高了程序的效率, 单个程序可以创建多个不同的线程来完成各自的任务
​ 缺点:线程也是程序,需要占据内存.多线程需要协调和管理,所以需要CPU跟踪线程

  26.

  并发和并行的区别

  并发:多个任务在同一个CPU上,按照细分的时间片段轮流交替执行.
​ 并行:单位时间内,多个处理器或者多核处理器同时处理多个任务,真正意义上的同时进行

  27.

  创建线程的四种方式
​ 继承Thread类
​ 实现Runnable接口
​ 实现Callable接口
​ Executors工具类创建线程池

  28.

  un()方法和start()方法有什么区别
​ start()方法用于启动线程, run()方法用于执行线程的运行代码, run()可以反复调用, 而start() 方法只能被调用一次
​ 调用start()方法启动线程可以使线程进入就绪状态, 等待运行; run()方法只是thread的一个普通方法调用, 还是在主线程里执行.

  29.

  sleep()和wait()有什么区别
​ 相同:两者都可以使线程进入等待状态
​ 不同:sleep()是Thread类下的静态方法, wait()是Object类下的方法
​ sleep()不释放锁, wait()释放锁
​ wait()常用语线程之间的通信, sleep()常用语暂停执行

  30.

  IO流是用来处理设备之间传输数据,下载文件,上传文件
输入流:程序从输入流中读取数据,
输出流:程序向输出流写入数据。程序将数据输出到外界

  31.

  SpringMVC运行原理

  客户端请求提交到DispatcherServlet
由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controller中。
Controller调用业务逻辑处理后,返回ModelAndView
DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
视图负责将结果显示到客户端

  32.

  String str="i"与 String str=new String(“i”)一样吗?
因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;
而 String str=new String(“i”)方式,则会被分到堆内存中。

  33.

  如何将字符串反转?
二分递归 ,字符串的拼接(charAt方法),利用StringBuffer的reverse()方法,

  34.

  String 类的常用方法都有那些?
方法有length ()、charAt ()、substring ()、equals ()、concat ()、indexOf ()、lastIndexOf ()等等。

  35.

  .抽象类必须要有抽象方法吗?
抽象类不一定有抽象方法;但是包含一个抽象方法的类一定是抽象类。
(有抽象方法就是抽象类,是抽象类可以没有抽象方法)

  36.

  普通类和抽象类有哪些区别?
普通类不能包含抽象⽅法,抽象类可以包含抽象⽅法。
抽象类不能直接实例化,普通类可以直接实例化。

  37.

  抽象类能使用 final 修饰吗?
不能,抽象类就是让其他的类继承的,final 类就不能被继承 会出现锚段。

  38.

  接口和抽象类有什么区别?
抽象类要被子类继承,接口要被类实现,接口是设计的结果,抽象类是重构的结果

  39.

  java 中 IO 流分为几种?
可以分为输入流和输出流;可以划分为字节流和字符流;

  40.BIO、NIO、AIO 有什么区别?
BIO是一个连接一个线程。
NIO是一个请求一个线程。
AIO是一个有效请求一个线程。

  41.

  Files的常用方法都有哪些?
Files.delete() 删除文件或者目录
Files.copy() 复制文件
Files.move() 移动文件
Files.size()查看文件个数
Files.read() 读取文件
Files.write()写入文件

  42.

  Collection 和 Collections 有什么区别?
1、Collection是最基本的集合接口,Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。
2、Collections是一个包装类,它包含各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等)。

  43.

  .List、Set、Map 之间的区别是什么?
Collection集合主要有List和Set两大接口
List:一个有序容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。
Set:一个无序容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。
Map:一个键值对集合,存储键、值和之间的映射。Key无序,唯一;value 不要求有序,允许重复。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

  44.

  多线程的优劣?
​ 优点:可以提高CPU利用率, 提高了程序的效率, 单个程序可以创建多个不同的线程来完成各自的任务
​ 缺点:线程也是程序,需要占据内存.多线程需要协调和管理,所以需要CPU跟踪线程

  45.

  并发:多个任务在同一个CPU上,按照细分的时间片段轮流交替执行.
​ 并行:单位时间内,多个处理器或者多核处理器同时处理多个任务,真正意义上的同时进行

  46.

  创建线程的四种方式
​ 继承Thread类
​ 实现Runnable接口
​ 实现Callable接口
​ Executors工具类创建线程池

  47.

  并行和并发有什么区别?
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件

  48.

  线程和进程的区别?
一个程序最少需要一个进程,而一个进程最少需要一个线程,所以线程是程序执行的最小单位。
一个线程只可以属于一个进程,但一个进程能包含多个线程。

  49.

  线程有哪些状态?
创建、就绪、运行、阻塞、死亡

  50.

  什么是死锁?
线程死锁是指由于两个或者多个线程互相持有所需要的资源,导致这些线程一直处于等待其他线程释放资源的状态,
无法继续执行,如果线程都不主动释放所占有的资源,将产生死锁
通俗点说:死锁就是两个线程同时占用两个资源,但又在彼此等待对方释放锁。

  51.

  怎么防止死锁?
减少同步的代码快,减小锁的使用粒度,使用安全类线程,超时自动退出。

  52.

  什么是反射?
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
JAVA机制反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,
都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

  53.

  动态代理是什么?有哪些应用?
动态代理是运行时动态生成代理类。动态代理的应用有 spring aop、hibernate 数据查询、
测试框架的后端 mock、rpc,Java注解对象获取等。

  54.

  为什么要使用克隆?
对象的拷贝需要使用克隆,如果想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要使用克隆了,Java语言中克隆针对的是类的实例

  55.

  ava获取反射的三种方法:
第一种,使用 Class.forName 静态方法。
第二种,使用类的.class 方法
第三种,使用实例对象的 getClass() 方法。

  56.

  方法重载和重写的区别?
重载在一个类里面方法名相同,参数不同,个数不同,方法返回值和访问修饰符不同的两个方法
重写是在不同类里面的而且必须是集成关系,返回值类型和参数必须相同。

  57.

  jsp和servlet的区别:
servlet:一种服务器端的Java应用程序由 Web 容器加载和管理用于生成动态 Web 内容负责处理客户端请求。
jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
jsp 是 Servlet 的扩展,本质上还是 Servlet每个 Jsp 页面就是一个 Servlet 实例,Jsp 页面会被 Web 容器编译成 Servlet,Servlet 再负责响应用户请求
Servlet中没有内置对象,Jsp中的内道置对象都是必须通过HttpServletRequest对象,
HttpServletResponse对象以及HttpServlet对象得到.
Servlet的实现方式是在java代码中嵌入HTML代码,编写和修改HTML非常不方便,
所以适合做流程控制和业务逻辑的处理;
JSP实现的方式是在HTML中嵌入java代码,比较适合页面的显示

  58.

  说一下 jsp 的 4 种作用域?
页面域、请求域、会话域和应用域。

  59.

  session 和 cookie 有什么区别?
1、cookie数据保存在客户端,session数据保存在服务端。
2、cookie数据存放在客户的浏览器上,session数据放在服务器上。
3、Session比cookie更具有安全性。
4、Session占用服务器性能,Session过多,增加服务器压力
5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,
Session是没有大小限制和服务器的内存大小有关。

  60.

  get和post请求的区别?
a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;
b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?"连接,变量之间用" "连接;
而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。
c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。
d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。
e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。
f、get是form表单的默认方法。‘

  61.

  Request对象的主要方法有哪些?
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString() :获得查询字符串
getRequestURI() :获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP 地址
getRemoteHost() :获取客户端的名字
getSession([Boolean create]) :返回和请求相关 Session
getServerName() :获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号

  62.

  JSP有哪些内置对象?作用分别是什么?
JSP一共有9个内置对象:
request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest
response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse
session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession
out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter
application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext
config:表示ServletConfig,对应类型:javax.servlet.servletconfig
exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception
pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext
page:表示当前JSP页面本身。

  63.

  什么是Tomcat?
Tomcat是一种web服务器,java编写的web项目可以部署在上面,
用户在客户端请求时,都是将请求发到Tomcat上,Tomcat在将请求发到对应的项目上

  64.

  如何避免 sql 注入?
使用preparedStatment,用正则表达式,不安全的字符屏蔽。

  65.

  响应码:
信息响应(100–199);
成功响应(200–299);
重定向(300–399);
客户端错误(400–499);
服务器错误 (500–599)。
404请求失败,找不到资源 500服务器遇到情况,501 请求被服务器无法处理,

  66.

  HTTPS和HTTP的区别主要如下:

   1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

   2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

   3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

   4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  6)HTTPS 内容传输经过完整性校验

  (7)HTTPS 内容经过对称加密,每个连接生成一个唯一的加密密钥

  (8)HTTPS 第三方无法伪造服务端(客户端)身份

  67.

  谈谈sping ioc的理解。
控制反转:理论思想,原来的对象是由使用者进行控制,有了spring之后 ,可以把整个对象交给spring来帮我们进行管理
依赖注入(DI):把对应的值注入到具体的对象中,@Autowirded ,popularteBean 完成属性的注入

  容器:存储对象,使用map结构来存储,在spring中一般存放在三级缓存,singletonObject存放完整的bean对象,整个bean的生命周期,从创建
到使用到销毁的过程全部都是由容器来管理
ioc容器(beanFctory接口),优先创建bean工厂,向bean 工厂中设置一些参数,
spring中的bean都是反射的方式生成的,同时其中也包含了很多扩展点,比如beanFactory的扩展,ioc中核心的也就是填充具体bean的属性和生命周期。

  $ 符号一般用来当作占位符,常使用Linux脚本的人应该对此有更深的体会吧。
既然是占位符,当然就是被用来替换的。知道了这点就能很容易区分$和#,从而不容易记错了。

  (2)预编译的机制。预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,
SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,
最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。

  68.解释一下什么是 aop?
aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等

  69.

  MyBatis 中使用 # 和 $ 书写占位符有什么区别 ?
①#将传入的数据都当成一个字符串,会对传入的数据自动加上引号
② $将传入的数据直接显示生成在 SQL 中。
注意:使用 $ 占位符可能会导致 SQL 注射攻击,能用#的地方就不要使用 $ ,写 order by 子句的时候应该用$而不是#。

  70.

  Mybatis的常用标签或者注解用过哪些
@Update 简单更新
@Delete 简单删除
@Delete("delete from sellers where id =#{id} ")
void deleteById(Integer id);
@Mapper

  71.

  Mybatis的优缺点
优点:
1.基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,
SQL写在XML里,解除sql与程序代码的朝合,便于统–管理;提供XML标签,支持编写动态SQL语句,并可重用。
2.与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
3.很好的与各种数据库兼容(因为 MyBatis 使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
4.能够与Spring很好的集成;
5.提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点:
1,SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SsQL语句的功底有一定要求。
2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

  72.

  spring的注解和用途:
@Component 一般用于把普通pojo实例化到spring容器中
@Controller 标注控制层,表示向控制层注入服务层的数据
@Service 标注服务层,来进行业务的逻辑处理,在服务层注入DAO层数据
@Repository 标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@ComponentScan Spring能够找到这个bean
@ResponseBody 通常用来返回JSON数据或者是XML
@RestController
@RequestMapping(“xxxx”) 映射客户端的访问地址

  73.

  git 相关的命令
git config 配置 Git 的相关参数
git clone gin远程仓库下载本地源码
git status 查看状态
git remote 操作远程库
git branch 分支
git add 提交文件
git commit 提交到仓库
git pull 合并远程仓库
git push 推送仓库
git log 显示提交的记录

  74.

  为什么要使用 spring?
spring是开源轻量级javabean容器框架,提供了很多基础功能,降低了复杂性,依赖的东西少,资源占用少,部署见到那,不同的功能选择不同的依赖,
通过xml配置或注解就可以完成bean的依赖注入,aop完成切面功能,比如事务,日志,等统一处理。
通过配置和注入其他框架。

  75.

  Spring 框架中 Bean 的生命周期
ioc 容器找到关于Bean的定义并实例化bean,对bean依赖注入,六个阶段Bean定义、实例化、属性赋值、初始化、生存期、销毁

  76.

  Spring 里面的 aop的原理是什么?
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,
引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。通过反射创建动态代理对象,拦截方法执行,
在将自己需要额外执行的代码加塞进来执行

  77.

  AOP能干什么,也是AOP带来的好处
1:降低模块的耦合度
2:使系统容易扩展
3:设计决定的迟绑定:使用AOP,设计师可以推迟为将来的需求作决定,因为它
可以把这种需求作为独立的方面很容易的实现。
4:更好的代码复用性

  78.

  Spring主要使用了什么模式?
工厂模式:每个Bean的创建通过方法
单例模式:默认的每个Bean的作用域都是单例
代理模式:关于Aop的实现通过代理模式

  79.

  简述Spring 中的事务
①编程式事务管理:编程方式管理事务,极大灵活性,难维护。
②声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务

  80.

  spring 常用的注入方式有哪些?
setter 属性注入
构造方法注入
注解方式注入

  81.

  什么是SpringBoot
SpringBoot功能
1) 自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
2) 起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
3) 辅助功能
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
注意:Spring Boot 并不是对 Spring 功

  以上就是java面试题(2022最新)()的详细内容,想要了解更多 java面试题(2022最新)的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: