Java
文章平均质量分 66
gmHappy
从不敢夜郎自大,但也不至于妄自菲薄,只是想做一个靠本事吃饭的手艺人
展开
-
MySQL 8 公用表表达式(CTE)—— WITH关键字深入用法
公用表表达式(CTE)是一个命名的临时结果集,它,可以在该语句中引用,可能多次。对于逻辑复杂的SQL,可以大大减少临时表的数量,提升代码的可读性、可维护性。原创 2023-01-05 14:08:21 · 420 阅读 · 0 评论 -
Java并发编程(二)—— CompletableFuture 超详细教程
Java并发编程—— CompletableFuture 超详细教程(源码分析)原创 2022-12-18 15:00:37 · 670 阅读 · 0 评论 -
Java并发编程(一)—— FutureTask超详细教程
Java并发编程—— FutureTask超详细教程(源码分析)原创 2022-12-17 15:36:51 · 402 阅读 · 0 评论 -
利用 javacv 截取视频帧制作封面及获取视频播放时长
一、Maven依赖<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>org.bytedeco</groupId&g原创 2021-11-18 11:48:20 · 727 阅读 · 0 评论 -
java lambda表达式小技巧(一)分组groupingBy后保持排序不变
问题我的需求是查询出来一组数据后,按照其中的某个属性进行groupBy分组,分组后要保证顺序不变。但是实际用groupBy进行分组后,返回的数据是杂乱无章的,没有按照原来list 的顺序返回。排查首先去api中查找问题原因,查看Java的java.util.stream 包 Collectors 类 groupingBy 方法实现,结果如下: //一个参数 public static <T, K> Collector<T, ?, Map<K, List<T>&原创 2020-12-23 11:51:09 · 3031 阅读 · 1 评论 -
基于 ZooKeeper 的分布式锁实现
什么是Zookeeper?Zookeeper(业界简称zk)是一种提供配置管理、分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而且要达到高吞吐、低延迟同时还要保持一致性和可用性,实际上非常困难。因此zookeeper提供了这些功能,开发者在zookeeper之上构建自己的各种分布式系统。虽然zookeeper的实现比较复杂,...原创 2019-01-14 15:04:57 · 1084 阅读 · 0 评论 -
JVM 运行时数据区域划分
目录 前言什么是JVMJRE/JDK/JVM是什么关系JVM执行程序的过程JVM的生命周期JVM垃圾回收JVM的内存区域划分一.运行时数据区包括哪几部分?二.运行时数据区的每部分到底存储了哪些数据?1.程序计数器2.Java栈3.本地方法栈4.堆5.方法区6.元空间(Metaspace)JDK1.8 JVM运行时数据区...原创 2018-12-13 11:39:42 · 2046 阅读 · 2 评论 -
JVM 垃圾回收(GC)机制
目录一、背景二、 哪些内存需要回收?1、引用计数算法2 、可达性分析算法三、 四种引用状态1、强引用2、软引用3、弱引用4、虚引用对象死亡(被回收)前的最后一次挣扎方法区如何判断是否需要回收四、垃圾收集算法1、标记-清除(Mark-Sweep)算法2、复制(Copying)算法3、标记-整理(Mark-Compact)算法4、分代收集...原创 2018-12-13 15:23:37 · 1525 阅读 · 0 评论 -
referenceQueue用法
何为referenceQueue在java的引用体系中,存在着强引用,软引用,虚引用,幽灵引用,这4种引用类型。在正常的使用过程中,我们定义的类型都是强引用的,这种引用类型在回收中,只有当其它对象没有对这个对象的引用时,才会被GC回收掉。简单来说,对于以下定义:Object obj = new Object();Ref ref = new Ref(obj);在这种情况下,如果ref没有被...转载 2018-12-19 14:09:45 · 4726 阅读 · 1 评论 -
java 中Shallow Heap与Retained Heap的区别
Shallow SizeShallow Size是对象本身占据的内存的大小,不包含其引用的对象。对于常规对象(非数组)的Shallow Size由其成员变量的数量和类型来定,而数组的ShallowSize由数组类型和数组长度来决定,它为数组元素大小的总和。Retained SizeRetained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A...原创 2018-12-19 18:48:16 · 1778 阅读 · 0 评论 -
JVM Heap Memory和Native Memory
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此不赘述。Native Memory没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种...原创 2018-12-07 11:46:00 · 5683 阅读 · 2 评论 -
Java JNA (五)—— 释放Memory对象分配的内存
Java进程的内存包括Java NonHeap空间、Java Heap空间和Native Heap空间。JNA中的Memory对象是从Native Heap中分配空间。但java的GC是针对Java Heap空间设计的,当Java Heap空间不足时会触发GC,但Native Heap空间不够却不会触发GC。所以,当Java Heap占用空间不大时,并不会GC掉Memory对象,也就不会执行f...原创 2018-12-07 12:19:44 · 11515 阅读 · 1 评论 -
Vert.x中EventBus中的使用
注意:使用的是vert.x3.0 仅支持到java8当中有一些lambda表达式。如不明确请自补java8新特性。The Event Busevent bus 是vert.x的神经系统。每个vert.x的实例都有一个单一的event bus 实例。它是使用vertx.eventBus()方法获得的。event bus 同意程序中的不同语言编写的模块进行通信。不论他们是同样的vert.x实例...原创 2018-11-27 15:51:15 · 2022 阅读 · 0 评论 -
Java Service Wrapper 发布Java程序为Windows服务
Wrapper用途在做完一个项目程序后,有时会有两种需求想法:在每次机器重启后自动运行程序。在程序运行过程中如果发生了死锁、内存溢出或程序崩溃等问题时程序能自动重启。当然。要实现这两种效果的方案有很多。可以在系统引导文件中加入开机运行程序引导,也可以写一个系统监听程序等等。现在有一个更简单的解决方案。有一个java程序叫Java Service Wrapper。这是用来在window...原创 2018-11-27 11:58:17 · 4132 阅读 · 0 评论 -
mybatis resultMap之collection聚集两种实现方式
最近做得项目用到了MyBatis处理一对多的映射关系,下面的两个方法中用到了集合的嵌套查询方法,下面仔细学习一下这两种方式聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式...原创 2018-12-04 11:39:44 · 22955 阅读 · 4 评论 -
Java JNA (四)—— void**、void*、char**、char*、int*等类型映射关系及简单示例
C++接口////////////////////////////////////////////////////////////////////////////1.1 TCP参数初始化//功能:通过参数传入,初始化TCP,为打开连接做准备//参数:// pHandle 为保存打开的端口句柄// pHostName 本机的IP地址,仅在网络通讯模式下有效// nsocke...原创 2018-11-29 13:04:44 · 21620 阅读 · 11 评论 -
log4j日志输出格式
%n- 换行%m - 日志内容%p - 日志级别(FATAL, ERROR, WARN, INFO, DEBUG or custom)%r - 程序启动到现在的毫秒数%% - percent sign in output%t - 当前线程名%d - 日期和时间,常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS},%F - java源文件名...原创 2018-11-07 13:38:10 · 8923 阅读 · 0 评论 -
java httpclient basic授权
import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.StatusLine;import org.apache.http.client.ClientProtocolException;im...原创 2018-10-22 16:41:00 · 1814 阅读 · 0 评论 -
redis 命令大全
全局命令:1、查看所有键:keys *2、键总数:dbsize3、检查键是否存在:exists key4、删除键:del key [key ...]5、键过期:expire key seconds ——当超过过期时间后,会自动删除键,例:expire hello 106、键的剩余过期时间:ttl key ——返回键的剩余过期时间:大于等于0的整数:键剩余的过期时间;-1:键没设置过期...原创 2018-09-29 16:15:00 · 1620 阅读 · 0 评论 -
Java JNA (三)—— 结构体使用及简单示例
JNA简介JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna)。JNA提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的...原创 2018-09-29 11:56:05 · 15137 阅读 · 1 评论 -
Java JNA (二)—— dll回调函数实现
java调用dll文件需要使用回调函数作为公开函数的参数时,用以下方法实现:首先,看c++中定义的dll公开函数:typedef void (*ccback)(char *name ,int length); int dllFunction(char *ip, int port, ccback cc); 引用dll文件方法不再赘述,直接看回调函数的实现,需要通过java的接口实现...原创 2018-09-26 16:49:24 · 13055 阅读 · 0 评论 -
java 回调的原理与实现
回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调原本应该是一个非常简单的概念,但是可能因为平时只用系统为我们写好的回调的接口了,自己很少实现回调,所以在自己实现回调的时候还是有一点点晕的,现在写这篇文章记录一下,也和大家分享一下怎么写回调接口。回调回调的概念:...原创 2018-12-18 14:29:29 · 2309 阅读 · 1 评论 -
java 中的引用类型
GC基本原理GC (Garbage Collection)的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停(1)对新生代的对象的收集称为minor GC;(2)对旧生代的对象的收集称为Full GC;(3)程序中...原创 2018-12-18 18:02:31 · 1137 阅读 · 0 评论 -
Java 计算两点间的全部路径(二)
一、有向线段,存储开始点与结束点/** * 有方向的线段 * * @author Gm * */public class DirectionLine implements Cloneable { private String beginNode; private String endNode; public DirectionLine(String beginNode, ...原创 2019-08-19 09:02:53 · 1159 阅读 · 0 评论 -
Java 迪杰斯特拉算法实现查找最短距离
迪杰斯特拉算法迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。具体的计算规则我们可以通过下图进行查看。通过这幅图我们可以简单的理解迪杰斯特拉算法算法的基础思路,下面我们就通过JAVA来实现这个算法。算法实现...原创 2019-08-06 14:00:36 · 705 阅读 · 1 评论 -
Java 计算两点间的全部路径(一)
算法要求:在一个无向连通图中求出两个给定点之间的所有路径;在所得路径上不能含有环路或重复的点;算法思想描述:整理节点间的关系,为每个节点建立一个集合,该集合中保存所有与该节点直接相连的节点(不包括该节点自身);定义两点一个为起始节点,另一个为终点,求解两者之间的所有路径的问题可以被分解为如下所述的子问题:对每一 个与起始节点直接相连的节点,求解它到终点的所有路径(路径上不包括起始节...原创 2019-08-08 14:32:21 · 2766 阅读 · 3 评论 -
java 并发编程lock使用详解
浅谈Synchronized:synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而获取锁的线程释放锁会有三种情况:1).获取锁的线程执行完该代码块,然后线程释放对锁的占有;2).线程执行发生异常,此时JVM会让线程自动释放锁;...原创 2019-06-11 15:41:29 · 544 阅读 · 0 评论 -
java gRPC四种服务类型简单示例
一、gRPC 简介gRPC 是Go实现的:一个高性能,开源,将移动和HTTP/2放在首位通用的RPC框架。使用gRPC可以在客户端调用不同机器上的服务端的方法,而客户端和服务端的开发语言和运行环境可以有很多种,基本涵盖了主流语言和平台。双方交互的协议可以在proto文件中定义,客户端和服务端可以很方便的通过工具生成协议和代理代码。而消息的编码是采用google protocol buffer...原创 2019-06-13 16:08:57 · 5600 阅读 · 2 评论 -
SpringBoot 单元测试忽略@component注解
springboot框架在单元测试时可能需要忽略某些带有@component的实例例如以下代码:@Componentpublic class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... var1) throws Exception { }}服务启动会...原创 2019-04-26 11:48:44 · 4719 阅读 · 0 评论 -
Springboot 打jar包项目无法访问jsp问题解决方案
maven编译插件,请选择1.4.2.RELEASE版本,1.5.x的版本已经不再支持pom.xml重要部分如下:<build> <resources> <resource> <directory>src/main/webapp</directory> <targetPath>META-INF/r...原创 2019-04-02 17:21:26 · 1594 阅读 · 1 评论 -
Java httpClint实现文件上传
Maven依赖<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version></dependency><de...原创 2019-03-27 15:37:11 · 903 阅读 · 0 评论 -
Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class Test { public static void main(String[] args){ List<PersonData...原创 2019-04-10 10:19:37 · 16879 阅读 · 5 评论 -
Java JPA设置默认值、Timestamp设置、自动获取时间
设置默认值@Column(name="state",columnDefinition="tinyint default 0")private Integer state=0;columnDefinition在创建表的时候使用其他时候可以采用直接赋值的方式:private Integer state=0;Timestamp设置注解@org.hibernate.annotations...原创 2019-03-06 19:11:06 · 19992 阅读 · 0 评论 -
Java 关于SpringbootJPA分页及排序
创建Pageable对象看了网上很多博客,都是在用 new PageRequest的方法创建Pageable对象。可是估计很多同学写了之后才发现原来这个方法作者已经标记为过时了;替代的方法是不要new PageRequest,而是直接用 PageRequest.of这个方法 根据你的需求选择入参;下面贴出对比@Override@Transactional(readOnly = true)...原创 2019-03-06 18:52:57 · 1507 阅读 · 0 评论 -
Java8 将List转变为逗号分隔的字符串
import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class Test { /** * 将List转变为逗号分隔的字符串 * * @param args */ public static void main(String[] args) {...原创 2019-03-05 18:46:25 · 8307 阅读 · 0 评论 -
Git 安装使用及基础命令
Git终端软件安装1、下载windows上git终端,类似shell工具,下载地址:http://msysgit.github.io/2、 安装方法,打开文件,一路点击Next即可3、安装完成,界面如下在本地创建一个仓库注:每一条Git语句都是以$开始的(终端一般是自动加了的),#后面代表注释,回车运行命令1、创建一个身份标识(将JohnDoe和[email protected]...原创 2019-01-28 17:22:11 · 1196 阅读 · 0 评论 -
java 判断点是否在一条线段上
```public static void main(String[] args) { Scanner scan = new Scanner(System.in); Point point1 = new Point(); Point point2 = new Point(); double x, y; point1.setLocation(5.0, 5.0); point2.setL...原创 2019-01-11 13:59:03 · 5847 阅读 · 1 评论 -
weakHashMap 用法
WeakHashMap,此种Map的特点是:当除了自身有对key的引用外,此key没有其他引用,那么GC之后此map会自动丢弃此值举例来说:声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于a对象...原创 2018-12-18 20:22:20 · 1668 阅读 · 0 评论 -
spring 事物(三)—— 声明式事务管理详解
spring的事务处理分为两种:1、编程式事务:在程序中控制事务开始,执行和提交;详情请点此跳转;2、声明式事务:在Spring配置文件中对事务进行配置,无须在程序中写代码;(建议使用)我对”声明式“的理解是这样的:Spring配置文件中定义好了这样一个规则,这个规则可以指定对哪些类的哪些方法在执行的时候添加事务控制,并配置好了事务的相关执行属性,就是在这些类的这些方法执行的时候隐式地...原创 2018-09-06 14:54:04 · 9361 阅读 · 0 评论 -
spring AOP的两种代理
1.JDK动态代理 2.cglib代理1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换注:JDK动态代理要比cglib代理执行速度快,但性能不如cglib好。所以在选择用哪种代理还是要看具体情况,...原创 2018-08-24 14:24:55 · 13537 阅读 · 3 评论