Java面试题(五)

互联网 2022/5/14 14:21:14

1.Integer与int的区别 int是java提供的8种原始数据类型之一,Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。 int的默认值为0,而Integer的默认值为null 要想表达出没有参加考试和考试成绩为0的区别 2.java.sql.Date和java.util.Date的联系和区别 java…

1.Integer与int的区别

int是java提供的8种原始数据类型之一,Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

int的默认值为0,而Integer的默认值为null

要想表达出没有参加考试和考试成绩为0的区别

2.java.sql.Date和java.util.Date的联系和区别

java.sql.Date 和 java.util.Date 最大的不同在于 java.sql.Date 只记录日期,而没有具体这一天的时间。

所以举例来说,如果当前是2009-12-24 23:20,你创建一个 java.sql.Date 将只记下2009-12-24这个信息。

若你需要保留时间进行JDBC操作,请使用 java.sql.Timestamp 代替。

3.递归应用题

题目 : 使用递归算法输出某个目录下及其子目录下所有文件. 递归 : 自动调用自己 , 需要定义递归出口. blog.kuangstudy.com 编辑,整理 by 秦疆 题目分析 : 参数为一个指定的目录 . 输出所有文件列表;

import java.io.File;
public class ShowFile {
private static void test(String path) {
File f = new File(path);
File[] fs = f.listFiles();
  if (fs == null) {
    return;
  }
  for (File file : fs) {
//如果是文件就直接打印出来,否则就递归循环
  if (file.isFile()) {
  System.out.println(file.getPath());
  } else {
  test(file.getPath());
}
}
}
  public static void main(String[] args) {
  String path = "E:\\生活\\图片";
  test(path);
}
}

 4.说明内存泄漏和内存溢出的区别和联系,结合项目经验描述Java程序中如何检测?如何解决?

1、内存泄漏memory leak :

是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果 就是内存溢出。

2、内存溢出 out of memory

指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存 储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。

3.内存溢出的原因及解决方法:

3.1内存溢出原因:

内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 集合类中有对对象的引用,使用完后未清空,使得 JVM不能回收; 代码中存在死循环或循环产生过多重复的对象实体; 使用的第三方软件中的BUG; 启动参数内存值 设定的过小

3.2内存溢出的解决方案:

第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)

第二步,检查错误日志,查看“OutOfMemory”错误前是否有其 它异常或错误。

第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

5.什么是Java的序列化,如何实现Java的序列化?

Java中的序列化机制能够将一个实例对象的状态信息 写入到一个字节流中使其可以通过socket进行传输、或者持久化到存储数据库或文件系统中;然后在需要的时候通过 字节流中的信息来重构一个相同的对象。

一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接 口即可。

对象的序列化主要有两种用途:

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2) 在网络上传送对象的字节序列。

6.不通过构造函数也能创建对象吗?

Java创建对象的几种方式(重要):

1、 用new语句创建对象,这是最常见的创建对象的方法。

2、 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

3、 调用对象的clone()克隆方法。

4、运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

(1)和(2)都会明确的显式的调用构造函数 ;

(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;

(4)是从文件中还原类的对象,也不会调用构造函数。

7.在Java中,为什么基本类型不能做为HashMap的键值,而只能是引用类型,把引用类型 做为HashMap的健值,需要注意哪些地方。

在Java中是使用泛型来约束HashMap中的key和value的类型的,即HashMap<k, v="">;而泛型在Java的规定中必须是 对象Object类型的,也就是说HashMap<k, v="">可以理解为HashMap<object,object>,很显然基本数据类型不是 Object类型的,因此不能作为键值,只能是引用类型。虽然我们在HashMap中可以这样添加数据:“map.put(1, “Java”);”,但实际上是将其中的key值1进行了自动装箱操作,变为了Integer类型。

引用数据类型分为两类:系统提供的引用数据类型(如包装类、String等)以及自定义引用数据类型。系统提供的引 用数据类型中已经重写了HashCode()和equals()两个方法,所以能够保证Map中key值的唯一性;

8.Java中,如果Manager是Employee的子类,那么 Pair<Manager>是 Pair <Employee>的子类吗? 

不是,两者没有任何关联;

Pair是单独的类,只不过用不同类型的参数(泛型)进行了相应的实例化而已

9.接口和抽象类的区别

相同点

抽象类和接口均包含抽象方法,类必须实现所有的抽象方法 .

抽象类和接口都不能实例化,他们位于继承树的顶端,用来被其他类继承和实现

两者的区别主要体现在两方面:语法方面和设计理念方面

语法方面的区别是比较 低层次的,非本质的,主要表现在:

接口 抽象类
只能定义全局静态常量,不能定义变量 定义常量和变量。
所有的方法都是全局抽象方法 可以有0个、1个或多个,甚至全部都是抽象方法。 
不能定义构造方法。 可以有构造方法,但不能用来实例化
使用implements来实现接口 一个类使用extends来继承抽象类
但可以充实实现多个接口 一个类只能有一个直接父类(可以是抽象类)

设计理念上

抽象类体现了一种继承关系,目的是复用代码,抽象类中定义了各个子类的相同代码

接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什
么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。

10.同步代码块和同步方法有什么区别

相同点:

同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。

区别:

同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。

很明显,同步方法锁的范围比较大,而同步代码块范围要小点。一般同步的范围越大,性能就越差。所以一般需要加锁进行同步的时候,范围越小越好,这样性能更好。


 若存在侵权,请联系,谢谢

 

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Java面试题(五)]http://www.zyiz.net/tech/detail-320934.html

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>