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

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

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)BIO, NIO, AIO 有什么区别?

  • BIO(Blocking I/O):BIO 是传统的 Java I/O 模型,它是阻塞的,意味着当一个线程执行 I/O 操作时,它会一直等待直到数据被读取或写入完成。这种模型下,每个连接都需要一个独立的线程来处理,当连接数较大时会导致资源消耗严重,性能较差。
  • NIO(Non-blocking I/O):NIO 是 Java 中引入的一种更灵活的 I/O 模型。它提供了通道(Channel)和缓冲区(Buffer)的概念,使得可以使用单个线程管理多个连接。NIO 提供了非阻塞的 I/O 操作,通过选择器(Selector)可以轮询多个通道的状态,当某个通道就绪时,可以进行相应的读写操作。相比于 BIO,NIO 可以更高效地处理大量连接。
  • AIO(Asynchronous I/O):AIO 是 Java 7 中引入的一种异步 I/O 模型。它在 NIO 的基础上进一步提供了异步 I/O 操作的支持,即在进行 I/O 操作时可以指定一个回调函数,在操作完成时自动调用该函数,不需要线程等待。AIO 通常用于处理较大的数据流,例如文件的异步读写操作。

2)Files 的常用方法都有哪些?

Java 中的 Files 类提供了一组用于操作文件和目录的静态方法,常用的方法包括但不限于:

  • Files.exists(Path path):检查指定路径是否存在。
  • Files.createFile(Path path):创建一个新文件。
  • Files.createDirectory(Path dir):创建一个新目录。
  • Files.copy(Path source, Path target, CopyOption... options):复制文件或目录。
  • Files.move(Path source, Path target, CopyOption... options):移动文件或目录。
  • Files.delete(Path path):删除文件或目录。
  • Files.readAllBytes(Path path):读取文件的所有字节。
  • Files.lines(Path path):逐行读取文件内容。
  • Files.write(Path path, byte[] bytes, OpenOption... options):将字节数组写入文件。
  • Files.write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options):将字符串集合逐行写入文件。

3)什么是反射机制?

反射(Reflection)是指在运行时动态地获取类的信息以及操作类的属性和方法的能力。在 Java 中,反射机制允许程序在运行时检查类的属性和方法,获取类的构造函数信息,创建类的实例,以及调用类的方法等。Java 的反射 API 主要包括 java.lang.Class 类以及其相关方法,例如 getField()getMethod()getConstructor() 等。

反射机制的主要应用场景包括但不限于:

  • 在运行时动态加载类和创建对象,例如通过类名字符串来加载类并创建对象。
  • 在运行时动态调用类的方法,例如通过方法名字符串来调用方法。
  • 分析类的属性和方法,例如获取类的字段、方法、构造函数等信息。
  • 实现通用的框架和工具,例如 Java 的 ORM(对象关系映射)框架和序列化框架。

尽管反射提供了一种强大的机制来操作类的属性和方法,但由于其涉及到动态类型检查和动态调用,通常会导致性能较低,并且在编写代码时易于出错。因此,应该在必要时使用反射,避免滥用。

4)反射机制优缺点

优点:

  • 动态性: 反射机制允许在运行时动态地加载类、创建对象、调用方法,从而使得程序的行为可以更加灵活和动态。
  • 扩展性: 反射机制提供了一种强大的扩展机制,允许程序在不修改源代码的情况下对现有类进行扩展和定制。
  • 灵活性: 反射机制使得程序可以更加灵活地处理各种类型的对象,而不需要提前确定对象的类型。

缺点:

  • 性能开销: 反射涉及到动态类型检查和方法调用,通常比直接调用方法要慢,因此可能会带来一定的性能开销。
  • 安全性问题: 反射机制可以访问和修改类的私有属性和方法,因此可能会破坏封装性,引起安全漏洞。
  • 可读性和维护性差: 反射使得程序的结构更加复杂,降低了代码的可读性和维护性,使得程序更难以理解和调试。

5)反射机制的应用场景有哪些?

反射机制在许多场景下都有广泛的应用,包括但不限于:

  • 框架开发: 框架通常需要处理各种类型的对象,并且提供通用的接口供用户使用,反射机制可以使框架更加灵活和通用。
  • 工具开发: 许多工具在运行时需要加载和操作用户提供的类,反射机制可以使工具更加灵活和可扩展。
  • ORM(对象关系映射)框架: ORM 框架通常需要在运行时根据类的属性和数据库表的字段进行映射,反射机制可以帮助 ORM 框架实现自动映射。
  • 序列化和反序列化: 反射机制可以帮助序列化和反序列化框架在运行时动态地获取类的属性信息,从而实现对象的序列化和反序列化。

6)Java 获取反射的三种方法

在 Java 中获取反射的三种主要方法包括:

  1. 通过对象的 getClass() 方法: 每个对象都有一个 getClass() 方法,可以返回表示对象所属类的 Class 对象。例如:

    MyClass obj = new MyClass();
    Class<?> clazz = obj.getClass();
    
  2. 通过类的 .class 属性: 每个类都有一个 .class 属性,可以直接获取表示该类的 Class 对象。例如:

    Class<?> clazz = MyClass.class;
    
  3. 通过 Class 类的 forName() 方法: Class 类提供了一个 forName(String className) 方法,可以根据类的全限定名(包名加类名)来获取 Class 对象。例如:

    Class<?> clazz = Class.forName("com.example.MyClass");
    

这三种方法都可以用来获取 Class 对象,然后通过 Class 对象可以获取类的属性、方法、构造函数等信息,实现反射的功能。

7)字符型常量和字符串常量的区别

  • 字符型常量: 字符型常量是指用单引号括起来的单个字符,例如 'A''B''1' 等。
  • 字符串常量: 字符串常量是指用双引号括起来的一个或多个字符组成的序列,例如 "Hello""World""123" 等。

区别在于字符型常量是单个字符,而字符串常量可以包含多个字符组成字符串。

8)什么是字符串常量池?

字符串常量池是 Java 中的一种特殊的存储区域,用于存储字符串常量对象。在 Java 中,如果两个字符串常量的值相同(即字符序列相同),则它们实际上指向字符串常量池中的同一个对象,而不是创建两个独立的对象。这样可以节省内存空间,并提高字符串的比较效率。

9)String 是最基本的数据类型吗

不是的。在 Java 中,String 是引用数据类型,而不是基本数据类型。基本数据类型包括 byteshortintlongfloatdoublecharboolean,而 String 是由 char 类型组成的对象。

10)String有哪些特性

String 类具有以下特性:

  • 不可变性(Immutable): String 对象一旦被创建,其值就不能被修改。任何对 String 对象的操作都会返回一个新的 String 对象。
  • 线程安全性: 由于不可变性,String 对象是线程安全的,可以在多线程环境下安全地使用。
  • 字符串常量池: Java 中的字符串常量池可以提高字符串的重用率和比较效率。
  • 重载 + 运算符: String 类重载了 + 运算符,可以用于字符串的连接操作。
  • 实现了 Serializable 接口: String 类实现了 Serializable 接口,可以被序列化和反序列化。
  • 实现了 Comparable 接口: String 类实现了 Comparable 接口,可以进行字符串的比较操作。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 700+ Star,1W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

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

相关文章

简单实现Transformer的自注意力

简单实现Transformer的自注意力 关注{晓理紫|小李子}&#xff0c;获取技术推送信息&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持&#xff01;&#xff01; 如果你感觉对你有所帮助&#xff0c;请关注我。 源码获取&#xff1a;VX关注并回复chatg…

二叉树的右视图,力扣

目录 题目&#xff1a; 我们直接看题解吧&#xff1a; 快速理解解题思路小建议&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现(DFS)&#xff1a; 代码1&#xff1a; 补充说明&#xff1a; 代码2&#xff1…

Vue.js中的$nextTick

其实目前在我现有的开发经历中&#xff0c;我还没有实际运用过$nextTick&#xff0c;今天在看书时&#xff0c;学习到了这个东西&#xff0c;所以做个笔记记录一下。 一、$nextTick是什么&#xff1f; $nextTick 是 Vue提供的一个方法&#xff0c;用于在 DOM 更新之后执行回调…

AI:148-开发一种智能语音助手,能够理解和执行复杂任务

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

浅谈钩子方法

何为钩子方法 钩子方法&#xff08;Hook methods&#xff09;是一种在面向对象编程中常用的设计模式&#xff0c;也被称为模板方法模式。在这种模式中&#xff0c;父类定义了一个算法的框架&#xff0c;并且将一些步骤的实现延迟到子类中。子类可以通过重写这些“钩子方法”来改…

[技巧]Arcgis之图斑四至点批量计算

前言 上一篇介绍了arcgis之图斑四至范围计算&#xff0c;这里介绍的图斑四至点的计算及获取&#xff0c;两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标&#xff0c;如下图&#xff1a; 四至点…

青山隐隐,败叶萧萧

给定序列需满足二个条件:本身是质数&#xff0c;相邻二项之和仍为质数 首先一个偶数2*n不能通过2*k&#xff08;k取整数&#xff09;得到质数。 奇数2*n-12*k2*(nk)-1&#xff0c;可能得到质数 那么若序列中存在偶数&#xff0c;一定不满足第一个条件&#xff08;特判0,2&am…

STM32进阶笔记——复位、时钟与滴答定时器

本专栏争取每周三更新直到更新完成&#xff0c;期待大家的订阅关注&#xff0c;欢迎互相学习交流。 目录 一、复位1.1 软件复位1.2 低功耗管理复位 二、时钟2.1 系统时钟(SYSCLK)选择2.2 系统时钟初始化 三、滴答定时器&#xff08;Systick&#xff09;3.1 SysTick部分寄存器3.…

部署bpmn项目实现activiti流程图的在线绘制

本教程基于centos7.6环境中完成 github开源项目: https://github.com/Yiuman/bpmn-vue-activiti软件&#xff1a;git、docker 1. 下载源代码 git clone https://github.com/Yiuman/bpmn-vue-activiti.git2. 修改Dockerfile文件 声明基础镜像&#xff0c;将项目打包&#xff…

EasyRecovery数据恢复软件有什么优势呢?

EasyRecovery数据恢复软件具有以下优势&#xff1a; 强大的恢复能力&#xff1a;EasyRecovery采用先进的扫描和恢复技术&#xff0c;能够深度扫描存储设备&#xff0c;寻找并恢复因各种原因丢失的数据。无论是误删除、格式化、分区损坏还是病毒感染&#xff0c;它都能提供有效…

设计模式(十一)策略模式

请直接看原文:设计模式&#xff08;十一&#xff09;策略模式_某移动支付系统在实现账户资金转入和转出时需要进行身份验证,该系统为用户提供了-CSDN博客 ----------------------------------------------------------------------------------------------------------------…

LeetCode01 - 35.搜索插入位置

一、题目要求 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示…

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中&#xff0c;一般会有两种校验数据的方式&#xff1a;客户端校验和服务端校验 客户端校验&#xff1a;这种校验一般是在前端页面使用 JS 代码进行校验&#xff0c;主要是验证输入数据…

文物预防性保护系统方案的需求分析

没有文物保存环境监测&#xff0c;就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系&#xff0c;一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

使用Zint库生成一维码/条形码

下面代码是是使用 Zint 库生成 Code 128 类型的条形码&#xff0c;并将生成的条形码保存为 output.bmp 文件。下面是对代码的详细解释&#xff1a; #include 和 #include <zint.h>&#xff1a;这两行代码包含了所需的头文件&#xff0c;分别是标准输入输出流的头文件和 Z…

LeetCode---【链表的操作】

目录 206反转链表【链表结构基础】21合并两个有序链表【递归】我的答案【错误】自己修改【超出时间限制】在官方那里学到的【然后自己复写,错误】对照官方【自己修改】 160相交链表【未理解题目目的】在b站up那里学到的【然后自己复写,错误】【超出时间限制】对照官方【自己修改…

(C语言)qsort函数模拟实现

前言 我们需先了解qsort函数 qsort函数详解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型&#xff0c;很是神奇&#xff0c;这是为什么&#xff0c;我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…

探究前端的.less样式文件 css的增强版

前言 .less 文件是一种层叠样式表&#xff08;CSS&#xff09;预处理器语言的文件格式&#xff0c;简称 LESS&#xff08;Leaner Style Sheets&#xff09;。它扩展了 CSS 语言&#xff0c;增加了变量、混合、函数和许多其他技术&#xff0c;使得 CSS 更加易于维护和扩展。 与…

AntDesignVue之a-table中key不唯一问题处理的多种方式

AntDesignVue2之a-table中key不唯一问题处理的多种方式 文章目录 AntDesignVue2之a-table中key不唯一问题处理的多种方式1. key不唯一问题1. 问题描述2. 解决方法1. 带冒号的rowKey2 . 带冒号的rowKey绑定表达式3. 不带冒号的rowKey属性 1. key不唯一问题 1. 问题描述 antdv: …

Sunshine v0.21.0 安装卡住,闪退的问题解决

上期博客讲了如何利用 Sunshine 和 Moonlight 实现 iPad 当作 Windows 副屏&#xff0c;用官方 Windows installer 安装 Sunshine 过程中&#xff0c;遇到了安装卡住&#xff08;这个是因为需要国外网络环境&#xff09;&#xff0c;安装后运行闪退的问题。 Sunshine 下载地址…