javaTest

2023-05-16

一:简答题(5分)
什么是java序列化,如何实现java序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。
序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,
implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

使用处理流的优势有哪些?如何识别所使用的流是处理流还是节点流

【答案】
【优势】对开发人员来说,使用处理流进行输入/输出操作更简单;使用处理流的执行效率更高。
【判别】
处理流的构造器的参数不是一个物理节点,而是已经存在的流。而节点流都是直接以物理IO及节点作为构造器参数的。

Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请指出它们分别是哪些类

Java中按所操作的数据单元的不同,分为字节流和字符流。
字节流继承于InputStream和OutputStream类;
字符流继承于Reader和Writer。
按流的流向的不同,分为输入流和输出流。
按流的角色来分,可分为节点流和处理流。缓冲流、转换流、对象流和打印流等都属于处理流,使得输入/输出更简单,执行效率更高。

数组有没有length()方法?String有没有length()方法?File有没有length()方法?ArrayList有没有length()方法?

数组没有length()方法,但是有length属性。
String和File有length()方法。
ArrayList没有length()方法,有size()方法获取有效元素个数

5、sleep() 和 wait() 有什么区别?

答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

6、创建线程有哪两种方式(jdk5.0之前)?试写创建线程步骤。比较两种创建方式的不同,哪个更优。

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
1—继承Thread类

  1. 定义类继承Thread类。
  2. 覆盖Thread类中的run方法。
  3. 创建Thread子类对象,即创建了线程对象。
  4. 调用线程对象start方法:启动线程,调用run方法。

2—实现Runnable接口
1)定义类,实现Runnable接口。
2)覆盖Runnable接口中的run方法。
3)通过Thread类建立线程对象。
4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。

【区别】
继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable:线程代码存在接口的子类的run方法。

【实现方法的好处】
1)避免了单继承的局限性
2)多个线程可以共享同一个接口子类的对象,非常适合多个相同线程来处理同一份资源

7、请说出你所知道的线程同步的方法

答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

8、线程的基本概念、线程的基本状态以及状态之间的关系

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
Java中的线程有四种状态分别是:创建、就绪、运行、阻塞、结束

二、判断题(2分)
1.C 和 Java 都是多线程语言。( )
【答案】
1.难度:容易
答案:错误
知识点:C 是单线程语言。

2.如果线程死亡,它便不能运行。( )
2.难度:容易
答案:正确
知识点:线程死亡就意味着它不能运行
3.在 Java 中,高优先级的可运行线程会抢占低优先级线程。( )
3.难度:适中
答案:正确
知识点:线程优先级的使用。
4.程序开发者必须创建一个线程去管理内存的分配。( )
4.难度:适中
答案:错误
知识点:Java 提供了一个系统线程来管理内存的分配。

5.如果线程的 run 方法执行结束或抛出一个不能捕获的例外,线程便进入等待状态。( )
难度:适中
答案:错误
知识点:如果线程的 run 方法执行结束或抛出一个不能捕获的例外,线程便进入死亡状态。
6.一个线程可以调用 yield 方法使其他线程有机会运行。( )
难度:适中
答案:正确
知识点:yield 方法总是让高优先级的就绪线程先运行。

三:选择题(3)
1.计算机处理的数据最终分解为▁▁的组合。
A 0
B 数据包
C 字母
D 1
1.难度:容易答案:AD 知识点:计算机最终能处理的数据只能为 0 和 1。

2.计算机处理的最小数据单元称为▁▁。
A 位
B 字节
C 兆
D 文件
2.难度:容易答案:B 知识点:计算机处理的最小数据单元是字节。

3.字母、数字和特殊符号称为▁▁。
A 位
B 字节
C 字符
D 文件
3.难度:容易答案:C 知识点:字符的概念。

4.在FilterOutputStream类的构造方法中,下面哪个类是合法:
A File
B InputStream
C OutputStream
D FileOutputStream
难度:适中答案:C 知识点:在FilterOutputStream类中只有一种结构:public
FilterOutputStream(OutputStream)。

5.Java 语言中提供了一个▁▁线程,自动回收动态分配的内存。
A 异步
B 消费者
C 守护
D 垃圾收集
1.难度:容易
答案:D
知识点:垃圾线程的使用。
6.用▁▁方法可以改变线程的优先级。
A run
B setPrority
C yield
D sleep
难度:容易
答案:B
知识点:setPrority 方法的使用。
7 .线程通过▁▁方法可以休眠一段时间,然后恢复运行。
A run
B setPrority
C yield
D sleep

难度:容易
答案:D
知识点:sleep 方法的使用。
8.▁▁方法可以用来暂时停止当前线程的运行。
A stop( )
B sleep( )
C wait( )
D suspend()

难度:适中
答案:BCD
知识点:当调用 stop( )方法后,当前的线程不能重新开始运行

三:填空题
(5分)
下列程序将从file1.dat文件中读取全部数据,然后写到file2.dat文件中。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileStreamInOut {
	public static void main(String[] args) {
		try {
			File inFile = new File("_________");
			File outFile = new File("_________");
			FileInputStream fis = new FileInputStream(_________);
			FileOutputStream fos = new FileOutputStream(_________);
			int c;
			while ((c = fis.read()) != -1) {
				fos.write(c);
			}
			_____.close();
			_____.close();
		} catch (FileNotFoundException e) {
			System.out.println("FileStreamsTest:" + e);
		} catch (IOException e) {
			System.out.println("FileStreamTest" + e);
		}
	}
}	

public class Test {
	public static void main(String[] args) {
		MyThread m = new MyThread();
		Thread t = new Thread(m);
		t.start();	        
        {1}
	int j = m.i;
	System.out.println(j);
}
}
class MyThread implements Runnable{
	int i;
	public void run(){
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		i=100;
	}
}	 

答案:t.join()
利用多线程设计一个程序,同时输出 50 以内的奇数和偶数,以及当前运行的线程名。(14分)


public class ThreadPrint extends Thread {
	int k = 1;
public void run() {
	int i = k;
	while (i < 50) {
		System.out.println(Thread.currentThread().getName() + "-----" + i);
		i += 2;
	}
	System.out.println(Thread.currentThread().getName() + " end!");
}

public static void main(String[] args) {
	ThreadPrint t1 = new ThreadPrint();
	ThreadPrint t2 = new ThreadPrint();
	t1.k = 1;
	t2.k = 2;
	t1.start();
	t2.start();
}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaTest 的相关文章

随机推荐

  • LeetCode热题100关于二叉树的题目整理(待更)

    对称二叉树 xff08 simple难度 xff09 https leetcode cn com problems symmetric tree 与本题相同题目 剑指offer28 对称的二叉树 本文思路及解法参考了 剑指offer28 对
  • vscode保存代码,自动按照eslint规范格式化代码设置

    安装 eslint 插件打开用户配置 文件 gt 首选项 gt 设置 搜索setting json填写如下配置 span class token punctuation span span class token string 34 wor
  • React Native 文件“launchPackager.command”无法执行,因为您没有正确的访问权限。

    launchPackager command没有执行权限 请注意chmod 755 后面的路径是你本机launchPackager command的路径 chmod 755 Users huieryun Work newretail o2o
  • Missing essential plugin: org.jetbrains.android Please reinstall Android Studio from scratch

    Missing essential plugin org jetbrains android Please reinstall Android Studio from scratch macos在终端输入 xff1a rm Rf Libra
  • java多态

    多态 1 定义 多态是同一个行为具有多个不同表现形式或形态的能力 多态就是同一个接口 xff0c 使用不同的实例而执行不同操作 它是指在父类中定义的属性和方法被子类继承之后 xff0c 可以具有不同的数据类型或表现出不同的行为 xff0c
  • Java对象的eqauls方法和hashCode方法

    简而言之 xff0c 在集合查找时 xff0c hashcode能大大降低对象比较次数 xff0c 提高查找效率 xff01 Java对象的eqauls方法和hashCode方法是这样规定的 xff1a 1 相等 xff08 相同 xff0
  • 【rustdesk】windows安装vcpkg及配置, rustdesk 客户端依赖库安装

    https github com microsoft vcpkg VCPKG ROOT VCPKG DEFAULT TRIPLET X VCPKG ASSET SOURCES 放入环境变量 G ISOFT vcpkg vcpkg VCPKG
  • test

    1 为什么要有类的继承性 类的继承性可以减少代码冗余度 xff0c 提高代码复用性 xff0c 提高代码操作效率 2 继承的格式 xff08 语法 xff09 子类 extends 父类 3 子类继承父类后有哪些不同 子类范围大于父类 xf
  • Set,list,map

    Set Set集合的特点 xff1a 元素不重复 xff0c 存取无序 xff0c 无下标 Set集合下面有 xff1a HashSet xff0c LinkedHashSet xff0c TreeSet HashSet存储字符串 span
  • String类的final原因

    作者 xff1a 知乎用户 链接 xff1a https www zhihu com question 31345592 answer 114259286 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非
  • Java测试题

    1 Set里的元素是不能重复的 xff0c 那么用什么方法来区分重复与否呢 是用 61 61 还是equals 它们有何区别 它们使用hashcode来区分是否重复 xff0c 首先通过hashcode来判断是否重复 xff0c 如果has
  • Java中Error与Exception的区别

    Error类和Exception类都继承自Throwable类 Error的继承关系 xff1a Exception的继承关系 xff1a 二者的不同之处 xff1a Exception xff1a 1 xff0e 可以是可被控制 chec
  • 技能树,面试要求重点部分

    一 Java技能树 1 基本语法 这包括static final transient等关键字的作用 xff0c foreach循环的原理等等 比如面试的时候面试官问你static关键字有哪些作用 xff0c 如果你答出static修饰变量
  • list,set,map的应用

    list xff0c set xff0c map的应用 1 Set里的元素是不能重复的 xff0c 那么用什么方法来区分重复与否呢 是用 61 61 还是equals 它们有何区别 它们使用hashcode来区分是否重复 xff0c 首先通
  • Java线程多线程

    创建两个线程 xff0c 一个打印1 52 xff0c 一个打印A Z 打印顺序为12A34B56C78D span class token keyword package span Thread span class token punc
  • Java线程test

    1 银行有一个账户有两个储户存分别向同一个账户存3000 元 xff0c 每次存1000 xff0c 存3次 每次存完打印账户余额 问题 xff1a 该程序是否有安全问题 xff0c 如果有 xff0c 如何解决 xff1f 提示 1 xf
  • java daytest

    1 为什么要有类的继承性 类的继承性可以减少代码冗余度 xff0c 提高代码复用性 xff0c 提高代码操作效率 2 继承的格式 xff08 语法 xff09 子类 extends 父类 3 子类继承父类后有哪些不同 子类范围大于父类 xf
  • 【rustdesk】rust入门及 windows 客户端尝试编译

    rustup 微软建议用vs code开发 官方faq 构建rustdesk 大神构建的经验 下载了64位的版本 vs code 插件 rust analyer 介绍 Better TOML 用于更好的展示 toml文件 Error Len
  • Java中创建线程主要有三种方式

    创建线程的方式及实现 Java中创建线程主要有三种方式 xff1a 一 继承Thread类创建线程类 xff08 1 xff09 定义Thread类的子类 xff0c 并重写该类的run方法 xff0c 该run方法的方法体就代表了线程要完
  • javaTest

    一 xff1a 简答题 xff08 5分 xff09 什么是java序列化 xff0c 如何实现java序列化 xff1f 答 xff1a 序列化就是一种用来处理对象流的机制 xff0c 所谓对象流也就是将对象的内容进行流化 可以对流化后的