来测试下你的Java编程能力

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

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

  1. 基于BIO实现的Server端,当建立了100个连接时,会有多少个线程?如果基于NIO,又会是多少个线程? 为什么?
  2. 通常来说基于NIO实现的Server端,会用多少个线程去处理IO事件,为什么?
  3. 一个典型的客户端集群->LB->服务端集群这样的结构中,如客户端采用连接池,长连接的方式,这种设计你觉得可能会出现什么问题?如果客户端采用的是单个长连接的方式呢?如果有问题,你觉得应该怎么解决?
  4. cglib和Java的动态代理相比,具体有什么不同?
  5. 在基于Netty实现FrameDecoder时,下面两种代码的表现会有什么不同? 第一种 private void callDecode(…) { List 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); }
  6. 用Executors.newCachedThreadPool创建的线程池,在运行的过程中有可能产生的风险是?
  7. new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一个这样创建的线程池,当已经有10个任务在运行时,第11个任务提交到此线程池执行的时候会发生什么,为什么?
  8. 实现一个自定义的ThreadFactory的作用通常是?
  9. 除了用Object.wait和Object.notifyAll来实现线程间的交互外,你还会常用哪些来实现?
  10. 为什么ConcurrentHashMap可以在高并发的情况下比HashMap更为高效?
  11. AtomicInteger、AtomicBoolean这些类之所以在高并发时高效,共同的原因是?
  12. 请合理的使用Queue来实现一个高并发的生产/消费的场景,给些核心的代码片段。
  13. 请实现让10个任务同时并发启动,给些代码片段。
  14. 在Java程序运行阶段,可以用什么命令行工具来查看当前Java程序的一些启动参数值,例如Heap Size等。
  15. 用什么命令行工具可以查看运行的Java程序的GC状况,请具体写出命令行格式。
  16. 用什么工具,可以在Java程序运行的情况下跟踪某个方法的执行时间,请求参数信息等,并请解释下工具实现的原理。
  17. 当一个Java程序接收请求,很长时间都没响应的话,通常你会怎么去排查这种问题?
  18. Java进程突然消失了,你会怎么去排查这种问题?
  19. 以下这段代码思路,你觉得在运行时可能会产生的风险是,应该如何改进? public List // 从数据库查找符合userIds的user记录 // 将返回的记录组装为User对象,放入List并返回 }
  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()); }
  21. Java程序为什么通常在刚启动的时候会执行的比较慢,而处理了一些请求后会变快,AOT能带来什么帮助?
  22. Parallel GC、CMS GC、ZGC、Azul Pauseless GC最主要的不同是?背后的原理也请简单描述下?
  23. 请写一段程序,让其运行时的表现为触发5次ygc,然后3次fgc,然后3次ygc,然后1次fgc,请给出代码以及启动参数。
  24. Go的Coroutine和Java的线程机制最主要的不同是?如果Java语言要透明的实现Coroutine,你觉得主要的难点是?

Answer

1、BIO 有100个线程。BIO面向连接,一个连接一个线程,直接从流stream里读写。

NIO 可以只有1个处理线程。NIO面向缓冲区,读写操作的是缓冲区(buffer)。一个连接对应一个channel,不会直接从channel读写,数据都是通过缓冲区处理。

NIO有Selector,通过while循环检查或系统调用通知,检查多个channel的状态是否可读写,所以可以用单线程管理多个channel。

Java IO与NIO:https://juejin.im/post/5af79bcc51882542ad771546

Java NIO 之 Channel(通道):https://juejin.im/post/5af7f01b6fb9a07a9f01a339

2、2*cpu核数 左右

3、长连接建立后一般不会断开,也就是某个client会固定请求到某台server,随着扩容缩容、服务器上下线,会负载不均衡。

解决方法:

A、重启负载高的服务器

B、用短连接

C、不用LB

4、CGLIB通过字节码操作生成代理,能对类做代理。

JDK通过反射接口生成代理,所以被代理类必须有实现接口。

5、X

6、使用SynchronousQueue队列,不会缓存请求,可能导致线程数暴涨。

7、放到阻塞队列里

8、命名线程

9、阻塞队列、

10、ConcurrentHashMap 用分段锁,锁粒度更小

11、使用CAS指令实现原子操作,不需要加锁

12、阻塞队列

13、略

14、ps -ef | grep java

15、jstat -gc pid 5000

16、btrace、Arthas(只用过一次)

17、先看线程

18、查看操作系统/var/log/dmesg日志,通常是OOM导致被OS杀掉进程

19、userIds数组过程,导致处理时间变成,消耗完所有IO线程,服务能力降为0。

措施:限制长度

20、第二种运行时会拼接字符串,对性能有影响

21、刚启动是解释执行还要占用资源并采样镜像JTT编译,AOP在启动后提供最搞笑运行代码

22、略

23、略

24、X

Original: https://www.cnblogs.com/549294286/p/10451394.html
Author: Loull
Title: 来测试下你的Java编程能力

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539280/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 第二周总结-Spring学习

    java;gutter:true;</p> <h2>Spring_day01</h2> <p><strong>今日目标&…

    Java 2023年6月7日
    089
  • idea 插件推荐 Translation(翻译插件)

    idea 安装Translation: 我用的 windows idea 2019.1.3不同版本可能会不同 打开idea settings => Plugins 搜索tra…

    Java 2023年6月5日
    099
  • ant-design-vue中table自定义列

    1. 使用背景 在项目中使用 ant-vue的 a-table控件过程中,需要显示序号列或者在列中显示图片,超链,按钮等UI信息。经过查询文档 customCell和 custom…

    Java 2023年6月13日
    086
  • 译文《全新首发JDK 16全部新特性》

    封面:洛小汐 译者:潘潘 JDK 8 的新特性都还没摸透,JDK 16 的新特性就提着刀来了。 郑重申明:第一次冒险翻译专业领域的文献,可想而知,效果特别糟糕。一般翻译文献特别是 …

    Java 2023年6月13日
    050
  • 学校用ipad 4通过vpn上外网方法

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    095
  • Java枚举类、注解和反射

    本文主要介绍的是枚举类,注解和反射。还有一些基础知识:static,基本数据类型,运算符优先级放在文中,以便查阅复习。其中牵扯到泛型的部分,可参考本人的另一篇博客:(Collect…

    Java 2023年6月7日
    095
  • 设计模式之中介者模式

    在我们实际业务中,可能存在多个类之间相互调用,形成了一个复杂的网状结构。这时候就需要有一种模式去”捋顺”他们之间的关系,引出一个中间者让类之间不再相互调用,…

    Java 2023年6月8日
    077
  • java使用POI操作XWPFDocument中的XWPFParagraph(段落)对象的属性略解

    我用的是office word 2016版 创建文本对象 XWPFDocument docxDocument = new XWPFDocument(); 创建段落对象 XWPFPa…

    Java 2023年6月7日
    078
  • Java Class 文件中Method的存储

    class文件是java编译后的文件类型。其代表一个类,其有专门的存储格式。其中会存放数据也会存放方法,而所谓的方法存放就是将方法中的调用都转换成java字节码指令。所方法调用从机…

    Java 2023年5月29日
    092
  • @FeignClient注解详解

    Spring Cloud 是目前最火的微服务框架,Feign 作为基础组件之一,在 Spring Cloud 体系中发挥了重要的作用。 一、FeignClient注解 FeignC…

    Java 2023年6月8日
    081
  • 我选择了MySQL和SpringData JPA

    我是3y,一年 CRUD经验用十年的 markdown程序员👨🏻‍💻常年被誉为优质八股文选手 今天想跟大家聊聊数据库层面上的事,austin项目继续更新( 注:今天聊的数据库都特指…

    Java 2023年6月9日
    084
  • 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题

    开发经常遇到分页查询的需求,但是当翻页过多的时候,就会产生深分页,导致查询效率急剧下降。 有没有什么办法,能解决深分页的问题呢? 本文总结了三种优化方案,查询效率直接提升10倍,一…

    Java 2023年6月8日
    0109
  • linux下安装jdk8

    1、下载jdk8安装包 2、拷贝到指定目录下(比如:/usr/package) 3、解压到安装目录下(比如:/usr/soft/java) tar -zxvf jdk-8u121-…

    Java 2023年6月8日
    080
  • JavaWeb 10_Filter过滤器

    一、什么是Filter? 1、Filter 过滤器它是JavaWeb的三大组件之一-。三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器2、Fi…

    Java 2023年6月7日
    072
  • 使用poi-tl导出word文件的几个技巧

    1、前言 Poi-tl提供了基于word模板文件导出word文件的功能。文档地址:http://deepoove.com/poi-tl/。 用下来,总体感觉还是很方便的。但使用过程…

    Java 2023年6月14日
    095
  • 戏说领域驱动设计(二十)——值对象

    值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,…

    Java 2023年6月7日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球