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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听