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

    1、下面程序的运行结果是  B

    String str1 = "hello";
    String str2 = "he" + new String("llo");
    System.err.println(str1 == str2);

    A、true
    B、false
    C、exception
    D、无输出

    解析:
    String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; 
    String str2 = "he" + new String("llo");这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。

    2、以下程序运行的结果为 ( A  )

    public class Example extends Thread{

    @Override

        public void run(){

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e){

                e.printStackTrace();

            }

            System. out .print( "run" );

        }

        public static void main(String[] args){

            Example example= new Example();

            example.run();

            System. out .print( "main" );

        }
    }
     
    A、run main
    B、main run
    C、main
    D、run

    E、不能确定

    解析:

    因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。

    为啥是runmain而不是mainrun呢?

    1. 因为启动线程是调用start方法。
    2. 把线程的run方法当普通方法,就直接用实例.run()执行就好了。

    没有看到start。所以是普通方法调用。

    3、用户不能调用构造方法,只能通过new关键字自动调用。(B)

    A、正确
    B、错误

    解析:

    1. 在类内部可以用户可以使用关键字this.构造方法名()调用(参数决定调用的是本类对应的构造方法)
    2. 在子类中用户可以通过关键字super.父类构造方法名()调用(参数决定调用的是父类对应的构造方法。)
    3. 反射机制对于任意一个类,都能够知道这个类的所有属性和方法,包括类的构造方法。

    4、子类要调用继承自父类的方法,必须使用super关键字。 B

    A、正确
    B、错误

    解析:

    1、子类构造函数调用父类构造函数用super
    2、子类重写父类方法后,若想调用父类中被重写的方法,用super
    3、未被重写的方法可以直接调用。

    5、下面关于程序编译说法正确的是(C)

    A、java语言是编译型语言,会把java程序编译成二进制机器指令直接运行
    B、java编译出来的目标文件与具体操作系统有关
    C、java在运行时才进行翻译指令
    D、java编译出来的目标文件,可以运行在任意jvm上

    解析:

    A:.java编译成的是字节码,再被各系统的jvm翻译成本系统可以识别的机器码,这就是java一次编程多平台应用的跨平台性

    B:java源文件生成的是class文件,与系统无关

    C:注意字节码和机器码不是一回事 java程序在运行时字节码才会被jvm翻译成机 器码,所以说java是解释性语言

    D:注意jvm的版本,好比人穿裤子,一条裤子能被任何人穿上吗

    6、Java网络程序设计中,下列正确的描述是(AD)

    A、Java网络编程API建立在Socket基础之上
    B、Java网络接口只支持tcP以及其上层协议
    C、Java网络接口只支持UDP以及其上层协议
    D、Java网络接口支持IP以上的所有高层协议

    7、下面哪些可能是重载的基本条件(ABD)(注意:是可能为重载的基本条件)

    A、参数的类型不同
    B、参数的顺序不同
    C、函数的返回值类型不同
    D、参数的个数不同

    解析:

    重载的概念是:

    方法名称相同,参数个数、次序、类型不同

    因此重载对返回值没有要求,可以相同,也可以不同

    但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载

    8、在java中重写方法应遵循规则的包括(BC)

    A、访问修饰符的限制一定要大于被重写方法的访问修饰符
    B、可以有不同的访问修饰符
    C、参数列表必须完全与被重写的方法相同
    D、必须具有不同的参数列表

    解析:

    方法的重写(override)两同两小一大原则
    方法名相同,参数类型相同
    子类返回类型小于等于父类方法返回类型,
    子类抛出异常小于等于父类方法抛出异常,
    子类访问权限大于等于父类方法访问权限。
     
    注:A选项错误,是因为只有大于,没说明等于。
     
     
     
    9、Java1.8版本之前的前提,Java特性中,abstract class和interface有什么区别(D )
    A、抽象类可以有构造方法,接口中不能有构造方法
    B、抽象类中可以有普通成员变量,接口中没有普通成员变量
    C、抽象类中不可以包含静态方法,接口中可以包含静态方法
    D、一个类可以实现多个接口,但只能继承一个抽象类。

    解析:

    在JDK1.8之前的版本(不包括JDK1.8),接口中不能有静态方法,抽象类中因为有普通方法,故也可以有静态方法。

    在JDK1.8后(包括JDK1.8),在抽象类中依旧可以有静态方法,同时在接口中也可以定义静态方法了。

    10、以下JAVA程序的运行结果是什么(  D )

    public static void main(String[] args) {
    Object o1 = true new Integer(1) : new Double(2.0);
    Object o2;
    if (true) {
                 o2 = new Integer(1);
    else {
    o2 = new Double(2.0);
    }
    System.out.print(o1);
    System.out.print(" ");         
    System.out.print(o2);
    }
     
    A、1 1
    B、1.0 1.0
    C、1 1.0
    D、1.0 1

    解析:

    三元操作符类型的转换规则:
    1.若两个操作数不可转换,则不做转换,返回值为Object类型
    2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
    3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。

    4.若两个操作数都是直接量数字,则返回值类型为范围较大者
     
    符合4,所以选D.
     
     
     
    11、关于Java内存区域下列说法不正确的有哪些   BC
    A、程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
    B、Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
    C、Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
    D、方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

    解析:

    A.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器(偏移地址),Java编译过程中产生的字节码有点类似编译原理的指令,程序计数器的内存空间存储的是当前执行的字节码的偏移地址,每一个线程都有一个独立的程序计数器(程序计数器的内存空间是线程私有的),因为当执行语句时,改变的是程序计数器的内存空间,因此它不会发生内存溢出 ,并且程序计数器是jvm虚拟机规范中唯一一个没有规定 OutOfMemoryError 异常 的区域;
     
    B.java虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。  没有类信息,类信息是在方法区中

    C.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组
     
    D.方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    12、下列说法错误的有( ACD)

    A、在类方法中可用this来调用本类的类方法
    B、在类方法中调用本类的类方法时可直接调用
    C、在类方法中只能调用本类中的类方法
    D、在类方法中绝对不能调用实例方法

    解析:

    首先:
    成员方法又称为实例方法
    静态方法又称为类方法
    其次:
    a,静态方法中没有this指针
    c,可以通过类名作用域的方式调用Class::fun();
    d,太绝对化了,在类中申请一个类对象或者参数传递一个对象或者指针都可以调用;

    13、HashSet子类依靠()方法区分重复元素。  C

    A、toString(),equals()
    B、clone(),equals()
    C、hashCode(),equals()
    D、getClass(),clone()

    解析:

    HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。

    而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

    14、以下程序的运行结果是? A

    A、foobar
    B、barfoo
    C、foobar或者barfoo都有可能
    D、Bar
    E、Foo
    F、程序无法正常运行

    解析:

    答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.

    15、在try的括号里面有return一个值,那在哪里执行finally里的代码? B

    A、不执行finally代码
    B、return前执行
    C、return后执行

    解析:

    https://www.ibm.com/developerworks/cn/java/j-lo-finally/

    16、关于访问权限说法正确 的是 ? (B )

    A、外部类前面可以修饰public,protected和private
    B、成员内部类前面可以修饰public,protected和private
    C、局部内部类前面可以修饰public,protected和private
    D、以上说法都不正确

    解析:

    ( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。

    ( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。

    ( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

    17、在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的(A)?

    A、管道
    B、消息队列
    C、高速缓存数据库
    D、套接字

    解析:

    对于管道,有下面这几种类型:
    ①普通管道(PIPE):通常有两种限制,一是单工,即只能单向传输;二是血缘,即常用于父子进程间(或有血缘关系的进程间)。

    ②流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。

    ③命名管道(name_pipe):去除了上述的第二种限制,实现了无血缘关系的不同进程间通信。
    显然,要求是对于不同的服务器之间的通信,是要要求全双工形式的,而管道只能是半双工,虽然可以双向,但是同一时间只能有一个方向传输,全双工和半双工的区别可以如下图示理解:

    18、关于java中的数组,下面的一些描述,哪些描述是准确的:(ACF)

    A、数组是一个对象,不同类型的数组具有不同的类
    B、数组长度是可以动态调整的
    C、数组是一个连续的存储结构
    D、一个固定长度的数组可类似这样定义:int array[100]
    E、两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
    F、可以二维数组,且可以有多维数组,都是在java中合法的。

    解析:

    这个E选项是错的。

    public static void main(String[] args) { int[] a = {1,2,3,4,5};
    int[] b = {1,2,3,4,5};
    System.out.println(a.equals(b));
    }

    图片说明

    进方法内部:
    图片说明
    明显是Object里面的equals();

    19、下列说法正确的有( C)

    A、class中的constructor不可省略
    B、constructor必须与class同名,但方法不能与class同名
    C、constructor可在一个对象被new时执行
    D、一个class只能定义一个constructor

     解析:

    constructor表示构造方法。

    20、以下哪个类包含方法flush()?(B)

    A、InputStream
    B、OutputStream
    C、A 和B 选项都包含
    D、A  和B 选项都不包含

    解析:

    flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。

    21、下面有关servlet service描述错误的是?     B

    A、不管是post还是get方法提交过来的连接,都会在service中处理
    B、doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
    C、service()是在javax.servlet.Servlet接口中定义的
    D、service判断请求类型,决定是调用doGet还是doPost方法

    解析:

    doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的。

    22、以下程序的输出结果为  D

    class Base{
        public Base(String s){
            System.out.print("B");
        }
    }
    public class Derived extends Base{
        public Derived (String s) {
            System.out.print("D");
        }
        public static void main(String[] args){
            new Derived("C");
        }
    }
     
    A、BD
    B、DB
    C、C
    D、编译错误

    解析:

    子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
    public Derived(String s){
       super("s");
       System.out.print("D");
    }












  • 相关阅读:
    unity, trail renderer gone black on iOS
    sql date时间加减几天几小时
    mysql sql获取上条插入id,update影响行数
    cmd获取系统时间
    js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange
    javascript 动态改变onclick事件
    限制input输入类型(多种方法实现)
    在VMware Workstation11虚拟机上安装黑苹果
    mysql存储过程procedure
    我常用的在线取色器
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12330674.html
Copyright © 2011-2022 走看看