2018-2-18 牛客试题复盘

1、JVM内存不包含如下哪个部分( D)

A、Stacks
B、PC寄存器
C、Heap
D、Heap Frame

解析:

2、下面有关maven和ant的描述,描述错误的是? C

A、Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
B、Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
C、maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
D、Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml

解析:
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make,但没有make的缺陷。Ant是软件构工具,Maven的定位是软件项目管理和理解工具。
Ant特点:
没有一个约定的目录结构必须明确让Ant做什么,什么时候做,然后编译,打包,没有生命周期,必须定义目标及起实现的任务序列,没有集成依赖管理。
Maven特点:
拥有约定,知道你的代码在哪里,放到哪里去 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理

3、@SuppressWarnings(“deprecation”)的功能是什么? A

A、屏蔽不赞同使用的类和方法的警告
B、屏蔽在强制类型转换的时候编译器给出的警告
C、关闭所有警告信息
D、当在可序列化的类上缺少serialVersionUID定义的警告

解析:
Override注解
指明被注解的方法需要覆写超类中的方法。
如果某个方法使用了该注解,却没有覆写超类中的方法(比如大小写写错了,或者参数错了,或者是子类自己定义的方法),编译器就会生成一个错误。

Deprecated注解
可以修饰类、方法、变量,在java源码中被@Deprecated修饰的类、方法、变量等表示不建议使用的,可能会出现错误的,可能以后会被删除的类、方法等,如果现在使用,则在以后使用了这些类、方法的程序在更新新的JDK、jar包等就会出错,不再提供支持。    
个人程序中的类、方法、变量用@Deprecated修饰同样是不希望自己和别人在以后的时间再次使用此类、方法。  
当编译器编译时遇到了使用@Deprecated修饰的类、方法、变量时会提示相应的警告信息。

SuppressWarnings注解
可以达到抑制编译器编译时产生警告的目的,但是很不建议使用@SuppressWarnings注解,使用此注解,编码人员看不到编译时编译器提示的相应的警告,不能选择更好、更新的类、方法或者不能编写更规范的编码。
同时后期更新JDK、jar包等源码时,使用@SuppressWarnings注解的代码可能受新的JDK、jar包代码的支持,出现错误,仍然需要修改。

4、

public class Test
{
    public int x;
    public static void main(String []args)
    {
        System. out. println("Value is" + x);
    }
}

对于上面这段代码,以下说法正确的是: C

A、程序会打出 "Value is 0"
B、程序会抛出 NullPointerException
C、非静态变量不能够被静态方法引用
D、编译器会抛出 "possible reference before assignment"的错误

解析:
当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。

5、下面哪一项不是加载驱动程序的方法?

A、通过DriverManager.getConnection方法加载
B、调用方法 Class.forName
C、通过添加系统的jdbc.drivers属性
D、通过registerDriver方法注册

解析:
加载驱动方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

注:DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的。

6、(多选)以下集合对象中哪几个是线程安全的(C D)

A、LinkedList
B、ArrayList
C、Vector
D、Hashtable

解析:
简单记忆线程安全的集合类: 喂!SHE!  喂是指  vector,S是指 stack, H是指    hashtable,E是指:Eenumeration

7、(多选)下列哪些情况下会导致线程中断或停止运行(   AB   )

A、InterruptedException异常被捕获
B、线程调用了wait方法
C、当前线程创建了一个新的线程
D、高优先级线程进入就绪状态

解析:
A选项正确,Java中一般通过interrupt方法中断线程
B选项正确,线程使用了wait方法,会强行打断当前操作,进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态
C选项错误,新创建的线程不会抢占时间片,只有等当前线程把时间片用完,其他线程才有资格拿到时间片去执行。
D选项错误,调度算法未必是剥夺式的,而准备就绪但是还没有获得CPU,它的权限更高只能说明它获得CPU被执行的几率更大而已
 
 
8、
下面关于Java package的描述,哪个是正确的:(B)
I. 包不提供将所有类名分区为更易管理的块的机制.
II. 包提供可见性控制机制.
III. 包的一个重要属性是包内定义的所有类都可以通过该包外的代码访问.
IV. 声明为包的一部分的类的.class文件可以存储在多个目录中.
A、只有I
B、只有II
C、只有III
D、只有IV

解析:
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
  • 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

  • 2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

  • 3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

  Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

9、 对于abstract声明的类,下面说法正确的是   E

A、可以实例化
B、不可以被继承
C、子类为abstract
D、只能被继承
E、可以被抽象类继承

解析:
A,抽象类不能实例化,因为有抽象方法未实现
B,可以被继承。派生类可以实现抽象方法
C,子类可以是抽象的,也可以非抽象的
D,只能被继承说法太肯定,不正确
E,可以被抽象类继承,也可以被非抽象类继承
 
10、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.  B
A、正确
B、错误

解析:

11、以下哪些jvm的垃圾回收方式采用的是复制算法回收  AD

A、新生代串行收集器
B、老年代串行收集器
C、并行收集器
D、新生代并行回收收集器
E、老年代并行回收收集器
F、cms收集器
解析:
两个最基本的java回收算法:复制算法和标记清理算法
复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
Parallel Old(并行)收集器,针对老年代,标记整理
CMS收集器,基于标记清理
G1收集器:整体上是基于标记 整理 ,局部采用复制
 
综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。
 
      
 
12、Java程序的种类有( BCD)
A、类(Class)
B、Applet
C、Application
D、Servlet

解析:

   Java程序的种类有:

(a)内嵌于Web文件中,由浏览器来观看的_Applet

(b)可独立运行的 Application

(c)服务器端的 Servlets

 
 
13、下列有关Servlet的生命周期,说法不正确的是? A
A、在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B、在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C、在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D、destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
解析:
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
 
 
 
14、It is an important feature of the Java language that it always provides a default constructor to a class.  A
A、FALSE
B、TRUE

解析:
只有在不显示声明构造方法时,系统才提供默认无参构造方法。
 
  
 
15、一般有两种用于创建线程的方法,一是(),二是()。  BD
A、从Java.lang.Thread类派生一个新的线程类,重写它的runnable()方法
B、从Java.lang.Thread类派生一个新的线程类,重写它的run()方法
C、实现Thread接口,重写Thread接口中的run()方法
D、实现Runnable接口,重写Runnable接口中的run()方法

解析:
创建线程对象两种方式:
1.继承Thread类,重载run方法;
2.实现Runnable接口,实现run方法
 
16、以下哪些内存区域属于JVM规范?( ADE )
A、方法区
B、实例变量
C、静态变量
D、程序计数器
E、虚拟机栈

解析:
JVM内存区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包括常量池)。
不属于JVM内存区:直接内存(Direct Memory),用户I/O操作。
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/buhuiflydepig/p/12325422.html