Java 基础面试300题 (171- 200)

Java 基础面试300题 (171- 200)

171.什么是同步?

当多个线程试图同时访问共享资源时,那么他们需要以某种方式让资源一次只能由一个线程访问。实现这一目标的过程被称为同步。Java提供了一个名为synchronized的关键字实现这一目标。

172.执行以下代码时会发生什么?

class TestMyRunnable implements Runnable {
public void run() {
System.out.println(Inside Run Method..);
System.out.println(Name of thread is– “:Thread.currentThread().getName());
}
}
class TestMyThread {
public static void main(String argument[]) {
TestMyRunnable runnable = new TestMyRunnable();
Thread thread = new Thread(runnable);
Thread.setName(My Thread); //Line 1
thread.start(); //Line 2
}
}

上述代码编译没有问题。执行第1行时,将线程的名称设置为My Thread,执行第2行时,会生成一个新的线程,并执行run()方法中的代码,该方法在控制台上打印如下一些信息:

Inside Run Method.
Name of thread is: My Thread

173. 下面代码首先打印“Thread 1”1000次,然后打印“Thread 2” 1000次,是否正确?

class TestMyRunnable implements Runnable {
public void run() {
for (int iValue = 0; iValue < 1000; iValue++)
System.out.println(Name of thread is:+Thread.currentThread().getName());
}
public static void main (String argument[]) {
TestMyRunnable runnable = new TestMyRunnable();
Thread threadC = new Thread(runnable);
Thread threadD = new Thread(runnable);
threadC.setName(Thread 1);
threadD.setName(Thread 2);
threadC.start();
threadD.start();
}
}

不正确。 执行上述代码时, 不会如问题所说述,首先打印Thread 11000次,然后 Thread 2 1000次。线程执行的顺序取决于线程调度器。因此,尽管最终两个线程都会打印1000次名称,但它们打印的顺序是不确定的,有可能是交错打印。

174.如何使线程暂停十分钟?

为了使线程暂停十分钟,需要在run()方法中调用sleep()方法。这个方法接受一个长整形参数,其值表示线程以毫秒为单位的睡眠时间。如下代码所示:

try {
Thread.sleep(10 * 60 * 1000)
}
catch(InterruptedException exp) {
}

175. 当调用同步方法时会发生什么?

每当执行同步方法时,调用该方法的线程都会获取一个锁,并将锁一直保持到在方法结束 。然后释放锁。 因此,其他线程可以再次获取锁并执行该方法。因此,同步(synchronized)关键字可防止多个线程在同步方法中同时执行代码。

176.执行以下代码时会发生什么?

File myFile = new File(CoreJava.txt”);

执行上述代码时,JVM在内存中会创建一个名为myFile的Java 文件对象,但并不会文件系统上实际创建文件 。为了实际创建文件,需要调用myFile.createNewFile()方法。

177.如何创建路径为/usr/test.txt文件?

下面代码将在/usr/目录中创建一个文件test.txt

try {
File txtFile = new File(/usr/test.txt”); // Line 1
txtFile.createNewFile(); // Line 2
} catch (IOException exp) {
}

在上述代码中,执行第1行时,在内存中创建一个文件对象txtFile, 执行第2行时,在文件夹/usr/中创建文件test.txt

178.用代码示例解释FileWriter类。

FileWriter类用于将字符或字符串写入文件,而无需将其转换为字节数组。它们是PrintWriterBufferedWriter的包装类,因而能提供更好的性能和更多的数据写入方法。以下代码演示了FileWriter

try {
File txtFile = new File(/usr/CoreJava.txt”);
FileWriter myFileWriter = new FileWriter(txtFile);
myFileWriter.write(“Line 1 \n Line 2 \n”); // Line 1
myFileWriter.flush();
myFileWriter.close();
} catch (IOException exp) {
}

在上述代码中,当执行第1行时,write()方法将内容写入文件CoreJava.txt

179.如何使用FileReader读取文件/usr/CoreJava.txt中的内容,并在控制台上输出?

下面代码演示了如何使用FileReader读取指定文件中的内容,并在控制台上输出:

try {
File txtFile = new File(F:/CoreJava.txt”);
char [] totalChar = new char[1000];
FileReader myFileReader = new FileReader(txtFile);
myFileReader.read(totalChar); //Line 1
for(char readChar: totalChar) {//Line 2
System.out.print(readChar);
}
myFileReader.close();
}
catch (IOException exp) {
}

执行第1行时,read()方法将文件内容读取到totalChararray中。 第2行开始的for循环将数组的内容打印到控制台

180.如何在文件系统上创建目录?

File类有一个名为mkdir()的方法,用来创建一个与指定文件对象相对应的目录。 下面代码使用此方法在文件系统中创建一个目录:

File myDirectory = new File(/usr/mydir”); //Line 1
myDirectory.mkdir(); //Line 2 

第1行创建一个文件对象。第2行调用mkdir()方法来创建实际目录。

181. 编译和执行下面代码时会发生什么?

File myDirectory = new File(/usr/JavaCodes);
File myNewFile = new File(/usr/JavaCodes/CoreJava.txt”); //line 1
myNewFile.createNewFile();

上述代码会抛出IOException。这是因为没有创建目录/usr/JavaCodes/,只创建了与之对应的文件对象myDirectory。为了使代码正常工作,需要在第1行之前添加如下代码:

myDirectory.mkdir();

182. PrintWriter类有什么作用?

PrintWriterWriter类的特定实现,可用于将对象的格式化表示写入到到文件系统 。 下面代码演示了如何使用PrintWriter来写入字符串:

File myNewFile = new File(/usr/CoreJava.txt”);
PrintWriter myPrintWriter = new PrintWriter(myNewFile); //Line 1
myPrintWriter.println(This gets inserted into the File); //Line 2
myPrintWriter.close(); //Line 3

在上述代码中,执行第1行时,将在文件夹/usr/中创建文件CoreJava.txt。 执行第2行时,调用PrinterWriter类的println() 方法将字符串写入文件CoreJava.txt 。执行第3行时,关闭文件。 最终内容会被保存到文件中。

183. 如何删除文件?

File类有一个名为delete()的方法,用于删除文件。如下 代码示例:

File myNewFile = new File(/usr/CoreJava.txt”);
boolean success = myNewFile.delete(); //Line 1

在上述代码中,执行第1行时,delete()方法会删除指定的文件。它返回一个布尔值,表示文件删除是否成功。

184. 如何重命名文件或目录?

File 类有一个名为renameTo()的方法,用于重命名文件或目录。如下代码示例 :

File file1 = new File(/usr/file1.txt”);
file1.createNewFile();
File file2 = new File(/usr/file2.txt”);
file1.renameTo(file2); //Line 1

上述代码将文件file1.txt重命名为file2.txt。同样也可以对目录的重命名。下面代码将目录dir1重命名为dir2

File dir1 = new File(/usr/dir1”);
dir1.createNewFile();
File dir2 = new File(/usr/dir2”);
dir1.renameTo(dir2); //Line 1

185.Java的哪些类用于序列化和反序列化对象?

序列化是将对象写入文件系统的过程。java.io.ObjectOutputStream类可用于序列化对象。它有一个writeObject()方法,用来将对象写到文件系统。反序列化是序列化的逆过程,用来从文件系统恢复序列化的对象。 java.io.ObjectInputStream类可用于反序列化。它有一个readObject()方法,可用于实现这一目标。

186. File类上有哪一些重要方法?

文件类File封装了文件系统上的文件或目录。File类上的一些重要方法如下:

方法描述
createNewFile()创建一个新的空文件。
list()返回当前目录中的文件/目录数组。
delete()从文件系统中删除文件。
mkdir()创建一个目录。
getAbsolutePath()返回文件的绝对路径。

187. 编译执行下面代码片段时会发生什么?

public class Test {
public static void main(String argument[]) {
int iValue;
System.out.println(iValue);
}
}

上述代码将导致编译错误。这是因为局部变量iValue没有初始化,而直接在Sysout语句中使用。 可以通过初始化变量iValue来修复错误,具体如下:

int iValue = 0;
System.out.println(iValue);

188.编译执行下面代码片段时会发生什么?

class Calculate {
float fValue = 10.2f;
public static void main(String argument[]) {
System.out.println(Float value is:+fValue);
}
}

上述代码将导致编译错误,因为main方法是静态方法,却试图访问非静态的实例变量fvalue。Java不允许从静态方法访问非静态变量。

189.什么是对称相等合同?

假设有两个对象v1v2。如果v1.equals(v2)返回true,则v2.equals(v1)也返回true。这个equals()合同被称为对称相等合同。考虑以下代码,:

Object v1; Object v2;
v1.equals(v2); //Line 1
v2.equals(v1); //Line 2

因此,在对称相等合同的情况下,第1行返回true,当且仅当第2行y也返回true

190. 下面代码哪项是错误的语句,为什么?

System.out.println(2+2); //line 1
int i= 2+2; //line 2
String s= “one”+’two’; //line 3
byte b=256; //line 4

第1行和第2行是有效的语句。

第3行错误。 Java中因为单引号不能用于字符串,它们只能用于字符常量。字符串需要用双引号括起来。

第4行也是错误语句。字节变量b不能分配值256,因为它不在字节类型的范围内。

191.瞬态transient关键字的用途是什么?

可以在实例变量上指定transient关键字,表示当对象序列化时,不应保存其值,换句话说,对象序列化时不会序列化 transient的实例变量 。考虑以下代码片段:

class Electronics implements Serializable {
transient private int price; //Line 1
private int quantity; //Line 2
}

当序列化Electronics类的实例时,价格字段price将不会序列化,只有数量字段quantity会序列化。

192.什么是Java中的垃圾回收?

垃圾回收是释放分配给不再使用的对象的内存的过程。在Java程序运行期间,当创建对象时,JVM会分配一些内存来保存对象。JVM会定期检查正在使用的对象,并回收那些不再使用的对象的内存。有了垃圾回收 ,程序员再也不必费心地手动释放内存。

193.内存的哪一部分用于垃圾回收?JVM使用哪种算法进行垃圾回收?

垃圾回收是在堆内存中完成的。JVM在内部使用标记和扫描算法进行垃圾回收。

194.垃圾回收什么时候发生?

JVM(Java虚拟机)控制垃圾回收的过程。因此,JVM决定垃圾回收 何时运行。虽然可以通过Java代码调用System.gc()Runtime.getRuntime().gc()方法显式请求垃圾回收。 但并不能保证调用这些方法会运行垃圾回收。

195.如何通过代码触发垃圾回收?

垃圾回收可以通过以下方式之一触发:

  • 方法1: 使用Runtime.gc()如下:
Runtime runTime = Runtime.getRuntime();
runTime.gc();
  • 方法2: 使用System.gc()如下:
System.gc();

这两种方法都不能保证垃圾被立即回收,它们只是请求JVM 执行垃圾回收,最终由JVM实际决定何时运行垃圾回收。

196. 哪些对象有资格进行垃圾回收?

如果一个对象不再被引用时,它就有资格进行垃圾收集。下面几个场景中的对象都有资格成为垃圾回收的对象:

场景1-将对象设置为空

String stringValue =This is a String value”; //Line 1
stringValue = null; //stringValue 有资格被回收 

场景2-重新分配变量

String str1 =Hello;
String str2 = str1; // str1 有资格被回收

场景3-在方法中创建的对象

public void doSomething(){
String str1 =Hello;
}
public void callMethod(){
doSomething();
//doSomething 方法中的str1有资格被回收 
}

197.什么是函数接口? 如何创建函数接口?

函数接口是一个只有一个抽象方法的接口。为了创建一个函数接口, 只需要简单创建一个只有一个抽象方法的接口,如下所示:

@FunctionalInterface
public interface Multiplier {
public int multiply(int a, int b);
}

上述代码定义了一个名为Multiplier的接口,它只有一个抽象方法multiply()。并用@FunctionalInterface注解 , 此注释是可选的,它将接口标记为函数接口。如果向接口添加另一个抽象方法,代码会导致编译错误。

198.解释java.util.Function 包。

java.util.function是Java 8新增的包。它有很多内置的函数接口如下:

函数接口描述
Predicate用于测试条件。它返回一个布尔值,指示条件是true还是false。它接受任何数据类型的参数。
Consumer用于对值进行操作。它接受任何数据类型的参数并对其进行操作。返回void
Function用于转换输入值。它接受任何数据类型的参数,将其转换为一种新类型并返回。
Supplier用于产生一个任何数据类型的值。它不接受任何参数。

199. 解释java.util.function.Consumer接口。

java.util.function.Consumer是一个内置的函数接口 。它是Java 8添加的java.util.function包的一部分。它有一个accept()方法,接受任何数据类型的参数并对其进行操作,也就是消费。因为是函数接口,因此可以通过lambda表达式实现。如下代码所示 :

Consumer<String> printStr = val–> System.out.println(val); //Line 1
printStr.accept(Hello World); //Line 2

上述代码中,第1行创建一个名为printStr的字符串类型Consumer, 并用一个lambda表达式实现其accept()方法,lambda表达式的主体逻辑是在控制台简单打印输入字符串 。第2行调用接口的accept方法,传入参数是“Hello World”。因此,代码打印以下输出:

Hello World

200. SupplierConsumer两个接口有什么区别?

这两个接口都是java.util.function 包中的内置函数接口。两者之间有几个区别如下:

  • Supplier接口不接受参数,Consumer接口接受一个范型 参数

  • Supplier接口返回一个范型类型的数据 ,Consumer接口没有返回

  • Supplier接口主要用于产生特定数据类型的值,而Consumer接口则对特定数据类型的输入值进行操作。

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

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

相关文章

CSS选择器的常见用法

大家好&#xff0c;本期博客整理了前端语言 CSS 中选择器的入门级常见用法&#xff0c;希望能对大家有所帮助 CSS 选择器的主要功能就是选中⻚⾯指定的标签元素&#xff0c;选中了元素&#xff0c;才可以设置元素的属性。 那么&#xff0c;css选择器有哪几种呢&#xff1f; 以…

全面理解渗透测试

揭秘网络安全的秘密武器&#xff1a;全面理解渗透测试 在数字化时代&#xff0c;网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发&#xff0c;给个人、企业和国家带来了巨大的损失。为了应对这一挑战&#xff0c;渗透测试作为一种重要的网络安全评估手段&#xff0…

Docker-----emqx部署

emqx通过Docker容器化部署流程 1.创建持久化挂载目录 mkdir -p /home/emqx/etc ------挂载emqx的配置文件目录 mkdir -p /home/emqx/data ------挂载emqx的存储目录 mkdir -p /home/emqx/log ------挂载emqx的日志目录 [root home]# mkdir -p /home/emqx/etc [root home]# mkd…

【Redis】 使用Java操作Redis的客户端

文章目录 &#x1f343;前言&#x1f334;项目的创建&#x1f38b;引入依赖&#x1f333;配置端⼝转发&#x1f332;更改 Redis 配置文件&#x1f384;连接 Redis Server⭕总结 &#x1f343;前言 我们使用 Java 操作 Redis 客户端时我们需要进行以下操作。 注意&#xff1a;J…

Wormhole勒索病毒的最新威胁:如何恢复您的数据?

导言 随着互联网的飞速发展&#xff0c;网络安全问题愈发凸显其重要性。近年来&#xff0c;勒索病毒成为了网络安全领域的一大威胁&#xff0c;其中.Wormhole勒索病毒因其独特的传播方式和强大的破坏性&#xff0c;引起了全球范围内的广泛关注。本文91数据恢复旨在深入探讨.Wo…

Linux上部署和安装MinIO

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法&#xff0c;大数据&#xff0c;深度学习 &#x1f492; 公众号…

架构师如何以打游戏的心态做开发?

为什么打游戏可以很好玩&#xff0c;能够自发学习&#xff0c;从青铜到黄金很简单。换个角度思考&#x1f914;&#xff0c;以打游戏的心态如何进行架构开发&#xff0c;可以采用以下策略&#xff1a; 设定目标和里程碑&#xff1a; 就像游戏中的任务和关卡一样&#xff0c;为…

2024年6月1日 (周六) 叶子游戏新闻

Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时&#xff0c;他们对游戏大作的价格上涨做出了评论。几年来&#xff0c;游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示&#xff0c;电子游戏行业…

vulnhub靶场之FunBox-10

一.环境搭建 1.靶场描述 As always, its a very easy box for beginners. This works better on VitualBox rather than VMware 2.靶场下载 Funbox: Under Construction! ~ VulnHub 3.靶场启动 靶场IP地址我们不知道&#xff0c;但是网段我们知道是192.168.2.0/24 二.信息…

stack学习

std::stack 类是一种容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO&#xff08;先进后出&#xff09;数据结构。该类模板用处为底层容器的包装器——只提供特定函数集合。栈从被称作栈顶的容器尾部推弹元素。 operator 赋值给容器适配器 (公开成员函数) 元素访问…

Base64码转换

title: Base64码转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将图…

Java关键字详解

文章目录 什么是关键字&#xff1f;数据类型&#xff08;10个&#xff09;byte、char、boolean、short、int、float、long、double、void、enum 流程控制&#xff08;12个&#xff09;if、else、do、while、for 、switch、case、assertbreak&#xff08;跳出循环&#xff09;co…

Orchestrator 记录

Orchestrator 安装 Orchestrator cd /usr/local/orchestrator nohup ./orchestrator --configorchestrator.conf.json http >> orchestrator.log 2>&1 & tailf orchestrator.log访问 http://10.XX.36.216:30000实例管理命令 discover forget begin-maintena…

STM32(八):独立看门狗 (标准库函数)

前言 上一篇文章介绍了STM32单片机中的USART串口通信&#xff0c;这篇文章我们来介绍一下如何用STM32单片机中的独立看门狗来实现检测按键点灯的程序。 一、实验原理 单片机系统会由于受到外界的干扰&#xff0c;而造成程序执行紊乱&#xff0c;系统无法正常运行。为了防止这…

STL:stack和queue

文章目录 stack的介绍和使用stack的介绍stack的使用stack的模拟实现 queue的介绍和使用queue的介绍queue的使用queue的模拟实现 priority_queue的介绍和使用priority_queue的介绍priority_queue的使用优先级队列的模拟实现 deque的介绍deque的结构deque的缺陷为什么选择deque作…

Django ORM魔法:用Python代码召唤数据库之灵!

探索Django ORM的神奇世界&#xff0c;学习如何用Python代码代替复杂的SQL语句&#xff0c;召唤数据库之灵&#xff0c;让数据管理变得轻松又有趣。从基础概念到高级技巧&#xff0c;阿佑带你一步步成为Django ORM的魔法师&#xff0c;让你的应用开发速度飞起来&#xff01; 文…

golang线程池ants-四种使用方法

目录 1、ants介绍 2、使用方式汇总 3、各种使用方式详解 3.1 默认池 3.2 普通模式 3.3 带参函数 3.4 多池多协程 4、总结 1、ants介绍 众所周知&#xff0c;goroutine相比于线程来说&#xff0c;更加轻量、资源占用更少、无线程上下文切换等优势&#xff0c;但是也不能…

前端Vue小兔鲜儿电商项目实战Day06

一、本地购物车 - 列表购物车 1. 基础内容渲染 ①准备模板 - src/views/cartList/index.vue <script setup> const cartList [] </script><template><div class"xtx-cart-page"><div class"container m-top-20"><div…

React@16.x(15)PureComponent 和 memo

目录 1&#xff0c;什么是 PureComponent2&#xff0c;什么是 memo3&#xff0c;举例3.2&#xff0c;优化13.1&#xff0c;优化2-函数位置 4&#xff0c;注意点4.1&#xff0c;为了提升效率&#xff0c;应该尽量使用 PureComponent4.2&#xff0c;不要直接改变之前的状态&#…

vs2019 无法打开QT的UI文件

/* * --------------------------- Microsoft Visual StudioQt5.15.2\5.15.2\msvc2019_64 --------------------------- D:\QT_Project_vs\QtWidgetsApplication1\QtWidgetsApplication1\QtWidgetsApplication1.ui 无法打开文件。 --------------------------- 确定 -------…