牛客网:Java选择题(5)

解析:C

A.肯定错

B.int是java的基础类型,并不是类

D.还可能有一些符号如:_   &

解析:D

int 是八大基本数据类型之一(byte,short,int,long,float,double,char,boolean)
Integer 是 int 包装类
int是基本数据类型,默认值为0
Integer 是类,默认值为null
Integer 表示的是对象,用一个引用指向这个对象
int是基本数据类型,直接存储数值

解析:D

一个.java文件中,可以有多个类,包括内部类和外部类。考虑到内部类的原因,一个.java文件可以中可以有多个public类

但是对于外部类而言,一个.java文件必须只能有一个public类,同时这个类的类名必须和.java的文件名一致(包括大小写)

解析:B

解析:C

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块

多线程访问volatile不会发生阻塞,而synchronized会出现阻塞

volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步

关键字volatile解决的下变量在多线程之间的可见性;而synchronized解决的是多线程之间资源同步问题

解析:A

A的答案中变量虽然为private,但因为main函数在该类中,所以即使private也仍可使用

B的答案static变量不能使用this

解析:C

首先:创建并启动线程的过程为:定义线程—>实例化线程—>启动线程。

一 、定义线程:

 1、扩展java.lang.Thread类。 2、实现java.lang.Runnable接口。

二、实例化线程: 

1、如果是扩展java.lang.Thread类的线程,则直接new即可。

2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:

        Thread(Runnable target) 
        Thread(Runnable target, String name) 
        Thread(ThreadGroup group, Runnable target) 
        Thread(ThreadGroup group, Runnable target, String name) 
        Thread(ThreadGroup group, Runnable target, String name, long stackSize)

所以A、D的实例化线程错误。

三、启动线程: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

解析:A

A.HashMap不能保证元素的顺序,HashMap的底层是由数组+链表实现的,对于每一个key值,都需要计算哈希值,然后通过哈希值来确定顺序,并不是按照加入顺序来存放的,因此可以认为是无序的,但不管是有序还是无序,它都一个自己的顺序。而LinkedHashMap可以保持数据的插入顺序,TreeMap可以按照键值进行排序(可自定比较器)

B.HashMap允许存在多条null值

C.HashMap允许且仅允许一条null键

D.Map就是通过键/值形式保存数据的

解析:C

解析:A

1.Java三大注解分别是@Override @Deprecated @Suppresswarnings

2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错

3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等

4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务

解析:D

Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法

解析:B

类的加载包括:加载,验证,准备,解析,初始化。

选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。

选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。

选项C:这个会调用。可以用反射试验。

选项D:类方法解析发生在解析过程。

解析:A

shell中的特殊变量:
$0:shell或shell脚本的名字
$*:以一对双引号给出参数列表
$@:将各个参数分别加双引号返回
$#:参数的个数
$_:代表上一个命令的最后一个参数
$$:代表所在命令的PID
$!:代表最后执行的后台命令的PID
$?:代表上一个命令执行后的退出状态  echo $? 如果返回值是0,就是执行成功;如果是返回值是0以外的值,就是失败。

解析:AD

1、单例类只能有一个实例

2、单例类必须自己创建自己的唯一实例

3、单例类必须给所有其他对象提供这一实例

解析:ABD

A项 一个类中有抽象方法则必须申明为抽象类

B项 抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须定义为抽象类

D项 一个类实现一个接口就必须实现其中所有的抽象方法,若该实现类不能实现接口中的所有方法则实现类定义为抽象类

解析:ACD

普通类(外部类):只能用public、default(不写)、abstract、final修饰。

成员(内部类):可理解为外部类的成员,所以修饰类成员的public、protected、default、private、static等关键字都能使用。

局部内部类:出现在方法里的类,不能用上述关键词来修饰。

匿名内部类:给的是直接实现,类名都没有,没有修饰符。

解析:ABC

A:属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题,

B:属于堆空间不足导致的错误,问题比较少见,解决方式和C相同,

C:属于java堆内存问题,一般的手段是通过内存映像分析工具,对Dump出来的堆转储存快照进行分析,重点是确认内存中的对象是否是有必要的,也就是要判断是出现了内存泄漏,还是出现了内存溢出,如果是内存列楼,通过工具检查泄露对象打GC Roots的引用链信息,可以准确的确定出泄露代码的位置,不存在泄露,就应该检查虚拟机的堆参数,如果可以继续调大,可以设置-Xmx解决问题

D:java.lang.OutOfMemoryError: nativeGetNewTLA指当虚拟机不能分配新的线程本地空间(Thread Local Area)的时候错误信息,此错误是线程申请一个新的TLA时产生的,这个异常一般只会发生在jRockit虚拟机,只有过于绝对。

解析:BD

volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.

volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.

volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.

volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.

volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.

解析:AC

A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的***线程安全队列,该队列的元素遵循FIFO原则。

解析:ACD

Servlet的生命周期一般可以用三个方法来表示:

  1. init():仅执行一次,负责在装载Servlet时初始化Servlet对象
  2. service() :核心方法,一般HttpServlet中会有get,post两种处理方式。在调用doGet和doPost方法时会构造servletRequest和servletResponse请求和响应对象作为参数。
  3. destory():在停止并且卸载Servlet时执行,负责释放资源

初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。所以选ACD。B是在调用service方法时才构造的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值