java面试题

JVM(java虚拟机)

说一下jvm的主要组成部分?及其作用?

https://blog.csdn.net/qq_30443907/article/details/82979313

https://blog.csdn.net/zuokaopuqingnian/article/details/78735425

1. Class Loader 类加载器

    加载.class文件,check .class文件,只要符合check标准就通过并加载,然后交给Execution Engine运行。

        需要详细了解check标准的话,可以仔细阅读《JVM Specification》的第四章“The class File Format”

2. Execution Engine 执行引擎

    执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。

3. Native Interface本地接口 

    本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候是C/C++横
行的时候,要想立足,必须有一个聪明的、睿智的调用C/C++程序,于是就在内存中专门开辟了一块区域处理
标记为native的代码,它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时
加载native libraies。目前该方法使用的是越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印
机,或者Java系统管理生产设备,在企业级应用中已经比较少见,因为现在的异构领域间的通信很发达,比如
可以使用Socket通信,也可以使用Web Service等等(两台联网的计算机之间交换数据的技术),不多做介绍。
4. Runtime data area运行数据区

 

5. Stack 栈

 

6. Heap 堆内存

 

7. Method Area 方法区

 

8. PC Register 程序计数器

    每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码,由执行引擎读取下一条指令。

    几乎不占内存,用于取下一条指令

9. Native Method Stack 本地方法栈

 

java基础

jdk和jre有什么区别

jdk就是sdk,开发工具包。jdk基本都是用java语言编写的

jre的核心是jvm,以及java核心部分。java核心部分是c语音写的。

所有安装jdk时会连带安装jre,不然jdk无法运行

 

两个对象的hashCode()相同,则equals()也一定为true,对吗?

不对

  hashCode是所有java对象的固有方法,如果不重载的话,返回的实际上是该对象在jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同了。如果重载了的话,由于采用的算法的问题,有可能导致两个不同对象的hashCode相同。

 

哈希算法

      哈希表是结合了直接寻址和链式寻址两种方式,所需要的就是将需要加入哈希表的数据首先计算哈希值,其实就是预先分个组,然后再将数据挂到分组后的链表后面,随着添加的数据越来越多,分组链上会挂接更多的数据,同一个分组链上的数据必定具有相同的哈希值,java中的hash函数返回的是int类型的,也就是说,最多允许存在2^32个分组,也是有限的,所以出现相同的哈希码就不稀奇。

 

final在java中有什么作用?

1.修饰类当用final去修饰一个类的时候,表示这个类不能被继承。

2. 修饰方法

被final修饰的方法不能被重写。

3. 修饰全局变量

a. 必须要赋初始值,而且是只能初始化一次。

4.修饰局部变量(方法体中的变量)

 

a. 必须初始化值。

 

b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。

 

c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

 

d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

 

java中的Math.round(-1.5)等于多少?

-1

 

-1.4     -1

-1.6     -2

-1.50    -1

-1.51    -2

1.50     1

1.51     2

 

java中操作字符串都有哪些类?它们之间有什么区别?

https://blog.csdn.net/meism5/article/details/89328490

 

String、StringBuffer、StringBuilder

 

String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。

String str="Hello"和String str=new String("Hello")一样吗?

String str1 = "Hello";

String str2 = new String("Hello");

System.out.println(str1 == str2);      false

 

String str3 = new String("Hello");

String str4 = new String("Hello");

System.out.println(str3 == str4);     false

 

String str5 = "Hello";

String str6 = "Hello";

System.out.println(str5 == str6);     true

 

new的直接在堆里建个新的。

不是new的去栈里找有没有指向堆里相同内容的,有就直接指向。没有的话在堆里建个新的。

 

posted @ 2019-07-07 19:25  小狗吃月亮  阅读(237)  评论(0编辑  收藏  举报