java
JSJ姜姜姜
https://github.com/JiangJiangjungle
展开
-
JDK:注解(Annotation)
1.Annotation(注解)注解在jdk1.5被引入,可以为类、字段和方法提供自定义的元数据(一种描述数据)标注。举例,@Override用于标注子类的重写方法: @Override public String toString() { return "This is String Representation of current object."; } 2.注解的使用2.1 自定义注解的创建自定义注解需要通...原创 2020-05-11 01:06:13 · 394 阅读 · 0 评论 -
jdk8 Stream介绍
java.util.stream.Stream的操作分类,如表所示:Stream的操作可以分为两大类中间操作(Intermediate operations): 对操作进行了记录,但是不立即执行。中间操作又可以分为 1.1 无状态(Stateless)操作: 元素的处理不受之前元素的影响; 1.2 有状态(Stateful)操作: 只有拿到所有元素之后才能继续下去...原创 2020-04-22 23:39:11 · 225 阅读 · 0 评论 -
Fork/Join模式
为了提高大量任务的执行效率,一般会使用线程池(ThreadPoolExecutor)。但是考虑到某些单任务本身就可以继续拆分并发执行(例如对1000W个数据进行排序可以使用分治思想),如何更好地提高这些任务的并发效率将成为一个问题。Fork/Join模式解决了任务更小粒度拆分的问题,我们可以将一个任务拆分成多个可并发执行的部分,最后再对各个子任务的结果进行汇总,得到最终执行结果。...原创 2020-04-21 14:07:54 · 344 阅读 · 0 评论 -
面向对象之多态(向上转型与向下转型)
原文地址:http://blog.csdn.net/qq_31655965/article/details/54746235什么是多态简单的理解多态多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力。比如说,有一杯水,我不知道它是温的、冰的还是烫的,但是我一摸我就知道了。我摸水杯这个动作,对于不同温度的水,就会得到不同的结果。这就是多态。那么,java中是怎么体现多态呢?我们来直接看代码...转载 2018-03-17 16:15:48 · 138 阅读 · 0 评论 -
一个Java对象到底占用多大内存?
最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046大家可以用这个代码边看边验证,注意的是,运行这个程序需要通过javaagent注入Instrumentation,具体可以看原博...转载 2018-03-02 11:33:40 · 459 阅读 · 0 评论 -
Java知识图谱(附:阿里Java学习计划)
摘要: 本文主要描绘了Java基础学习过程,给出Java知识结构图,以及阿里Java岗学习计划,对Java学习爱好者、准备及将要从事Java开发方面的同学大有裨益。温馨提示: 由于CSDN对图片的压缩,导致图片观看效果不理想,建议大家通过右键“在新标签页打开图片”进行观看或直接把图片下载下来观看。JVM 1. 内存模型( 内存分转载 2018-02-28 21:35:46 · 236 阅读 · 0 评论 -
面试/笔试第五弹 —— Java面试问题集锦(下篇)
摘要: 本文对面试过程中经常会被问到的一些关于Java基础问题进行了梳理和总结,包括 JVM虚拟机、常用容器、设计原则与模式以及Java语言特性等基础知识点,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。考虑到篇幅太长,现将 《面试/笔试第五弹 —— Java面试问题集锦》 一文分为上下两篇:《面试/笔试第五弹 —— Java面试问题集锦(上篇)》和《面试/笔试转载 2018-02-28 21:31:03 · 562 阅读 · 0 评论 -
面试/笔试第五弹 —— Java面试问题集锦(上篇)
摘要: 本文对面试过程中经常会被问到的一些关于Java基础问题进行了梳理和总结,包括 JVM虚拟机、常用容器、设计原则与模式以及Java语言特性等基础知识点,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。考虑到篇幅太长,现将 《面试/笔试第五弹 —— Java面试问题集锦》 一文分为上下两篇:《面试/笔试第五弹 —— Java面试问题集锦(上篇)》和《面试/笔试转载 2018-02-28 21:29:29 · 209 阅读 · 0 评论 -
JVM类生命周期概述:加载时机与加载过程
摘要: 我们知道,一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用。事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制。本文概述了JVM加载类的时机和生命周期,并结合典型案转载 2018-01-30 15:09:28 · 207 阅读 · 0 评论 -
深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个转载 2018-01-30 15:07:13 · 164 阅读 · 0 评论 -
ArrayList源码剖析
http://blog.csdn.net/ns_code/article/details/35568011ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(Lis转载 2018-01-18 15:23:53 · 277 阅读 · 0 评论 -
LinkedHashmap源码剖析
http://blog.csdn.net/ns_code/article/details/37867985 LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同...转载 2018-01-18 15:39:49 · 113 阅读 · 0 评论 -
Java String 综述(下篇)
摘要: Java 中的 String类 是我们日常开发中使用最为频繁的一个类,但要想真正掌握的这个类却不是一件容易的事情。笔者为了还原String类的真实全貌,先分为上、下两篇博文来综述Java中的String类。笔者从Java内存模型展开,结合 JDK 中 String类的源码进行深入分析,特别就 String类与享元模式,String常量池,String不可变性,String对象的创建方转载 2018-03-02 15:43:51 · 241 阅读 · 0 评论 -
仿照jdk源码实现简化版的线程池
仿照java.util.concurrent包中的ThreadPoolExecutor实现,做了许多简化,只保留核心exec()函数,帮助理解源码,仅供参考。ThreadPoolpackage com.jsj.jdk.threadpool;import java.util.HashSet;import java.util.concurrent.*;import java.util...原创 2019-01-08 11:29:27 · 195 阅读 · 0 评论 -
代理模式(从静态代理到动态代理)
代理模式的定义:为其它对象提供一个代理对象,并由代理对象控制这个对象的访问。代理模式的作用:个人理解:需要在不修改源码的情况下,将方法进行增强。举例:定义一个接口 Barkingpublic interface Barking { void bark();}实现类有 Dogpublic class Dog extends Animal implements Barking{ publ...原创 2018-05-31 21:46:27 · 229 阅读 · 0 评论 -
理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。很明显,这里有一些小陷阱,这也是我们写这篇文章的原因。[java] view翻译 2018-05-06 16:15:16 · 145 阅读 · 0 评论 -
Java NIO解析
翻译自:http://tutorials.jenkov.com/java-nio/index.html1. 什么是Java NIOJava NIO(New IO)是用于Java(来自Java 1.4)的替代IO API,意味着替代标准Java IO和Java Networking API。 Java NIO提供了与标准IO API不同的IO工作方式。1.1 Java NIO: Channels 和...翻译 2018-05-18 21:36:13 · 270 阅读 · 0 评论 -
Spring:源码解读Spring IOC原理
转载自:https://www.cnblogs.com/ITtangtang/p/3978349.html#a1Spring IOC设计原理解析:本文乃学习整理参考而来一、 什么是Ioc/DI?二、 Spring IOC体系结构(1) BeanFactory(2) BeanDefinition三、 IoC容器的初始化1、 XmlBeanFac转载 2018-03-12 15:45:47 · 128 阅读 · 0 评论 -
java的反射机制
转自:http://blog.csdn.net/qq_31655965/article/details/521920331.反射机制简介JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以转载 2018-03-17 16:59:41 · 107 阅读 · 0 评论 -
Java 原生类型与包装器类型深度剖析
摘要: 本文对 Java 原生类型与包装器类型进行深度剖析,主要涉及以下四个方面:原生类型与包装器类型基础、字面值概念和种类、 基本类型的自动转型与强制转型和自动装箱与拆箱机制。要点:原生类型与包装器类型字面值概念和种类基本类型、自动转型与强制转型自动装箱与拆箱机制(Autoboxing and Unboxing)一. 原生类型与包装器转载 2018-03-02 16:39:36 · 148 阅读 · 0 评论 -
TreeMap源码剖析
http://blog.csdn.net/ns_code/article/details/36421085红黑树简介 TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,关于二叉排序树,参见:http://blog.csdn.net/ns_code/article/details/19823463,红黑树通过一些限制,使其不会出现二叉树排序树中极端的转载 2018-01-18 15:38:33 · 121 阅读 · 0 评论 -
Hashtable源码剖析
http://blog.csdn.net/ns_code/article/details/36191279Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashta转载 2018-01-18 15:37:30 · 120 阅读 · 0 评论 -
java里类方法和实例方法区别
我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再转载 2017-12-24 12:55:02 · 6126 阅读 · 0 评论 -
Java中的SPI(Service Provider Interface)介绍及示例
http://blog.csdn.net/fenglibing/article/details/7083071一个服务(service)通常指的是已知的接口或者抽象类,服务提供方就是对这个接口或者抽象类的实现,然后按spi标准存放到资源路径META-INF/services目录下,文件的命名为该服务接口的全限定名。如有一个服务接口com.test.Service,其服务实现类为com.转载 2017-12-21 23:02:46 · 484 阅读 · 0 评论 -
Java中普通代码块,构造代码块,静态代码块区别及代码示例
//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。1 普通代码块 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” 2 public class CodeBlock01{ 3 p转载 2017-12-20 14:48:14 · 145 阅读 · 0 评论 -
Java序列化的作用和反序列化
1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想转载 2017-12-21 22:56:05 · 133 阅读 · 0 评论 -
触摸java常量池
转:http://www.cnblogs.com/iyangyuan/p/4631696.htmljvm虚拟内存分布有: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 虚拟机栈是jvm执行java代码所使用的栈。 方法区存放了一些常量、静态变量、类信息等转载 2017-12-20 15:53:19 · 174 阅读 · 0 评论 -
java函数参数中:用参数值带回结果(类似传址)的方式及各种观点辨析
转自:http://blog.csdn.net/null____/article/details/7893360用惯了指针 这个问题还挺头疼……java基本类型都统一传值,所以不行Integer类new完数值就被写死(Integer中用final定义的成员变量),所以也不行只剩:用成员变量、用数组、或者传自己定义的类,这些办法了。转载 2017-10-04 10:23:12 · 1171 阅读 · 0 评论 -
java int 乘法溢出问题
今天在看框架的工具包时发现了一个细节,double d=1024d * 1024 * 1024 * 1024;第一个1024后面为什么要带个d呢?于是我尝试了一下:double d = 1024d * 1024 * 1024 * 1024;double dw = 1024 * 1024 * 1024 * 1024 ;System.out.println(d)转载 2017-12-16 11:46:58 · 1823 阅读 · 0 评论 -
java 基本数据类型及自动类型提升
1.Java的8种基本数据类型及其所占空间大小: boolean 8bit/1byte byte 8bit/1byte char 16bit/2byte short 16bit/2byte float 32bit/4byte int 32bit/4byte l转载 2017-12-16 12:11:32 · 533 阅读 · 0 评论 -
Java中hashCode的作用
http://blog.csdn.net/fenglibing/article/details/8905007以下是关于HashCode的官方文档定义:[plain] view plain copy hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 has转载 2017-12-21 22:58:40 · 136 阅读 · 0 评论 -
classpath、path、JAVA_HOME的作用及JAVA环境变量配置
https://www.cnblogs.com/xwdreamer/archive/2010/09/08/2297098.htmlCLASSPATH是什么?它的作用是什么?它是javac编译器的一个环境变量。它的作用与import、package关键字有关。当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个packa转载 2017-12-24 17:18:51 · 352 阅读 · 0 评论 -
什么是中间件
个人理解:将具体业务和底层逻辑解耦的组件。大致的效果是:需要利用服务的人(前端写业务的),不需要知道底层逻辑(提供服务的)的具体实现,只要拿着中间件结果来用就好了。举个例子:我开了一家炸鸡店(业务端),然而周边有太多屠鸡场(底层),为了成本我肯定想一个个比价,再综合质量挑选一家屠鸡场合作(适配不同底层逻辑)。由于市场变化,合作一段时间后,或许性价比最高的屠鸡场就不是我最开始选的转载 2017-12-24 17:55:10 · 217 阅读 · 0 评论 -
HashMap源码剖析
http://blog.csdn.net/ns_code/article/details/36034955HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurr转载 2018-01-18 15:36:25 · 234 阅读 · 0 评论 -
Vector源码剖析
http://blog.csdn.net/ns_code/article/details/35793865Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 Vector没有转载 2018-01-18 15:28:32 · 193 阅读 · 1 评论 -
LinkedList源码剖析
http://blog.csdn.net/ns_code/article/details/35787253LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializabl转载 2018-01-18 15:25:23 · 178 阅读 · 0 评论 -
Java集合框架
http://blog.csdn.net/ns_code/article/details/35564663Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Colle转载 2018-01-18 15:22:07 · 146 阅读 · 0 评论 -
Arrays.asList() 的陷阱
http://blog.csdn.net/keketrtr/article/details/47108435在java语言中,把数组转换成List集合,有个很方便的方法就是 List list = Arrays.asList("a","b","c");但你可能不知道这样得到的List它的长度是不能改变的。当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就转载 2018-01-25 17:27:56 · 177 阅读 · 0 评论 -
Java单例模式
http://blog.csdn.net/goodlixueyong/article/details/51935526 Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。 单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时转载 2018-01-24 16:50:50 · 134 阅读 · 0 评论 -
Java类加载器:静态变量初始化
http://blog.csdn.net/wanghao109/article/details/49591815先看两个例子:[java] view plain copy print?package wh; class Singleton{ public static Singleton singleton = new S转载 2018-01-24 16:37:51 · 433 阅读 · 0 评论