
java
@Levin
https://vantaolee-bupt.gitbook.io/essay/
展开
-
Java获取图片颜色占比
import cn.hutool.core.lang.Pair;import cn.hutool.core.util.HexUtil;import lombok.extern.slf4j.Slf4j;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.HashMap;import ja.原创 2021-09-26 17:12:44 · 1053 阅读 · 0 评论 -
1、JAVA并发的优缺点
1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的”摩尔定律”,可能会奇怪明明讨论的是并发编程为什么会扯到了硬件的发展,这其中的关系应该是多核CPU的发展为并发编程提供的硬件基础。摩尔定律并不是一种自然法则或者是物理定律,它只是基于认为观测数据后,对未来的一种预测。按照所预测的速度,我们的计算能力会按照指数级别的速度增长,不久以后会拥有超强的计算能力,正是在畅想未来的时候,2...转载 2018-08-01 23:38:54 · 463 阅读 · 0 评论 -
Java异常总结
1、JAVA异常类图:运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器...原创 2018-08-01 21:03:58 · 2171 阅读 · 0 评论 -
java使用poi读取excel表格数据工具类
package com.eyric.excel;import java.io.*;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.*;import com.eyric.excel.dto.ExcelData;import com.eyric.excel.dto.Ex...原创 2018-08-01 15:13:08 · 3160 阅读 · 0 评论 -
JAVA设计模式讲解
* 一、概述 * 二、创建型 * 1. 单例(Singleton) * 2. 简单工厂(Simple Factory) * 3. 工厂方法(Factory Method) * 4. 抽象工厂(Abstract Factory) * 5. 生成器(Builder) * 6. 原型模式(Prototype) * 三、行为型 ...转载 2018-08-05 20:19:33 · 419 阅读 · 0 评论 -
2、线程的状态及基本操作
1. 新建线程一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程;(2)调用对象的finalize方法的线程;(3)清除Reference的线程;(4)main线程,用户程序的入口。那么,如何在用户程序中新建一个线程了,只要有三种方式:通过继承Thread...转载 2018-08-01 23:46:29 · 145 阅读 · 0 评论 -
3.java内存模型以及happens-before规则
1. JMM的介绍当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象是线程安全的。关于定义的理解这是一个仁者见仁智者见智的事情。出现线程安全的问题一般是因为主内存和工作内存数据不一致性和重排序导致的,而解决线程安全的问题最重要的就是理解这两种问题是怎么...转载 2018-08-01 23:51:24 · 151 阅读 · 0 评论 -
11.深入理解读写锁ReentrantReadWriteLock
1.读写锁的介绍在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者concurrents包中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并...转载 2018-08-18 10:35:43 · 123 阅读 · 0 评论 -
12.详解Condition的await和signal等待通知机制
1.Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...转载 2018-08-18 10:36:57 · 202 阅读 · 0 评论 -
13.LockSupport工具
1. LockSupport简介在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使用的Condition时都会调用LockSupport.park()方法和LockSupport.unpark()方法。而这个在同步组件的实现中被频繁使用的LockSupport到底是何方神圣,现在...转载 2018-08-18 10:37:56 · 151 阅读 · 0 评论 -
java FileUtil
package com.eyric.util;import org.apache.commons.io.FilenameUtils; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException; import java.text.Simpl...原创 2018-08-19 15:35:56 · 549 阅读 · 1 评论 -
Java垃圾回收(GC)机制详解
Java垃圾回收(GC)机制详解一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。二、哪些内存需要回收?哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?...转载 2019-03-10 13:49:36 · 130 阅读 · 0 评论 -
从一个class文件深入理解Java字节码结构
https://blog.youkuaiyun.com/u011810352/article/details/80316870转载 2019-05-07 20:44:03 · 294 阅读 · 0 评论 -
Spring Bean生命周期源码分析
剑指Spring源码本文使用的Spring版本为5.1.2,现在JavaConfig风格+注解的方式来使用Spring是Spring官方主推的,也是现在的主流方式,所以我们从这里出发:import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class App { ...原创 2019-06-19 19:54:41 · 1257 阅读 · 3 评论 -
JAVA学习路线图
原创 2019-06-24 08:16:04 · 175 阅读 · 0 评论 -
JAVA8新特性
对于Java开发者来说,Java8的版本显然是一个具有里程碑意义的版本,蕴含了许多令人激动的新特性,如果能利用好这些新特性,能够大大提升我们的开发效率。Java8的函数式编程能够大大减少代码量和便于维护,同时,还有一些跟并发相关的功能。开发中常用到的新特性如下:接口的默认方法和静态方法函数式接口FunctionInterface与lambda表达式方法引用StreamOptio...转载 2018-08-04 21:57:22 · 248 阅读 · 0 评论 -
HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是...转载 2018-07-30 18:45:19 · 161 阅读 · 0 评论 -
JAVA使用socket与PLC通信
package com.hcs.base;import com.hcs.util.DebugUtil;import com.hcs.weather.utils.HexUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotatio...原创 2018-07-25 12:23:05 · 22929 阅读 · 43 评论 -
SUN_Java程序员认证考试题库(一)
第一章练习题(Java入门) 1.下列哪项不是JDK所包含的内容?(选一项) A.Java编程语言 B.工具及工具的API C.Java EE扩展API D.Java平台虚拟机 2.下列关于JDK、JRE和JVM的描述。哪项正确? A.JDK中包含了JRE,JVM中包含了JRE B.JRE中包含了JDK,JDK转载 2016-10-07 15:39:32 · 8143 阅读 · 0 评论 -
JAVA运算符优先级与ASCII码
运算符的优先级(从高到低)优先级描述运算符1括号()、[]2正负号+、-3自增自减,非++、--、!4乘除,取余*、/、%5加减+、-原创 2016-10-10 18:59:54 · 594 阅读 · 0 评论 -
JAVA http工具类
package com.hcs.util;import org.apache.http.*;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client....原创 2018-07-25 12:26:32 · 1387 阅读 · 1 评论 -
Java properties配置文件工具类
package com.hcs.util;import javassist.bytecode.stackmap.TypeData;import org.springframework.util.Assert;import java.io.*;import java.net.URL;import java.util.Properties;import java.util.Set;...原创 2018-07-25 12:27:48 · 151 阅读 · 0 评论 -
JAVA CRC16校验码计算
package com.hcs.lqjc.controller.dongDaHengFeng.ModBus.utils;/** * @author lwt * @date 2018-06-26 * * CRC16校验码计算 * <p> * (1).预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器; * (2).把第一个8位二进制数据(既...原创 2018-07-25 12:29:49 · 8127 阅读 · 4 评论 -
1、Object类阅读笔记
1、Object类的类图 Object类的方法大部分为native方法,只有equals、toString、finalize三个方法不是,notify、notifyAll、wait在此处定义。2、equalspublic boolean equals(Object obj) { return (this == obj); //比较内存地址 }3、t...原创 2018-08-04 02:37:17 · 218 阅读 · 0 评论 -
10.彻底理解ReentrantLock
1. ReentrantLock的介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性(关于synchronized可以看这篇文章),synchronized通过获取自增,释放自减的方式实现重入。与此同时,R...转载 2018-08-04 02:08:14 · 163 阅读 · 1 评论 -
9.深入理解AbstractQueuedSynchronizer(AQS)
1. AQS简介在上一篇文章中我们对lock和AbstractQueuedSynchronizer(AQS)有了初步的认识。在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义,AQS则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。AQS的核心也包括了这些方面:同步队列,独占式锁的获取和释放,共享锁的获取和释放以及...转载 2018-08-04 02:07:06 · 117 阅读 · 0 评论 -
8.初识Lock与AbstractQueuedSynchronizer(AQS)
1. concurrent包的结构层次在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们队并发编程的掌握更加透彻也会大大提升我们队并发编程技术的热爱。这些代码在java.util.concurrent包下。如下图,即为concurrent包的目录结构图。其中包含了两个子包:atomic以及lock,另外在concurrent下的阻塞...转载 2018-08-04 02:06:13 · 130 阅读 · 0 评论 -
7.三大性质总结:原子性、可见性以及有序性
1. 三大性质简介在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 原子性,有序性和可见性上做一个比较,当然这也是面试中的高频考点,值得注意。2. 原子性原子性是...转载 2018-08-04 02:05:18 · 202 阅读 · 0 评论 -
6.你以为你真的了解final吗?
1. final的简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。2. final的具体使用场景final能够修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,下...转载 2018-08-04 02:04:29 · 141 阅读 · 0 评论 -
5.彻底理解volatile
1. volatile简介在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级的同步机...转载 2018-08-04 02:03:30 · 114 阅读 · 0 评论 -
4.彻底理解synchronized
1. synchronized简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i <...转载 2018-08-04 02:01:25 · 174 阅读 · 0 评论 -
50道JAVA基础编程练习题
50道JAVA基础编程练习题【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... public class Prog1{ public static void main(原创 2016-10-08 21:03:33 · 917 阅读 · 0 评论