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

柯里蝉翼
• 阅读 132

上篇整理了下后面准备更系统化写的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”,如需转载请联系原作者。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java编程学习入门
java编程学习入门    自java出来之后,就被很多人欢迎,虽然开始的时候有点麻烦,但是发展到现在很多人企业都在使用java做一些应用,包括了一些政府部门,因此java工程师需求也越来越大了。那么下面小编给大家说说java编程学习入门,希望能对你有些帮助。    java编程学习入门    首先肯定要明白自己为什么学习
Wesley13 Wesley13
3年前
java8 stream的这些开发技巧,你值得好好收藏
如果有些朋友以前没有使用过java8stream这种链式编程方式做开发,想学习一下。如果有些朋友只学习了一部分用法,想学习更多。如果有些朋友想看看有没有好的示例适用于实际工作当中。那么恭喜你,这篇文章非常适合你。首先,我们一起看看stream的继承关系:
Stella981 Stella981
3年前
63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力
“金三银四”跳槽季,网上出现了各种面试真题,一时会让人眼花缭乱,分不清最该看哪个,小编耗时一星期为大家做了一些java面试的真题。请准备好你的小本本!(https://oscimg.oschina.net/oscnet/e028742d50d457dbf9e0bc1f0f8ef84bab0.jpg)✍面向对象和面向过程的区别·面向过程
可莉 可莉
3年前
2018年蚂蚁金服前端一面总结(校招)
先简短的介绍一下我自己吧,我是一个前端学习者,虽然我基础知识也学了比较好,但是许久不用的知识就像流失的水,很容易就忘。在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。虽然在阿里内推后的人才观的问题里面我觉得自己做的还是很不错的,但是在真正的编程题里面,才发现自己的编程其实需要更加的提升。接下来就分析一下这次蚂蚁金服的电话面试的题目吧,其
Wesley13 Wesley13
3年前
Java基础核心知识大总结.pdf
!(https://oscimg.oschina.net/oscnet/4ecd8e21a4964f84862dce0d94d18c91.jpg)自学Java,如果觉得看《Java编程思想》或者《CoreJava》等之类的“圣经”觉得内容太多,一下子吃不透的话,不妨看看这本《Java基础核心总结》的PDF小册子,内容短小精悍
Stella981 Stella981
3年前
2018年蚂蚁金服前端一面总结(校招)
先简短的介绍一下我自己吧,我是一个前端学习者,虽然我基础知识也学了比较好,但是许久不用的知识就像流失的水,很容易就忘。在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。虽然在阿里内推后的人才观的问题里面我觉得自己做的还是很不错的,但是在真正的编程题里面,才发现自己的编程其实需要更加的提升。接下来就分析一下这次蚂蚁金服的电话面试的题目吧,其
Wesley13 Wesley13
3年前
Java面试系列01(Java类加载、双亲委托机制、Java优点)
决定写一系列这样的文章吧,这一类的文章并不会探究到Java的底层知识,这个系列的文章(虽然我之前的坑还没填完。。。不过还是想写一下)可能会和之前写过的文章一些知识重复,编程大神如果想回忆一下也可以看一看。小白的话,不建议看。因为我不会写的通俗易懂,大部分是已经被大多数人认同的定义,如果你对你的理解力很有自信,那本系列文章对你会很有用(其实,小
Wesley13 Wesley13
3年前
Java并发编程学习教程
一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞ScalaJava混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工具,对整体的并发理解乃至分布式都有一定的提高,所以想和大家分享一下。我的学习路线首先说说学习路线,我一开始是直接上手JCIP(JavaConc
可莉 可莉
3年前
2021 程序员修炼内功必备:阿里新产 Java 并发编程原理笔记(全彩版)限时开源!
写在前面:近年来在大厂的面试中,高并发不但占比较多,而且已经不局限于并发工具的使用,更多的会深入到底的层实现原理,这样能考察候程序员的内功,看其是否能知其所以然。关于市面上关于Java并发编程的资料感觉有些知识点不是很清晰,于是展开了对Java并发编程原理的讨论。在这收集整理了这些Java并发编程原理整理成书籍,分享给大家。目录
Stella981 Stella981
3年前
2021 程序员修炼内功必备:阿里新产 Java 并发编程原理笔记(全彩版)限时开源!
写在前面:近年来在大厂的面试中,高并发不但占比较多,而且已经不局限于并发工具的使用,更多的会深入到底的层实现原理,这样能考察候程序员的内功,看其是否能知其所以然。关于市面上关于Java并发编程的资料感觉有些知识点不是很清晰,于是展开了对Java并发编程原理的讨论。在这收集整理了这些Java并发编程原理整理成书籍,分享给大家。目录
kenx kenx
2年前
IT入门深似海,入门到放弃你学废了嘛
我一直觉得IT行业程序员行业。甚至觉得程序员人群是一个特殊存在的群体。入门到放弃,是真的,IT门槛高嘛。其实吧,IT编程门槛,是有的,但是对于感兴趣的,想学习IT编程同学来说,也是一件容易事情其实。我突然想讲一下我学编程的第一课,也是最难的。。。。。最近又