zoukankan      html  css  js  c++  java
  • 2020-2-21 牛客试题复盘

    1、执行如下程序,输出结果是(C)

    class Test
    {
         private int data;
         int result = 0;
         public void m()
         {
             result += 2;
             data += 2;
             System.out.print(result + "  " + data);
         }
     }
     class ThreadExample extends Thread
     {
         private Test mv;
         public ThreadExample(Test mv)
         {
             this.mv = mv;
         }
         public void run()
         {
             synchronized(mv)
             {
                 mv.m();
             }
         }
     }
     class ThreadTest
     {
         public static void main(String args[])
         {
             Test mv = new Test();
             Thread t1 = new ThreadExample(mv);
             Thread t2 = new ThreadExample(mv);
             Thread t3 = new ThreadExample(mv);
             t1.start();
             t2.start();
             t3.start();
         }
     }
     
    A、0 22 44 6
    B、2 42 42 4
    C、2 24 46 6
    D、4 44 46 6
    解析:
    Test mv =newTest()声明并初始化对data赋默认值 
    使用synchronized关键字加同步锁线程依次操作m() 
    t1.start();使得result=2,data=2,输出即为2 2 
    t2.start();使得result=4,data=4,输出即为4 4 
    t3.start();使得result=6,data=6,输出即为6 6 
     System.out.print(result +" "+ data);是print()方法不会换行,输出结果为2 24 46 6
     
     
    2、下面程序的运行结果(D)
            Object obj=new Object();
            List aList=new ArrayList();
            List bList=new LinkedList();
             
            long t1=System.currentTimeMillis();
            for(int i=0;i<50000;i++){
                aList.add(0,obj);
            }
            long t2=System.currentTimeMillis()-t1;
             
            t1=System.currentTimeMillis();
            for(int i=0;i<50000;i++){
                bList.add(0,obj);
            }
            long t3=System.currentTimeMillis()-t1; 

    A、t2<t3< pre="">
    B、t2=t3
    C、不确定
    D、t2>t3
    解析:
    ArrayList内部是动态数组实现,在增加空间时会复制全部数据到新的容量大一些的数组中。而LinkedList内部为双向链表,可以按需分配空间,扩展容量简单,因此LinkedList用时少。
     
     
     
    3、以下哪项陈述是正确的?E
    A、垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
    B、垃圾收集允许程序开发者明确指定释放 哪一个对象
    C、垃圾回收机制保证了JAVA程序不会出现 内存溢出
    D、进入”Dead”状态的线程将被垃圾回收器回收
    E、以上都不对
    解析:
    A: 垃圾回收在jvm中优先级相当相当低。
    B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
    C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
    D:进入DEAD的线程,它还可以恢复,GC不会回收
     
     
    4、java8中,下面哪个类用到了解决哈希冲突的开放定址法  C
    A、LinkedHashSet
    B、HashMap
    C、ThreadLocal
    D、TreeMap
    解析:
    ThreadLocalMap中使用开放地址法来处理散列冲突,而HashMap中使用的是分离链表法。之所以采用不同的方式主要是因为:在ThreadLocalMap中的散列值分散得十分均匀,很少会出现冲突。并且ThreadLocalMap经常需要清除无用的对象,使用纯数组更加方便。
     
     
    5、在java中,下列标识符不合法的有( ACD)
    A、new
    B、$Usdollars
    C、1234
    D、car.taxi
    解析:
    Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字 不能当作Java标识符。
     
     
     
    6、局部内部类可以用哪些修饰符修饰? CD
    A、public
    B、private
    C、abstract
    D、final

     解析:

    7、Java 程序中使用赋值运算符进行对象赋值时,可以得到两个完全相同的对象。 B

    A、正确
    B、错误
     解析:
    对象赋值时,比如A=B,只是把A对象的地址指向了B对象的地址,所以其实对象只有一个。
    A,B都将指向同一块地址,但是A,B在内存中呢? 肯定占据不同的内存空间啊。
     
     
     
    8、下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的( C )
    A、public
    B、private
    C、static
    D、final
    解析:
    static修饰某个字段时,肯定会改变字段创建的方式(每个被static修饰的字段对于每一个类来说只有一份存储空间,而非static修饰的字段对于每一个对象来说都有一个存储空间)
    static属性是属于类的,所以对象共同拥有,所以既可以通过类名.变量名进行操作,又可以通过对象名.变量名进行操作。
     
     
     
    9、下面有关JAVA异常类的描述,说法错误的是?  D
    A、异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
    B、非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
    C、Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
    D、RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
    解析:
    运行时异常故名思议就是程序在运行的时候出现异常,隐含的一个前提就是程序在编译时是检测不到异常的存在,作者本人也并不知道是否自己的代码中含有运行时异常,所以根本也不可能提前使用try{}catch{}捕获.
     
     
     
    10、Hashtable 和 HashMap 的区别是:BCDE
    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继承关系如下:
    1
    2
    3
    4
    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
    1
    2
    3
    4
    java.lang.Objecct
      java.util.Dictionary<K,V>
        java.util.Hashtable<Object,Object>
          java.util.Properties 
     
     
     
     
    11、java如何接受request域中的参数?    C
    A、request.getRequestURL()
    B、request. getAttribute()
    C、request.getParameter()
    D、request.getWriter()
    解析:
    request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。getAttribute是返回对象,getParameter返回字符串。
     
     
     
     
    12、java Thread中,run方法和start方法的区别,下面说法错误的是?
    A、通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
    B、他们都可以实现了多线程运行。
    C、run方法是thread的一个普通方法调用。
    D、调用start方法后,一旦得到cpu时间片,就开始执行run()方法。
    解析:
     两种方法的区别:
        1.start方法
             用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
        2.run方法
             run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
     
     
     
    13、请问所有的异常类皆直接继承于哪一个类?(C)
    A、java.applet.Applet
    B、java.lang.Throwable
    C、java.lang.Exception
    D、java.lang.Error
    解析:
    题目问的是所有的异常类。
     
     
     
    14、以下叙述正确的是 D
    A、实例方法可直接调用超类的实例方法
    B、实例方法可直接调用超类的类方法、
    C、实例方法可直接调用子类的实例方法
    D、实例方法可直接调用本类的实例方法
    解析:
    A错误,类的实例方法是与该类的实例对象相关联的,不能直接调用,只能通过创建超类的一个实例对象,再进行调用
    B错误,当父类的类方法定义为private时,对子类是不可见的,所以子类无法调用
    C错误,子类具体的实例方法对父类是不可见的,所以无法直接调用, 只能通过创建子类的一个实例对象,再进行调用
    D正确,实例方法可以调用自己类中的实例方法
     
     
     
    15、下面的对象创建方法中哪些会调用构造方法 (AC)?
    A、new语句创建对象
    B、调用Java.io.ObjectInputStream的readObject方法
    C、java反射机制使用java.lang.Class或java.lang.reflect.Constructor的newInstance()方法
    D、调用对象的clone()方法
    解析:
    readObject方法只是从文件中还原对象,clone只是一种复制拷贝对象。
     
     
     
    16、下列说法正确的有( ACD)
    A、环境变量可在编译source code时指定
    B、在编译程序时,所能指定的环境变量不包括class path
    C、javac一次可同时编译数个Java源文件
    D、javac.exe能指定编译结果要置于哪个目录(directory)
    解析:
    a选项-d即可设置系统属性
    c选项一次编译多个java文件用javac *.java. 即可编译当前目录下的所有java文件
    d选项-s指定存放生成的源文件的位置
     
     
     
    17、下面关于面向对象的一些理解哪些是错误的(    C)
    A、面向对象的最重要的特性是支持继承、封装和多态
    B、系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
    C、函数式的语言必然是面向对象的语言
    D、面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
    E、过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
    F、Java和C++都是静态类型的面向对象编程语言
     
     
     
     
  • 相关阅读:
    软件工程 团队博客第二阶段成绩
    现代软件工程 10 绩效管理
    现代软件工程讲义 1 软件工程概论
    现代软件工程讲义 0 教学方法
    软件工程 敏捷的酒后问答
    我传递了错误的信息
    起跑点上
    输在起跑点上?
    好可怕的假相
    浪子回头
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12341904.html
Copyright © 2011-2022 走看看