javase
文章平均质量分 85
kingkyrie
学以致用,顺势而为!
展开
-
ConcurrentHashMap实现原理及源码分析
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7).ConcurrentHashMap...转载 2018-06-23 11:32:57 · 182 阅读 · 0 评论 -
Java是纯面向对象的语言吗?
Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它。在我刚开始学习 Java 的前面几年,我从书本里知道了 Java 是遵循 “面向对象编程范式(Object Oriented Programming paradigm)”的。在Java世界内一切都是对象,甚至包括字符串(String)这些都是对象(在 C 语言中,字符串是字符数组),那时候,我认为 Java是一种...转载 2018-08-22 22:58:28 · 4710 阅读 · 2 评论 -
Java 抽象类的理解
1. 基本概念用abstract修饰的类是抽象类。如果类中有方法是abstract类型的,那么此类肯定是abstract类型的,也就是说此类的修饰符肯定有abstract(也就是说,有抽象方法的类是抽象类)。抽象类是不完整的,只能作为基类,且不能够实例化。2. 与类进行比较抽象类不能够实例化,并且对抽象类直接使用new运算符会导致编译错误。允许抽象类中包含抽象方法或者变量。抽象...转载 2018-08-22 23:14:05 · 143 阅读 · 0 评论 -
java 基础 私有变量不可以继承吗?
public class YuanXingMode { /** */ public static void main(String[] args) { ConcretePrototype pro = new ConcretePrototype("qq"); }} class Prototype implements Cloneable {...转载 2018-08-23 11:02:43 · 2639 阅读 · 0 评论 -
Java不同压缩算法的性能比较
译文出处: Java驿站 原文出处:java-performance本文将会对常用的几个压缩算法的性能作一下比较。结果表明,某些算法在极端苛刻的CPU限制下仍能正常工作。文中进行比较的算有:JDK GZIP ——这是一个压缩比高的慢速算法,压缩后的数据适合长期使用。JDK中的java.util.zip.GZIPInputStream / GZIPOutputStream便是这个算法...转载 2018-08-23 12:19:23 · 587 阅读 · 0 评论 -
Spring定时任务的实现方式--ScheduledExecutorService and ScheduledExecutorFactoryBean的简单源码解析以及使用
//todohttps://blog.csdn.net/u012881904/article/details/78196966转载 2018-08-30 17:12:40 · 410 阅读 · 0 评论 -
基于String的compareTo实现自定义对象比较器
首先理解String的compareTo()方法返回值compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值。如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符作比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。我们可以通过阅读源码...原创 2018-08-23 14:29:38 · 1038 阅读 · 0 评论 -
BufferedInputStream的作用比较
参考:https://bbs.csdn.net/topics/390517474/package com.zg.kyrie;import java.io.*;/** * @Auther: kyrie * @Date: 2018/8/23 21:50 */public class BufferedTest{ private static final String mo...原创 2018-08-23 22:36:54 · 2905 阅读 · 0 评论 -
深入理解BufferedInputStream实现原理
https://blog.csdn.net/zhangping871/article/details/54016604通过分析FileInputStream类和BufferedInputStream类中的部分核心代码来理解带缓冲的字节输入流的实现原理,缓冲输出流原理与之相同,在此不再赘述。FileInputStream源码package java.io; public cl...转载 2018-08-23 23:25:49 · 625 阅读 · 1 评论 -
快速失败Vs安全失败
简介:当错误发生时,如果系统立即关闭,即是快速失败,系统不会继续运行。运行中发生错误,它会立即停止操作,错误也会立即暴露。而安全失败系统在错误发生时不会停止运行。它们隐蔽错误,继续运行,而不会暴露错误。这两种模式,孰优孰优,是系统设计中常讨论的话题,在此,我们只讨论java中的快速失败和安全失败迭代器。 Java快速失败与安全失败迭代器 :java迭代器提供了遍历集合对象的功能,集...转载 2018-08-12 23:43:50 · 194 阅读 · 0 评论 -
JDK并发工具包CompletionService和ExecutorCompletionService的好处和使用场景
《Java并发编程实践》一书6.3.5节CompletionService:Executor和BlockingQueue,有这样一段话: "如果向Executor提交了一组计算任务,并且希望在计算完成后获得结果,那么可以保留与每个任务关联的Future,然后反复使用get方法,同时将参数timeout指定为0,从而通过轮询来判断任务是否完成。这种方法虽然可行,但却有些繁琐。幸运的是,还有一种...转载 2018-08-01 18:30:40 · 215 阅读 · 0 评论 -
为并发而生的 ConcurrentHashMap(Java 8)
HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的。尤其是在 jdk 1.8 之前,rehash 的过程中采用头插法转移结点,高并发下,多个线程同时操作一条链表将直接导致闭链,死循环并占满 CPU。当然,jdk 1.8 以来,对 HashMap 的内部进行了很大的改进,采用数组+链表+红黑树来进行数据的存储。rehash 的过程也...转载 2018-06-23 12:14:46 · 234 阅读 · 0 评论 -
详解Java的自动装箱与拆箱(Autoboxing and unboxing)
原文: https://www.cnblogs.com/wang-yaz/p/8516151.html一、什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程1 //自动装箱2 Integer total = 99;3 4 //自定拆箱5 int totalprim = total; 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据...转载 2018-06-23 23:27:25 · 7371 阅读 · 1 评论 -
Java总结篇系列:Java泛型
一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi"); 6 ...转载 2018-06-18 11:57:03 · 139 阅读 · 0 评论 -
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化...转载 2018-06-18 14:16:57 · 177 阅读 · 0 评论 -
JVM- 内存分配、GC原理与垃圾收集器
原文:https://blog.csdn.net/zjf280441589/article/details/53946312JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤:I. 怎样分配- JVM内存分配策略对象内存主要分配在新生代Eden区, 如果启用...转载 2018-06-26 10:38:18 · 155 阅读 · 0 评论 -
HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是哈希表 二、HashMap实...转载 2018-06-19 17:12:36 · 126 阅读 · 0 评论 -
JVM调优浅谈
原文:https://www.cnblogs.com/xingzc/p/5756119.html 1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型。 基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。 “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte、...转载 2018-06-26 23:03:18 · 112 阅读 · 0 评论 -
深入分析java线程池的实现原理
占小狼 关注2016.07.17 14:50* 字数 3399 阅读 68764评论 114喜欢 744赞赏 4简书 占小狼 转载请注明原创出处,谢谢!2017/04/23 于复兴中路裸心社回头看看之前写的这篇文章,印象中读源码的兴趣源头似乎来自于Java线程池,当山头被一座一座攻克时,你会发现掉到一个大坑中,因为不懂的领域的实在太多。快关注我的公众号! 前言...转载 2018-09-02 19:16:30 · 148 阅读 · 0 评论 -
JAR包数字签名与验证
经签名的Jar包内包含了以下内容:原Jar包内的class文件和资源文件 签名文件 META-INF/*.SF:这是一个文本文件,包含原Jar包内的class文件和资源文件的Hash 签名block文件 META-INF/*.DSA:这是一个数据文件,包含签名者的 certificate 和数字签名。其中 certificate 包含了签名者的有关信息和 public key;数字签名是对...转载 2018-09-15 21:57:28 · 4380 阅读 · 1 评论 -
使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)
参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461828 :https://blog.csdn.net/yangxt/article/details/1796965 在看书的时候涉及到了Java的安...转载 2018-09-15 23:06:22 · 10622 阅读 · 0 评论 -
Java中避免空指针的几个方法
equalsObject类中的equals 方法在非空对象引用上实现相等关系,具有对称性x.equals(y) 和 y.equals(x) 结果是一样的,但当x == null时会抛出空指针异常例如:String x = null;String y = "world";if(x.equals(y)){ // java.lang.NullPointerException}1...转载 2019-02-28 16:05:09 · 1269 阅读 · 0 评论 -
Java Enum 比较用 == 还是 eques
我是把枚举当作常量来使用的,枚举中还有两个自己的属性,关注到这个地方的朋友对枚举已经有了认识,这里就不再编写枚举的demo了,这里我直接说结果吧,在枚举中使用==和equals比较效果是一样的,查看源码可以知道枚举的equals方法还是通过==来比较的 1 2 3 publicfinalbooleanequals(Object other) {...转载 2019-03-19 22:59:41 · 1807 阅读 · 0 评论 -
Java开发人员必知必会的20种常用类库和API
要相信,你遇到的问题,肯定不止你一个遇到过。要相信,也许有很多人比你更勤奋。要相信,你用或不用,轮子就在那里。要相信,使用这些类库,你和你的代码都会变得更好。一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车。《Effective Java》的作者Joshua Bloch曾经说过:“建议使用现有的API来开发,而不是重复造轮子”。在本文中,千锋广州Java...转载 2019-06-09 10:48:41 · 739 阅读 · 0 评论 -
使用Lombok @Builder后代码详解
前提我们有一个学生类:@Builderpublic class Student { // 该字段有一个默认值; private int status = 1;}public class Test { @Test public void testBuilder() { // 生成的student对象并没有使用status的默认值 Student st...转载 2019-07-07 16:01:24 · 1186 阅读 · 0 评论 -
mybatis、 jdbc、 mysql-connector 之间的关系
先明确 jdbc 和 mysql-connectorhttp://www.cnblogs.com/jianshu/p/6023098.htmlJDBC(Java Database Connectivity)是一组接口,JDBC的目标是使Java程序员 使用这组接口连接任意的数据库系统。mysql-connector-java 是 jdbc 的一个实现 ,用它可以连接mysql系统。...转载 2019-06-24 21:46:25 · 2511 阅读 · 0 评论 -
从代理模式再出发!Proxy.newProxyInstance的秘密
上一节简单介绍了一下ClassLoader,我们知道,在我们用Proxy.newProxyInstance实现动态代理的时候,有三个参数,第一个便是classloader,这一篇文章就是简单看一下Proxy.newProxyInstance是如何实现动态代理的,因为我们后面可以以此为参考,实现自己的动态代理工具。public static Object newProxyInstance(Cla...转载 2019-07-13 23:02:19 · 962 阅读 · 0 评论 -
java反射(特别通俗易懂)
反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文...转载 2019-07-14 16:44:13 · 616 阅读 · 0 评论 -
Java的反射和内省的区别
https://blog.csdn.net/zhanjixun/article/details/68256724反射反射就是运行时获取一个类的所有信息,可以获取到.class的任何定义的信息(包括成员 变量,成员方法,构造器等)可以操纵类的字段、方法、构造器等部分。内省内省基于反射实现,主要用于操作JavaBean,通过内省 可以获取bean的getter/setter生活中 反射...转载 2019-07-14 16:56:10 · 592 阅读 · 0 评论 -
java自动向上转型问题
https://blog.csdn.net/u010512964/article/details/77989710java中各个类型所占字节为:byte: 8bit -128~127char: 16bitshort: 16bitint: 32bitfloat: 32bit...转载 2018-12-21 18:03:34 · 879 阅读 · 0 评论 -
JAVA字符串格式化-String.format()的使用
常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Locale local...转载 2018-12-21 11:24:20 · 105 阅读 · 0 评论 -
JAXB应用实例
博文目录 一 JavaBean和XML相互转换初体验 二 JAXB使用基础介绍 三 应用实际 四 问题补充 正文 过往的项目中数据存储都离不开数据库,不过最近做的一个项目的某些数据(比如人员信息、菜单、权限等等)却完全没有涉及任何数据库操作,直接XML搞定。这里无意比较优劣,因为数据库存储和XML存储本就有不同的适用场景,盲目比较毫无意义,只是因为业务需要,仅此而已。先来概念...转载 2018-09-17 23:04:31 · 187 阅读 · 0 评论 -
Java中接口里定义的成员变量
原文:Java中接口里定义的成员变量在interface里面的变量都是public static final 的。所以你可以这样写:public static final int i=10;或则int i=10;(可以省略掉一部分)注意在声明的时候要给变量赋予初值解释:首先你要弄清接口的含义.接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员.它们是公共的,...转载 2018-09-07 11:07:17 · 4162 阅读 · 0 评论 -
CGLIB介绍与原理
CGLIB介绍与原理(部分节选自网络)一、什么是CGLIB?CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。二、CGLIB原理CGLIB原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final...转载 2018-09-15 09:59:16 · 408 阅读 · 0 评论 -
Java IO包装流如何关闭?
参考:http://www.cnblogs.com/qqzy168/p/3670915.htmlhttps://blog.csdn.net/maxwell_nc/article/details/49151005 Java IO流关闭问题的深入研究问题:(1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗?(2)如果按顺序关闭流,是从内层...转载 2018-09-27 15:18:35 · 256 阅读 · 0 评论 -
java运行时 异常被catch后 将会继续执行
import java.util.UUID; public class Test { public static void main(String[] args) { try { int i = 2/0; } catch (Exception e) { e.printStackTrace(); ...转载 2018-11-21 19:58:20 · 4513 阅读 · 0 评论 -
通俗理解运行时异常和非运行时异常(一般异常)
结论:error :挂掉运行时异常catch的:继续执行运行时异常不catch的:挂掉线程其他异常都是编译时会被检测出来的必须catch:继续执行。一,异常的概念Java异常类层次结构图: Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无...转载 2018-11-21 20:00:00 · 4127 阅读 · 0 评论 -
Guava学习笔记:Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示:import org.junit.Test;...转载 2018-12-05 13:53:13 · 111 阅读 · 0 评论 -
源码分析六(org.springframework.util包之Assert类)
一:抽象类Assert抽象类不能够实例化对象,但是可以被继承,Assert类是功能类,所以方法都是static修饰所以可以直接 类名.方法 调用。 1 public abstract class Assert 构造方法:抽象类中的构造方法的意义,其实不是很大,因为它不能实例化对象,所以不会调用,但是如果有类继承Assert类,那么...转载 2018-12-05 14:18:35 · 1323 阅读 · 0 评论 -
细说ServletContext、WebApplicationContext、Servlet的初始化
浏览器请求发送给服务器的过程:1.浏览器发送http请求到web容器。比如请求发送给tomcat等web容器。2.tomcat将http请求封装成httpServletRequest并发送给web项目。而Servletcontext就是tomcat给web项目创建的全局环境。他有以下特点:全局共享数据。包含着web.xml里面的初始值。1.ServletContext对象的生命...转载 2019-07-21 23:48:35 · 442 阅读 · 0 评论