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


    上篇整理了下后面准备更系统化写的Java编程进阶的思路,如果仅看里面的词,很多同学会觉得都懂,但我真心觉得没有多少人是真懂的,所以简单的想了一些题目,感兴趣的同学们可以来做做看,看看自己的Java编程水平怎么样。

    懒得去做小程序了,所以大家就直接回复你的答案吧,我会来一一点评下,友情提醒下,有些题目有点坑。

    1. 基于BIO实现的Server端,当建立了100个连接时,会有多少个线程?如果基于NIO,又会是多少个线程? 为什么?
    2. 通常来说基于NIO实现的Server端,会用多少个线程去处理IO事件,为什么?
    3. 一个典型的客户端集群->LB->服务端集群这样的结构中,如客户端采用连接池,长连接的方式,这种设计你觉得可能会出现什么问题?如果客户端采用的是单个长连接的方式呢?如果有问题,你觉得应该怎么解决?
    4. cglib和Java的动态代理相比,具体有什么不同?
    5. 在基于Netty实现FrameDecoder时,下面两种代码的表现会有什么不同?

    第一种

    private void callDecode(...) {
    
       List<Object> results = new ArrayList<Object>();
       while (cumulation.readable()) {
             int oldReaderIndex = cumulation.readerIndex();
             Object frame = decode(context, channel, cumulation);
             if (frame == null) {
                  if (oldReaderIndex == cumulation.readerIndex())
                        break;
                  else
                       continue;
            }
           else if (oldReaderIndex == cumulation.readerIndex()) {
                  throw new IllegalStateException( ".....");
            }
            results.add(frame);
     }
     if(results.size() > 0)
         fireMessageReceived(context, remoteAddress, results);
    
    }

    第二种

    private void callDecode(...) {
    
       int oldReaderIndex = cumulation.readerIndex();
       Object frame = decode(context, channel, cumulation);
       if (frame != null)
              fireMessageReceived(context, remoteAddress, frame);
    
    }
    1. 用Executors.newCachedThreadPool创建的线程池,在运行的过程中有可能产生的风险是?
    2. new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一个这样创建的线程池,当已经有10个任务在运行时,第11个任务提交到此线程池执行的时候会发生什么,为什么?
    3. 实现一个自定义的ThreadFactory的作用通常是?
    4. 除了用Object.wait和Object.notifyAll来实现线程间的交互外,你还会常用哪些来实现?
    5. 为什么ConcurrentHashMap可以在高并发的情况下比HashMap更为高效?
    6. AtomicInteger、AtomicBoolean这些类之所以在高并发时高效,共同的原因是?
    7. 请合理的使用Queue来实现一个高并发的生产/消费的场景,给些核心的代码片段。
    8. 请实现让10个任务同时并发启动,给些代码片段。
    9. 在Java程序运行阶段,可以用什么命令行工具来查看当前Java程序的一些启动参数值,例如Heap Size等。
    10. 用什么命令行工具可以查看运行的Java程序的GC状况,请具体写出命令行格式。
    11. 用什么工具,可以在Java程序运行的情况下跟踪某个方法的执行时间,请求参数信息等,并请解释下工具实现的原理。
    12. 当一个Java程序接收请求,很长时间都没响应的话,通常你会怎么去排查这种问题?
    13. Java进程突然消失了,你会怎么去排查这种问题?
    14. 以下这段代码思路,你觉得在运行时可能会产生的风险是,应该如何改进?
    List getUsers(String[] userIds){
    
       // 从数据库查找符合userIds的user记录
      //  将返回的记录组装为User对象,放入List并返回
    
    }
    1. 以下两种代码,在运行时有什么不同?为什么?

    第一种

    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());
    
    }
    1. Java程序为什么通常在刚启动的时候会执行的比较慢,而处理了一些请求后会变快,AOT能带来什么帮助?
    2. Parallel GC、CMS GC、ZGC、Azul Pauseless GC最主要的不同是?背后的原理也请简单描述下?
    3. 请写一段程序,让其运行时的表现为触发5次ygc,然后3次fgc,然后3次ygc,然后1次fgc,请给出代码以及启动参数。
    4. Go的Coroutine和Java的线程机制最主要的不同是?如果Java语言要透明的实现Coroutine,你觉得主要的难点是?

    本文作者:毕玄  

    原文链接

    本文来自云栖社区合作伙伴“HelloJava”,如需转载请联系原作者。

  • 相关阅读:
    PHP常见安全问题及解决方法
    PHP中16个高危函数
    destoon7.0新增模块地图,自动输出当前模块的地图
    linux中lftp命令 – 优秀的命令行FTP客户端使用方法
    Linux中curl命令使用方法
    wordpress仿站常用标签大全
    织梦生成时提示DedeTag Engine Create File False的解决方法
    Spring 的 Controller 是单例还是多例?怎么保证并发的安全
    如何设计一个安全的对外接口
    MySQL 批量插入:如何不插入重复数据?
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/11358842.html
Copyright © 2020-2023  润新知