ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java面试题(五)

2022-05-14 13:31:08  阅读:120  来源: 互联网

标签:面试题 java HashMap 内存 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实现加锁,同步代码块则在方法内部加锁。

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


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

 

标签:面试题,java,HashMap,内存,Java,抽象类,方法
来源: https://www.cnblogs.com/com-Jacob/p/16263550.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有