java基础
文章平均质量分 93
强迫症Kobe
与其焦虑成疾,不如静心学习。
展开
-
源码阅读:全方位讲解LongAdder
原文地址:https://blog.csdn.net/zqz_zqz/article/details/70665941高并发下计数功能最好的数据结构就是LongAdder与DoubleAdder,低并发下效率也非常优秀,这是我见过的java并发包中设计的最为巧妙的类,从软硬件方面将java并发累加操作优化到了极致,所以应该我们应该弄清楚它的每一行代码为什么要这样做,它俩的实现大同小异,下面以L...转载 2018-09-02 18:15:41 · 2997 阅读 · 1 评论 -
Redis 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
分布式缓存问题:Redis 的缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。缓存正常从Redi...转载 2018-04-21 16:18:05 · 819 阅读 · 0 评论 -
this引用逃逸
并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样就会出现某些线程中看到该对象的状态是没初始化完的状态,而在另外一些线程看到的却是已经初始化完的状态,这种不一致性是不确定的,程序也会...转载 2018-04-19 22:41:59 · 174 阅读 · 0 评论 -
深入解析ThreadLocal底层实现原理
学习Java中常用的开源框架,Mybatis、Hibernate中设计到线程通过数据库连接对象Connection,对其数据进行操作,都会使用ThreadLocal类来保证Java多线程程序访问和数据库数据的一致性问题。就想深入了解一下ThreadLocal类是怎样确保线程安全的!详解如下:一、对其ThreadLocal类的大致了解 ThreadLocal ,也叫线程本地变量,可能很多...转载 2018-04-18 21:46:03 · 6929 阅读 · 3 评论 -
java clone详解
1. java“指针”2.类,对象与引用3.java中的clone3.1.什么是"clone"?3.2.怎样应用clone()方法?3.3什么是影子clone?3.4怎么进行深度clone? 1. java“指针” Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能 通过简单的...转载 2018-04-07 10:01:14 · 189 阅读 · 0 评论 -
java克隆对象clone()的用法和作用
http://www.okrs.cn/blog/news/?997.html内容摘要若需修改一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本。这也是本地副本最常见的一种用途。若决定制作一个本地副本,只需简单地使用clone()方法即可。Clone是“克隆”的意思,即制作完全一模一样的副本。这个方法在基础类Object中定义成“protected”(受保护)模式。但在希望克隆的任何衍...转载 2018-04-07 09:57:09 · 1293 阅读 · 0 评论 -
彻底搞懂hashCode与equals的作用与区别及应当注意的细节
以前写程序一直没有注意hashCode的作用,一般都是覆盖了equals,缺没有覆盖hashCode,现在发现这是埋下了很多潜在的Bug!今天就来说一说hashCode和equals的作用。 先来试想一个场景,如果你想查找一个集合中是否包含某个对象,那么程序应该怎么写呢?通常的做法是逐一取出每个元素与要查找的对象一一比较,当发现两者进行equals比较结果相等时,则停止查找并返回tru...转载 2018-04-04 22:51:38 · 291 阅读 · 0 评论 -
Java实例变量初始化
原文地址:https://blog.csdn.net/cauchyweierstrass/article/details/48943077题目是这样的:求下面程序的输出:public class Base{ private String baseName = "base"; public Base() { callName(); } public vo...转载 2018-04-11 10:04:08 · 4025 阅读 · 3 评论 -
彻底理解Java动态代理
代理设计模式定义:为其他对象提供一种代理以控制对这个对象的访问。代理模式的结构如下图所示。动态代理使用java动态代理机制以巧妙的方式实现了代理模式的设计理念。代理模式示例代码public interface Subject { public void doSomething(); } public class RealSubject implements Subjec...转载 2018-03-26 22:11:56 · 182 阅读 · 0 评论 -
java动态代理原理及解析
代理:设计模式代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性。java动态代理的类和接口(jdk1.6源码)1,java.la...转载 2018-03-26 22:01:41 · 111 阅读 · 0 评论 -
反射进阶,编写反射代码值得注意的诸多细节
原文地址:https://blog.csdn.net/briblue/article/details/76223206前面一段时间,我编写了一篇关于 Java 反射基础知识的博文,内容挺多的,涉及到了 Class 的获取,Field、Method、Constructor、Array 及 Enum 的获取与操作。如果学会了这些知识,就能阅读或者是编写大多数反射相关代码。但是,因为反射这一块的内容实在...转载 2018-05-25 16:05:07 · 153 阅读 · 0 评论 -
细说反射,Java 和 Android 开发者必须跨越的坎
原文地址:https://blog.csdn.net/briblue/article/details/74616922写作是门手艺,笑对需要勇气。写下这个题目的时候,我压力比较大,怕的是费力不讨好。因为反射这一块,对于大多数人员而言太熟悉了,稍微不注意就容易把方向写偏,把知识点写漏。但是,我已经写了注解和动态代理这两个知识点的博客,阅读量还可以,这两个知识点是属于反射机制中的,现在对于注解和动态代...转载 2018-05-25 16:11:13 · 159 阅读 · 0 评论 -
Java中double类型比较大小或相等的方法
在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍两种比较double数据是否相等的方法。第一种方法:转换成字符串如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等。注...转载 2018-06-26 20:15:22 · 68080 阅读 · 15 评论 -
transient关键字
原文地址:https://blog.csdn.net/u013207877/article/details/525729751,transient的用途及使用方法1,用途 我们知道,当一个对象实现了Serilizable接口,这个对象就可以被序列化,我们不关心其内在的原理,只需要了解这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。而在开发过程中,我们可能...翻译 2018-09-01 16:40:32 · 166 阅读 · 0 评论 -
ThreadPoolExecutor线程池及线程扩展策略
一、概述 1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。 3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。同时可以根据自己的需求实现自己的线程池 二、核心构造...转载 2018-08-13 14:32:04 · 290 阅读 · 0 评论 -
Java内部类详解
内部类说简单能很简单,但是刨根到底彻底搞明白又很难。在看了一些书籍和很多博客之后,觉得下面两篇最好。https://blog.csdn.net/u014344668/article/details/72547986第二篇最出彩的地方是将为什么局部内部类和匿名内部类只能访问局部final变量这个问题讲的最清楚的一个。之前自己想了很久,看到这里才恍然大悟,其实就从final下手就行。htt...转载 2018-08-08 16:04:43 · 136 阅读 · 0 评论 -
平衡二叉树(AVL树)深入解读
平衡二叉树又称AVL树性质:它或者是颗空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 若将二叉树节点的平衡因子BF定义为该节点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有节点的平衡因子只可能为-1,0,1. 只要二叉树上有一个节点的平衡因子的绝对值大于1,那么这颗平衡二叉树就失去了平衡。 根据上述性质我...转载 2018-08-12 22:00:25 · 11458 阅读 · 4 评论 -
倒排索引原理和实现
关于倒排索引搜索引擎通常检索的场景是:给定几个关键词,找出包含关键词的文档。怎么快速找到包含某个关键词的文档就成为搜索的关键。这里我们借助单词——文档矩阵模型,通过这个模型我们可以很方便知道某篇文档包含哪些关键词,某个关键词被哪些文档所包含。单词-文档矩阵的具体数据结构可以是倒排索引、签名文件、后缀树等。倒排索引源于实际应用中需要根据属性的值来查找记录,lucene是基于倒排索引实现...转载 2018-08-12 21:56:19 · 1920 阅读 · 0 评论 -
java集合类深入分析TreeMap/TreeSet
简介 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围。而TreeMap内部对元素的操作复杂度为O(logn)。虽然在元素的存取方面TreeMap并不占优,但是它内部的元素都是排序的,当需要查找某些元素以及顺序输出元素的时候它能够带来比较理想的结果。可以说,TreeM...转载 2018-08-12 12:44:34 · 825 阅读 · 1 评论 -
一篇很好的动态规划总结的地址
https://blog.csdn.net/u013309870/article/details/75193592转载 2018-07-22 22:20:37 · 304 阅读 · 0 评论 -
使用序列化方式实现深度克隆
首先我们创建对象Person、Carpackage cn.qblank.test; import java.io.Serializable; public class Person implements Serializable{ private static final long serialVersionUID = -6833164004862850059L; private String ...转载 2018-07-11 22:07:02 · 2057 阅读 · 0 评论 -
Java中的clone和深度clone
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1 使用new操作符创建一个对象2 使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时...转载 2018-07-11 21:47:05 · 8810 阅读 · 2 评论 -
float和double的数值怎么保存在二进制中
稍微浅学过二进制的人,都清楚二进制是个什么东西。我们都了解正整数是怎么转化成二进制的,那么计算机中,又是怎么保存folat,double类型的数值的呢?要像弄清楚这个问题,首先得清楚二进制是怎么表示小数的。(这一点请注意了)十进制是怎么表示小数的呢?比如,125.456 其实可以分解成 1*10^2+2*10^1+5*10^0+4*10^-1+5*10^-2+6*10^-3如果用指数表示的...转载 2018-06-26 20:35:53 · 544 阅读 · 0 评论 -
对上一篇文章的补充
finally可以分两方面理解1.执行时机问题。finally总会执行(除非是System.exit()),正常情况下在try后执行,抛异常时在catche后面执行2.返回值问题。可以认为try(或者catch)中的return语句的返回值放入线程栈的顶部:如果返回值是基本类型则顶部存放的就是值,如果返回值是引用类型,则顶部存放的是引用。finally中的return语句可以修改引用所对应的对象,...转载 2018-03-06 16:13:15 · 127 阅读 · 0 评论 -
Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的:(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行...转载 2018-03-05 22:44:23 · 188 阅读 · 0 评论 -
关于 Java 中 finally 语句块的深度辨析
问题分析首先来问大家一个问题:finally 语句块一定会执行吗?很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员。可惜并不像大多人所认为的那样,对于这个问题,答案当然是否定的,我们先来看下面这个例子。清单 1.123456789101112131415161718192021public class Test { public static void...转载 2018-03-05 22:11:47 · 238 阅读 · 0 评论 -
JAVA HASHMAP的死循环
原文链接:https://coolshell.cn/articles/9606.html在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出转载 2017-12-15 23:36:45 · 158 阅读 · 0 评论 -
HashMap循环遍历方式及其性能对比
主要介绍HashMap的四种循环遍历方式,各种方式的性能测试对比,根据HashMap的源码实现分析性能结果,总结结论。 1. Map的四种遍历方式下面只是简单介绍各种遍历示例(以HashMap为例),各自优劣会在本文后面进行分析给出结论。(1) for each map.entrySet()Java12345MapString, Stri转载 2017-12-15 23:29:24 · 175 阅读 · 0 评论 -
sun.misc.Unsafe类详解
最近在看Java多线程的知识,在看到IntegerAtomic的时候发现了一个很少用到的类:unsafe。其实之前好像也见过相关的文章,但是当时没有留意,现在又碰上了,所以看了一些文章,汇总放在这里,以后多来看看。sun.misc.unSafe包的下载地址放在最前面吧: http://download.csdn.net/detail/dfdsggdgg/9535347如转载 2017-11-27 15:23:26 · 1223 阅读 · 0 评论 -
设计模式之策略设计模式
1. 策略设计模式介绍策略设计模式定义了一系列算法,并将每一个算法封装起来,而且使他们可以相互替换。策略设计模式让算法独立与使用它的客户而独立变化。2. 策略设计模式使用场景针对同一类型的问题的多种处理方式,仅仅是具体行为有差别时。需要安全地封装多种同一类型的操作时。出现同一抽象类有多个子类,而又需要使用if-else 或者switch-case来选择具体子类时。3转载 2017-12-21 22:15:39 · 141 阅读 · 0 评论 -
Java中4种安全沙箱机制之安全管理器及Java API
简介java安全沙箱的前三类保证了jvm所运行程序的完整性,使得jvm不会因为运行有漏洞或恶意的代码而导致出现不可预期的状态。而第四类沙箱模型是“类安全管理器及Java API”,它能保护jvm在运行有漏洞或恶意的代码不会破坏外部资源。java通过称为安全管理器的一类API来保证这类安全性。安全策略文件首先介绍下安全策略文件,如果启用了安全管理器,默认会使用jre自带的安全策略文件转载 2017-12-13 15:55:44 · 2122 阅读 · 1 评论 -
Java中的4种安全沙箱机制之内置于Java虚拟机(及语言)的安全特性
简介jvm装载一个类,并且对字节码进行了四趟扫描,这些字节码就能安全地被执行了。然而去了这些安全校验,jvm在执行字节码时还进行了一些内置的安全机制校验。这些安全机制主要包括:内存自动分配自动拉机回收机制数组边界检查空指针检查异常处理机制内存自动分配在编写java程序时几乎不能直接分配内存,比如当new一个对象时,jvm会在堆转载 2017-12-13 15:53:43 · 715 阅读 · 0 评论 -
Java中4种安全沙箱机制之class文件检验器
简介jvm的.class文件检验器用于检查.class文件是否拥有合法的内存结构,这种检查是有必要的,因为java的.class文件可能来自本机,也可能来自网络,可能是你自己编译的文件,也可能是别人篡改过的文件。而对于jvm来说,一个.class文件就是一个字节序列,它不会过问字节序列的来源,只会校验字节序列的结构是否正确。.class文件检验器保证安全的措施就是检验.class文件字节码转载 2017-12-13 15:47:37 · 278 阅读 · 0 评论 -
java的4种安全沙箱之ClassLoader双亲委派机制
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是:类加载体系.class文件检验器内置于Java虚拟机(及语言)的安全特性安全管理器及Java API本篇博客主要介绍“类加载体系”的基本原理;如需了解其它几类安全机制可以通过上面的博客链接进入查看。简介“类加载体系”及ClassLoa转载 2017-12-13 15:43:33 · 1639 阅读 · 0 评论 -
ClassLoader 简单总结
做Java开发,对于ClassLoader的机制是必须要熟悉的基础知识,本文针对Java ClassLoader的机制做一个简要的总结。因为不同的JVM的实现不同,本文所描述的内容均只限于Hotspot Jvm.本文将会从JDK默认的提供的ClassLoader,双亲委托模型,如何自定义ClassLoader以及Java中打破双亲委托机制的场景四个方面入手去讨论和总结一下。JDK默认C转载 2017-12-13 14:17:58 · 185 阅读 · 0 评论 -
BlockingQueue深入分析
一、概述:BlockingQueue作为线程容器,可以为线程同步提供有力的保障。二、BlockingQueue定义的常用方法1.BlockingQueue定义的常用方法如下: 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)转载 2017-12-20 21:05:36 · 153 阅读 · 0 评论 -
为什么说Java匿名内部类是残缺的闭包
前言我们先来看一道很简单的小题:public class AnonymousDemo1{ public static void main(String args[]) { new AnonymousDemo1().play(); } private void play() { Dog dog = new Dog转载 2017-12-31 22:36:15 · 252 阅读 · 0 评论 -
HashMap源码分析
1.HashMap简介 首先看一下HashMap的继承关系[java] view plain copyjava.lang.Object ↳ java.util.AbstractMap ↳ java.util.HashMap public class Has转载 2018-01-01 21:37:38 · 184 阅读 · 0 评论 -
JDK7与JDK8中HashMap的实现
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一h转载 2018-01-01 23:30:59 · 1493 阅读 · 0 评论 -
为什么优先级高的线程并不一定先执行
1、java线程是通过映射到系统的原生线程上来实现的,所以线程的调度最终还是取决于操作系统,操作系统的优先级与java的优先级并不一一对应,如果操作系统的优先级级数大于java的优先级级数(10级)还好,但是如果小于得的话就不行了,这样会导致不同优先级的线程的优先级是一样的。 2、优先级可能会被系统自动改变,比如windows系统中就存在一个优先级推进器,大致功能就是如果一个线程执行的次数过多转载 2018-02-06 19:50:54 · 4467 阅读 · 1 评论