java笔试题

一.选择题

1. 一个栈的输入序列为 1 2 3 4 5,下列不可能是栈的输出序列的是(A)

A. 5 4 1 3 2
B. 2 3 4 1 5
C. 1 5 4 3 2
D. 2 3 1 4 5

2. 不同用户对同一对象拥有不同访问权限或某个客户端不能直接操作某个对象,但又必须 与之有所互动,这种情况最好使用什么设计模式(B)

A. Bridge 模式
B. Proxy 模式
C. Adapter 模式
D. Facade 模式

3. Integer a=127,b=127,c=128,d=128;a == b 与 c == d 的结果分别是(A )。

A. true; false
B. true; true;
C. false; false;
D. false; true

注:int基础类最大只能为127,在它的对象类中-128到127的数保存在静态区,而大于127的数保存在对象区,所以直接比较,相当于比较他们的地址,所以就是不相等的,但是比较他们的内容确实一样的
4. 以下哪项陈述是正确的? (D)

A. 垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收
B. 垃圾回收机制保证了 JAVA 程序不会出现内存溢出
C. 进入”Dead”状态的线程将被垃圾回收器回收
D. CMS 垃圾回收器一次回收周期会有第 2 次 STW;
E. 以上都不对

注:CMS 回收器在一次 GC 过程中会有两次短暂的 STW,一次是 initial mark 阶段,一次是 remark 阶段。
5. 指出下列程序运行的结果 (A)


A. Wicresoft and SSA
B. Wicresoft and SOA
C. Wicrecend and SSA
D. Wicrecend and SOA

```bash
这是一个 Java 代码示例,它的输出结果是 "Wicresoft and SSA"。在 main 方法中,创建了一个 Example 对象 ex,并调用了它的 change 方		法,传入了 ex.str 和 ex.ch 作为参数。在 change 方法中,对 str 进行了重新赋值,但是由于 Java 中的字符串是不可变的,所以实际上并没有改	变原来的字符串。而对 ch 数组进行了修改,将第二个元素 'O' 改为了 'S'。因此,输出结果中的 ex.str 仍然是 "Wicresoft",而 ex.ch 变成了 "SSA"。
```
7. 二分查找需求查找的元素是(),查找时间复杂度为()? C

A. 有序的,O(n)
B. 无序的,O(n)
C. 有序的,O(log n)
D. 无序的,O(log n)
E. 有序的,O(1)
F. 无序的,O(1)

注:二分查找又叫折半查找,需求待查找的"序列有序"。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找过程。直到查找到了为止,否则序列中没有待查的关键字
String str = new string(“x”+“y”)最终创建几个对象 C

A .1
B .2
C. 3
D. 4

首先,“x”和“y”是两个字符串常量,它们放在常量池中。当使用字符串连接运算符“+”时,会创建一个新的string对象作为连接结果,
这个对象也会放在常量池中。因此,第一个string对象是“xy”,存在于常量池中。接着,使用new操作符创建了另一个string对象。由于该字符串并没有在常量池中找到相同的字符串对象(“xy”),因此系统将创建一个新的string对象,并将其放置在堆上。所以最终一共创建了3个string对象。
List list = new ArrayList(20); list集合扩容了几次 A

A.0
B.1
C.2
D.3

这个问题需要知道 arraylist 这个类的内部机制。在 java 中,当我们创建一个指定了初始容量的 arraylist 对象时,实际上底层会创建一个长度为 0 的数组,并且当第一次添加元素时,数组的容量会被扩充为 10。
当数组中元素数量超出容量时,arraylist 会进行扩容,新容量的大小是当前容量的 1.5 倍(即增加原来容量的 50%)。因此,根据本题提供的代码,当 list 集合中存储的元素数量超过 20 时,就开始扩容。具体扩容次数取决于往该集合添加的元素数量和默认的扩容因子大小。也就是说,无法确定 list 集合最终扩容了多少次。
List、Set、Map哪个继承自Collection接口,一下说法正确的是©

A. List Map
B. Set Map
C. List Set
D. List Map Set

list 和 set 都继承自 collection 接口,而 map 不是。因此选项 a、b、d 都不正确。
在 java 中,list 表示有序的、可重复的集合,set 表示无序的、不可重复的集合。所以 list 和 set 可以视为 collection 接口的两个基本子类。
map 表示映射表,它提供了将键映射到值的方法,存储的元素是键值对(key-value pairs),而不是单独的元素。因此,map 不属于 collection 接口的直接子类。
以下结构中,插入性能最高的是(B)

A. ArrayList
B. Linkedlist
C. HashSet
D. TreeSet

Arraylist:
优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。
缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。   
LinkedList:
优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。
缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
以下结构中,哪个具有同步功能(B)

A. HashMap
B. ConcurrentHashMap
C. WeakHashMap
D. TreeMap

A,C,D都线程不安全,B线程安全,所以具有同步功能
下面哪个流类属于面向字符的输入流(D)选择一项)

A. BufferedWriter
B. FileInputStream
C. ObjectInputStream
D. InputStreamReader

BufferedWriter:字符输出的缓冲流
FileInputStream:字节输入流
ObjectInputStream:对象输入流
java类库中,将信息写入内存的类是(B)

A. Java.io.FileOutputStream
B. java.ByteArrayOutputStream
C. java.io.BufferedOutputStream
D. java,.io.DataOutputStream

ACD都是io到文件
下面程序的运行结果(B)(选择一项)
public static void main(String[] args) {
	Thread t=new Thread(){
		public void run(){
			pong();
		}
	};
	t.run();
	System.out.println(“ping”);
}
static void pong(){
	System.out.println(“pong”);
}

A. pingpong
B. pongping
C. pingpong和pongping都有可能
D. 都不输出

**启动线程需要调用start()方法,而t.run()方法,则是使用对象名**
下列哪个方法可用于创建一个可运行的类( A,B)

A. public class X implements Runnable{public void run() {……}}
B. public class X extends Thread{public void run() {……}}
C. public class X extends Thread{public int run() {……}}
D. public class X implements Runnable{protected void run() {……}}

AB继承Thread和实现Runable接口
在Java多线程中,请用下面哪种方式不会使线程进入阻塞状态(D)

A. sleep()
B. Suspend()
C. wait()
D. yield()

yield会是线程进入就绪状态
关于sleep()和wait(),以下描述错误的一项是(D)

A. sleep是线程类(Thread)的方法,wait是Object类的方法
B. Sleep不释放对象锁,wait放弃对象锁
C. Sleep暂停线程、但监控状态任然保持,结束后会自动恢复
D. Wait后进入等待锁定池,只针对此对象发出notify方法后获取对象锁进入运行状态。

针对此对象的notify方法后获取对象锁并进入就绪状态,而不是运行状态。另外针对此对象的notifyAll方法后也可能获取对象锁并进入就绪状态,而不是运行状态
以下锁机机制中,不能保证线程安全的是(C)

A. Lock
B. Synchronized
C. Volatile

下面所述步骤中,是创建进程做必须的步骤是(BC)

A. 由调度程序为进程分配CPU
B. 建立一个进程控制块
C. 为进程分配内存
D. 为进程分配文件描述符

B. 建立一个进程控制块是创建进程必须的步骤。当操作系统决定为一个新的进程分配资源时,它会建立一个进程控制块(process control block,pcb),即该进程在系统中的代表。pcb 包含了该进程的所有信息,如进程状态、优先级、寄存器值、进程 id、父子进程关系等。其它选项中的任务可以在后续的进程调度和内存管理中完成,但是没有建立进程控制块则不能算成一个完整的进程。
以下结构中,哪个最适合当作stack使用(C)

A. LinkedHashMap
B. LinkedHashSet
C. LinkedList

Stack是先进后出的线性结构;所以链表比较合适;不需要散列表的数据结构
下列叙述中正确的是(D)

A. 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B. 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C. 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D. 在循环队列中元素的个数是由队头指针和队尾指针共同决定的

分析:循环队列中元素的个数是由队首指针和队尾指针共同决定的,元素的动态变化也是通过队首指针和队尾指针来反映的,当队首等于队尾时,队列为空。
Java中接口的修饰符可以为(D)(选择一项)

A.private
B.protected
C.final
D.abstract

接口中的访问权限修饰符只可以是public或default
接口中的所有的方法必须要实现类实现,所以不能使用final
接口中所有的方法默认都是abstract的,所以接口可以使用abstract修饰,但通常abstract可以省略不写
给定以下代码,程序将输出 (B)(选择一项)
class A {
	public A(){
	System.out.println(A);
	}
}
class B extends A{
	public B(){
	System.out.println(B);
	}
	public static void main(String[] args) {
	B b=new B();
	}
}

A.不能通过编译
B.通过编译,输出AB
C.通过编译,输出B
D.通过编译,输出A

在继承关系下,创建子类对象,先执行父类的构造方法,再执行子类的构造方法。
下列关于关键字的使用说法错误的是(D)

A.abstract不能与final并列修饰同一个类
B.abstract类中可以有private的成员
C.abstract方法必须在abstract类中
D.static方法能处理非static的属性

因为static得方法在装载class得时候首先完成,比 构造方法早,此时非static得属性和方法还没有完成初始化所以不能调用。
下列哪些语句关于内存回收的说法是正确的(B)

A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象

 A. 程序员不需要创建线程来释放内存.
 C. 也不允许程序员直接释放内存.
 D. 不一定在什么时刻执行垃圾回收.
选出合理的标识符(AC)

A._sysl_111
B.2 mail
C.$change
D.class

标识符的命令规范,可以包含字母、数字、下划线、$,不能以数字开头,不能是Java关键字
下列说法正确的是(CD)(选择多项)

A.java.lang.Cloneable是类
B.java.langRunnable是接口
C.Double对象在java.lang包中
D.Double a=1.0是正确的java语句

a. java.lang.cloneable是接口,不是类。
b. java.lang.runnable是接口,不是类。
c. double是java中用于表示双精度浮点数的一个类,它在java.lang包中。
d. 这个java语句是正确的,它创建了一个double类型的变量a,并将其初始化为1.0。
以下对继承的描述锚误的是 (A)

A Java中的继承允许一个子类继承多个父类
B. 父类更具有通用性,子类更具体
C. Java中的继承存在着传递性
D. 当实例化子类时会递归调用父类中的构造方法

二.问答题

1、ThreadLocal 的使用场景,使用时需要注意什么?
使用场景:
	1.对象跨层传递 2.线程间数据隔离。
	3.进行事务操作,用于储存线程事务信息。
	注:最常用存储用户Session等等
注意项:
1.ThreadLocal申明为private static final。
2.ThreadLocal使用后务必调用remove方法。
2、ThreadPoolExcutor 运行参数有哪些,平时使用 Executors 下封装过的线程池有什么风险吗?
参数:
	corePoolSize:核心池的大小,最多可执行几条线程
	maximumPoolSize:线程池最大线程数,线程池中最多能创建多少个线程;
	keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。
	unit:参数keepAliveTime的时间单位,例如:TimeUnit.SECONDS
	workQueue:一个阻塞队列,用来存储等待执行的任务,缓存没有执行的线程,一般来说,一般使用LinkedBlockingQueue和SynchronousQueue。
	threadFactory:用于设置创建线程的工厂,可实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。
弊端:
	FixedThreadPool 和 SingleThreadExecutor:允许请求的队列长度过大,可能堆积大量的请求,从而导致内存溢出。
	CachedThreadPool 和 ScheduledThreadPool:允许创建的线程数量过大可能会创建大量线程,从而导致内存溢出。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。 ① A.操作对象   B.计算方法  C.逻辑结构  D.数据映象 ② A.存储结构 B.关系 C.运算 D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是① 的有限集合,R是D上的② 有限集合。 ① A.算法 B.数据元素 C.数据操作 D.数据对象 ② A.操作 B.映象 C.存储 D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成 。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4. 算法分析的目的是① ,算法分析的两个主要方面是② 。 ① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是① ,它必具备输入、输出和② 等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括 、 、 和 四种类型,树形结构和图形结构合称为 。 2. 在线性结构中,第一个结点 前驱结点,其余每个结点有且只有 个前驱结点;最后一个结点 后续结点,其余每个结点有且只有 个后续结点。 3. 在树形结构中,树根结点没有 结点,其余每个结点有且只有 个直接前驱结点,叶子结点没有 结点,其余每个结点的直接后续结点可以 。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以 。 5. 线性结构中元素之间存在 关系,树形结构中元素之间存在 关系,图形结构中元素之间存在 关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 for (i=0;i<n;i++) for (j=0;j<n; j++) A[i][j]=0; 8. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 for (i=0;i<n;i++) for (j=0; j<i; j++) A[i][j]=0; 9. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 s=0; for (i=0;i<n;i++) for (j=0;j<n;j++) for (k=0;k<n;k++) s=s+B[i][j][k]; sum=s; 10. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。 int i=0,s=0; while (s<n) { i++; s+=i; //s=s+i } 11. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。 i=1; while (i<=n) i=i*2;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值