JVM习题(练石成金培训材料)

来源:互联网 发布:python smtplib 编辑:程序博客网 时间:2024/05/01 10:14

第一周:

  1. 有关补码,简要阐述补码的好处。并计算给出 -99, -105, 205 整数的补码
  2. 有关浮点数,根据IEEE745,计算11000001000100000000000000000000的单精度浮点的值,并给出计算过程。
  3. 写一个Java程序,将100.2转成IEEE745 二进制表示 ,给出程序和结果。

第二周:

  1. 写一个程序,让程序在运行之后,最终抛出由于Perm区溢出引起的OOM,给出运行的jdk版本,程序源码,运行参数,以及系统溢出后的截图、程序所依赖的jar包说明,并说明你的基本思路
  2. 你能想到有什么办法,可以让一个程序的函数调用层次变的更深。比如,你在一个递归调用中,发生了stack的溢出,你可以做哪些方面的尝试,使系统尽量不溢出?阐述你的观点和原因。

第三周:

  1. jre的运行时主要jar文件rt.jar都很大,这导致了用java做的桌面客户端程序很难发布绑定jre发布。这在很大程度上限制了java桌面软件的分发。可是,jre并不是在所有的用户计算机上都有安装,即使安装了,也未必我们期望的版本。因此,对jre做精简,减少体积是有必要的。请你给出一个方案,来说说如何给jre减肥,以方便我们的桌面程序绑定jre发布。并给出一个基本的实现。对这个实现的要求是:对于任意给定java程序A,应用你的方案和实现,可以从一个完整的jre中,抽取这个程序A的必要部分,从而实现最小体积的发布。在本题中,要求你详述你的方案,并提交你实现的代码。
  2. 这里给出一个gc输出,要求给出一个你认为最可能的启动JVM参数,并说明为什么?
    Heap
    def new generation total 6464K, used 115K [0x34e80000, 0x35580000, 0x35580000)
    eden space 5760K, 2% used [0x34e80000, 0x34e9cd38, 0x35420000)
    from space 704K, 0% used [0x354d0000, 0x354d0000, 0x35580000)
    to space 704K, 0% used [0x35420000, 0x35420000, 0x354d0000)
    tenured generation total 18124K, used 8277K [0x35580000, 0x36733000, 0x37680000)
    the space 18124K, 45% used [0x35580000, 0x35d95758, 0x35d95800, 0x36733000)
    compacting perm gen total 16384K, used 16383K [0x37680000, 0x38680000, 0x38680000)
    the space 16384K, 99% used [0x37680000, 0x3867ffc0, 0x38680000, 0x38680000)
    ro space 10240K, 44% used [0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)
    rw space 12288K, 52% used [0x39080000, 0x396cdd28, 0x396cde00, 0x39c80000)

第四周:

  1. 写一个程序,尽量产生STW现象。给出代码和启动JVM参数。并附上GC的log日志,标出停顿的时间。
  2. 是否有方法尽可能减少一次STW停顿时间?由此带来的弊端是什么?

第五周:

  1. 学习使用JMeter,并测试Tomcat的吞吐率,给出有关配置和测试结果的至少5个截图
  2. 测试Tomcat在使用CMS下的吞吐率情况,和串行回收器和并行回收器在相同环境下做比较,给出几种回收器的报表截图,以及你对CMS的评价(从吞吐量等方面)。

第六周:

  1. 实现热替换。
    运行一个程序HelloMain,他会循环调用另外一个类Worker.doit()方法。此时,对Worker.doit()方法做更新。要求 更新后,HelloMain可以发现新的版本。

    可以选择替换class文件 ,也可以选择替换jar包。

第七周:

  1. 写一段代码,让4个线程,相互死锁(A等待B,B等待C,C等待D,D等待A)。导出线程dump,并分析。给出死锁代码,线程dump和分析过程

第八周:

  1. 对于文件 oom_第8周第1题.rar(http://pan.baidu.com/s/1kTl32Eb) ,给出最合理的堆溢出的原因
  2. tomcat_第8周第2题.rar(http://pan.baidu.com/s/1hqJz6hY)是tomcat被大量请求后oom的dump,使用jvisualvm的库,以秒为单位,计算得出系统承受负载最大的时刻,给出那个时刻的时间点(起始时间和终止时间合计一秒),以及那一秒钟内,系统的每秒接受的请求数量。比如,在系统 1234毫秒 到 2234毫秒这一秒内,请求量合计500次。 给出你的结论,并提供操作工作截图或相关代码

第九周:

  1. 写2个程序,分别使用无锁的方式,和有锁的方式对某一个整数进行++操作直到某一个很大的值M,同样使用N个线程,给出2个程序的性能比较

    • 当N=3 30 300 1000
    • M=1000000
    • 给出以上4种情况的性能比较
  2. JVM获得锁的一般步骤是什么?

第十周:

  1. 使用java写一个程序,读入一个class文件,输出它的所有的字段、方法,超类,实现的接口。(不使用ASM等第三方库),要求根据自己对class文件个格式的理解,做文件解析。给出的代码需要带有详细的注释。

第十一周:

  1. 使用ASM,通过字节码 完成以下代码:
    int a=6;
    int b=7;
    int c=(a+b)*3;
    System.out.println(c);
原创粉丝点击