Java教程

牛客刷题日记(2021-11-8--11-9)

本文主要是介绍牛客刷题日记(2021-11-8--11-9),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

牛客刷题日记(2021-11-8)

题目:

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

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

解析:

正确答案: D

这里是引用


题目:

A 是抽象父类或接口, B , C 派生自 A ,或实现 A ,现在 Java 源代码中有如下声明:

1. A  a0=new  A();

2. A  a1 =new  B();

3. A  a2=new  C();

问以下哪个说法是正确的?( )

第1行不能通过编译
第1、2行能通过编译,但第3行编译出错
第1、2、3行能通过编译,但第2、3行运行时出错
第1行、第2行和第3行的声明都是正确的

解析:

正确答案: A

抽象类和接口都不能实例化


题目:

以下代码运行输出的是
public class Person{
	private String name = "Person";
	int age=0;
}
public class Child extends Person{
	public String grade;
	public static void main(String[] args){
		Person p = new Child();
		System.out.println(p.name);
	}
}
A.输出:Person
B.没有输出
C.编译出错
D.运行出错

解析:

正确答案: C

Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。


题目:

判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。

A.对
B.错

解析:

正确答案: B

java多态有两种情况:重载和覆写
在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法


题目:

java运行时内存分为“线程共享”和“线程私有”两部分,以下哪些属于“线程共享”部分

A.程序计算器
B.方法区
C.java虚拟机栈
D.java堆

解析:

正确答案: B D

私有:java虚拟机栈,程序计数器,本地方法栈 共享:java堆,方法区


题目:

final、finally和finalize的区别中,下述说法正确的有?

A.final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
B.finally是异常处理语句结构的一部分,表示总是执行。
C.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
D.引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。

解析:

正确答案: A B

选AB
A,D考的一个知识点,final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。
B,finally表示总是执行。但是其实finally也有不执行的时候,但是这个题不要扣字眼。

  1. 在try中调用System.exit(0),强制退出了程序,finally块不执行。
  2. 在进入try块前,出现了异常,finally块不执行。
    C,finalize方法,这个选项错就错在,这个方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。
    放一张图吧

题目:

有关线程的叙述正确的是()
A.可以获得对任何对象的互斥锁定
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C.线程通过使用synchronized关键字可获得对象的互斥锁定
D.线程调度算法是平台独立的

解析:

A,“任何对象”锁定,太绝对了,你能锁住你没有权限访问的对象吗?
B,前半句话讲的是创建线程的方式,后半句讲的是锁定,驴头不对马嘴。
C,正确。
D,线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平***立的原因。
以上,选CD


题目:

以下各类中哪几个是线程安全的?( )

A.ArrayList
B.Vector
C.Hashtable
D.Stack

解析:

BCD
在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:

vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。

statck:堆栈类,先进后出

hashtable:就比hashmap多了个线程安全

enumeration:枚举,相当于迭代器

除了这些之外,其他的都是非线程安全的类和接口。


2020-11-9

题目:

一个类的构造器不能调用这个类中的其他构造器。( )
A.正确
B.错误

解析:

正确答案: B

this()和super()都是构造器,this()调用本类构造器,super()调用父类构造器


题目:

以下哪个不属于JVM堆内存中的区域()?

A.survivor区
B.常量池
C.eden区
D.old区

解析:

正确答案: B

jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。
常量池属于 PermGen(方法区)


题目:

Which method you define as the starting point of new thread in a class from which n thread can be execution?
下列哪一个方法你认为是新线程开始执行的点,也就是从该点开始线程n被执行。

A.public void start()
B.public void run()
C.public void int()
D.public static void main(String args[])
E.public void runnable()

解析:

正确答案: B

题目的意思是,下列哪一个方法你认为是新线程开始执行的点,也就是从该点开始线程n被执行。
了解过线程的知识我们知道:
start()方法是启动一个线程,此时的线程处于就绪状态,但并不一定就会执行,还需要等待CPU的调度。
run()方法才是线程获得CPU时间,开始执行的点。


题目:

将下列哪个代码(A、B、C、D)放入程序中标注的【代码】处将导致编译错误?
class A{
    public float getNum(){
        return 3.0f;
    }
}
public class B extends A{
    【代码】
}

A.public float getNum(){return 4.0f}
B.public void getNum(){}
C.public void getNum(double d){}
D.public double getNum(float d){return 4.0d}

解析:

正确答案: B

方法重写要求方法名,返回值类型,参数完全相同,所以A符合,B返回值类型不同,编译错误。而C和D不仅返回值类型不同,参数也不同,不属于方法重写,而是属于子类自己新增的方法。所以选B


题目:

jre 判断程序是否执行结束的标准是()
A.所有的前台线程执行完毕
B.所有的后台线程执行完毕
C.所有的线程执行完毕
D.和以上都无关

解析:

正确答案: A

来源百度: 后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。 前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。


题目:

在创建派生类对象,构造函数的执行顺序()
A.基类构造函数,派生类对象成员构造函数,派生类本身的构造函数
B.派生类本身的构造函数,基类构造函数,对象成员构造函数
C.基类构造函数,派生类本身的构造函数,派生类对象成员构造函数
D.对象成员构造函数,基类构造函数,派生类本身的构造函数

解析:

正确答案: A

类的初始化过程也就是方法执行的过程。
父类的静态域-子类的静态域 父类的非静态域-父类的构造函数 子类的非静态域-子类的构造函数 规律就是 父类先于子类 静态的先于非静态的
其中静态域包含静态代码块与静态方法,这个谁在前面,则先执行谁。
非静态域同理


题目:

关于HashMap和Hashtable正确的说法有()

A.都实现了Map接口
B.Hashtable类不是同步的,而HashMap类是同步的
C.Hashtable不允许null键或值
D.HashMap不允许null键或值

解析:

正确答案: A C

1、继承不同。public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
2、Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
3、Hashtable中,key和value都不允许出现null值。在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
4、两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
5、哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
6、Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数


题目:

在J2EE中,使用Servlet过滤器,需要在web.xml中配置()元素

A.<filter>
B.<filter-mapping>
C.<servlet-filter>
D.<filter-config>

解析:

答案:AB
Servlet过滤器的配置包括两部分:
第一部分是过滤器在Web应用中的定义,由元素表示,包括和两个必需的子元素
第二部分是过滤器映射的定义,由元素表示,可以将一个过滤器映射到一个或者多个Servlet或JSP文件,也可以采用url-pattern将过滤器映射到任意特征的URL。


题目:

Servlet的生命周期可以分为初始化阶段,运行阶段和销毁阶段三个阶段,以下过程属于初始化阶段是()。

A.加载Servlet类及.class对应的数据
B.创建servletRequest和servletResponse对象
C.创建ServletConfig对象
D.创建Servlet对象

解析:

这里是引用


"编译看左边,运行看右边"(多态执行)

含义:

Animal c = new Cat(); 左边是 Animal 类(或接口) 右边是 Cat()类; 在编译的时候编译器不管你右边是什么类,只要左边的Animal类(或接口)能编译通过就不会报错。但是运行的时候就要按照右边的Cat()类实际情况来运行。

这篇关于牛客刷题日记(2021-11-8--11-9)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!