2.17Java专项测试复盘

  • 下面哪个Set类是排序的?
    A. LinkedHashSet
    B. TreeSet
    C. HashSet
    D. AbstractSet

    解析:
    LinkedHashSet
    继承于HashSet、又基于 LinkedHashMap 来实现
    TreeSet
    使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。
    HashSet
    存储元素的顺序并不是按照存入时的顺序(和 List 显然不同) 而是按照哈希值来存的所以取数据也是按照哈希值取得

    答案:B

  • 下列有关Servlet的生命周期,说法不正确的是?
    A. 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
    B. 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
    C. 在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
    D. destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

    解析:创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前
    答案:A

  • 以下代码的输出结果是?

      public class B
      {
          public static B t1 = new B();
          public static B t2 = new B();
          {
              System.out.println("构造块");
          }
          static
          {
              System.out.println("静态块");
          }
          public static void main(String[] args)
          {
              B t = new B();
          }
      }

    A. 静态块 构造块 构造块 构造块
    B. 构造块 静态块 构造块 构造块
    C. 构造块 构造块 静态块 构造块
    D. 构造块 构造块 构造块 静态块

    解析:初始化时是静态域先初始化,静态域包括静态变量,静态块,静态方法,而他们的执行先后次序是由他们的位置决定的。所以这题先初始化静态变量t1、t2再初始化静态块,最后执行构造块。
    答案:C

  • 以下关于对象序列化描述正确的是
    A. 使用FileOutputStream可以将对象进行传输
    B. 使用PrintWriter可以将对象进行传输
    C. 使用transient修饰的变量不会被序列化
    D. 对象序列化的所属类需要实现Serializable接口

    解析:使用ObjectOutputStream和ObjectInputStream可以将对象进行传输.
    声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据。

    答案:CD

  • Which two statements are true if this class is compiled and run?

      public class NameList
      {
          private List names = new ArrayList();
          public synchronized void add(String name)
          {
              names.add(name);
          }
          public synchronized void printAll()     {
              for (int i = 0; i < names.size(); i++)
              {
                  System.out.print(names.get(i) + ””);
              }
          }
    
          public static void main(String[]args)
          {
              final NameList sl = new NameList();
              for (int i = 0; i < 2; i++)
              {
                  new Thread()
                  {
                      public void run()
                      {
                          sl.add(“A”);
                          sl.add(“B”);
                          sl.add(“C”);
                          sl.printAll();
                      }
                  } .start();
              }
          }
      }

    A. An exception may be thrown at runtime.
    B. The code may run with no output, without exiting.
    C. The code may run with no output, exiting normally(正常地).
    D. The code may rum with output “A B A B C C “, then exit.
    E. The code may rum with output “A B C A B C A B C “, then exit.
    F. The code may ruin with output “A A A B C A B C C “, then exit.
    G. The code may ruin with output “A B C A A B C A B C “, then exit.

    解析:E答案相当于线程1顺序执行完然后线程2顺序执行完。
    G答案则是线程1执行完前三句add之后线程2插一脚执行了一句add然后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC

    答案:EG

  • 下列代码片段中,存在编译错误的语句是()

      byte b1=1,b2=2,b3,b6,b8;
      final byte b4=4,b5=6,b7;
      b3=(b1+b2);  /*语句1*/
      b6=b4+b5;    /*语句2*/
      b8=(b1+b4);  /*语句3*/
      b7=(b2+b5);  /*语句4*/
      System.out.println(b3+b6);

    A. 语句2
    B. 语句1
    C. 语句3
    D. 语句4
    解析:b4 、b5被声明final 所以类型是不会转换, 计算结果任然是byte ,所以 语句2正确。
    答案:BCD

  • 下列流当中,属于处理流的是:()
    A. FilelnputStream
    B. lnputStream
    C. DatalnputStream
    D. BufferedlnputStream

    解析:处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
    常用处理流(关闭处理流使用关闭里面的节点流):
    缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
    转换流:InputStreamReader OutputStreamReader 实现字节流和字符流之间的转换。
    数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来.

    答案:CD

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

      public class Test {
          private synchronized void a() {
          }
          private void b() {
              synchronized (this) {
              }
          }
          private synchronized static void c() {
          }
          private void d() {
              synchronized (Test.class) {
              }
          }
      }

    A. 同一个对象,分别调用方法a和b,锁住的是同一个对象
    B. 同一个对象,分别调用方法a和c,锁住的是同一个对象
    C. 同一个对象,分别调用方法b和c,锁住的不是同一个对象
    D. 同一个对象,分别调用方法a、b、c,锁住的不是同一个对象

    解析:修饰非静态方法 锁的是this 对象,修饰静态方法 锁的是class对象
    答案:ACD

  • 多态的作用()
    A. 隐藏细节
    B. 提高可重用性
    C. 扩展代码模块
    D. 提高编译可靠性

    解析:多态的作用
    1不必编写每一子类的功能调用,可以直接把不同子类当父类看,屏蔽子类间的差异,提高代码的通用率/复用率
    2父类引用可以调用不同子类的功能,提高了代码的扩充性和可维护性

    答案:ABC

  • 下面哪个不属于HttpServletResponse接口完成的功能?
    A. 设置HTTP头标
    B. 设置cookie
    C. 读取路径信息
    D. 输出返回数据

    解析:
    A:设置HTTP头标
    response.setHeader("Refresh","3"); //三秒刷新页面一次
    B:设置cookie
    Cookie c1 = new Cookie("username","only");
    response.addCookie(c1);
    C(错误):读取路径信息,request读取路径信息
    从request获取各种路径总结
    request.getRealPath("url"); // 虚拟目录映射为实际目录
    request.getRealPath("./"); // 网页所在的目录
    request.getRealPath("../"); // 网页所在目录的上一层目录
    request.getContextPath(); // 应用的web目录的名称
    D:输出返回数据
    HttpServleteResponse.getOutputStream().write();

    答案:C

  • 对于JVM内存配置参数:
    -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
    ,其最小内存值和Survivor区总大小分别是()
    A. 5120m,1024m
    B. 5120m,2048m
    C. 10240m,1024m
    D. 10240m,2048m

    解析:-Xmx10240m:代表最大堆
    -Xms10240m:代表最小堆
    -Xmn5120m:代表新生代
    -XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120 x=1024

    答案:D

猜你喜欢

转载自www.cnblogs.com/l999q/p/12324006.html