Java基础笔试练习(二)

Java基础笔试练习(二)

1. HashMap的数据结构是怎样的?

A.数组 B.链表 C.数组+链表 D.二叉树java

答案: Cgit

解析:程序员

JDK8之后,HashMap的数据结构是数组+链表+红黑树github

2. 在 JAVA 编程中,Java 编译器会将 Java 程序转换为( )?

A.字节码 B.可执行代码 C.机器代码 D.以上都不对面试

答案:
Asql

解析:编程

  • 编译器将Java源代码编译成字节码class文件
  • 类加载到JVM里面后,执行引擎把字节码转为可执行代码
  • 执行的过程,再把可执行代码转为机器码,由底层的操做系统完成执行。

3.下面有关JVM内存,说法错误的是?

A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的 B.Java方法执行内存模型,用于存储局部变量,操做数栈,动态连接,方法出口等信息,是线程隔离的 C.方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的 D.原则上讲,全部的对象都在堆区上分配内存,是线程之间共享的数组

答案: C浏览器

解析: 运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器安全

  • 虚拟机栈区:也就是咱们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。
  • 堆区:JAVA 堆,也称 GC 堆,全部线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。 -方法区:全部线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。
  • 程序计数器:线程私有,每一个线程都有本身独立的程序计数器,用来指示下一条指令的地址。
  1. JAVA中,下列语句哪个正确()

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

答案: C

解析: A 省略构造函数,编译器会自动生成。 D 构造函数能够重载 B 方法是能够和类名同名的,和构造方法惟一的区别就是,构造方法没有返回值。

5.在JAVA中,假设A有构造方法A(int a),则在类A的其余构造方法中调用该构造方法和语句格式应该为()

A.this.A(x) B.this(x) C.super(x) D.A(x)

答案: B

解析: this的做用其中一个就是在一个构造方法中调用另外一个构造方法,格式为this(参数); super是调用父类的方法; A(a)这种形式是在new一个类时使用。

6.下列选项中属于面向对象程序设计语言特征的是()

A.继承性 B.多态性 C.类似性 D.封装性

答案: A B D

解析: 面对对象三大特征:封装,继承,多态

7.如下哪一个正确?

A.abstract类只能用来派生子类,不能用来建立abstract类的对象。 B.final类不但能够用来派生子类,也能够用来建立final类的对象。 C.abstract不能与final同时修饰一个类。 D.abstract类定义中能够没有abstract方法。

答案: A C D

解析: 一、abstract类不能用来建立abstract类的对象; 二、final类不能用来派生子类,由于用final修饰的类不能被继承; 三、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的; 四、类中有abstract方法必须用abstract修饰,但abstract类中能够没有抽象方法,接口中也能够有abstract方法。

8. JAVA反射机制主要提供了如下哪些功能?

A.在运行时判断一个对象所属的类 B.在运行时构造一个类的对象 C.在运行时判断一个类所具备的成员变量和方法 D.在运行时调用一个对象的方法

答案: A B C D

解析: Java反射机制主要提供了如下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具备的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。 所以,答案为:ABCD

9.如下关于Histroy对象的属性或方法描述正确的是()

A.bcak回到浏览器载入历史URL地址列表的当前URL的前一个URL B.go表示刷新当前页面 C.length保存历史URL地址列表的长度信息 D.forward转到浏览器载入历史URL地址列表的当前URL的下一个URL。

答案: A D

解析:

选A、D。考察的是浏览器的内置对象管理模型,简称BOM(Browser Object Model)中的Histroy属性和方法。

  • length 返回浏览器历史列表中的URL数量。因此C中表述的长度信息是错误的。
  • back() 加载 history列表中的前一个URL。
  • forward() 加载 history 列表中的下一个URL。
  • go() 加载history列表中的某个具体页面。因此B的表述刷新当前页面是错误的。

10.

public class NameList
{
    private List names = new ArrayList();
    public synchronized void add(String name)
    {
        names.add(name);
    }
    public synchronized void printAll()     {
        for (int i = 0; i < names.size(); i++)
        {
            System.out.print(names.get(i) + ””);
        }
    }
 
    public static void main(String[]args)
    {
        final NameList sl = new NameList();
        for (int i = 0; i < 2; i++)
        {
            new Thread()
            {
                public void run()
                {
                    sl.add(“A”);
                    sl.add(“B”);
                    sl.add(“C”);
                    sl.printAll();
                }
            } .start();
        }
    }
}

复制代码

Which two statements are true if this class is compiled and run?

A.An exception may be thrown at runtime. B.The code may run with no output, without exiting. C.The code may run with no output, exiting normally(正常地). D.The code may rum with output “A B A B C C “, then exit. E.The code may rum with output “A B C A B C A B C “, then exit. F.The code may ruin with output “A A A B C A B C C “, then exit. G.The code may ruin with output “A B C A A B C A B C “, then exit.

答案: E G

解析:

在每一个线程中都是顺序执行的,因此sl.printAll();必须在前三句执行以后执行,也就是输出的内容必有(连续或非连续的)ABC。而线程之间是穿插执行的,因此一个线程执行 sl.printAll();以前可能有另外一个线程执行了前三句的前几句。 E答案至关于线程1顺序执行完而后线程2顺序执行完。 G答案则是线程1执行完前三句add以后线程2插一脚执行了一句add而后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC 输出加起来即为ABCAABCABC。

11. 关于容器下面说法正确的是? ( )

A.列表(List)和集合(Set)存放的元素都是可重复的。 B.列表(List)和集合(Set)存放的元素都是不可重复的。 C.映射(Map)<key,value>中key是能够重复的。 D.映射(Map)<key,value>中value是能够重复的。

答案: D

解析: 列表(List)的元素是有序、可重复的; 集合(Set)的元素是无序、不可重复的。

12.如下说法错误的是?()

A.数组是一个对象 B.数组不是一种原生类 C.数组的大小能够任意改变 D.在Java中,数组存储在堆中连续内存空间里

答案: C

解析: 在java中,数组是一个对象,不是一种原生类,对象因此存放在堆中,又由于数组特性,是连续的,只有C不对

13.下列哪一个修饰符可使在一个类中定义的成员变量只能被同一包中的类访问?

A.private B.无修饰符 C.public D.protected

答案: B

解析:

解析

14.关于如下程序代码的说明正确的是?

public class HasStatic {
	private static int x = 100;

	public static void main(String args[]) {
		HasStatic hs1 = new HasStatic();
		hs1.x++;
		HasStatic hs2 = new HasStatic();
		hs2.x++;
		hs1 = new HasStatic();
		;
		hs1.x++;
		HasStatic.x--;
		System.out.println("x=" + x);
	}
}

复制代码

A.程序经过编译,输出结果为:x=103 B.10行不能经过编译,由于x是私有静态变量 C.5行不能经过编译,由于引用了私有静态变量 D.程序经过编译,输出结果为:x=102

答案: D

解析: 此题选择D。 首先要了解static的意思。

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也能够造成静态static代码块,可是Java语言中没有全局变量的概念。 static变量在第一次使用的时候初始化,但只会有一份成员对象。 因此这里不只能够调用,并且每一次调用都确实修改了x的值,也就是变化状况是这样的: x=101 x=102 x=103 x=102

15.如何放掉一个指定占据的内存空间?()

A.调用free()方法 B.代用system.gc()方法 C.赋值给该项对象的引用为null D.程序员没法明确强制垃圾回收器运行

答案: D

解析: 在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,可是程序员没法明确强制其运行,该空间在不被引用的时候不必定会当即被释放,这取决于GC自己,没法由程序员经过代码控制。

16.通常状况下,如下哪一个选项不是关系数据模型与对象模型之间匹配关系?

A.表对应类 B.记录对应对象 C.表的字段对应类的属性 D.表之间的参考关系对应类之间的依赖关系

答案: D

解析: 通常关系数据模型和对象数据模型之间有如下对应关系:表对应类,记录对应对象,表的字段对应类的属性

17.下列关于Java并发的说法中正确的是()

A.CopyOnWriteArrayList适用于写多读少的并发场景 B.ReadWriteLock适用于读多写少的并发场景 C.ConcurrentHashMap的写操做不须要加锁,读操做须要加锁 D.只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操做的时候就是线程安全的了

答案: B

解析: A,CopyOnWriteArrayList适用于写少读多的并发场景 B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间能够并发执行。在读多写少的状况下能够提升效率 C,ConcurrentHashMap是同步的HashMap,读写都加锁 D,volatile只保证多线程操做的可见性,不保证原子性

18.如下代码执行后输出结果为( )

public class Test
{
    public static Test t1 = new Test();
    {
         System.out.println("blockA");
    }
    static
    {
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
        Test t2 = new Test();
    }
 }

复制代码

A.blockAblockBblockA B.blockAblockAblockB C.blockBblockBblockA D.blockBblockAblockB

答案: A

解析: 静态块:用static申明,JVM加载类时执行,仅执行一次 构造块:类中直接用{}定义,每一次建立对象时执行 执行顺序优先级:静态块>main()>构造块>构造方法 静态块按照申明顺序执行,先执行Test t1 = new Test(); 全部先输出blockA,而后执行静态块,输出blockB,最后执行main 方法中的Test t2 = new Test();输出blockA。

19.有关hashMap跟hashTable的区别,说法正确的是?

A.HashMap和Hashtable都实现了Map接口 B.HashMap是非synchronized,而Hashtable是synchronized C.HashTable使用Enumeration,HashMap使用Iterator D.HashMap容许将 null 做为一个 entry 的 key 或者 value,而 Hashtable 不容许。

答案: ABCD

解析:

A正确。Map是一个接口,hashtable,hashmap都是它的实现。 B正确。因为Hashtable是线程安全的也是synchronized,因此在单线程环境下它比HashMap要慢。若是你不须要同步,只须要单一线程,那么使用HashMap性能要好过Hashtable。 C正确。HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。因此当有其它线程改变了HashMap的结构(增长或者移除元素),将会抛出ConcurrentModificationException,但迭代器自己的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并非一个必定发生的行为,要看JVM。这条一样也是Enumeration和Iterator的区别。 D正确。 哈希值的使用不一样,HashTable直接使用对象的hashCode,代码是这样的:

int hash = key.hashCode();
      int index = (hash & 0x7FFFFFFF) % tab.length;
复制代码

而HashMap从新计算hash值,并且用与代替求模: int hash = hash(k); int i = indexFor(hash, table.length);

20.如下能够正确获取结果集的有?

A.Statement sta=con.createStatement(); ResultSet rst=sta.executeQuery(“select * from book”);

B.Statement sta=con.createStatement(“select * from book”); ResultSet rst=sta.executeQuery();

C.PreparedStatement pst=con.prepareStatement(); ResultSet rst=pst.executeQuery(“select * from book”);

D.PreparedStatement pst=con.prepareStatement(“select * from book”); ResultSet rst=pst.executeQuery();

答案: A D

解析: A,D是正确的;建立Statement是不传参的,PreparedStatement是须要传入sql语句 说一下preparedStatement和statement的区别与联系:在JDBC应用中,若是你已是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任什么时候候都不要使用Statement。
PreparedStatement 接口继承 Statement,PreparedStatement 实例包含已编译的 SQL 语句,因此其执行速度要快于Statement对象。Statement为一条Sql语句生成执行计划,若是要执行两条sql语句select colume from table where colume=1;select colume from table where colume=2; 会生成两个执行计划一千个查询就生成一千个执行计划! PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 经过set不一样数据只须要生成一次执行计划,能够重用

推荐

Java笔试内容集合 持续更新中....

文末

欢迎关注我的微信公众号:Coder编程 获取最新原创技术文章和免费学习资料,更有大量精品思惟导图、面试资料、PMP备考资料等你来领,方便你随时随地学习技术知识!

文章收录至

Github: github.com/CoderMerlin…

Gitee: gitee.com/573059382/c… 欢迎关注并star~

微信公众号
相关文章
相关标签/搜索