关于java:综合面试题系列五

2次阅读

共计 1878 个字符,预计需要花费 5 分钟才能阅读完成。

动态变量通常存储在过程哪个区?
A.栈区
B.堆区
C.全局区
D.代码区

动态变量的润饰关键字:static,又称动态全局变量。
故最初抉择的后果为:C

JVM 内存模型剖析图(参考自网络)

IP 地址 131.153.12.71 是一个()类 IP 地址
A.A
B.B
C.C
D.D

解析:
A 类地址:1.0.0.1~127.255.255.254
B 类地址:128.0.0.1~191.255.255.254
C 类地址:192.0.0.1~223.255.255.254
D 类地址:224.0.0.0~239.255.255.255
131 落在 128 到 191 之间,所以为 B 类地址,答案为 B

TCP 和 IP 别离对应了 OSI 中的哪几层?
A. Application layer
B. Presentation layer
C. Transport layer
D. Network layer

解析:依照上图 TCP 位于传输层,IP 位于网络层,答案为 CD

同一过程下的线程能够共享以下?
A.stack
B.data section
C.register set
D.file fd

解析:线程共享的内容包含:
1. 过程代码段
2. 过程的私有数据(利用这些共享的数据,线程很容易的实现相互之间的通信)
3. 过程关上的文件描述符、
4. 信号的处理器、
5. 过程的当前目录和
6. 过程用户 ID 与过程组 ID
线程独有的内容包含:
1. 线程 ID
2. 寄存器组的值
3. 线程的堆栈
4. 谬误返回码
5. 线程的信号屏蔽码
所以答案为 BD

简答题:
Java 呈现 OutOfMemoryError(OOM) 的起因有那些?呈现 OOM 谬误后,怎么解决?
触发 java.lang.OutOfMemoryError最常见的起因就是应用程序须要的堆空间是大的,然而 JVM 提供的却有余。解决办法就是提供大的堆空间即可。
除此之外还有简单的起因:
内存泄露:特定的编程谬误会导致应用程序不停的耗费更多的内存,每次应用有内存透露危险的性能就会留
下一些不能被回收的对象到堆空间中,随着工夫的推移,透露的对象会耗费所有的堆空间,最终触发
java.lang.OutOfMemoryError: Java heap space 谬误。
解决方案:
应该确保有足够的堆空间来失常运行你的应用程序,在 JVM 的启动配置中减少配置:-Xmx1024m
流量 / 数据量峰值:应用程序在设计之初均有用户量和数据量的限度,某一时刻,当用户数量或数据量忽然达到一个峰值, 并且这峰值曾经超过了设计之初预期的阈值,那么以前失常的性能将会进行,并触发 java.lang.OutOfMemoryError: Java heap space 异样。
解决方案,如果应用程序的确内存不足,减少堆内存会解决 GC overhead limit 问题,如下,给应用程序 1G 的堆内存:java -Xmx1024m com.yourcompany.YourClass

编程题:
利润与奖金,某公司销售 10 万元到 20 万元的奖金 10%,在 20 万元的奖金 10 万元以上的奖金 7.5%,到 40 万元超出 20 万元的局部奖金为 5%, 到 60 万元的超出 40 万元的局部奖金 3%,到 100 万元的超出 60 万元局部奖金 1%,请输入说的奖金。

    public static void main(String[] args) {
        float bonus = 0;
        Scanner scan = new Scanner(System.in);
        System.out.print("请输出利润:");
        float num = scan.nextInt();
        if (num <= 100000) {bonus = (float) (num * 0.1);
        } else if (num <= 200000) {bonus = (float) ((num - 100000) * 0.075 + 100000 * 0.1);
        } else if (num <= 400000) {bonus = (float) ((num - 200000) * 0.5 + 100000 * 0.175);
        } else if (num <= 600000) {bonus = (float) ((num - 400000) * 0.3 + 100000 * 0.175 + 200000 * 0.5);
        } else if (num <= 1000000) {bonus = (float) ((num - 600000) * 0.015 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3);
        } else {bonus = (float) ((num - 1000000) * 0.01 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3 + 400000 * 0.015);
        }
        System.out.println("奖金:" + bonus);
    }
正文完
 0