• 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++都是静态类型的面向对象编程语言
     
     
     
     
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12341904.html
Copyright © 2020-2023  润新知