Java
好记性不如烂笔头_
每天都像打了鸡血似的。。。
展开
-
java-标记接口
标记接口不含有任何方法的接口 作用:类似标签的作用,仅仅是给接口的实现类贴上一个标签,然后我们可以根据这个实现类是否持有这个标签来对实现类进行一些相关操作// 这是一个标记接口,不含有任何方法public interface DemoInterface {}// 类 ClassA 实现了 DemoInterface 接口public class ClassA implements...原创 2019-01-31 21:20:25 · 937 阅读 · 0 评论 -
java-IO-文件(File)读写操作
常用IO流体系图InputStream(输入流):用于读取数据 OutputStream(输出流):用于输出数据字节流:一次读取一个字节// 测试文件大小:2087KB// 普通字节流,一次读取一个字节public static void ioOption() throws IOException { // 获取文件 字节输入流,如果文件不存在抛出异常 Fil...原创 2019-02-22 16:03:55 · 590 阅读 · 0 评论 -
java-IO-(BIO、NIO、AIO)
基本概念同步:多个任务之间必须有序的执行 异步:多个任务之间可以独立的执行,互不干扰 阻塞:当条件不满足时,程序会卡在那里,直至条件满足为止 非阻塞:当条件不满足时,程序不会卡在那里,同时会收到一个标志信息告知当前条件不满足 同步和异步着重点在于多个任务执行过程中,后发起的任务是否必须等先发起的任务完成之后再进行 阻塞和非阻塞重点在于请求的方法是否立即返回(或者说是否在条件不满足时被阻...原创 2019-02-22 16:06:17 · 206 阅读 · 0 评论 -
java-集合-LinkedList
LinkedList数据存储是基于双向链表实现的 非线程安全 实现了Deque接口,双向队列,允许在队首、队尾进行入队和出队操作(Deque继承自Queue接口) 实现了Serializable接口,支持序列化,能够通过序列化传输, 实现了Cloneable接口,能被克隆。LinkedList 数据结构LinkedList类每个元素用内部类Node(结点)表示 每个结点除了数据...原创 2019-02-17 21:09:44 · 133 阅读 · 0 评论 -
java-foreach实现原理
对于Array,就是转化为对数组中的每一个元素的循环引用,用下标遍历来实现 对于Collection,编译器会调用Iterable接口的 iterator方法来做循环遍历转载 2019-02-18 00:52:32 · 1659 阅读 · 0 评论 -
java-集合-HashMap
HashMap 数据结构图 (基于jdk1.8.0_92)数组:黄色部分 链表:绿色部分 红黑树 :粉色部分HashMap 存储数据流程图、原理利用hash()方法计算key的哈希值 判断数组是否为空或者长度为0,是则调用resize()方法进行扩容 根据哈希值算出在数组中的位置,并判断当前位置是否有数据,若没有则直接插入新数据 若有数据(发生哈希碰撞),利用equals(...原创 2019-02-18 00:35:47 · 142 阅读 · 0 评论 -
java-静态导入
假如我们有一个工具类,里面有很多静态方法,我们要使用某个方法时应该怎么用呢? 我们直接导入这个类,如下:// 直接导入类import com.hbean.common.util.HUtil;// 然后我们要使用哪个静态方法就直接通过类名调用HUtil.md5Encrypt("xxx")我们通过静态方式导入一个类// 1、使用静态方式直接导入类的某个静态方法对象import ...原创 2019-02-18 11:45:19 · 219 阅读 · 0 评论 -
java-IO-字节数组输入输出流(ByteArrayInputStream、ByteArrayOutputStream)
字节数组输入输出流ByteArrayInputStream:将字节数组转成字节输入流 ByteArrayOutputStream:从字节数组输出流可以获取字节数组将文件转为字节数组、字节数组转为文件// 测试文件大小:2487KB// 文件转为字节数组public static byte[] ioOption() throws IOException { // 缓冲字节输入...原创 2019-02-23 15:56:08 · 2998 阅读 · 0 评论 -
java-并发容器-ConcurrentHashMap
ConcurrentHashMap 结构图(java7)采用分段锁机制:Segment ConcurrentHashMap 实际上是一个 Segment 数组,Segment 继承了 ReentrantLock,每次操作都会对指定的Segment 进行加锁,这样就保证每个 Segment 是线程安全的,也就实现了全局的线程安全。 Segment 是一种可重入锁(继承ReentrantLo...原创 2019-02-18 16:14:01 · 119 阅读 · 0 评论 -
java-AQS(抽象队列同步器)
AQS原理:当线程请求的共享资源空闲时,将资源设置为锁定状态,同时将当前线程设置为工作线程 当其他线程来请求当前被锁定的资源时,将其暂时放到一个队列当中(基于CLH队列实现) CLH队列锁帮助实现其他线程的挂起等待以及唤醒、分配锁功能注:CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQ...原创 2019-02-28 10:30:15 · 556 阅读 · 0 评论 -
java-IO-文件通道(FileChannel)
FileChannel面向文件的通道 可以从FileInputStream、FileOutputStream和RandomAccessFile中通过getChannel()方法获得FileChannel实现文件复制// 1、当文件大小小于2GB时,这种方式没有什么大问题,但是如果文件小大超过2GB,这种方式就会数据丢失// 测试文件大小:8832KBpublic static voi...原创 2019-02-25 11:57:13 · 1243 阅读 · 0 评论 -
java-并发容器-CopyOnWriteArrayList
CopyOnWriteArrayList 数据结构图基于数组实现 读写分离的并发处理策略 读数据时不加锁,所有线程并发读 当有线程写数据时,先获取锁,然后复制一个新数组写入数据,然后切换数组引用指向新数组,然后释放锁CopyOnWriteArrayList 存储数据实现原理获取锁 复制一个新数组,写入元素 将数组的对象引用切换到新数组 释放锁// 新增元素public ...原创 2019-02-19 22:27:30 · 148 阅读 · 0 评论 -
java-多线程-ThreadLocal
Thread 类首先我们要知道,Thread 类内部持有一个ThreadLocal 的静态内部类ThreadLocalMap对象的引用,默认为null/* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ThreadLocal.Thread...原创 2019-02-20 00:37:52 · 106 阅读 · 0 评论 -
java-IO-多路复用机制
文件描述符(file descriptor)Linux中,每打开一个文件都有一个小的整数与之对应,就是文件描述符! 内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。 文件描述符是linux里面的叫法,windows里面有类似用来描述文件的叫...原创 2019-02-25 15:39:14 · 4472 阅读 · 1 评论 -
java-方法equals()和hashCode()
为什么要重写equals()和hashCode()方法public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age;...原创 2019-02-20 09:53:21 · 115 阅读 · 0 评论 -
java-多线程-线程池
ThreadPoolExecutor 类//java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类//ThreadPoolExecutor继承了AbstractExecutorService //AbstractExecutorService是一个抽象类,它实现了ExecutorService接口//ExecutorService又...原创 2019-02-20 11:53:54 · 110 阅读 · 0 评论 -
java-Integer缓存机制
示例 :public static void main(String[] args) { Integer a = 10; Integer b = 10; System.out.println("a == b:"+(a == b)); Integer c = 100; Integer d = 100; System.out.println("...原创 2019-03-05 21:16:56 · 200 阅读 · 0 评论 -
java-finalize()方法
1、finalize()方法Object类提供的方法,主要用来回收特殊渠道申请的内存(有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。) 当垃圾收集器确定没有任何引用指向一个Object对象的时候,就会调用Object对象的finalize() 子类可以重写这个方法,在方法里面进行一些系统资源...原创 2019-03-02 21:41:05 · 1305 阅读 · 0 评论 -
java-(Happens-Before)原则
Happens-Before原则程序顺序规则 锁定规则 volatile变量规则 线程启动规则 线程结束规则 中断规则 终结器规则 传递性规则 详细参考:从Java多线程可见性谈Happens-Before原则 https://segmentfault.com/a/1190000011458941...转载 2019-02-22 15:38:20 · 2133 阅读 · 0 评论 -
java-设计模式-代理模式
静态代理 动态代理转到:java-动态代理、静态代理 https://blog.csdn.net/m0_37524661/article/details/86732331原创 2019-02-22 15:20:44 · 88 阅读 · 0 评论 -
java-反射
参考:https://blog.csdn.net/a724888/article/details/80160662 https://blog.csdn.net/sinat_38259539/article/details/71799078 https://www.cnblogs.com/rocomp/p/4781987.html反射(Reflection)在java中,任何一个类都是类C...原创 2019-01-25 17:47:45 · 104 阅读 · 0 评论 -
java-动态代理、静态代理
参考:JDK动态代理-超详细源码分析:https://blog.csdn.net/Dome_/article/details/82427386 JDK动态代理实现原理(jdk8):https://blog.csdn.net/yhl_jxy/article/details/80586785作用:使用代理可以让我们不改变实现类某个实际业务逻辑的情况下,让我们对业务逻辑进行一些功能增强 静态代理...原创 2019-02-01 01:13:37 · 124 阅读 · 0 评论 -
java-操作符(++)
public class Main { public static void main(String[] args) { int a = 10; int b = a++; System.out.println("b = " + b); a = 10; b = ++a; Sy...原创 2019-02-15 12:52:40 · 905 阅读 · 0 评论 -
java-(a = a + b 和 a += b 的问题)
开始之前我们先合上笔记本压压枪,不对,压压惊!在JAVA中,基本类型(除了boolean外)可以自动转换 转换形式为:(byte,short,char) --> int --> long --> float --> double 这就是自动转换的顺序 byte,short,char类型的数据在运算时是自动转换为int类型进行运算 int,long,float,dou...原创 2019-02-15 15:12:37 · 382 阅读 · 0 评论 -
java-基本数据类型
8 种基本数据类型、占内存的容量大小、表示的范围、字节数(1字节(Byte)=8位(Bit) )自动类型转换自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。 自动转换关系如下:注:实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。 参考:https://www.cnblogs.com/javastack/p/9111750.htm...转载 2019-02-15 15:34:35 · 125 阅读 · 0 评论 -
java-类的初始化顺序
类的初始化过程与类的实例化过程类的初始化与类的实例化是两个完全不同的概念 类的初始化是指类加载过程中的初始化阶段对类变量按照程序猿的意图进行赋值的过程; 类的实例化是指在类完全加载到内存中后创建对象的过程。 要想创建一个类的实例,必须先将该类加载到内存并进行初始化,也就是说,类初始化操作是在类实例化操作之前进行的,但并不意味着:只有类初始化操作结束后才能进行类实例化操作public ...原创 2019-02-15 15:44:55 · 180 阅读 · 0 评论 -
java-多线程-Semaphore(信号量)
Semaphore(信号量) [ˈseməfɔ:(r)]:塞么for 用于控制对某个公共资源的线程访问量 acquire():获取许可,这个一个阻塞方法,假如没有获取到许可,线程会一直阻塞在这里直到获取到许可为止 release():释放占用的资源 我们用一个简单的例子看一下场景:有5个人要上厕所,但是只有2个坑位// 我们定义一个上厕所的线程// 只有2个坑位,但...原创 2019-02-21 15:55:06 · 161 阅读 · 0 评论 -
java-servlet
参考:https://www.cnblogs.com/whgk/p/6399262.html https://www.cnblogs.com/xdp-gacl/p/3760336.html 什么是ServletServlet是在服务器上运行的小程序,一个Servlet就是一个java类 Tomcat容器Engine引擎容器 Host主机容器 Context上下文容器 Wr...原创 2019-02-09 00:02:46 · 152 阅读 · 0 评论 -
java-多线程-CountDownLatch(倒计时锁)
CountDownLatch用于控制线程的执行顺序 await():阻塞当前线程,并监视计数器的值,如果计数器值不为0则一直阻塞,如果计数器值变为0则自动让行,线程继续执行 countDown():计数器值减1我们用一个简单的例子看一下场景:假设有2个小弟和3个大佬都去洗澡,小弟不能和大佬一起洗,必须等大佬都洗完了小弟才可以去洗澡// 洗澡线程public class Thread...原创 2019-02-21 19:03:08 · 488 阅读 · 0 评论 -
java-多线程-CyclicBarrier(循环栅栏)
CyclicBarrierCyclicBarrier barrier = new CyclicBarrier(8);CyclicBarrier 可以理解为我们田径比赛的起跑线,它定义了8个跑道 要求必须8个跑道都有人了才能跑 假如来了7人,那么7人都得在起跑线这里等着,等到凑够8人才能你跑 假如来了9人,那么从这9人中选出8人去跑,留下一人继续等到再凑够8人再一起跑 这就是Cycl...原创 2019-02-22 08:36:50 · 208 阅读 · 0 评论 -
java-设计模式-单例模式
饿汉式单例模式提前创建一个实例public class SingletonClass1 { // 初始化阶段就创建一个实例 private static final SingletonClass1 singletonClass1 = new SingletonClass1(); // 通过静态方法获取实例 public static SingletonClass1 getIns...原创 2019-02-22 11:07:09 · 104 阅读 · 0 评论 -
java-多线程
1、进程与线程进程:操作系统中运行的一个应用程序,是受操作系统管理的基本运行单元 线程:可以理解为进程中独立运行的子任务 多线程技术可以提高CPU的利用率,提高系统的运行效率2、实现多线程的方式主要有两种继承Thread类; 实现Runable接口; //继承方式public class ThreadDemo1 extends Thread { @Override ...原创 2018-08-14 10:53:58 · 234 阅读 · 0 评论 -
java-集合-ArrayList
ArrayList 基于数组实现,是一个动态数组,扩容机制请看下文 非线程安全 实现了Serializable接口,支持序列化,能够通过序列化传输, 实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问 实现了Cloneable接口,能被克隆。ArrayList 扩容机制(基于JDK1.8.0_92)如果未定义初始大小,则容量为0,第一次扩容时直接...原创 2018-08-14 10:54:07 · 194 阅读 · 0 评论 -
java-基础
1、常用的 java api 包、类、接口包:java.lang.*类:Boolean、Byte、Class、ClassLoader、Double、Float、Integer、Long、String、StringBuilder、Thread等 接口:Cloneable、Comparable、Runnable等java.util.*类:ArrayList、Arrays、Base64、Da...原创 2018-08-14 10:54:15 · 521 阅读 · 0 评论 -
java-设计模式-建造者模式
链式调用(手动实现方式)直接上代码//public class Condition { private String str1; private String str2; private String str3; private String str4; private String str5; private String str6; ...原创 2019-02-22 12:42:34 · 92 阅读 · 0 评论 -
java-设计模式-原型模式(克隆模式)
为什么使用原型模式1、假如我有一个对象,如下:public static void main(String[] args) { // 创建对象 Condition condition1 = new Condition.Builder() .setStr1("aa") .setStr2("bb") .se...原创 2019-02-22 15:01:52 · 169 阅读 · 0 评论 -
java-强引用、弱引用、软引用、虚引用
参考:还理不清Java引用是什么?看这篇文章就够了转载 2019-03-04 17:32:57 · 126 阅读 · 0 评论