Java面试题(1)

1.JDK与JRE的区别

JDK:java开发工具包,提供了环境和运行环境。 JRE:java运行环境,包含了java源码编译器Javac以及调试和分析的工具。

JDK中已经包含了JRE,如果仅需要运行Java程序,只需要安装JRE就可以。

(1)Java程序运行流程 Java源文件(HelloWorld.java)经过Java编译器(javac)为字节码文件(HelloWorld.class)再由虚拟 机(JVM)的Java解释器翻译成适合该计算机运行的可执行文件。 编码->编译->执行

(2)字节码文件解释过程 由JVM的装载器->字节校验器->Java解释器最终解释为该计算机适合的机器语言进行执行

2.==与equals的区别

“==”对于基本数据类型来说是“值比较”,对于引用类型来说是“引用比较”;而“equals”默认为“引用比 较”,经过String、Integer等类的重写,成为了“值比较”。

3.哈希值相同,内容也相同吗

不一定。哈希值(hashCode)相同,内容不一定相同。不同的内容,哈希值可能相同。不同内容经过 哈希函数计算后可能得出相同的哈希值,这就涉及到了哈希冲突。 (1)哈希冲突的解决办法 1. 开放地址法(再散列法):当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另 一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不 冲突的哈希地址pi 2. 链地址法:将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在 哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行 插入和删除的情况。 3. 再哈希法:Hi=RH1(key) i=1,2,…,k。当哈希地址Hi=RH1(key)发生冲突时,再计算 Hi=RH2(key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。 (2)哈希值的计算 简单计算法:各成员的哈希值相加,假设数组[a,b,c], 加权计算法:假设两个数组[a,b,c]、[c,a,b],如果直接进行简单计算得出的哈希值是相同的,但是如果 根据索引进行加权计算就可以得到基本很少重复的哈希值。 (3)哈希值应该符合的原则 1. 等幂性:多次获取哈希值后,只要对象不变,那么哈希值是固定不变的。 2. 对等性:如果两个对象equals相等,那么两者的哈希值也是相等的。 3. 互异性:如果两个对象equals不等,那么两者的哈希值最好是不同的,减少碰撞(哈希冲突)。 (4)==在判断对象时,依据的什么 “==”在判断对象时,根据的是对象在堆栈中的地址,而不是根据哈希值判断。

4.final在java中的作用

1. 修饰类:最终类,不可被继承,且类中的成员方法都被隐式的指定为final方法。 2. 修饰方法:不可被重写,防止继承类修改该方法;提高效率,使用该关键字可以省略调用的过程, 从而直接将方法的主题插入到调用处。 3. 修饰变量:防止变量的值发生改变。修饰基本类型数据变量:该变量的值不能发生改变;修饰引用 类型数据变量:该变量不会二次初始化,因为值是一个地址,所以无法二次初始化改变地址;但是 该引用变量的内容却是可变的。

5.String属于基础的数据类型吗

不属于。String属于类,是引用数据类型。

(1)java中的数据类型 1. 基本数据类型: byte、boolean、char、short、int、float、long、double 2. 引用数据类型:class、interface、array

(2)java中的关键字 共有51+2(保留字)个关键字(都是小写)

1. 两个保留字:const(用于修改字段或局部变量的声明,指定字段或变量为常数)、goto(指定跳 转到标签,找到后将从该标签向下执行)

2. 访问修饰符关键字:public(当前工程)、protected(当前包及子类)、default(当前包)、private(当前 类)

3. 类、接口、对象等相关修饰符:class、interface、abstract(抽象)、implements、extends、new 4. 包关键字:import(引入)、package(定义)

5. 语法相关关键字:if、else、while、for、switch、case、default、do、break、continue、 return、instanceof(实例,二元操作符,用于测试左边的对象是否是右边的类的实例,返回 boolean)

6. 类、方法、属性、变量相关关键字:static、final、super、this、native(本地)、strictfp(严格)、 synchronized(线程、同步)、transient(短暂)、volatile(易失) Add:static关键字修饰的变量或方法可以通过类名直接调用,而非静态的变量或 方法无法通过类名直接调用

7. 异常:catch、try、finally、throw(抛出)、throws(声明)

(3)super和this的区别 1. super:指向自己父类,可以引用父类成员(super.xxx),可以引用父类的构造函数(super(参 数):只能放在引用的构造函数的首行) 2. this:指向自己本身,可以引用自己的属性(常用于区分自身的变量名和构造函数的参数。),可 以引用构造函数(this(参数):只能放在构造函数的首行,且只能调用一个) 3. 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。 super和this关键字必须放在方法的首行,所以两者不能同时出现!

你可能感兴趣的:(java,java,哈希算法,开发语言)