087期综合面试题系列十一

2020-09-17 17:17 Java最全面试题库

  点击上方蓝色字体,关注我吧

2020年百日百更原创Java最全面试题库之往期回顾

【000期】Java最全面试题库思维导图

【020期】JavaSE系列面试题汇总(共18篇)

【028期】JavaWeb系列面试题汇总(共10篇)

【042期】JavaEE系列面试题汇总(共13篇)

【049期】数据库系列面试题汇总(共6篇)

【053期】中间件系列面试题汇总(共3篇)

【065期】数据结构与算法面试题汇总(共11篇)

【076期】分布式面试题汇总(共10篇)

【077期】综合面试题系列(一)

【078期】综合面试题系列(二)

【079期】综合面试题系列(三)

【080期】综合面试题系列(四)

【081期】综合面试题系列(五)

【082期】综合面试题系列(六)

【083期】综合面试题系列(七)

【084期】综合面试题系列(八)

【085期】综合面试题系列(九)

【086期】综合面试题系列(十)


开篇介绍

大家好,我是Java最全面试题库提裤姐,今天这篇是综合面试题系列的第十一篇,主要总结了各个大厂的面试题相关的问题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。


Q:

选择题

如果去掉了 main 方法的 static 修饰符会怎样
A.程序无法翻译
B.程序能正常编译,运行时或抛出 NoSuchMethodError 异常
C.程序能正常编译,正常运行
D.程序能正常编译,正常运行一会会立刻退出

解析:B

启动 java 程序进程时,输入一下哪个参数可以实现年轻代的堆大小为 50M
A.-Xms50M
B.-Xmx50M
C.-Xmn50M
D.-Xss50M

解析:C

JVM启动参数.png

以下语句输出的结果是什么

System.out.print(Integer.MAX_VALUE*2);
System.out.print(Integer.MIN_VALUE*2);

A. -2-1
B. -1-2
C. -20
D. -1-1

解析:C

log4j 的优先级从高到低的排序为()
A. error>warn>info>debug
B. warn>info>debug>error
C. warn >debug>error>info
D. error>warn>debug>info

解析:A


Q:

简答题

Java的GC为什么要分代?

对传统的GC的实现,在整个GC过程中都要"stop -the -world",如果能想办法缩短GC一次工作的时间长度是件重要的事情。如果说收集整个GC堆耗时太长,那不如只收集其中的一部分。

所以可以通过分代思路来解决,分代思路基于:大部分对象的声明周期很短,没有死亡的对象则可能会存活很长时间。所以基于这种情况,如果让新创建的对象都在young gen 里创建,然后频繁收集young gen,则大部分垃圾都能在young GC 中被收集掉。由于young gen 的大小配置通常只占整个GC堆的较小部分,而且较高的对象死亡率(或者说较低的对象存活率)让其非常适合使用copying算法来收集,这样就能降低单次GC的时间长度,还可以提高GC的工作效率。

分代式GC是一种部分收集(partial collection)的做法。在执行部分收集时,从GC堆的非收集部分指向收集部分的引用,也必须作为GC roots的一部分。

具体到分两代的分代式GC来说,如果第0代叫做young gen,第1代叫做old gen,那么如果有minor GC / young GC只收集young gen里的垃圾,则young gen属于“收集部分”,而old gen属于“非收集部分”,那么从old gen指向young gen的引用就必须作为minor GC / young GC的GC roots的一部分。继续具体到HotSpot VM里的分两代式GC来说,除了old gen到young gen的引用之外,有些带有弱引用语义的结构,例如说记录所有当前被加载的类的SystemDictionary、记录字符串常量引用的StringTable等,在young GC时必须要作为strong GC roots,而在收集整堆的full GC时则不会被看作strong GC roots。


Q:

编程题

设计 Java 程序,假设有 50 瓶饮料,喝完三个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少饮料。

public static void main(String[] args) {
    //初始饮料总数
    int n = 50;
    //兑换次数
    int i = 0;
    while (true) {
        //喝3瓶
        n -= 3;
        //兑换1瓶
        n++;
        //兑换次数+1
        i++;
        if (n < 3) {
            System.out.println("共喝了" + (50 + i) + "瓶");
            break;
        }
    }
}








“一个专注于分享各类Java面试题的号主,长按二维码关注我吧 ”

祝大家都能拿到心仪的offer!







长按识别二维码

等风也等你



文章都看完了不点个 吗

本文章转载自公众号:tikujie

首页 - Java 相关的更多文章: