zoukankan      html  css  js  c++  java
  • 【刷面试题】阿里毕玄:来测试下你的Java编程能力

    原文链接 开发者社区> 面试一点通> 正文

    阿里毕玄:来测试下你的Java编程能力

    【不懂】 16. 用什么工具,可以在Java程序运行的情况下跟踪某个方法的执行时间,请求参数信息等,并请解释下工具实现的原理。

    btrace,Arthas,主要借助JVM attach agent,ASM以及Instrumentation来动态的替换字节码,从而实现动态的对程序运行情况的跟踪。 -- http://www.sohu.com/a/298857998_494946

    17. 当一个Java程序接收请求,很长时间都没响应的话,通常你会怎么去排查这种问题?

    • JPS找到对应java进程pid,jstack一把找出运行的线程信息,找出对应的卡点信息
    • 或者查看日志,看运行到哪里不动了,尝试本地复现,bugfix
    • 大批量任务而没有使用异步机制,重点关注相关的同步操作。

    18. Java进程突然消失了,你会怎么去排查这种问题?

    19. 以下这段代码思路,你觉得在运行时可能会产生的风险是,应该如何改进?

    List getUsers(String[] userIds){
    
       // 从数据库查找符合userIds的user记录
      //  将返回的记录组装为User对象,放入List并返回
    }
    
    • 很正常啊,没问题啊!
    • 仔细想想,数据量大的话,常见的表会有几十万-几百万行数据,直接OOM!
    • 没有分页!这么简单!

    20. 以下两种代码,在运行时有什么不同?为什么?

    第一种
    private static final boolean isLoggerDebugEnabled = log.isDebugEnabled();
    public void xx(User user){
     if(isLoggerDebugEnabled){
          log.debug("enter xx method, user id is: " + user.getId());
     }
    }
    第二种
    public void xx(User user){
     log.debug("enter xx method, user id is: " + user.getId());
    }
    
    • 貌似还是差不多
    • 再看看, isLoggerDebugEnabled 是static,在编译期会取到结果,上面的代码可能永远不会执行一次,当isLoggerDebugEnabled = false的时候,在编译期会会kill掉
    • 下面的代码不会.

    21.Java程序为什么通常在刚启动的时候会执行的比较慢,而处理了一些请求后会变快,AOT能带来什么帮助?

    • Java程序先慢后快: 刚启动的时候Java还处于解释执行阶段,处理了一些请求后随着C1、C2编译的介入,会优化为机器码,并且借助各种运行时数据的高级优化,使得Java程序逐渐进入一个高速运行的状态 [没想过,这还是Java吗?]
    • AOT (Ahead-Of-Time - 预先编译,事先生成机器码,) 详见https://www.zhihu.com/question/23874627

    -JIT:吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码等,但是相对启动速度较慢,并需要一定时间和调用频率才能触发 JIT 的分层机制

    • AOT:内存占用低,启动速度快,可以无需 runtime 运行,直接将 runtime 静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化
  • 相关阅读:
    【家庭记账本】Android开发日记(七)
    每日总结【2020/02/08】
    每日总结【2020/02/07】
    【家庭记账本】Android开发日记(六)
    每日总结【2020/02/06】
    【家庭记账本】Android开发日记(五)
    【iOS开发】 CoreText 使用教程:以创建一个简单的杂志应用为例
    用NSLogger代替NSLog输出调试信息
    iOS开发常用国外网站清单
    Xcode快捷键 2(转)
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/12258102.html
Copyright © 2011-2022 走看看