上篇整理了下后面准备更系统化写的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);

    }

  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<User> getUsers(String[] userIds){

    // 从数据库查找符合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

来测试下你的Java编程能力的更多相关文章

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

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

  2. JAVA编程能力提升学习图

    阿里大神毕玄整理的关于进阶JAVA的学习体系,知道下...

  3. 零基础从实践出发学java编程【总结篇】

    1.背景 很多人学习java的第一步就是系统的学习java基础语法,有的java基础语法还没学完就崩溃了,确实java基础语法太多太细,而且都是理论,学着让人很懵: 好不容易学完基础语法,又要学框架. ...

  4. 软工+C(11): 从命令行开始逐步培养编程能力(Java)

    上一篇:助教指南,持续更新... // Version: 0.0.4 许多人,所不知道的是,每一种编程语言都有其对应的单元测试框架,对程序在不同阶段的测试环节也概念模糊.在实际动手编写程序许久之后才听 ...

  5. JAVA编程规范(下)

    JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1.     通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2.     ...

  6. Java学习笔记(六)——google java编程风格指南(下)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  7. Java编程的逻辑 (93) - 函数式数据处理 (下)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  8. Java编程的逻辑 (90) - 正则表达式 (下 - 剖析常见表达式)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  9. Java编程的逻辑 (7) - 如何从乱码中恢复 (下)?

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

随机推荐

  1. Java Web环境搭建

    ——————————JavaWeb环境搭建 先下载JDK, Tomcat 7.0 安装JDK后,配置环境变量,此处可参考博客: https://www.cnblogs.com/smyhvae/p/37 ...

  2. react-native清除android项目缓存的命令

    cd到android目录下执行: ./gradlew clean

  3. day13.装饰器进阶,迭代器

    1.from functools import wraps 这个函数可以保留原来函数的属性 # from functools import wraps def car_time(fun): # @wr ...

  4. 图片纯前端JS压缩的实现

    一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...

  5. 咸鱼入门到放弃7--jsp<二>jsp常用标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  6. [TopCoder]棍子

    题目描述 你有一堆棍子.每个木棒的长度是一个正整数. 你想要一组棍子所有的棍子都有相同的长度.您可以通过执行零个或多个步骤来更改当前集合.每个步骤必须如下所示: 你选择一根棍子.所选棒的长度必须至少为 ...

  7. vscode + electron 提示:无法连接到legacy请采用inspector解决办法

    首先,你的程序是可以直接运行的,在命令行中可以运行,只是在vsCode中,运行一段时间就被这个提示弹出. 解决方法: 先在launch.json 中加上"protocol":&qu ...

  8. 关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法

    阿里云服务器环境(PHP+Nginx+MySQL) [原因1]svnserve.conf 没写好,当然你先备份一份先: cp svnserve.conf svnserve.conf.bak 打开此文件 ...

  9. springmvc+hibernate

    <本文摘要他人> 1.设计数据库:设计好表结构,最好符合3NF,采用Hibernate tools将设计好的表自动生成对应的实体entity. 1.创建Maven项目,按需映入Maven包 ...

  10. java课程设计团队博客《基于学院的搜索引擎》

    JAVA课程设计 基于学院网站的搜索引擎 对学院网站用爬虫进行抓取.建索(需要中文分词).排序(可选).搜索.数据摘要高亮.分页显示.Web界面. 一.团队介绍 学号 班级 姓名 简介 2016211 ...