JAVA SE / 核心API / 面试练习基础题

1.1注释

1、(单选题)下面是文档注释的是

A./** */

B.//

C./* */

D.//*/

 

【正确答案】A

【答案解析】此题目考查的是注释的了解,A选项是文档注释,BC是普通的注释,D选项格式错误 因此A是正确的选项。

 

2、(多选题)有关javadoc命令生成文档叙述正确的是

A.如果是一个包命令为javadoc –d docDir nameOfPackage

B.如果是一个包命令为javadoc –d docDir nameOfPackages

C.如果文件在默认包中命令为javadoc –d docDir *.java

D.如果文件在默认包中命令为javadoc –d docDir *.javac

 

【正确答案】A,C

【答案解析】此题目考查的是javadoc命令生成文档的了解,BD语法错误,AC均正确 因此AC是正确的选项。

3、(多选题)下列文档注释规范说明正确的是

A.@author Lee Boynton代表作者

B.@version 1.2.1代表版本号

C.@see import java.util.Arrays;代表参见

D.@since JDK1.8 代表JDK版本

 

【正确答案】A,B,C,D

【答案解析】此题目考查的是文档注释的规范,以上选项均正确 因此ABCD是正确的选项。

2.2字符串操作

1、(单选题)指出下列程序运行的结果( )

public class Example{ 

    String str=new String("good");
    char[]ch={'a','b','c'};

  public static void main(String args[]){

     Example ex=new Example(); 
     ex.change(ex.str,ex.ch); 
     System.out.print(ex.str+" and ");
     System.out.print(ex.ch); 

} 

    public void change(String str,char ch[]){ 

        str="test ok"; 
        ch[0]='g'; 
    }
}

 

 

A.good and abc 

B.good and gbc 

C.test ok and abc

D.test ok and gbc 

 

 

【正确答案】B

【答案解析】引用类型变量保存的是对象的地址,一个对象可以同时被多个变量所引用,并且操作,一个变量只能引用一个对象,对一个对象进行操作。

2、(单选题)正则表达式"\d+\.?\d{1,2}"在匹配下列字符串时结果失败的是( )

A."12.5" 

B."1.025" 

C."0125" 

D."125.00" 

 

 

【正确答案】B

【答案解析】\d+ 表示可以出现 1 次或是 n 次数字 \. ? 表示"."可以出现 1 次,也可以不出现 \d{1,2} 表示最少出现 1 次 最多出现 2 次数字

3、(单选题)以下代码的输出结果是()

public class Test { 
    public static void main(String[] args) { 
        String str = NULL; 
        System.out.println(str); 
    } 
}

A.NULL 

B.代码不能通过编译 

C.没有输出结果 

D.运行时出错 

 

【正确答案】B

【答案解析】String类型变量取值应为小写null或其他用""双引号括起来的内容

4、(单选题)下面代码的运行结果为:()

public class foo{ 
    public static void main (String[] args){ 
        String s; 
        System.out.println("s=" + s); 
    } 
}

A.代码得到编译,并输出“s=” 

B.代码得到编译,并输出“s=null” 

C.由于String s没有初始化,代码不能编译通过 

D.代码得到编译,但捕获到 NullPointException异常 

 

【正确答案】C

【答案解析】Java中所有定义的基本类型或对象都必须初始化才能输出值。

5、(单选题)关于 java.lang.String 类,以下描述正确的一项是( )

A.String 类是 final 类故不可以继承 

B.String 类是 final 类故可以继承 

C.String 类不是 final 类故不可以继承 

D.String 类不是 final 类故可以继承 

 

【正确答案】A

【答案解析】String 类是 final 的,在 java 中 final 修饰类的不能被继承。包装类都是以final修饰的。

为什么String类设计为final?其他包装类呢?

转载自作者:Shengming Zeng 

链接:https://www.cnblogs.com/zengming/p/9367088.html  

6、(单选题)下面代码的打印结果是()

String s1="abc"; 
String s2="abc"; 
System.out.println(s1==s2); 
System.out.println(s1.equals(s2));

A.true,true

B.true,false

C.false, false

D.false,ture

 

【正确答案】A

【答案解析】此题目考查的是对于java常量池的理解, java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。根据代码顺序,先在常量池中创建”abc“,并指向s1,而后在创建s2时,由于常量池中已经存在”abc“,只需指向s2就可以,而不需要再创建。”==”在这里比较的是对象引用,故结果为”true”,String 中的equals方法经过重写后操作为“比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true”。很明显,s1和s2的字符序列相同,故而结果为true 因此A是正确的选项。

7、(单选题)以下代码输出结果是()

public class Test { 
    public static void main (String [] args) { 
        String foo = "blue"; 
        String bar = foo; 
        foo = "green"; 
        System.out.println(bar); 
    } 
}

A.运行时出现异常 

B.代码会编译出错 

C.输出结果为null 

D.输出结果为"blue" 

 

【正确答案】D

【答案解析】采用 String foo = "blue"定义方式定义的字符串放在字符串池中,通过 String bar = foo;他们指向了同一地址空间,就是同一个池子,当执行 foo = "green"; foo 指向新的地址空间。

8、(单选题)以下代码编译运行的结果是()。

public class Base{ 
    private void test() { 
        String aStr = "? One? "; 
        String bStr = aStr; 
        aStr.toUpperCase(); 
        aStr.trim(); 
        System.out.println("[" + aStr + "," + bStr + "]"); 
    } 
    public  static void main(String[] a) { 
        new Base().test(); 
    } 
}

A.[ONE,?One?] 

B.[? One? ,One ] 

C.[ONE,ONE] 

D.[? One? ,? One? ] 

 

【正确答案】D

【答案解析】通过 String bStr = aStr;这句代码使 bStr 和 aStr 指向同一个地址空间,所以最后 aStr 和 bStr 的结 果应该是一样,String 类是定长字符串,调用一个字符串的方法以后会形成一个新的字符串。 在调用toUpperCase()和trim()方法时都会返回新的字符串对象, 而题目中在调用完这两个方法后并没有使用变量接收方法所返回的新字符串对象,而aStr和bStr所引用的仍然是原来的字符串对象。 所以选项D正确。

9、(单选题)已知如下代码: String s = "Example"; 下列选项中可以编译通过的是( )

A.s>>>=3; 

B.s[3]= "X"; 

C.int i = s.length; 

D.s = s +10; 

 

【正确答案】D

【答案解析】A 移位运算需要整数类型才可以; B s不是数组,数组才有length属性,字符串只有length()方法; C String类有length()方法而不是属性; D 属于字符串拼接操作。

10、(单选题)Java 语言中,String类的charAt ()方法返回的类型是( )

 

A.int

B.char

C.double

D.float

 

【正确答案】B

【答案解析】此题目考查的是String类的charAt ()方法返回的类型,返回值类型是char类型 因此B是正确的选项。

多选题 (共计 1 题,总计 2分)

11、(多选题)String s = new String("hello"); String t = new String("hello"); char c [ ] = {'h', 'e', 'l', 'l', 'o'}; 下列哪些表达式返回 true ( )

As.equals(t); 

B.t.equals(c); 

C.s==t; 

D.t.equals (new String("hello")); 

 

【正确答案】A,D

【答案解析】String类的equals方法已经覆盖了Object类的equals方法,比较的是两个字符串的内容是否相等,双等号比较的是两个对象的内存地址是否相等。

2.3 Object

1、(多选题)以下关于hashCode说法正确的是( )

A.两个对象如果hashCode值不同,则两个对象可能相同。 

B.两个对象如果hashCode值相同,则两个对象必定相同。

C.两个对象如果hashCode值相同,则两个对象可能相同。 

D.两个对象如果hashCode值不同,则两个对象必定不同。 

 

【正确答案】C,D

【答案解析】先通过 hashcode 来判断某个对象是否存放某个桶里,但这个桶里可能有很多对象,那么我们就需要再通过 equals 来在这个桶里找到我们要的对象。

2.4 包装类

1、(单选题)下面代码的执行结果是( )

import java.util.*; 
public class ShortSet{ 
    public static void main(String args[]){ 
        Set s=new HashSet(); 
        for(Short i=0;i<100;i++) { 
            s.add(i); 
            s.remove(i-1); 
        } 
    System.out.println(s.size()); 
    } 
}

A.1 

B.100 

C.Throws Exception. 

D.None of the Above. 

 

【正确答案】B

【答案解析】i是Short类型i-1是int类型,其包装类为 Integer所以s.remove(i-1);不能移除Set集合中Shor类型对象。

2.5集合框架

1、(单选题)以下哪个不是Collection的子接口?( )。

A.List 

B.Set 

C.Map 

D.SortedSet 

 

【正确答案】C

【答案解析】Map与Collection是两个不同的接口,没有继承关系。

2、(单选题)请选出下列正确的答案( )

1. import java.util.*; 
2. public class WrappedString { 
3. private String s; 
4. public WrappedString(String s) { this.s = s; } 
5. public static void main(String[] args) { 
6. HashSet hs = new HashSet(); 
7. WrappedString ws1 = new WrappedString("aardvark"); 
8. WrappedString ws2 = new WrappedString("aardvark"); 
9. String s1 = new String("aardvark"); 
10. String s2 = new String("aardvark"); 
11. hs.add(ws1); hs.add(ws2); hs.add(s1); hs.add(s2); 
12. System.out.println(hs.size()); } }

A.1 

B.4 

C.2 

D.3 

 

【正确答案】D

【答案解析】HashSet集合里面存储的元素是无序的且不重复的,本题中的是s1和s2两个对象在底层判断时返回的相关信息被视为相同元素,所以最终结果集合中值有3个元素。

3、(单选题)关于以下代码描述正确的有( )

 public class Cats {
     public static void main(String args[]) {
        List cats = new ArrayList(); 
        cats.add(new Cat()); 
        Animal b = new Animal(); 
        Cat a = null; 
        if(b instanceof Animal) a = (Cat)b; 
        if(a != null) cats.add(a); 
        System.out.println(cats.size() +"cats"); 
    } 
} 
class Animal {} 
class Cat extends Animal{}

A.编译失败 

B.输出1 cats 

C.输出2 cats 

D.运行时抛出异常 

 

【正确答案】D

【答案解析】a = (Cat)b;处抛出java.lang.ClassCastException异常,b为Animal类型,并且具体引用对象是Animal对象,不能强转成Cat类型。

4、(单选题)关于集合类以下说法错误的是( )

A.Vector是线程安全的 

B.ArrayList是线程安全的 

C.HashMap中可以存放null值作为key 

D.Set中存放的对象是唯一的 

 

【正确答案】B

【答案解析】ArrayList不是线程安全的

5、(单选题)欲构造 ArrayList 类的一个实例,此类继承了 List 接口,下列哪个方法是正确的( )

A.ArrayList myList = new Object(); 

B.List myList = new ArrayList(); 

C.ArraylList myList = new List(); 

D.List myList = new List(); 

 

【正确答案】B

【答案解析】接口不能new,Object对象不能直接转型成ArrayList类型。

6、(单选题)下面哪个是链式存储并快速顺序(不需要随机访问)访问的集合类型( )

A.java.util.LinkedList 

B.java.util.Queue 

C.java.util.ArrayList 

D.java.util.LinearList 

 

【正确答案】B

【答案解析】请参考集合队列的结构特点及元素的存取

7、(单选题)以下哪个不是Collection的子接口?( )。

A.List 

B.Set 

C.Map 

D.SortedSet 

 

【正确答案】C

【答案解析】Map与Collection是两个不同的接口,没有继承关系。

8、(单选题)Java的集合框架中重要的接口java.util.Collection定义了许多方法。选项中哪个方法不是Collection接口所定义的( )

A.int size() 

B.boolean containsAll(Collection c) 

C.int compareTo(Object obj) 

D.boolean equals(Object o); 

 

【正确答案】C

【答案解析】请参考api文档手册

9、(单选题)如果要保证元素唯一,且按照存放顺序读取,可以选用( )

A.Map 

B.Set 

C.LinkedList 

D.LinkedHashSet 

 

【正确答案】D

【答案解析】请参考集合结构特点及元素存取,map遍历是无序的,set实现原理是collection接口,是一个不重复的集合,属于map类,只不过只存key值。

多选题 (共计 3 题,总计 6分)

10、(多选题)以下集合对象中哪几个是线程安全的()

A.LinkedList 

B.ArrayList 

C.Vector 

D.Hashtable 

 

【正确答案】C,D

【答案解析】Collection 是对象集合, Collection 有两个子接口 List 和 Set, List 可以通过下标 (1,2..) 来取得值,值可以重复,而 Set 只能通过游标来取值,并且值是不能重复的 ArrayList , Vector , LinkedList 是 List 的实现类 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的 Map 是键值对集合 HashTable 和 HashMap 是 Map 的实现类 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 值

线程安全与不安全的集合总结-https://www.cnblogs.com/huangdabing/p/9249233.html(转载自博客)

11、(多选题)链表具有的特点是( )

 

A.不必事先估计存储空间 

B.可随机访问任一元素 

C.插入删除不需要移动元素 

D.所需空间与线性表长度成正比 

 

【正确答案】A,C,D

【答案解析】A. 采用动态存储分配,不会造成内存浪费和溢出。 B. 不能随机访问,查找时要从头指针开始遍历 C. 插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素 D. 需要用额外空间存储线性表的关系,存储密度小

12、(多选题)关于 Java 语言,下列描述正确的是( )(此题不严谨)

A.switch不能够作用在String类型上 

B.List, Set, Map都继承自Collection接口 

C.Java语言支持goto语句 

D.GC是垃圾收集器,程序员不用担心内存管理 

 

【正确答案】A,D

【答案解析】B. Map没有继承Collection接口; C. java不支持goto语句。

 

JAVA面试题:SWITCH能否作用在byte、long、string上?
switch可作用于char, byte ,short ,int和对应的包装类
switch不可作用于long double float boolean,包括他们的包装类
jdk1.7中switch语句可以支持String。但不建议用String,效率不高,编译中最终会转换成hashcode,实质上还是编译成了整型,case分支内又做了字符串比较。
switch中可以是枚举类型,枚举类型(被static final修饰)

 

2.6 MAP

1、(单选题)关于集合类以下说法错误的是( )

A.Vector是线程安全的 

B.ArrayList是线程安全的 

C.HashMap中可以存放null值作为key 

D.Set中存放的对象是唯一的 

 

【正确答案】B

【答案解析】ArrayList不是线程安全的

2、(单选题)HashSet子类依靠( )方法区分重复元素。

A.toString(),equals() 

B.clone(),equals() 

C.hashCode(),equals() 

D.getClass(),clone() 

 

【正确答案】C

【答案解析】HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

3、(单选题)以下哪个不是Collection的子接口?( )。

A.List 

B.Set 

C.Map 

D.SortedSet 

 

【正确答案】C

【答案解析】Map与Collection是两个不同的接口,没有继承关系。

 

2.7 File

1、(单选题)在Java中,"目录"被看作是()

 

A.文件 

B.流 

C.数据 

D接口 

 

【正确答案】A

【答案解析】目录在Java中作为一种特殊文件,即文件名的列表,通过类File所提供的方法,可得到文件或目录的描述信息(包括名字、路径、长度、可读、可写等),也可以生成新文件、目录、修改文件和目录,查询文件属性,重命名文件或者删除文件。

 

2.8RandomAccessFile

1、(单选题)RandomAccessFile是java.io包中的一个兼有输入输出功能的类。以下说法正确的是()

 

A.可以选择文件中的任意位置开始操作 

B.必须从文件中的终止位置开始操作 

C.必须从文件中的起始位置开始操作 

D.必须从文件中的某个固定位置开始操作 

 

【正确答案】A

【答案解析】文件操作中经常需要的是随机访问,Java中的RandomAccessFile类提供了随意访问文件的功能,它继承了Object类,用DataInput和DataOutput接口来实现。接口中定义了从流中读/写基本类型的数据方法,因此也可以随意读/写数据文件的记录。

2.9 I/O

1、(单选题)计算机中的流是()

A.流动的字节 

B.流动的对象 

C.流动的文件 

D.流动的数据缓冲区 

 

【正确答案】D

【答案解析】流,最早从C语言中引入的。其可以看成是一个流动的数据缓冲区。数据从数据源方向经过缓冲区流向数据的目的地。在传送的过程中,其传送方式是串行的。在Java中的java.io包中定义了Java中常见流的接口与类。其中包括两个最基本的流的抽象类,它们分别是OutputStream与InputStream。其余的流都分别从这两个基本类中继承而来。

4、(单选题)下面哪个流类属于面向字符的输入流( )

 

A.ByteArrayInputStream 

B.FileInputStream 

C.ObjectInputStream 

D.InputStreamReader 

 

【正确答案】D

【答案解析】A、B、C 3个都是字节流

2.10 异常

1、(单选题)下列不是异常体系中Exception类包括的异常类的有( )

 

A.Error 

B.NullPointerException 

C.SQLException 

D.InputMismathException 

 

【正确答案】A

【答案解析】一个程序在编译和运行时出现的错误我们统一称之为异常; 一个合理的应用程序不能截获的严重的问题属于错误。

2、(单选题)下列选项中可以填写在'Point X'处的是() public class ExceptionTest { class TestException extends Exception {} public void runTest () throws TestException {} public void test () /* Point X*/{ runTest (); } }

 

A.throws TestException 

B.catch (Exception e) 

C.throws RuntimeException. 

D.catch (TestException e). 

 

【正确答案】A

【答案解析】方法上应使用 throws 抛出异常,test()方法中执行调用了runTest()方法,而runTest()方法抛出的是TestException异常,所以A符合要求。

3、(单选题)下面关于java.lang.Exception类的说法正确的是()

 

A.继承自Throwable  

B.继承自Serialable 

C.继承自Error 

D.以上说法均不正确 

 

【正确答案】A

【答案解析】Java异常的基类为java.lang.Throwable,java.lang.Error和java.lang.Exception继承 Throwable,RuntimeException和其它的Exception等继承Exception。

4、(单选题)下列哪种异常是检查型异常,需要在编写程序时声明( )

A.NullPointerException 

B.ClassCastException 

C.FileNotFoundException 

D.IndexOutOfBoundsException 

 

【正确答案】C

【答案解析】A、B、D 3个异常都属于运行时异常5、(单选题)getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果()

public void getCustomerInfo() { 
    try { // do something that may cause an Exception 
        } catch (java.io.FileNotFoundException ex) { 
            System.out.print("FileNotFoundException!"); 
        } catch (java.io.IOException ex) { System.out.print("IOException!"); 
        } catch (java.lang.Exception ex) { System.out.print("Exception!");
    }     
}

A.IOException! 

B.IOException!Exception! 

C.FileNotFoundException!IOException! 

D.FileNotFoundException!IOException!Exception! 

 

【正确答案】A

【答案解析】考察多个catch语句块的执行顺序。当用多个catch语句时,catch语句块在次序上有先后之分。从最前面的catch语句块依次先后进行异常类型匹配,这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch语句块将是不可到达的语句。所以,一般将父类异常类即Exception老大放在catch语句块的最后一个。

多选题 (共计 2 题,总计 4分)

6、(多选题)关于异常(Exception),下列描述正确的是( )

 

A.异常的基类为 Exception,所有异常都必须直接或者间接继承它 

B.异常可以用 try{ . . .}catch(Exception e){ . . .}来捕获并进行处理 

C.如果某异常继承 RuntimeException,则该异常可以不被声明 

D.异常可以随便处理,而不是抛给外层的程序进行处理 

 

【正确答案】A,B,C

【答案解析】异常可以在自己方法内部处理,当自己无法解决时,需要抛出给调用者来处理。

7、(多选题)final、finally、finalize三个关键字的区别是()

 

A.final是修饰符(关键字)可以修饰类、方法、变量  

B.finally在异常处理的时候使用,提供finally块来执行任何清除操作 

C.finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作  

D.finally和finalize一样都是用异常处理的方法  

 

【正确答案】A,B,C

【答案解析】finally是关键字不是方法

2.11线程

1、(单选题)以下哪个方法用于定义线程的执行体( )
A.start() 
B.init() 
C.run() 
D.main() 

 


【正确答案】C
【答案解析】run 方法是线程的执行体

 


2、(单选题)下列程序的功能是在控制台上,每隔1秒钟显示字符串"Hello",能够填写在程序中下划线位置,使程序完整,并能够正确运行的语句是( )
public class Test implements Runnable{
  public static void main(String[] args){
    Test t=new Test();
    Thread tt=new Thread(t);
    tt.start();
  }
  public void run(){
    for(;;){
      try{
        __________
      }catch(_________  e ){}
      System.out.println(“Hello”);
    } 
  }
}


A.Thread. sleep (1000)  InterruptedException 
B.sleep (1000)  InterruptedException 
C.t. sleep (1000)  InterruptedException 
D.Thread. sleep (1000)  RuntimeException 

 


【正确答案】A
【答案解析】睡眠需要Thread的sleep方法,传入参数为一个long类型毫秒值,本题中要求间隔时间为1秒,所以需要传入1000毫秒作为参数。打断睡眠程序会抛出InterruptedException异常。

 


3、(单选题)请选出正确的一项( )
1. public class ThreadTest {
2.   public static void main (String[] args) {
3.     new Thread(new Runnable() {
4.       public void run() {
5.         System.out.print("bar");
6.       }}).start();
7.   }
8. }
A.Compilation fails. 
B.An exception is thrown at runtime. 
C.The code executes normally, but nothing prints. 
D.The code executes normally and prints "bar". 

 


【正确答案】D
【答案解析】此段代码使用的是匿名类的写法,线程执行时,所执行的内容是其执行计划中的内容,也就是run方法中所定义的逻辑。

 


4、(单选题)在主线程中启动新线程后,新线程处于就绪状态,那么新线程对象中的哪个方法被系统执行时,视为已经进入执行新线程的内容( )
A.public void start() 
B.public void run() 
C.public static void main(Stirng[] args) 
D.public void runnable() 

 

 


【正确答案】B
【答案解析】线程的执行计划是在run方法中的。

 


5、(单选题)代码执行后输出的结果是( )


public class Z{
  public static void main(String[] args){
    new Z();
  }
  Z(){
    Z alias1 = this;
    Z alias2 = this;
    synchronized (alias1){
      try{
        alias2.wait();
        System.out.println("DONE WAITING");
      } catch (InterruptedException e) {
        System.out.println("IN TEEEUPTED");
      } catch (Exception e) {
        System.out.println("OTHER EXCEPTION");
      } finally {
        System.out.println("FINALLY");
      }
    }
    System.out.println("ALL DONE");
  }
}


A.The application compiles but doesn't print anything. 
B.The application compiles and print "DONE WAITING". 
C.The application compiles and print "FINALLY". 
D.The application compiles and print "ALL DONE". 

 


【正确答案】A
【答案解析】wait方法是objet方法和sleep方法很类似,都是处于等待状态,但是不同的是,wait方法执行后会释放锁对象,所以此段代码中wait方法后面的语句不会被执行,而是一直处于等待状态中。

 


6、(单选题)关于线程设计,下列描述正确的是( )
A.线程对象必须实现 Runnable 接口 
B.启动一个线程直接调用线程对象的 run()方法 
C.Java 提供对多线程同步提供语言级的支持 
D.一个线程可以包含多个进程 

 

 


【正确答案】C
【答案解析】A. 线程对象也可以继承Thread B. 启动线程需要调用start()方法 D. 一个进程可以包含多个线程

 

 


7、(单选题)以下哪一个是错误的( )
A.public synchronized void go() { /* code here */ } 
B.private synchronized(this) void go() { /* code here */ } 
C.void go() {
  Object o = new Object();
  synchronized(o) { /* code here */ }

D.synchronized(Object.class) { /* code here */ } 

 


【正确答案】B
【答案解析】如果在方法声明时给该方法加锁,只需要使用synchronized关键字来修饰该方法即可,不需要传入任何对象,只有在方法内部的某些代码块中才需要传入对象参数。

 


8、(单选题)关于 sleep()和 wait(),以下描述错误的一项是( )
A.sleep 是线程类(Thread)的方法,wait 是 Object 类的方法 
B.sleep 不释放对象锁,wait 放弃对象锁 
C.sleep 暂停线程、但监控状态仍然保持,结束后会自动恢复 
D.wait 后进入等待锁定池,只有针对此对象发出 notify 方法后获得对象锁进入运行状态 

 

 


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

 

 


9、(单选题)Java语言中,负责并发管理的机制是() 
A.垃圾回收 
B.虚拟机  
C.代码安全 
D.多线程 

 


【正确答案】D
【答案解析】Java语言中,负责并发管理的机制是多线程

 


10、(单选题)线程生命周期中正确的状态是()
A.新建状态、运行状态和终止状态  
B.新建状态、运行状态、阻塞状态和终止状态 
C.新建状态、可运行状态、运行状态、阻塞状态和终止状态 
D.新建状态、可运行状态、运行状态、恢复状态和终止状态 

 


【正确答案】C
【答案解析】线程生命周期:新建状态、可运行状态、运行状态、阻塞状态和终止状态

 


多选题 (共计 2 题,总计 4分)
11、(多选题)下面能让线程停止执行的有( )
A.sleep(); 
B.stop(); 
C.notify(); 
D.wait(); 

 


【正确答案】A,B,D
【答案解析】sleep:导致此线程暂停执行指定时间; stop:这个方法将终止所有未结束的方法,包括 run 方法; wait:当前正在被服务的线程需要睡一会,醒来后继续被服务。


12、(多选题)有关线程的哪些叙述是对的( )
A.一旦一个线程被创建,它就立即开始运行。 
B.使用 start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。 
C.当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。 
D.一个线程可能因为不同的原因停止并进入就绪状态。 

 


【正确答案】B,D
【答案解析】线程被创建后不可能立即开始运行。 不同优先级的线程间是抢先式的,同级线程间是轮转式的。 即使线程因为抢先而停止也不一定就进入可运行队列的前面。 而同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。

 

XML

单选题 (共计 8 题,总计 16分)
1、(单选题)XML的命名规则中说法正确的是( )
A.可以包含字母、数字、以及其他字符 
B.名字可以任何字母、数字或符号开始 
C.名字没有任何限制 
D.以上均不正确 

 

 

【正确答案】A
【答案解析】XML 元素必须遵循以下命名规则: 名称可以含字母、数字以及其他的字符; 名称不能以数字或者标点符号开始; 名称不能以字符 "xml"(或者 XML、Xml)开始; 名称不能包含空格; 可使用任何名称,没有保留的字词。

 


2、(单选题)

称呼 CDATA #IMPLIED 
姓名 CDATA #REQUIRED 
职位 CDATA #REQUIRED>

关于上述DTD 定义的描述正确的是( )
A.Customer 元素能包含子元素,并且能为空 
B.Customer 元素能包含文本,并且能为空 
C.Customer 元素不能包含文本,也不能包含子元素 
D.Customer 元素的所有实例的“称呼”属性必须有值,不能为空 

 

 

【正确答案】C
【答案解析】EMPTY 表示元素不能包含文本,也不能包含子元素; #IMPLIED 属性可以没有值; #REQUIRED 属性必须有值。

 

3、(单选题)属性()用来表示XML文档所使用的字符集。
A.version 
B.encoding 
C.standalone 
D.type 

 

 

【正确答案】B
【答案解析】定义xml文档时,通过encoding属性来指定字符集

 

4、(单选题)实体引用是一种合法的XML名字,前面带有一个符号(   )
A.& 
B.; 
C.+ 
D.? 


【正确答案】A
【答案解析】xml文档中实体符号是用&作为开头的

 

5、(单选题)XML( )提供了一种避免元素命名冲突的方法。


A.命名空间 
B.DTD 
C.XSD 
D.XSL 

 


【正确答案】A
【答案解析】定义xml文档时通过命名空间来避免重复的命名。

 


6、(单选题)在 XML 中用于注释的符号是( )
A. 
B. 
C.<%    %> 
D. 


【正确答案】A
【答案解析】XML文档注释符号是

 

7、(单选题)下列可以解析XML的有( )
A.CSS 
B.DTD 
C.SAX 
D.XSL 

 

 


【正确答案】C
【答案解析】java 解析 xml 文件四种方式:SAX、DOM、
JDOM、DOM4J

 

 

8、(单选题)Schema与DTD的相同之处有( )
A.基于XML语法 
B.支持命名空间 
C.可扩展 
D.对XML文档结构进行验证 

 


【正确答案】D
【答案解析】DTD不遵循XML语法 DTD不支持命名空间 DTD不可扩展

 


多选题 (共计 4 题,总计 8分)
9、(多选题)以下声明正确的是( )
A. 
B. 
C. 
D.<%xml-stylesheet type="txt/css" href="abc.css"%> 

 


【正确答案】B,C
【答案解析】单引号,双引号都可以使用在属性上。

 

10、(多选题)在XML中,下列关于DOM的叙述是正确的(

A.DOM是独立于开发语言和平台的,因此使用VisnalBasic、Java、Visual C++等开发工具使用的DOM编程API是一致的 
B.XML文档通过load方法被装载进内存后,在内存中形成一个DOM文档对象模型树 
C.通过DOM  API,软件开发人员可以控制XML文档的结构和内容 

D.通过DOM在XML文档中只能按照顺序方式导航 

 


【正确答案】A,B,C
【答案解析】选项D错误 SAX解析文档需要按照顺序 DOM可以随意


11、(多选题)以下说法符合xml语法规则的是( )
A.标记头和标记末的大小写一致 
B.元素之间要正确的嵌套 
C.结束标记可有可无 
D.每个XML文档只能有一个根元素 

 


【正确答案】A,B,D
【答案解析】XML语法规则: 必须有XML声明语句; 是否有DTD文件; 注意大小写; 给属性值加引号; 所有的标识必须有相应的结束标识; 所有的空标识也必须被关闭.

 

12、(多选题)下列选项中,哪一个是预定义实体?( )
A.< 
B.&left; 
C.> 
D.&right; 

 


【正确答案】A,C
【答案解析】表示>号

 

二进制


7、(单选题)计算~36的十进制结果是()
A.36 
B.-36 
C.37 
D.-37 

【正确答案】D
【答案解析】~属于二进制位运算符 代表非的意思计算方法为将每一位上0变为1  1变为0本题中要计算的是十进制数36的非运算值,首先先将36(十)转为0010 0100(二) 然后进行运算得到结果1101 1011(二)然后再将此二进制数转为十进制,由于我们这里计算的是8二进制数 最高位为第8位此时最高位数字为1 是一个负数要想算出十进制负数的值可以进行取反+1运算先算出对应的十进制正数的值
即1101 1011取反+1后变为 0010 0101 则对应的十进制数为37所以最终~36的结果应该是-37答案为D

8、(单选题)在位运算中,操作数每右移一位,其结果相当于()

A.操作数乘以2 
B.操作数除以2 
C.操作数除以4 
D.操作数乘以4 

 

【正确答案】B
【答案解析】二进制数左移一位相当于数位上的数值乘以2,右移一位相当于数位上的数值除以2,因此B正确。

 

 

9、(单选题)阅读下列代码 :
public class Test{  
public static void main(String args[]){  
System.out.println(89 >>1); 

}   
其运行结果是 ()
A.44 
B.45 
C.88 
D.90 


【正确答案】A
【答案解析】89>>1相当于89X(1/2)取整。


10、(单选题)关于运算符>>和>>>描述正确的是( )
A.>>执行移动 
B.>>执行翻转 
C.>>执行有符号右移,>>>执行无符号右移 
D.>>执行无符号右移,>>>执行有符号右移 

 


【正确答案】C
【答案解析】java中,>>为有符号右移,>>>为无符号右移,<<为有符号左移,不存在无符号左移运算符。


多选题 (共计 1 题,总计 2分)
11、(多选题)已知如下代码片段:
1. public class test {
2.  public static void main (String args[]) {
3.    int i = 0xFFFFFFF1;
4.    int j = ~i;
5.
6.  }
7.}
当程序运行到第5行时, i 和 j 的值分别为多少( )
A.–15 
B.0 
C.1 
D.14 

 


【正确答案】A,D
【答案解析】0xFFFFFFF1为十六进制数,其转为二进制数为
11111111 11111111 11111111 11110001 ,所对应的十进制数为-15 ,"~"符号为取反操作,即将0、1对换,结果为
00000000 00000000 00000000 00001110 ,该二进制数转为十进制数结果为14 。

 

API

1、(多选题)下列代码中,哪一项可以编译通过且正常运行出结果( )

A.int foo = (int) Math.max(bar); 

B.int foo = (int) Math.min(bar); 

C.int foo = (int) Math.abs(bar); 

D.int foo = (int) Math.ceil(bar); 

 

【正确答案】C,D

【答案解析】A B 两个选项方法使用错误,都是两个参数。 abs 方法是取 bar 的绝对值, ceil 方法返回大于或者等于指定表达式的最小整数,即向上取整,本题中该值大于等于参数 bar。 例如: Math.ceil(5.6) //6 Math.ceil(-5.6) //-5

你可能感兴趣的:(java,面试)