ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

测试错题分析

2021-05-29 10:29:20  阅读:127  来源: 互联网

标签:分析 测试 int 正确 System 错题 线程 数组 答案


2021.05.28错题分析

第一题

(单选题)看下面的代码,写出输出的结果( )

public class Ex2 {
	public static void main(String[] args) {
			int[] a = {1,2,3,4,5};
			expand(a);
			changeArray(a);
			printArray(a);
	}
	public static void expand(int[] a){
			int[] newArray = new int[a.length * 2];
			System.arraycopy(a, 0, newArray, 0, a.length);
			a = newArray;
	}
	public static void changeArray(int[] a){
			a[0] = 10;
	}
	public static void printArray(int[] a){
			for(int i = 0; i<a.length; i++){
		    System.out.print(a[i] + "\t");
	}
	System.out.println();
	}
}

A.10 2 3 4 5
B.1 2 3 4 5
C.10 2 3 4 5 0 0 0 0 0
D.1 2 3 4 5 0 0 0 0 0
【正确答案】A
【解题思路】
System.arraycopy(a, 0, newArray, 0, a.length);
System.arraycopy的函数原型是:
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
其中:src表示源数组,srcPos表示源数组要复制的起始位置,dest表示目标数组,destPos表示目标数组的起始范围,length表示要复制的长度。
【拓展】
一、深度复制和浅度复制的区别
Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制。
二、System.arraycopy()方法实现复制
1、System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。

第二题

(单选题)当一个任务通过ThreadPoolExecutor的execute(Runnable)方法欲添加到线程池时,下面说法错误的是。( )。
A.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于 maximumPoolSize,建新的线程来处理被添加的任务。
B.如果此时线程池中的数量大于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
C.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务
D.如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
【正确答案】B
【答案解析】
应该是 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
【解题思路】
corePoolSize:
线程池的基本大小,即在没有任务需要执行的时候线程池的大小,并且只有在工作队列满了的情况下才会创建超出这个数量的线程。
maximumPoolSize:
线程池中允许的最大线程数,线程池中的当前线程数目不会超过该值。如果队列中任务已满,并且当前线程个数小于maximumPoolSize,那么会创建新的线程来执行任务。
poolSize:
线程池中当前线程的数量,当该值为0的时候,意味着没有任何线程,线程池会终止;同一时刻,poolSize不会超过maximumPoolSize。

第三题

给定如下JAVA程序代码片段,编译运行这段代码,结果是( )

HashMap map = new HashMap();
	map.put(“name”,null);
	map.put(“name”,”xiyangyang”);
	System.out.println(map.get(“name”));

A.null
B.nullxiyangyang
C.xiyangyang
D.运行时出现异常
【正确答案】C
【解题思路】
HashMap底层是一个Entry[ ]数组,当存放数据时,会根据hash算法来计算数据的存放位置
Entry[ ]数组保存<k,v>,k不可以重复,本题就是k重复,导致后添加的值覆盖了之前name对应的值。

第四题

(单选题)下列哪个关键字可以对对象加互斥锁( )
A.transient
B.synchronized
C.serialize
D.static
【正确答案】B
【解题思路】
synchronized:
同步代码块关键字,给对象加了一个互斥锁,当它锁定一个方法或者一个代码块的时候, 同一时刻最多只有一个线程执行这个段代码
volatile:
用来确保将变量的更新操作通知到其他线程, 当把变量声明为volatile类型后, 编译器与运行时都会注意到这个变量是共享的, 因此不会将该变量上的操作与其他内存操作一起重排序. 然而, 在访问volatile变量时, 不会执行加锁操作, 因此也就不会使执行线程阻塞, 因此, volatile变量是一种比synchronized关键字更轻量级的同步机制
serialize:
Java对象序列化为二进制文件

第五题

在JAVA的异常处理模型中,能单独和finally一起使用的块是( )
A.try
B.catch
C.throw
D.throws
【正确答案】A
【答案解析】
处理异常常用的两种方式:
1、try…catch(捕获处理机制);
2、throws(冒泡处理机制).
注意细节:使用try…catch块捕获时可以没有catch块,但当没用catch的时候必须得有finally块
try可以单独和catch或者finally一起使用

第六题

对于线程同步的特征理解错误的是?( )
A.每个对象都有多个的同步锁。
B.当一个线程开始执行同步代码块时,并不意味着必须以不间断的方式运行,进入同步代码块的线程可以执行Thread.sleep()或执行Thread.yield()方法,此时它并不释放对象锁,只是把运行的机会让给其他的线程。
C.在静态方法前面可以使用synchronized修饰符。
D.Synchronized声明不会被继承,如果一个用synchronized修饰的方法被子类覆盖,那么子类中这个方法不在保持同步,除非用synchronized修饰。
【正确答案】A
【答案解析】
Thread.sleep():
使当前线程暂停millis所指定的毫秒,转到执行其它线程。
Thread.yield():
暂停当前正在执行的线程对象,并执行其他线程。其中其他线程包括自己这个线程

第七题

以下程序段输出结果的是?

publicclassTest{ 
   publicstaticvoidmain(String args[]){
            Stringstr="ABCDE";
            str.substring(3);
            str.concat("XYZ");
     System.out.print(str);
    }
}

A.DE
B.DEXYZ
C.ABCDE
D.CDEXYZ
【正确答案】C
【答案解析】
字符串操作方法中的concat、slice、substring、substr都不会破坏原数组,会自动返回操作后新的数组。

第八题

下列输出结果是( )

int  a = 0;  
while ( a < 5 ) {
	switch(a){
	case 0 :
	case 3 : 
		a = a + 2;
	case 1 :
	case 2 :
		a = a + 3;
	default : 
		a = a + 5;
	} 
}  
System.out.print ( a );

A.0
B.5
C.10
D.其他
【正确答案】C
【答案解析】
使用switch-case结构的时候,如果没有使用break关键字进行终止的话,case将会有穿透效果,这种穿透一直持续到最后,包括default也执行;

第九题

关于封装下面介正确的是( )
A.封装隐藏实现细节
B.封装提高重用性
C.封装提高安全性
D.只有被private修饰才叫封装
【正确答案】A,B,C
【答案解析】D选项中,方法其实就是一种封装的思想,不是只有被private修饰才叫封装

第十题

Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类 描述正确的是?
A.ArrayList和LinkedList均实现了List接口
B.ArrayList的查询速度比LinkedList快
C.添加和删除元素时,ArrayList的表现更佳
D.HashMap实现Map接口,它允许任何引用类型的键和值对象,并允许将null用作键或值
【正确答案】A,B,D
【答案解析】
待补充。。。。。。。。。。。。。。。。。

第十一题

关于(static)以下哪些论述是正确的()
A.静态方法中不能调用非静态方法
B.可以在不产生任何一个对象的情况下调用静态方法
C.静态方法不能被覆盖
D.静态方法能够用类名直接调用
【正确答案】A,B,D

第十二题

对于异常(Exception),下列描述正确的是( )
A.异常的基类为 Exception,所有异常都必须直接或者间接继承它
B.异常可以用 try{…}catch(Exception e){…}来捕获并进行处理
C.如果某异常继承 RuntimeException,则该异常可以不被声明
D.异常可以随便处理,而不是抛给外层的程序进行处理
【正确答案】A,B,C
【答案解析】
异常的基类是Exception,异常的顶级父类是throwable

第十三题

在java中,关于数组描述正确的是( )
A.数组中的索引下标从1开始
B.存储在数组当中的数据都属于同一数据类型
C.通过数组名.length()能获得数组的长度
D.数组的最大索引下标是数组的长度减1
【正确答案】B,D
【答案解析】求数组中的最大长度是通过查看数组的length属性,而不是length方法,所以没有小括号

第十四题

在Java中,下列语句不能通过编译的有( )
A.String s = “join”+ 3;
B.int a = “join”+3;
C.int a =‘a’+ 5;
D.float f = 5 + 5.5F;
【正确答案】B
【答案解析】
被单引号(’ '引起来的是char类型的变量,由于数据在计算机内存储的时候是按照二进制存储的,所以每个字符在ASCII码表上都有对应的整型数据,可以互相转换

第十五题

下列有关线程的说法错误的是( )
A.启动一个线程是调用start()方法,是线程所代表的虚拟处理机处于可运行状态,这意味着线程此时就会立即运行
B.notify()方法可以确切的唤醒某个处于等待状态的线程
C.wait()方法可以使一个线程处于等待状态,但不会释放所持有对象的锁
D.sleep()方法使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法时,需要捕捉InterruptedException异常
【正确答案】A,B,C
【答案解析】
start()
启动一个线程
notify()
该方法唤醒在此对象监视器上等待的单个线程。如果有多个线程都在此对象上等待,则会随机选择唤醒其中一个线程,对其发出通知notify(),并使它等待获取该对象的对象锁。
wait():
强迫一个线程等待,必须在 synchronized 语句块中使用。当线程获取对象锁后,调用 wait() 主动释放对象锁,同时该线程休眠,直到其他线程调用 notify() 唤醒该线程,才继续获取对象锁,并执行
sleep()
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),

标签:分析,测试,int,正确,System,错题,线程,数组,答案
来源: https://blog.csdn.net/weixin_44772629/article/details/117378040

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有