1.解释 Java 堆空间及 GC?

当通过 Java 命令启动 Java 进程的时候,会为它分配内存。内存的一部分用于创建堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC 是 JVM 内部的一个进程,回收无效对象的内存用于将来的分配。

2.你能保证 GC 执行吗?

不能,虽然你可以调用 System.gc() 或者 Runtime.gc(),但是没有办法保证 GC 的执行。

3.怎么获取 Java 程序使用的内存?堆使用的百分比?

可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及最大堆内存。通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。

Runtime.freeMemory() 方法返回剩余空间的字节数,Runtime.totalMemory() 方法总内存的字节数,Runtime.maxMemory() 返回最大内存的字节数。

4.Java 中堆和栈有什么区别?

JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。

5. “a==b”和”a.equals(b)”有什么区别?

如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,但是包含的字母相同的比较。

6.a.hashCode() 有什么用?与 a.equals(b) 有什么关系?

hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。根据 Java 规范,两个使用 equal() 方法来判断相等的对象,必须具有相同的 hash code。

7.final、finalize 和 finally 的不同之处?

final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。

8.Java 中的编译期常量是什么?使用它又什么风险?

公共静态不可变(public static final )变量也就是我们所说的编译期常量,这里的 public 可选的。实际上这些变量在编译时会被替换掉,因为编译器知道这些变量的值,并且知道这些变量在运行时不能改变。这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,但是这个值后面被其他人改变了,但是你的客户端仍然在使用老的值,甚至你已经部署了一个新的jar。为了避免这种情况,当你在更新依赖 JAR 文件时,确保重新编译你的程序。

9.List、Set、Map 和 Queue 之间的区别

List 是一个有序集合,允许元素重复。它的某些实现可以提供基于下标值的常量访问时间,但是这不是 List 接口保证的。Set 是一个无序集合。

10.poll() 方法和 remove() 方法的区别?

poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。

11.Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么?

PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部,但是 LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue 时,没有任何顺序保证,但是 LinkedHashMap 课保证遍历顺序是元素插入的顺序。

12.ArrayList 与 LinkedList 的不区别?

最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。更多细节的讨论参见答案。

13.用哪两种方式来实现集合的排序?

你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然后通过 Collections.sort() 来排序。

14.Java 中怎么打印数组?

你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。由于数组没有实现 toString() 方法,所以如果将数组传递给 System.out.println() 方法,将无法打印出数组的内容,但是 Arrays.toString() 可以打印每个元素。

15.Java 中的 LinkedList 是单向链表还是双向链表?

是双向链表,你可以检查 JDK 的源码。在 Eclipse,你可以使用快捷键 Ctrl + T,直接在编辑器中打开该类。

16.Java 中的 TreeMap 是采用什么树实现的?

Java 中的 TreeMap 是使用红黑树实现的。

17. Hashtable 与 HashMap 有什么不同之处?

这两个类有许多不同的地方,下面列出了一部分:

a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。

b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。

c)Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。

更多的不同之处参见答案。

18.Java 中的 HashSet,内部是如何工作的?

HashSet 的内部采用 HashMap来实现。由于 Map 需要 key 和 value,所以所有 key 的都有一个默认 value。类似于 HashMap,HashSet 不允许重复的 key,只允许有一个null key,意思就是 HashSet 中只允许存储一个 null 对象。

19.写一段代码在遍历 ArrayList 时移除一个元素?

该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法。这有一段示例代码,是使用正确的方式来实现在遍历的过程中移除元素,而不会出现 ConcurrentModificationException 异常的示例代码。

20.我们能自己写一个容器类,然后使用 for-each 循环码?

可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。如果你实现 Collection 接口,默认就具有该属性。

21.ArrayList 和 HashMap 的默认大小是多数?

在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。这就是 Java 7 中 ArrayList 和 HashMap 类的代码片段:

// from ArrayList.java JDK 1.7

private static final int DEFAULT_CAPACITY = 10;

//from HashMap.java JDK 7

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

收集21个经典Java面试题相关推荐

  1. 贵港java_贵港人才网:经典java笔试题及答案分享

    经典java笔试题及谜底,共享与参考: 1.Anonymous Inner Class (匿名里面类) 是否能够extends(秉承)别的类,是否能够implements(完成)interface(接 ...

  2. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

  3. 达内java面试题集_达内经典java面试题集(一)

    达内经典java面试题集(一) 1.HashMap和Hashtable的区别. 都属于Map接口的类,实现了将惟一键映射到特定的值上. HashMap 类没有分类或者排序.它允许一个 null 键和多 ...

  4. 经典Java面试题收集(一)

    categories: Interview description: 本文收集了一些经典的Java面试题 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建 ...

  5. 小博老师解读经典Java面试题—Java位运算

    [面试原题] 我们经常会看到类似于下面这样的Java面试题: 请编写出效率最高的2乘以8的运算结果. [正确答案] 2<<3 [面试技术点] 面试者是否了解.灵活运用java位运算技术. ...

  6. 经典Java面试题收集

    转载自:http://geek.csdn.net/news/detail/256207 ,若需删除联系本人 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将 ...

  7. 经典Java面试题汇总及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  8. 100+经典Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  9. 经典Java面试题(第1季)

    文章目录 JavaSE 面试题 1.自增变量 2.单例模式 什么事Singleton? 要点: 一是某个类只能有一个实例 二是他必须自行创建实例 三是它必须自行向整个系统提供这个实例 几种常见形式 饿 ...

最新文章

  1. 知识图谱基本概念工程落地常见问题
  2. 探臻实录 | 戴琼海:搭建脑科学与人工智能的桥梁
  3. POJ 2749 Building roads 2-sat+二分答案
  4. 递归遍历文件夹,并添加到TreeView控件中
  5. Qt Creator连接iOS设备
  6. 《统计学》学习笔记之导论
  7. 关于夏季及雷雨天气的MODEM、路由器使用注意事项
  8. 查php源码授权后门,PHP授权系统+支持盗版入库+一键黑页后门注入+卡密授权
  9. python编写登录_通过Python编写一个简单登录功能过程解析
  10. APP移动购物界面设计灵感
  11. javascript的语法结构
  12. 字节工程师薪资排世界第五,中位数 43 万美元,2021 全球程序员收入报告出炉!...
  13. 电气计算机基础知识,电气基础知识
  14. HTML5 web SQL 和indexedDB的使用
  15. 系统集成项目管理工程师教程 第二版下载,仅供学习交流使用
  16. 东北大学c语言作业答案,{东北大学}2018年秋学期《画法几何及土木建筑制图》在线作业2课后参考答案...
  17. 神经网络训练的一些方法
  18. 为什么python叫爬虫_python为什么叫爬虫
  19. 不忘初心,勇攀高峰!低代码公司流辰信息紧抓机遇,努力超前冲!
  20. 饿了么“盛夏之战”,背后的底气是什么? | 一点财经

热门文章

  1. bundlefusion论文阅读笔记
  2. imu_utils标定imu问题解决
  3. xvid 数据编码和解码
  4. vxWorks多任务编程初探-上
  5. c语言float输出分数,c语言同一题目求解结果用float和int输出值差1.
  6. 学生社团网站html,学生社团活动平台的设计与实现.docx
  7. java 反射与泛型_Java基础系列 - 泛型和反射机制
  8. centos7静默搭建oracle11g,Linux静默安装Oracle方法(centos7+oracle11g)
  9. python判断题题库大数据技术_智慧树_大数据分析的python基础_搜题公众号
  10. 内网穿透 无需公网ip_无需端口映射、无需公网IP,60秒实现FTP服务远程访问