2020-3-2 牛客试题复盘

1、有关线程的叙述正确的是(B)

A、可以获得对任何对象的互斥锁定。
B、通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。
C、线程通过使用synchronized关键字可获得对象的互斥锁定。
D、线程的创建只能通过继承Thread类来实现。

解析:

互斥锁指的是只有一个线程可以访问该对象。
通过继承Thread类或实现Runnable接口,只是创建线程的两种方式。
 
 
2、以下程序的运行结果是:(  C  )
TreeSet<Integer> set = new TreeSet<Integer>();
  TreeSet<Integer> subSet = new TreeSet<Integer>();
  for(int i= 606 ;i< 613 ;i++){
  if(i% 2 == 0 ){
  set.add(i);
  }
  }
  subSet = (TreeSet)set.subSet( 608 ,true, 611 ,true);
  set.add( 629 );
  System.out.println(set+ " " +subSet);
 
A、编译失败
B、发生运行时异常
C、[606, 608, 610, 612, 629] [608, 610]
D、[606, 608, 610, 612, 629] [608, 610,629]
解析:
去翻了API=======subset(form,true,to,true)是Treeset的非静态方法,该方法返回从form元素到to元素的一个set集合,两个boolean类型是确认是否包含边境值用的。
 
 
3、关于下面的程序Test.java说法正确的是( D   )。
public class Test {
     static String x= "1" ;
     static int y= 1 ;
     public static void main(String args[]) {
         static int z= 2 ;
         System.out.println(x+y+z);
     }
}

 

A、3
B、112
C、13
D、程序有编译错误
解析:
被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量。
 
 
4、String s = new String("xyz");创建了几个StringObject? A
A、两个或一个都有可能
B、两个
C、一个
D、三个
解析:
1.String对象的两种创建方式:
第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),
第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 字符串对象)。
 
 
5、 对  Map  的用法,正确的有:  CD
A、new java.util.Map().put("key" , "value") ;
B、new java.util.SortedMap().put("key" , "value") ;
C、new java.util.HashMap().put( null , null ) ;
D、new java.util.TreeMap().put( 0 , null ) ;
解析:
选C、D。考察的是Map接口实现类的创建对象以及对象类型包含的方法。
A选项Map属于接口类型,不可以new的方式创建对象。所以A错误。
B选项SortedMap属于接口类型,不可以new的方式创建对象。所以B错误。
C选项HashMap基于哈希表实现Map接口的类,并允许null的值和null键。
D选项TreeMap通过红黑树实现Map接口的类,key不可以为null,会报NullPointerException异常,value可以为null。
 
 
 
6、下面代码的输出结果是什么?  D
public class ZeroTest {
     public static void main(String[] args) {
      try {
        int i =  100 0 ;
        System.out.print(i);
   } catch (Exception e){
        System.out.print( 1 );
        throw new RuntimeException();
   } finally {
        System.out.print( 2 );
   }
       System.out.print( 3 );
  }
  }
 
A、3
B、123
C、1
D、12
解析:
1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
2、catch捕捉异常,继续执行System.out.print(1);
3、当执行 thrownewRuntimeException();  又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行
 
 
7、下列不属于算法结构的是(C)
A、输入数据
B、处理数据
C、存储数据
D、输出结果
 
 
8、下面字段声明中哪一个在interface主体内是合法的? (B)
A、private final static int answer = 42;
B、public static int answer = 42;
C、final static answer = 42;
D、int answer;
解析:
在接口中,属性都是默认public static final修饰的,所以:
    A(错误):不能用private修饰;
    B(正确):在接口中,属性默认public static final,这三个关键字可以省略;
    C(错误):没写属性的类型;
    D(错误):final修饰的属性必须赋值;
 
 
9、Which method you define as the starting point of new thread in a class from which n thread can be execution?
A、public void start()
B、public void run()
C、public void int()
D、public static void main(String args[])
E、public void runnable()
解析:
要写一个线程类,可以继承Thread方法,然后override他的run()方法
另一种方法是实现Runable接口,即为实现run()方法。
A,start()是启动一个线程的方法
 
 
10、阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有(A)
package NowCoder;
class Test {
     public static void hello() {
         System.out.println( "hello" );
     }
}
public class MyApplication {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         Test test= null ;
         test.hello();
     }
}

 

A、能编译通过,并正确运行
B、因为使用了未初始化的变量,所以不能编译通过
C、以错误的方式访问了静态方法
D、能编译通过,但因变量为null,不能正常运行
解析:

 因为Test类的hello方法是静态的,所以是属于类的,当实例化该类的时候,静态会被优先加载而且只加载一次,所以不受实例化new Test();影响,只要是使用到了Test类,都会加载静态hello方法!
另外,在其他类的静态方法中也是可以调用公开的静态方法,此题hello方法是使用public修饰的所以在MyApplication中调用hello也是可以的。
总结:即使Test test=null;这里也会加载静态方法,所以test数据中包含Test类的初始化数据。(静态的,构造的,成员属性)
        因此test.hello是会调用到hello方法的。
附上运行图:

 
 
11、下列哪些操作会使线程释放锁资源?
A、sleep()
B、wait()
C、join()
D、yield()
 
 
12、 在使用super和this关键字时,以下描述错误的是(BCD)
A、在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B、super()和this()不一定要放在构造方法内第一行
C、this()和super()可以同时出现在一个构造函数中
D、this()和super()可以在static环境中使用,包括static方法和static语句块
解析:
super和this都只能位于构造器的第一行,而且不能同时使用,这是因为会造成初始化两次,this用于调用重载的构造器,super用于调用父类被子类重写的方法。
 
 
13、当编译并运行下面程序时会发生什么结果(D )
public class Bground  extends Thread{
     public static void main(String argv[]){
         Bground b =  new Bground();
         b.run();
     }
     public void start(){
         for ( int i= 0 ;i< 10 ;i++){
             System.out.println( "Value of i = " +i);
         }
     }
}
A、编译错误,指明run方法没有定义
B、运行错误,只鞥呢run方法没有定义
C、编译通过并输出0到9
D、编译通过,但无输出
解析:
对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
但是在Thread中,run方法是个空方法,没有具体实现。
Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。
 
 
14、ArrayList list = new ArrayList(20);中的list扩充几次   A
A、0
B、1
C、2
D、3
解析:
Arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍。
本题在创建时直接分配了数组的大小,没有扩充。
 
 
15、以下 json 格式数据,错误的是   AC
A、{company:4399}
B、{"company":{"name":[4399,4399,4399]}}
C、{[4399,4399,4399]}
D、{"company":[4399,4399,4399]}
E、{"company":{"name":4399}}
解析:
A:错误  {company:4399} 首先,其为json对象。但json对象要求属性必须加双引号。
C:错误  {[4399,4399,4399]} 。使用 {} 则为json对象。json对象必须由一组有序的键值对组成。
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/buhuiflydepig/p/12394967.html