Java学习笔记--零碎知识点

12 篇文章 0 订阅


一、Java指令中的-、-x、-xx等等开头的修饰符有什么含义?

x越多表明这个指令越不稳定,在JDK版本迭代的过程中会被替换的几率越高。像是java -version这个指令就不会随着JDK版本的迭代而改变。

二、Object对象使用finalize()方法进行自救的机会有几次?

一次,一个对象的finalize()方法只会被执行一次,所以通过调用finalize()方法进行自救的机会也只有一次。

finalize()方法的运行原理:
JVM底层有一个finalizeObject集合对象,当垃圾收集器开始回收垃圾对象时,JVM会调用对象的finalize()方法,将该对象从finalizeObject集合对象中清除,下一次如果该对象再次被回收就不会触发finalize()方法了。
注:由于finallize的运行代价高昂,不确定性大,无法保证各个对象的调用顺序,如今已经被官方声明为不推荐使用语法。

三、为什么会有新的垃圾收集器不断出现?

因为现有的垃圾收集器还不够完美,无法一次性解决所有问题,所以垃圾收集器在不断完善修复、迭代更新。

四、为什么新生代要使用复制算法,而老年代则使用标记清除/整理算法?

因为新生代中的数据90%以上都是会被快速清除掉的,所以用复制算法效率更高,而老年代中的数据大部分都是长期使用的,被清除的概率较小,所占用的空间也更大,使用复制算法会浪费更大的存储空间,而且没有额外的空间分配对它进行担保,所以选择了清除/整理算法。

五、为什么G1使用SATB(原始快照),而CMS使用增量更新?

由于SATB相对于增量更新来说效率更高(STAB可能会造成更多的浮动垃圾),SATB不需要再重新标记阶段再次深度扫描被删除的引用对象,而CMS会对增量引用的根对象做深度扫描。G1因为很多对象都位于不同的region,CMS就是一块老年代区域,重新深度扫描的话,G1的代价会比CMS的更高,所以G1选择STAB不深度扫描对象,只简单标记,等到下一轮才深度扫描。

六、创建一个静态的线程池,需要注意的问题?

就只有一点,千万不要用shutdown()关闭它,当你关闭后其它的业务就无法调用该线程池了,记住这不是单例,不是调用的就会创建。

七、使用线程池时的注意事项

  • 1、线程池尽量不要使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让程序员更加明确线程池的运行规则,规避资源耗尽的风险;
  • 2、注意区分I/O密集型任务与CPU密集型任务,不同类型的任务要提交到不同的线程池中。
  • 3、如果有依赖关系的任务,不可提交到同一个线程池中,应该做好隔离,为不同的任务创建不同的线程池。
  • 4、确保正确处理了线程池中任务的异常,如果任务通过 execute 提交,那么出现异常会导致线程退出,大量的异常会导致线程重复创建引起性能问题,我们应该尽可能确保任务不出异常,同时设置默认的未捕获异常处理程序来兜底;如果任务通过 submit 提交意味着我们关心任务的执行结果,应该通过拿到的 Future 调用其 get 方法来获得任务运行结果和可能出现的异常,否则异常可能就被生吞了。

八、什么是I/O密集型任务、什么又是CPU密集型任务?

  • I/O密集型:指绝大部分任务就是在读入,输出数据,典型的例如web后端程序,主要就是在根据url请求找到对应的资源并输出。mysql的大量读写属于io密集。
  • CPU密集型任务:指进程绝大部份任务依靠cpu的计算能力完成,典型的如同科学计算,数值模拟等程序。

九、时间戳转成int型出现的一些问题

System.currentTimeMillis()获取的时间戳默认是long类型的,如果要转int也行,但是如果超过了int的范围的话,会转换成负数。这会导致一些接口读取参数出现错误,所以最好不要使用int类型来接收时间戳。

十、多个线程同时使用一个变量会出现什么问题?如何解决?

多个线程使用同一个变量会出现,变量被覆盖从而导致的线程参数错误的问题。解决的办法也很简单,就是将这个变量在各个线程内部声明,这样就不会出现覆盖的问题了。

十一、子类中调用父类的方法一定要用super关键字么?

不用关键字也能调用,但要保证一点就是:子类中没有重写父类对应的那个方法。

十二、bootstrap.yml配置文件的优先级在springboot项目中比application.properties配置文件高,对么?

不对,bootstrap.yml配置文件在springboot项目中根本不会生效,只有添加了spring-cloud-context这个依赖后,spring才会读取bootstrap配置文件。bootstrap.yml配置文件的优先级比application.properties配置文件高,是针对于springcloud项目来说的,因为springcloud项目的初始配置中就包含有spring-cloud-context这个配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缘丶沐逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值