Java面试必背

2023-10-10 22:59
文章标签 java 面试 必背

本文主要是介绍Java面试必背,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Integer与int的区别
  • int是Java提供的8种原始数据类型之一。Integer是Java为int提供的封装类。
  • int的默认值为0,而Integer的默认值为null;
  • Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。
  • 两个都是非new出来的Integer,如果数在-128到127之间,则为true,否则为false。因为Java在编译Integer i2=128的时候,被翻译成:Integer i2=Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
  • 两个都是new出来的,都为false。还是内存地址不一样。
  • int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。
Java值传递和引用传递区别
  1. 值传递:
    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,而实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。(简单理解:副本传递)
  2. 引用传递:
    也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
    在方法执行中,形参与实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。(简单理解:内存地址传递)
如何让多个线程按顺序执行
  • 通过主线程Join()
    线程1 t1=new线程1();
    线程2 t2=new线程2();
    线程3 t3=new线程3();
    t1.start();
    t1.join();
    t2.start();
    t2.join();
    t3.start();
  • 通过线程执行时Join()
    只是把join();run方法里面罢了,
  • 共享对象锁,可以保证每个方法只能同时有一个线程进入,配合wait和notifyall方法,可以启动或者唤醒线程。
  • 设置线程的优先级(不太推荐,如果优先级数离得近并不会按顺序执行)
start()和run()方法有什么区别?

start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动

string和stringbuffer和stringbuilder的区别
  • 因为string是不可变的(通过ide的debugger可以发现其属性大都为final类型),因此每次对其操作改变其变量值,其实是生成一个新的对象,然后将变量引用指向新对象;因此速度慢。
  • stringbuffer则不同,对其操作即直接操作对象指向的引用,无需产生新对象,速度很快;他是线程安全的,在维护多线程的同步等也会消耗一点性能。
  • stringbuilder是jdk5之后新增的,其用法与stringbuffer完全一致,但他是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。
list.map.set的存储特点?
  • list以特定次序来持有元素,可有重复元素
  • map保存key-value值,value可多值
  • set无法拥有重复元素,内部排序
ArrayList和linkedlist
  • ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
  • linkedlist采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦要从第一个索引开始
Hashtable和HashMap区别

Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现

了解过的设计模式
  • 生产消费者设计模式
  1. 生产者制造数据
  2. 生产者把数据放入缓冲区
  3. 消费者把数据取出缓冲区
  4. 消费者处理数据
  • 外观设计模式
    加以自己的了解,进行介绍
堆和栈区别

堆:先进先出
栈:先进后出
堆主要用来存放对象的,栈主要是用来执行程序的
堆:内存用来存放由new创建的对象和数组
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理

抽象类和接口区别
  • 抽象类可以有构造方法,接口不可以
  • 抽象类可以有普通成员变量,接口不可以
  • 抽象类可以包含静态方法,接口不可以
  • 抽象类可以包含单继承,接口为多接口
拦截器和过滤器
  • 拦截器是基于Java的反射机制(Java反射简单理解为任意调用、任意访问,就是调用的)的,而过滤器是基于函数回调(简单理解就是把Java方法的路径调用)。
  • 拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  • 拦截器可以访问控制层上下文、值栈里的对象,而过滤器不能访问
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
转发与重定向的区别
  • 转发在服务器端完成的;重定向是在客户端完成的
  • 转发的速度快;重定向速度慢
  • 转发的是同一次请求;重定向是两次不同请求
  • 转发不会执行转发后的代码;重定向会执行重定向之后的代码
  • 转发地址栏没有变化;重定向地址栏有变化
  • 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
  • 还有一个大的区别就是,重定向可以访问自己web应用以外的资源
jsp九大内置对象
  • request 请求对象
  • response 响应对象
  • page 页面对象
  • application 应用程序对象
  • out 输出对象
  • exception 例外对象(异常)
  • pagecontext 页面上下文对象
  • session 会话对象
  • config 配置对象
servlet生命周期

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由Javax.servlet。Servlet接口的init,service和destroy方法表达。

页面间对象传递的方法

request session application cookie等

Spring的优点和缺点
  • 优点:有效组织中间层对象,消除在许多工程中使用的单态模式,非入侵试,不需要过多依赖Spring框架,Spring构建的应用程序易于完成单元测试
  • 缺点:频繁的使用配置过多的配置文件
Spring的aop的作用

aop 就是扩展第三方服务。比如:日志、持久性、事务等

Springmvc工作流程
  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求后调用HandlerMapping处理器映射器
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一同返回给DispatcherServlet
  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  5. 执行处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将Controller执行结果ModelAndView返回DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  9. ViewReslover解析后返回具体View
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户
MyBatis工作流程
  1. 加载配置文件
  2. 生成SqlSessionFactory
  3. 建立SqlSession
  4. 调用MyBatis提供的API
  5. 查询Map配置文件
  6. 返回结果
  7. 关闭SqlSession

什么是控制反转、依赖注入、以及依赖注入的方式

  • 控制反转就是本来你该做的事情,你不去做了,让系统去做。比如,你获取一个对象的时候,往往需要new出实例来,如果用了控制反转,那这件事情就不需要你做了,你只需要在配置文件xml中配置好,系统就帮你new了。
  • 控制反转也叫依赖注入,就是把该用到的东西提前注入进去,下次直接用,而不是每次都new
  • 依赖注入方式:构造器依赖注入和Setter方法注入

码巢带你对标阿里P6
想获取更多知识,可扫码进入群聊、关注我们的微信公众号
在这里插入图片描述

这篇关于Java面试必背的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183687

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有