java面试常考系列四
转载自 java面试常考系列四
题目一
大O符号(big-O notation)的作用是什么?有哪些使用方法?
大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。
大O符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,一般使用大O符号基于时间、内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。
题目二
有序数组和无序数组的区别是什么?
1、有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。
2、有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。
题目三
Java集合类框架的最佳实践有哪些?
实践一
根据应用的需要,正确选择要使用集合的类型对性能非常重要,所以,如果提前知道元素的大小是固定的,我们就会使用Array,而不ArrayList。
实践二
对于那些允许指定初始容量的集合。如果能估计出存储的元素的数目,就可以提前设置初始容量,以此来避免重新计算hash值或者是扩容。
实践三
为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。
实践四
使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。
实践五
编程的时候接口优于实现。
实践六
底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。
题目四
Enumeration接口和Iterator接口的区别有哪些?
1.速度
Enumeration速度是Iterator的2倍。
2.内存
Enumeration比Iterator占用更少的内存。
3.安全
Enumeration安全性远远低于Iterator,因为当集合里面的对象正在被Iterator遍历的时候,其他线程无法修改对象。
4.可操作
Enumeration不允许调用者删除底层集合里面的元素,Iterator可以。
题目五
HashSet和TreeSet有什么区别?
区别一
底层存储的数据结构不同。HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储。
区别二
有序性不同。HashSet是无序的,而TreeSet是有序的。
区别三
存储时保证数据唯一性依据不同。HashSet是通过复写hashCode()方法和equals()方法来保证数据唯一性的,而HashSet通过Compareable接口的compareTo()方法来保证数据唯一性的。
区别四
时间复杂度不同。HashSet的add()、remove()和contains()方法的时间复杂度是0(1),TreeSet的时间复杂度是0(logn)。
题目六
Java中垃圾回收有什么目的?垃圾回收的时机是什么?
目的
识别并且丢弃应用不再使用的对象来释放和重用资源。
时机
1.程序员可以手动调用gc,但是Java语言规范并不保证GC一定会执行。
2.当应用程序空闲时,即没有应用线程在运行时,GC会被调用。
3.Java堆内存不足时,GC会被调用。
题目七
System.gc()和Runtime.gc()的作用是什么?
这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。GC本身是会周期性的自动运行的,由JVM决定运行的时机,现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择。
题目八
finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法。
目的是回收某些对象,清理内存,一般建议在该方法中释放对象持有的资源。
题目九
如果对象的引用被置为null,占用内存将在何时被回收?
在下一个垃圾回收周期,这个对象将是可被回收的。
题目十
Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象,一直到垃圾收集器把这些对象回收掉之前,会一直占据堆内存空间。
java面试常考系列四相关推荐
- JAVA面试常考系列十
转载自 JAVA面试常考系列十 题目一 Servlet是什么? Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是用Java编写的服务器端程序 ...
- JAVA面试常考系列十一
转载自 JAVA面试常考系列十一 题目一 什么是JSP? JSP(Java Server Page)是一个文本文档,是一种将静态内容和动态生成内容混合在一起的技术. JSP包含两种类型的文本:静态数据 ...
- JAVA面试常考系列九
转载自 JAVA面试常考系列九 题目一 RMI架构层的结构是如何组成的? RMI体系结构由三层组成,分别是: 存根和骨架层(Stub and Skeleton Layer) 远程引用层(Remote ...
- JAVA面试常考系列八
转载自 JAVA面试常考系列八 题目一 JDBC是什么? JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系 ...
- JAVA面试常考系列六
转载自 JAVA面试常考系列六 题目一 一个Applet有哪些生命周期? 一个Applet的生命周期分为以下四个阶段: Init 每次加载时都会初始化一个小程序.此方法通知Applet,方法已经被装入 ...
- JAVA面试常考系列五
转载自 JAVA面试常考系列五 题目一 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么? 吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序 ...
- JAVA面试常考系列三
转载自 JAVA面试常考系列三 题目一 什么是迭代器(Iterator)? 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址.迭 ...
- JAVA面试常考系列二
转载自 JAVA面试常考系列二 题目一 解释一下线程和进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调 ...
- JAVA面试常考系列一
转载自 JAVA面试常考系列一 题目一 什么是Java虚拟机?为什么Java被称为平台无关的编程语言? java虚拟机是一个可以执行字节码文件(.class)的虚拟机进程. 为什么java与平台无关呢 ...
最新文章
- linux交换分区的优化-参数优化必选
- 自由群,外代数和泛包络代数
- HTTP Status 403 - Access to the requested resource has been denied
- 【Findbugs】Findbugs使用指南
- hashmap 从头到尾_如何从头到尾设计一个简单的复古徽标
- Debian7 apt源设置
- 尚硅谷k8s安装文档_Kubernetes(k8s)中文文档 从零开始k8s_Kubernetes中文社区
- arcgis标注牵引线_解析ArcGis的标注(三)——标注的放置 与 转注记修改
- 中缀表达式转后缀表达式两位数_再见,正则表达式!
- ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running?
- C++与Rust变量声明的比较
- 漫威蜘蛛侠Mac动态壁纸
- 属于db模式缺点的是什么_DB与ES混合之应用系统场景分析探讨
- LVS-Fullnat之编译内核 将fullnat模块添加到内核
- java手机号正则验证(电信、联通、移动、香港)
- (Linux系统)CentOS部署花生壳
- 【君思智慧园区】园区物业管理系统,物业管理系统解决方案
- 对三极管特性曲线的理解
- 研究生论文阅读方法论—怎样查找综述型文章
- 详解 torch.max 函数