zoukankan      html  css  js  c++  java
  • 2.10Java专项测试复盘

    • 下列程序的运行结果

      public static void main(String args[]) {
              Thread t = new Thread() {
                  public void run() {
                      pong();
                  }
              };
              t.run();
              System.out.print("ping");
          }
          static void pong() {
              System.out.print("pong");
          }
      }

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

      解析:在第7行的时候,调用的是t.run();方法,之间调用run方法就是普通的方法调用而已,所以肯定是先执行pong()再执行System.out.print(“ping”);
      如果第7行换成t.start()方法,答案就应该选择c,因为t.start()后,线程变为就绪状态,什么时候开始执行时不确定的,可能是主程序先继续执行,也可能是新线程先执行。

      答案:B

    • 要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
      A. 让该类不使用任何关键字
      B. 使用private关键字
      C. 使用protected关键字
      D. 使用void关键字

      解析:
      在这里插入图片描述
      protected接受包外的子类访问
      答案:A

    • 在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象
      A. Servlet对象
      B. HTTP服务器
      C. Web容器
      D. JSP网页

      解析:web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以多个容器。
      答案:C

    • Hashtable 和 HashMap 的区别是:
      A. Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
      B. HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
      C. Hashtable 线程安全的,而 HashMap 是线程不安全的
      D. Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
      E. HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

      解析:Hashtable:
      (1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
      (2)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。
      (3)HashTable直接使用对象的hashCode。
      HashMap:
      (1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
      (2)不是线程安全的,HashMap可以接受为null的键(key)和值(value)。
      (3)HashMap重新计算hash值
      Hashtable,HashMap,Properties继承关系如下:

      public class Hashtable<K,V> extends Dictionary<K,V>
          implements Map<K,V>, Cloneable, java.io.Serializable
          
      public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

       

      java.lang.Objecct
        java.util.Dictionary<K,V>        
             java.util.Hashtable<Object,Object>
                        java.util.Properties

      答案:BCDE

    • 下列说法错误的有( )
      A. Java面向对象语言容许单独的过程与函数存在
      B. Java面向对象语言容许单独的方法存在
      C. Java语言中的非静态方法属于类中的成员(member)
      D. Java语言中的方法必定隶属于某一类(对象),调用方法与C语言的过程或C++语言的函数相同

      解析: java不允许单独的方法,过程或函数存在,需要隶属于某一类中。——AB错;java语言中的方法属于对象的成员,而不是类的成员。不过,其中静态方法属于类的成员。——C错;D问的是java调用方法和C调用过程,C+ + 的函数一样?肯定不一样。错
      答案:ABCD

    • 下列哪项不属于jdk1.6垃圾收集器?
      A. Serial收集器
      B. parNew收集器
      C. CMS收集器
      D. G1收集器

      解析:G1收集器是jdk1.7引入的
        
      在这里插入图片描述

      答案:D

    • Test.main()函数执行后的输出是( )

      class Test {
          public static void main(String[] args) {
              System.out.println(new B().getValue());
          }
          static class A {
              protected int value;
              public A (int v) {
                  setValue(v);
              }
              public void setValue(int value) {
                  this.value= value;
              }
              public int getValue() {
                  try {
                      value ++;
                      return value;
                  } finally {
                      this.setValue(value);
                      System.out.println(value);
                  }
              }
          }
          static class B extends A {
              public B () {
                  super(5);
                  setValue(getValue()- 3);
              }
              public void setValue(int value) {
                  super.setValue(2 * value);
              }
          }
      }

       

      A. 6 7 7
      B. 22 34 17
      C. 22 74 74
      D. 11 17 34

      解析:new B()第一步执行B的构造方法,先调用super(5),父类构造器中执行setValue()方法,由于B重写了setValue()方法,所以执行的是B中的setValue()方法,此时value = 2×5 = 10。
      new B()第二步setValue(getValue()- 3);,先调用getValue()方法,B没重写getValue方法,所以调用A中的getValue方法。value++; return value;此时返回的value = 11。但是由于getValue块被try finally块包围,因此finally中的语句无论如何都将被执行,所以11这个返回值会先暂存起来,到finally语句块执行完毕后再真正返回出去。finally块中this.setValue(value);调用的是B的setValue方法,此时value = 2×11=22,打印输出。但不影响返回值为11。此时B构造器中setValue的参数为11-3=8,执行完之后value = 2 × 8 =16。
      主函数中输出的是new B().getValue(),我们还要执行getValue方法。同之前一样,getValue中的返回值为16+1=17,打印值为2×17=34,主函数中输出的是返回值17.
      所以输出为22 34 17

      答案:B

    • java8中,下面哪个类用到了解决哈希冲突的开放定址法
      A. LinkedHashSet
      B. HashMap
      C. ThreadLocal
      D. TreeMap

      解析:ThreadLocal的set方法可能会有的情况。
      1.探测过程中slot都不无效,并且顺利找到key所在的slot,直接替换即可
      2.探测过程中发现有无效slot,调用replaceStaleEntry,效果是最终一定会把key和value放在这个slot,并且会尽可能清理无效slot
      2.1 在replaceStaleEntry过程中,如果找到了key,则做一个swap把它放到那个无效slot中,value置为新值
      2.2 在replaceStaleEntry过程中,没有找到key,直接在无效slot原地放entry
      3.探测没有发现key,则在连续段末尾的后一个空位置放上entry,这也是线性探测法的一部分。放完后,做一次启发式清理,如果没清理出去key,并且当前table大小已经超过阈值了,则做一次rehash,rehash函数会调用一次全量清理slot方法也即expungeStaleEntries,如果完了之后table大小超过了threshold – threshold / 4,则进行扩容2倍。

      答案:C

    • 在Java中,对于不再使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放。( )

      解析:java 虚拟机,对于方法的调用采用的是栈帧(方法调用和方法执行),调用则入栈,完成之后则出栈。不就回收了内存资源。而针对于其他,GC回收的时间不定。
      答案:ב’

    • Java数据库连接库JDBC用到哪种设计模式?
      A. 生成器
      B. 桥接模式
      C. 抽象工厂
      D. 单例模式

      解析:桥接模式是结构型模式,关注点在依赖关系的维护。对于jdbc技术来说,它解耦了业务与数据库通信协议这两个纬度之间的关系,所以这两个纬度之间的关系就需要一个桥,即Driver,至于DriverManager把这个关系接到哪里就是运行时的事情了。
      微观上,从connection的创建来看,它更像一个抽象工厂模式,特定的Driver创建对应的connection。
      宏观上,从业务代码与connection的关系来看,关键点在于一个sql怎么转化为对应的通信协议,就属于桥接。

      答案:B

    • 关于下面的一段代码,以下哪些说法是正确的:

      public static void main(String[] args) {
          String a = new String("myString");
          String b = "myString";
          String c = "my" + "String";
          String d = c;
          System.out.print(a == b);
          System.out.print(a == c);
          System.out.print(b == c);
          System.out.print(b == d);
      }

       

      A. System.out.print(a == b)打印出来的是false
      B. System.out.print(a == c)打印出来的是true
      C. System.out.print(b == c)打印出来的是false
      D. System.out.print(b == d)打印出来的是true

      解析:A:a指向堆内存,b指向常量池,因此地址不相等,false
      B:java有常量优化机制,c也指向常量池,且与b指向同一个,则a与c地址不相等,false;
      C:b与c地址相等,true
      D:d是c的副本,地址相同,所以b与d地址相等,true

      答案:AD

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/l999q/p/12293145.html
Copyright © 2011-2022 走看看