面试 Java 基础八股文十问十答第二期

面试 Java 基础八股文十问十答第二期

作者:程序员小白条
⭐点赞⭐收藏⭐不迷路!⭐

11.什么是反射?反射有哪些作用?反射在Sping中的体现

(1): 什么是反射?
  • 反射可以在运行时获取到一个类的所有信息,包括(成员变量,成员方法,构造器等)
  • 反射可以直接操作类的私有属性
  • 反射就是把Java类中的各种成分映射成一个个的Java对象
(2): 反射有哪些作用?
  • 获取类对应的字节码的对象 对象.getClass() Person.class Class.forName(“类的全路径”) 第三种是最安全,性能最好
  • 反射可以获取一个类的所有信息,比如包名,类名,构造器,方法,成员变量 可以操作私有属性和私有方法
(3): 反射在Spring中的体现
  • SprignIOC控制反转利用:工厂模式+反射+xml解析(配置文件)
  • 利用Class.forName(“类的全路径”).newInstance
  • @Bean注入组件就是利用反射+代理模式
  • 从容器中拿取,一般会写getBean(“指定类名称”)或者是getBean(“类名称”,返回的Bean类型)
  • 单元测试。JUnit等单元测试框架可以使用反射机制在运行时动态地获取类和方法的信息,实现自动化测试。

12.为什么要使用克隆? 怎么实现对象克隆? 克隆有几种方式和它们的区别

(1): 为什么要使用克隆?
  • 业务逻辑中存在,想要对一个对象进行复制,但又不想更改原有的对象,比如DTO操作中,将POJO中的属性拷贝到DTO中
(2): 怎么实现对象克隆?
  • 实现Cloneable接口,重写clone方法
  • 实现Serializable接口,通过对象的序列化和反序列化实现克隆,属于深拷贝的克隆,对象转换字节流,然后写入对象流,然后从对象流中读取readObject获取对象
  • Spring、Apache都提供了BeanUtils来拷贝对象,属于浅拷贝,推荐使用Spring自带的BeanUtils,效率更高
(3): 克隆有几种方式和区别
  • 浅拷贝: 克隆基本数据类型,当克隆引用类型时,克隆对象的引用类型改变会导致原来的对象也发生改变,因此当克隆存在引用类型的属性时,推荐采用深拷贝。比如Dept部门中有Emp员工的情况
  • 深拷贝: 克隆基本数据类型和引用类型,并且互相隔离,互不影响。
  • 浅拷贝可以直接采用clone(),或者用BeanUtils
  • 深拷贝,可以重写clone()方法,但当属性类型比较多,层级深的时候,不推荐。可以采用第二种方法,序列化和反序列化,当然类要实现Serializable接口。

13.常见的运行时异常有哪些?

  • NumberFormatException 数字转换异常
  • ArrayIndexOutofBoundsException 数组下标越界异常
  • NullPointerException 空指针异常
  • ArithmeticException 算术逻辑异常
  • ClassCastException 类型转换异常

14.String,StringBuffer,StringBuilder之间的区别和联系

  • 首先String类是final修饰,不可继承,底层维护了private final char value[] 属性,因此是常量,不能修改其引用地址,但是单个字符内容是可以发生改变,其实就是常量池和堆,String修改内容,会导致大量副本残留,因此效率会降低。
  • StringBuffer是线程安全的,因为有synchronized修饰,底层用的和StringBuilder一样的AbstractStringBuilder的append。
  • StringBuilder是线程不安全的,适合单线程情况下使用,但速度最快。
  • 效率对比: StringBuilder>StringBuffer>String

15.重写和重载的区别和使用场景

  • 重写: 是建立在继承关系上的,子类在继承父类的基础上,可以增加新的功能,使用场景:在不修改原方法的基础上对方法进行扩展和增加,例如:CGLIB实现动态代理(SpringBoot2.x),SpringBoot1.0和Spring5,AOP还是使用的是JDK动态代理,但JDK动态代理有局限性,必须要有接口。但CGLIB不存在这个问题,代理对象无论是赋值给接口还是实现类,这两者都是代理对象的父类。
  • 重载:重载是多态的体现,一个类中处理不同类型的参数可以用重载,比如构造器重载,方法重载,

16.实例化对象有哪几种方式

  • 直接new
  • clone()克隆
  • 反射机制 Class.forName(“类的全路径”).newInstance()
  • 对象的序列化和反序列化,利用对象流

17.类什么时候会被加载

  • 创建对象实例(new)
  • 创建子类对象实例时,父类也会被加载
  • 使用类的静态成员(属性的访问或赋值或方法的调用)
  • 静态常量在访问时不会触发类的加载机制,常量在常量池,本质上没有直接引用到定义常量的类(静态常量存储在元数据区(JDK1.8)的静态常量池和运行时常量池并列)。
  • 当子类引用父类的静态字段,不会触发子类的类加载
  • 当通过数组来定义引用类,不会触发该类的类加载机制,数组在编译时不能确定元素类型,只有在运行时才能确定元素类型。

18.什么是双亲委派模型?

  • 双亲委派模型,就是加载类的时候,先请求其父类加载器去加载,如果父类加载器无法加载类,再尝试自己去加载类。如果都没加载到,就抛出异常。

好处:

  • 使得 Java 类随着它的类加载器一起具有一种带有优先级的层次关系,从而使得基础类得到统一
  • 通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次,避免了多份同样字节码的加载,。
  • 安全,避免核心类被修改java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。

19.HashMap和HashTable有什么区别?

  • HashMap是JDK1.2引入的,线程不安全
  • HashTable是JDK1.0引入的,线程安全
  • HashMap中允许键和值为Null,而HashTable不允许
  • HashTable直接使用对象的hashcode
  • HashMap重新计算hash值(高低16位异或)
  • HashMap没有HashTable的contains方法,改为containsKey和containsValue
  • HashTable默认容量为11,HashMap为16
  • HashTable扩容机制为11乘2+1,HashMap为16乘2
  • HashTable继承Dictionary,HashMap继承AbstractMap
  • 不建议使用HashTable,在多线程环境下,JDK1.5引入ConcurrentHashMap,在HashMap的基础上增加线程安全性保障

20.HashMap的实现原理

  • 初始化大小默认16,2倍扩容机制
  • 负载因子0.75
  • HashMap在JDK1.7中存储结构采用数组+链表。HashMap采取Entry数组来存储key-value,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有next指针,指向下一个Entry实体,以此来解决Hash冲突的问题。
  • HashMap在JDK1.8中采用数组+链表+红黑树,当链表长度大于等于8,并且数组长度大于等于64的时候进行树化,如果数组长度不大于64,仅进行正常的数组扩容

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

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

相关文章

关于qiankun沙箱sandbox(面试题)

为什么要有js资源隔离机制? 主应用和子应用,相同的全局变量,可能会发生冲突,子应用和子应用之间,相同的全局变量,也可能会发生冲突。在这里我们主要指的就是window。 思路:打开沙箱时能够修改…

Spring中@Transactional注解

在Spring框架中,Transactional 是一个注解,用于声明事务性的方法。这个注解可以被应用在方法级别或类级别上。它提供了一种声明式的事务管理方式,避免了在代码中直接编写事务管理相关的代码。Transactional 注解能够将一个方法纳入到一个事务…

基于SSM的生鲜在线销售系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

亚马逊云科技推出新一代自研芯片

北京——2023 年12月1日 亚马逊云科技在2023 re:Invent全球大会上宣布其自研芯片家族的两个系列推出新一代,包括Amazon Graviton4和Amazon Trainium2,为机器学习(ML)训练和生成式人工智能(AI)应用等广泛的工…

Linux: 退出vim编辑模式

一、使用快捷键进行退出 1、按“Esc”键进入命令模式 当我们在vim编辑模式下输入完毕需要进行退出操作时,首先需要按下“Esc”键,将vim编辑器从插入模式或者替换模式切换到命令模式。 ESC 2、输入“:wq”保存并退出 在命令模式下,输入“:…

锐捷RG-UAC应用网关 前台RCE漏洞复现

0x01 产品简介 锐捷RG-UAC系列应用管理网关是锐捷自主研发的应用管理产品。 0x02 漏洞概述 锐捷RG-UAC应用管理网关 nmc_sync.php 接口处存在命令执行漏洞,未经身份认证的攻击者可执行任意命令控制服务器权限。 0x03 复现环境 FOFA:app"Ruijie-R…

JavaWeb | JavaScript基础

目录: 1.JavaScript简介2.JavaScript注释3.JavaScript语法 :变量的定义函数的定义 4.JavaScript内置对象4.1 window的作用 :出现提示框打开关闭窗口定时器 4.2 history的作用4.3 document的作用 :在网页上输出设置网页属性访问文档元素,特别是…

jni子线程回调java实例

背景 最近有项目需求,需要在jni中创建多个子线程,并在子线程中,回调java将byte[]数据上报给java处理 demo实例 关键代码 static jmethodID method_callback; jclass global_class NULL; jclass myClass NULL; JavaVM* gJavaVM NULL;ji…

6.8 Windows驱动开发:内核枚举Registry注册表回调

在笔者上一篇文章《内核枚举LoadImage映像回调》中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与LoadImage消息不同Registry消息不需要解密只要找到CallbackListHead消息回调链表头并解析为_CM_NO…

基于Java SSM人才市场管理系统

随着人才流动的正常化以及大专院校毕业生就业人数的增长,人才市场的业务越来越红火。人才市场管理系统实现对人才市场业务的规范化管理。系统主要管理的信息及操作如下: 用人单位:编号、名称、联系人、电话、招聘人数、学历要求、职称要求。 …

【Java面试——基础题】

Java基础部分,包括语法基础,泛型,注解,异常,反射和其它(如SPI机制等)。 1.1 语法基础 面向对象特性? 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成…

kubelet漏洞CVE-2020-8559复现与分析

首先下载源码 git clone --branch v1.17.1 --single-branch https://github.com/kubernetes/kubernetes.git 参考 移花接木:看CVE-2020-8559如何逆袭获取集群权限-腾讯云开发者社区-腾讯云

React Router(用法介绍)

React Router 是一个用于在 React 应用中处理路由的库。它允许你定义应用程序中的多个页面,并在 URL 改变时显示不同的内容。 要使用 React Router,你需要首先安装它: npm install react-router-dom然后,在你的应用中引入所需的…

一些小笔记(Delphi)

工具:Delphi10.4 用Delphi写了一个解析json文件的小程序, 需求是能解析整个文件夹中的所有文件,也能只解析某一个文件,文件或者文件夹的路径能够直接填写,也能够通过选择的方式去填充。 我的解决办法如下&#xff1…

12-1 Springboot过滤拦截和日志处理

Springboot的日志 默认日志框架:logback 1.日志以文件的形式的保存 使用logback框架 ->(运行日志,开发中用于调式的,在开发中作为系统运行日志记录故障,从而追究问题根源) 2.日志相关的表 记录用户相关操作信息 -> 需要我…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(2)》(18)

《Linux操作系统原理分析之linux存储管理(1)》(17) 6 Linux存储管理6.2 选段符与段描述符6.2.1 选段符6.2.2 段描述符6.2.3 分段机制的存储保护 6.3 80x86 的分页机制6.3.180x86 的分页机制6.3.2 分页机制的地址转换6.3.3 页表目录…

PTA预编译中的宏定义:求平行四边形面积

已知平行四边形面积函数的原型如下: 函数原型 double ParaArea(double base, double height); 说明:参数 base 和 height 分别为平行四边形的底和高,函数值为平行四边形的面积。 请在空白处填写适当内容,用带参数的宏替换命令…

FWFT-FIFO的同步和异步verilog代码

//----------------------------------------------------------------------------- // File Name : fifo_sync.v //----------------------------------------------------------------------------- //参数化同步FIFO。DEPTH可以是任何大于0的整数值。实际使用的内存深度是…

嵌入式WIFI芯片通过lwip获取心知天气实时天气信息(包含完整代码)

一、天气API 1. 心知天气的产品简介 HyperData 是心知天气的高精度气象数据产品,通过标准的 Restful API 接口,提供标准化的数据访问。无论是 APP、智能硬件还是企业级系统都可以轻松接入心知的精细化天气数据。 HyperData API V4版是当前的最新…

运筹学-使用python建模基本操作

运筹学中的python基本操作 运筹学库的基本介绍MIP 库的使用networkx 库的使用运筹学 所谓运筹学(Operation Research) 就是用数学方法研究各种系统最优化问题的学科,为决策者提供科学决策的依据,求解系统最优化问题,制定合理运用人力,物力,财力的方案。 库的基本介绍 对…