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

相关文章

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添