面试题目:
地球人都知道,Java有个东西叫垃圾收集器,它让创建的对象不需要像c/cpp那样delete、free掉,你能不能谈谈,GC是在什么时候,对什么东西,做了什么事情?
一.回答:什么时候?
1.系统空闲的时候。
分析:这种回答大约占30%,遇到的话一般我就会准备转向别的话题,譬如算法、譬如SSH看看能否发掘一些他擅长的其他方面。
2.系统自身决定,不可预测的时间/调用System.gc()的时候。
分析:这种回答大约占55%,大部分应届生都能回答到这个答案,起码不能算错误是吧,后续应当细分一下到底是语言表述导致答案太笼统,还是本身就只有这样一个模糊的认识。
3.能说出新生代、老年代结构,能提出minor gc/full gc
分析:到了这个层次,基本上能说对GC运作有概念上的了解,譬如看过《深入JVM虚拟机》
之类的。这部分不足10%。
4.能说明minor gc/full gc的触发条件、OOM的触发条件,降低GC的调优的策略。
分析:列举一些我期望的回答:
eden
满了minor gc,升到老年代的对象大于老年代剩余空间full
gc,或者小于时被HandlePromotionFailure参数强制full
gc;gc与非gc时间耗时超过了GCTimeRatio的限制引发OOM,调优诸如通过NewRatio控制新生代老年代比例,通过
MaxTenuringThreshold控制进入老年前生存次数等
……能回答道这个阶段就会给我带来比较高的期望了,当然面试的时候正常人都不会记得每个参数的拼写,我自己写这段话的时候也是翻过手册的。回答道这部分的小于2%。
总结:程序员不能具体控制时间,系统在不可预测的时间调用System.gc()函数的时候;当然可以通过调优,
用NewRatio
控制newObject和oldObject的比例,
用MaxTenuringThreshold
控制
进入oldObject的次数,使得oldObject 存储空间延迟达到full gc,从而使得计时器引发gc时间延迟
OOM的时间延迟
,以延长对象生存期。
二.回答:对什么东西
?
1.不使用的对象。
分析:相当于没有回答,问题就是在问什么对象才是“不使用的对象”。大约占30%。
2.超出作用域的对象/引用计数为空的对象。
分析:这2个回答站了60%,相当高的比例,估计学校教java的时候老师就是这样教的。第一个回答没有解决我的疑问,gc到底怎么判断哪些对象在不在作
用域的?至于引用计数来判断对象是否可收集的,我可以会补充一个下面这个例子让面试者分析一下obj1、obj2是否会被GC掉?
class C{
public Object x;
}
C obj1、obj2 = new C();
obj1.x = obj2;
obj2.x = obj1;
obj1、obj2 = null;
3.从gc root开始搜索,搜索不到的对象。
分析:根对象查找、标记已经算是不错了,小于5%的人可以回答道这步,估计是引用计数的方式太“深入民心”了。基本可以得到这个问题全部分数。
PS:有面试者在这个问补充强引用、弱引用、软引用、幻影引用区别等,不是我想问的答案,但可以加分。
4.从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。
分析:我期待的答案。但是的确很少面试者会回答到这一点,所以在我心中回答道第3点我就给全部分数。
总结:超出了作用域或引用计数为空的对象;从gc root开始搜索找不到的对象,而且经过一次标记、清理,仍然没有复活的对象。
三.回答:做什么?
1.删除不使用的对象,腾出内存空间。
分析:同问题2第一点。40%。
2.补充一些诸如
停止其他线程执行、运行finalize等
的说明。
分析:起码把问题具体化了一些,如果像答案1那样我很难在回答中找到话题继续展开,大约占40%的人。
补充一点题外话,面试时我最怕遇到的回答就是“这个问题我说不上来,但是遇到的时候我上网搜一下能做出来”。做程序开发确实不是去锻炼茴香豆的“茴”有几
种写法,不死记硬背我同意,我不会纠语法、单词,但是多少你说个思路呀,要直接回答一个上网搜,我完全没办法从中获取可以评价应聘者的信息,也很难从回答
中继续发掘话题展开讨论。建议大家尽量回答引向自己熟悉的,可讨论的领域,展现给面试官最擅长的一面。
3.能说出诸如
新生代做的是复制清理、from survivor、to survivor是干啥用的、老年代做的是标记清理、标记清理后碎片要不要整理、复制清理和标记清理有有什么优劣势
等。
分析:也是看过《深入JVM虚拟机》的基本都能回答道这个程度,其实到这个程度我已经比较期待了。同样小于10%。
4.除了3外,还能讲清楚串行、并行(整理/不整理碎片)、CMS等搜集器可作用的年代、特点、优劣势,并且能说明控制/调整收集器选择的方式。
分析:同上面2个问题的第四点。
总结:删除不使用的对象,回收内存空间;运行默认的finalize,当然程序员想立刻调用就用dipose调用以释放资源如文件句柄,JVM用from survivor、to survivor对它进行标记清理,对象序列化后也可以使它复活。
千万不要说网上google下,就算说也要说出自己以前遇到这样的问题是怎么处理的,对这个知识有什么认识想法,然后可以反问下考官,这样可以不让技术型的考官为如何继续话题而对你无语,呵呵。
分享到:
相关推荐
82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt...
5. **谈谈Java中的异常处理?** Java使用异常处理来中断正常流程并处理错误情况。异常是通过try-catch-finally语句块来捕获和处理的。try块包含可能会抛出异常的代码,catch块用于捕获特定类型的异常,finally块...
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别? 第十七,给我一个你最常见到的runtime exception。 如果你这个答不出来,面试的人会认为你没有实际...
通过深入理解这些知识点,并结合平安公司面试题目文档中的具体题目进行练习,将有助于你在面试中展现出扎实的Java技能,增加成功通过面试的概率。同时,不断实践和项目经验的积累也是提升技术水平的关键。
本资料“Java最新面试题及答案.rar”提供了全面的Java笔试题库及其答案,帮助求职者充分准备面试。 一、基础篇 1. Java的三大特性:封装、继承、多态,分别是什么?如何实现? 2. Java中的数据类型有哪些?它们的...
第一,谈谈final, finally, finalize的区别。 最常被问到。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested ...
### 大公司的Java面试题集知识点解析 #### 第一题:谈谈final, finally, finalize的区别。 - **final**:此关键字用于声明属性、方法和类。对于属性而言,一旦赋值便不能更改;对于方法,它禁止子类重写该方法;...
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。 第六,Collection 和 Collections的区别。 第七,什么时候...
【JVM面试题详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行Java应用程序并提供跨平台的兼容性。对于Java开发者来说,深入理解JVM的工作原理是面试中不可或缺的一部分。以下是一些关于JVM的常见面试...
82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt...
java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。 第六,Collection 和 Collections的区别。 第七,什么时候...
总之,Java和C++开发者以及测试工程师在面试中需要展示扎实的语言基础、深入的理解以及对软件工程实践的掌握。通过熟悉上述知识点,你可以更好地准备面试,提高成功几率。同时,不断学习和实践是提升技能的关键,祝...
以上是对文档中20道Java后端面试题的详细解析,涵盖了Java基础、Web开发、框架、并发、数据库、微服务等多个方面,对于1~3年经验的Java后端开发者来说,这些知识点是面试和日常工作中必备的技能。通过理解和掌握这些...
各种java面试题集,面试前必备哦, 1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套...
以上就是针对1~3年经验的Java后端开发人员的高频面试题部分解析,涉及了 RESTful API、Spring 框架、微服务架构、MyBatis 和 Hibernate 框架、Java 虚拟机、多线程、垃圾回收、Spring Boot 以及异常处理等多个核心...
82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt...
以下是一些在Java面试中经常出现的问题,包括基础、中等和难题,以及一些常见的思考题。 **基础问题:** 1. **Java是什么?** Java是一种跨平台、面向对象的编程语言,由Sun Microsystems(现为Oracle ...
问题 9:谈谈你对 MySQL 中事务的理解,以及 ACID 四大特性是什么?答案:MySQL 中的事务是一组原子操作,要么全部成功,要么全部回滚,确保数据的一致性。ACID 是事务的四个基本特性:原子性(Atomicity)、一致性...