
JavaSE
文章平均质量分 96
基础是重中之重,此类文章主要是用来记录Java基础知识
生而知之者为妖
这个作者很懒,什么都没留下…
展开
-
Java动态追踪技术探究
引子在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。”比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,终于得出一个结论。转载 2020-06-03 15:02:20 · 302 阅读 · 0 评论 -
当线程池中的一个线程出现异常,那它该何去何从
1、execute()方法是不会有返回值的,当任务的执行方式是execute时,可以看到堆栈异常的输出,因为该方法内部将异常抛出。而当执行方式是submit时,堆栈异常没有输出,它不抛出异常而是将异常进行了保存,丢到了Future对象中,返回Future对象。调用Future.get()方法时,可以捕获到异常,可以让我们更容易的处理异常。(题外话— execute只能接受Runnable类型的任务,submit不管是Runnable还是Callable类型的任务都可以接受)2、线程池中某个线程出现异常,它原创 2020-05-28 12:12:17 · 1122 阅读 · 0 评论 -
当try、catch、finally中有return时,程序该如何执行?
try、catch中有return,而finally中没有return1、首先说明下,无论try、catch中是否有return,无论是否产生异常,finally代码是一定会执行的,代码验证如下: public int handleTest1(){ int b=0; try{ System.out.println("try"); int a=10/0; System.out.println("t原创 2020-05-28 09:56:25 · 526 阅读 · 0 评论 -
跳跃表原理以及实现(含ConcurrentSkipListMap和zset底层实现原理分析)
前言我们常用来加快查找速度的两类数据结构分别是哈希表和平衡树,哈希表查找时间复杂度是O(1),而各类平衡树(包括红黑树)的查找时间复杂度是O(logn)。哈希表虽然查找速度快,但它不是有序的,无法进行范围查询;平衡树虽然也很香,但它每一次的插入和删除都可能导致全局调整,耗时多。而本篇博文介绍的跳跃表查找的效率与平衡树差不多,时间复杂度都是O(logn),但插入或者删除值时,只是局部调整,过程简单...原创 2020-05-01 21:14:58 · 2040 阅读 · 0 评论 -
全面解析Java常用容器(从底层结构解析HashMap、ConcurrentHashMap、ArrayList、Vector、LinkedList等常用容器之间的区别和特点)
前言本篇博文主要是通过解析HashMap、ConcurrentHashMap、TreeMap、Hashtable、LinkedHashMap、HashSet、TreeSet 、ArrayList、Vector、LinkedList、BitSet、Pair等常用容器的底层结构来分析各种容器的特点、用途以及它们之间的联系和区别总览Java容器库可以分为两大类,一类是继承自Collection接口...原创 2020-04-22 18:54:42 · 4058 阅读 · 4 评论 -
通过分析类加载过程来解析Java的静态变量、静态方法、静态代码块、代码块、构造器执行顺序
一、 前言本篇文章主要是通过解析类加载过程来验证子父类之间的静态方法、静态代码块、普通方法、代码块、构造器的执行顺序。二、 类加载过程类加载指的是在程序运行期将类数据从Class文件加载到内存中,最终形成可以被虚拟机直接使用的Java类型,整个过程包括加载、连接(验证、准备、解析)、初始化5个阶段。类加载的时机在开始类加载过程讲述之前,先聊一聊类加载是什么时候开始的。虚拟机没有规定什么时...原创 2020-03-30 12:17:40 · 1002 阅读 · 0 评论 -
解析Java中的值传递
C++中在进行参数传递时,分为按值传递、引用传递(&)、按指针传递(*),需要自己指定参数传递类型。但JAVA表面上只有值传递,但真的只是值传递吗?其实并非如此,Java中也分为按值传递、按引用传递,只是传递类型按照传入参数的类型而定。传递类型定义1、值传递:在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,修改的将是参数副本,将不会影响到实际参数。2、引用...原创 2020-03-07 15:02:38 · 407 阅读 · 0 评论 -
Java的String解密
字符串运行时常量池的所在地JDK1.6之前,字符串常量池还未与其它常量池分离,都位于永久代中(方法区的实现方式),JDK1.7虽然还未废除永久代,但此时字符串常量池和静态变量已经离开了常量池,去了堆中。JDK1.8已经废除常量池,取而代之的是元空间(元空间不再位于虚拟机中,而是处于本地内存中),其它常量池和类信息都去了元空间,而字符串常量以及静态变量存在堆中。String类型的各种初始化方式的...原创 2019-11-27 12:32:47 · 463 阅读 · 0 评论 -
解析Java中的四种引用
1.强引用---即使是内存不足,垃圾回收器也不会回收被强引用的对象的内存。(会报OOM异常)2.软引用---只有在内存快溢出的时候,垃圾回收器才会回收被其引用的对象的内存。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被JVM回收,这个软引用就会被加入到与之关联的引用队列中。适合用来实现缓存:比如网页缓存、图片缓存等。 SoftRefer...原创 2018-04-20 14:43:45 · 343 阅读 · 0 评论 -
JAVA笔记-IO流
1. ByteArrayOutputStream--字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。创建字节数组缓冲区 无参数传入时为32字节 2. ObjectOutputStream--对象的输出流将指定的对象写入到文件的过程,也就是将对象序列化的过程。 3. ReadObject方法用来从流中读出对象的状态信息。读出时必须使用与写入对象时相同的...原创 2018-04-13 17:18:48 · 280 阅读 · 0 评论 -
原型模式-JAVA实现深克隆的两种方式(通过重写clone方法和序列化反序列化实现深克隆)
一.原型模式介绍A.优点:当创建新的对象实例较为复杂时,使用原型模式可以简化的对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。原型模式允许动态增加或减少产品类。原型模式具有给一个应用软件动态加载新功能的能力。 产品类不需要非得有任何事先确定的等级结构 。B.缺点:原型模式的最主要缺点就是每一个类必须配备一个克隆方法。而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难...原创 2018-04-13 17:15:53 · 1980 阅读 · 1 评论