地表最强菜鸡
这个作者很懒,什么都没留下…
展开
-
Java计算两个Date类型的时间相差多少秒
【代码】Java计算两个Date类型的时间相差多少秒。原创 2023-09-21 11:39:50 · 496 阅读 · 0 评论 -
Java中的-自旋锁/偏向锁/轻量级锁/重量级锁/乐观锁/悲观锁/分段锁/分布式锁等
如果互斥量是加锁的,那么线程会阻塞,当有多个线程被阻塞时,系统会随机的挑选一个线程获取锁。读写锁通过读锁和写锁来完成读写操作,线程在读取数据前要获取读锁,读锁在读线程之间是共享的,可以被多个线程持有,写锁是排他的,有一个线程获取到写锁之后,别的线程无法获取读锁和写锁,这样保证了数据的一致性。这个锁跟synchronized有关系,当锁对象第一次被线程A获取的时候,会记录线程A的id,之后在没有别的线程获取锁对象的前提下,线程A在执行这个锁对应的同步代码块时不会再进行任何同步操作,即这个。原创 2023-03-20 13:05:33 · 617 阅读 · 0 评论 -
AQS实现原理
当锁被某个线程占有,其他请求该锁的线程会被阻塞,从而进入同步队列。由代码可以看出,首先会校验该线程是否已经被中断了,如果是则抛出InterruptedException,否则执行tryAcquire方法(该方法同样由自定义同步器自己实现)获取锁,如果获取成功,则直接返回,否则执行doAcquireInterruptibly方法,代码如下。它首先判断一个节点的前置节点的状态是否为Node.SIGNAL,如果是,是说明此节点已经将状态设置,如果锁释放,则应当通知它,所以它可以安全的阻塞了,返回true。原创 2023-03-20 13:02:08 · 244 阅读 · 0 评论 -
JWT 单点登录(简介)
首先介绍下JWT,可参考官网https://jwt.io/introduction/什么是JSON Web Token(JWT)?JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。虽然JWT可以加密以在各方之间提供保密,但只将专注于签名令牌。签名令牌可以验证其中包含的声明的完整原创 2020-05-25 20:24:36 · 1035 阅读 · 0 评论 -
JWT 单点登录(项目实现)
下面以实际项目中的应用分析,首先看一下大致的数据流图:一、实现思路1、项目一开始我先封装了一个JWTHelper工具包,主要提供了生成JWT、解析JWT以及校验JWT的方法,其他还有一些加密相关操作,后面我会以代码的形式介绍下代码。工具包写好后我将打包上传到私服,能够随时依赖下载使用;2、接下来,我在客户端项目中依赖JWTHelper工具包,并添加Interceptor拦截器,拦截需要校验登录的接口。拦截器中校验JWT有效性,并在response中重新设置JWT的新值;3、最后在JWT服原创 2020-05-25 21:44:32 · 1533 阅读 · 1 评论 -
Java语言生成指定位数uuid
1.UUID 简介UUID 含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准。也是被开源软件基金会 (Open Software Foundation, OSF)的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。UUID 的目的,是让分布式系统中的所有...原创 2019-10-08 20:57:18 · 14072 阅读 · 7 评论 -
Java byte[] 和 String互相转换
通过用例学习Java中的byte数组和String互相转换,这种转换可能在很多情况需要,比如IO操作,生成加密hash码等等。除非觉得必要,否则不要将它们互相转换,他们分别代表了不同的数据,专门服务于不同的目的,通常String代表文本字符串,byte数组针对二进制数据通过String类将String转换成byte[]或者byte[]转换成String用String.getBytes()方法将字符串转换为byte数组,通过String构造函数将byte数组转换成String注意:这种方式使用原创 2021-04-19 15:14:35 · 34072 阅读 · 0 评论 -
Java语言生成指定长度随机密码
最近业务上需要生成指定长度随机密码,下面是代码实现package com.openailab.oascloud.security.service.impl;import java.util.Random;/** * @Classname: com.openailab.oascloud.security.service.impl.GeneratePwd * @Description...原创 2019-08-20 10:55:12 · 948 阅读 · 0 评论 -
Java语言字符串前补零和后补零的快速方法
JAVA字符串前补零和后补零的快速方法String fileName = "130181";System.out.println("================ 前补零方法一 =================");DecimalFormat g1=new DecimalFormat("0000000");String startZeroStr = g1.format(Int...原创 2019-08-13 09:45:11 · 1697 阅读 · 0 评论 -
Java语言获取文件扩展名
最近在生成文件的时候需要获取文件扩展名,特此记录便于日后查阅。package com.openailab.oascloud.file.util;/** * @description: 文件工具 * @author: zhangzhixiang * @createDate: 2020/1/7 * @version: 1.0 */public class FileUtil { ...原创 2020-03-11 11:49:44 · 1056 阅读 · 0 评论 -
Java语言移动整个文件夹或单个文件到另一个文件夹
最近项目中在做文件管理服务,涉及到将文件所有内容从一个目录拷贝到另一个目录下,代码如下:package com.openailab.oascloud.file.util;import java.io.*;/** * @description: * @author: zhangzhixiang * @createDate: 2020/1/7 * @version: 1.0 *...原创 2020-01-08 11:34:36 · 2269 阅读 · 8 评论 -
Java语言文件与Byte数组相互转换(方法一)
JAVA中文件与Byte数组相互转换的方法,如下:public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile(String pathStr) { File file = new File(pathStr); try { FileI...原创 2019-10-08 17:05:20 · 2668 阅读 · 0 评论 -
Java语言清空文件夹下所有文件
最近项目中在做文件管理服务,涉及到需要清空文件夹下所有文件,代码如下:package com.openailab.oascloud.file.util;import java.io.*;/** * @description: * @author: zhangzhixiang * @createDate: 2020/1/7 * @version: 1.0 */public ...原创 2020-01-08 11:36:56 · 1696 阅读 · 0 评论 -
Java语言根据日期生成随机文件名
最近在生成文件的时候需要根据日期生成随机文件名,特此记录便于日后查阅。package com.openailab.oascloud.file.util;import com.openailab.oascloud.file.common.consts.BootstrapConst;import java.text.SimpleDateFormat;import java.util.D...原创 2020-03-11 11:47:17 · 1493 阅读 · 0 评论 -
Java语言文件与Byte数组相互转换(方法二)
最近项目中需要把文件转为Byte数组进行操作,特此记录便于日后查阅。package com.openailab.oascloud.file.util;import com.openailab.oascloud.file.common.consts.BootstrapConst;import java.io.*;import java.nio.MappedByteBuffer;im...原创 2020-03-11 11:43:14 · 1191 阅读 · 2 评论 -
Java语言计算文件MD5值(支持大文件)
最近项目中需要通过文件md5值判断文件有没有损坏,特此记录便于日后查阅。import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex...原创 2020-03-23 17:10:16 · 4594 阅读 · 1 评论 -
Java匹配文件流特定数据块方法
最近工作中涉及到匹配文件流,并替换其中数据块的内容,特此记录便于日后查阅,代码如下:public static Map<String, Integer> search_pattern(byte[] content, byte[] pattern) { Integer content_len = content.length; Map<String, Inte...原创 2019-10-15 16:04:36 · 384 阅读 · 0 评论 -
Java故障定位—高CPU占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过 $ ps -aux | grep PID,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示线程列表: $ ps -mp PID -o THREAD,tid,time找到了耗时...原创 2020-05-29 15:01:20 · 824 阅读 · 4 评论 -
JNI NewStringUTF字串的释放
str = (*env)->NewStringUTF (env, filelist);if (str == NULL){ /* ... */ return 0; }/* save into array */(*env)->SetObjectArrayElement (env, filearray, i, str);/* delete local reference */...原创 2019-09-30 14:55:48 · 2254 阅读 · 0 评论 -
JNI 数组数据处理
JNI 中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是 JNI 的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问 Java 传递给 JNI 层的数组,必须选择合适的 JNI 函数来访问和设置 Java 层的数组对象。访问基本类型数组1、Java代码//调用数组byte a...原创 2019-09-19 11:09:57 · 2516 阅读 · 0 评论 -
JNI 手动释放内存(避免内存泄露)
1. 哪些需要手动释放? 不要手动释放(基本类型): jint , jlong , jchar 需要手动释放(引用类型,数组家族): jstring,jobject ,jobjectArray,jintArray ,jclass ,jmethodID 2. 释放方法2.1 jstring & char *// 创建 jstring 和 char*jstri...原创 2019-09-26 18:16:19 · 3338 阅读 · 0 评论 -
JNI 生成头文件的方法
需要注意的是,操作的时候需要将目录定位到class目录下(也就是 com.openailab.oascloud.security 的上一级),然后再执行以下命令生成 .h 头文件 $ javah -jni com.openailab.oascloud.security.jni.SmxJNI...原创 2019-09-20 10:06:32 · 690 阅读 · 0 评论 -
JNI 修改(基本类型)参数并返回到Java层使用
最近在JNI相关项目中遇到一个问题:在Java层传入多个int类型的参数,在jni层修改参数值或地址之后重新返回到Java层。这应该算是基本知识了,尤其是基本类型的参数往往看似简单,所以在之前学习jni时就一笔带过了,结果现在突然遇到这个问题竟然需要再查找资料学习,因此这周在重新复习一遍基础知识之后将此记录一下。走的再远,也不要忘记脚底的路。还是用Demo来解释下需求和对应解决方案吧pu...原创 2019-09-22 20:55:49 · 1515 阅读 · 2 评论 -
JNI 报错:“无法打开源文件jni.h“ “JNIEXPORT此声明没有存储类或类型说明符“
原文地址:https://blog.csdn.net/michael_f2008/article/details/885250001、在VS项目中右键,选择“属性”,在弹出的窗口中选择“VC++ 目录”,然后编辑右侧的“包含目录”2、添加本地JDK目录下的include文件夹和include\win32文件夹...原创 2019-09-19 09:42:06 · 1969 阅读 · 0 评论 -
JNI 在实际项目中的使用方法
本文主要讲述JNI在项目中实际是怎么使用的,主要目的是记录,不做太多说明,代码如下:1、CMakeListCMAKE_MINIMUM_REQUIRED(VERSION 3.5)project("device-authentication")INCLUDE_DIRECTORIES(/usr/include ../../include ../../net ../../net/mbed...原创 2020-02-21 00:35:49 · 829 阅读 · 0 评论 -
JNI 返回JAVA 实体
1、编写Books实体类/** * @author jayqiu * @describe * @date 2017/3/30 17:21 */public class Books { private String title; private String author; private String subject; private int boo...原创 2019-09-19 10:26:15 · 707 阅读 · 0 评论 -
JNI 类型对照表
原文地址:https://blog.csdn.net/zhao007z5/article/details/80061819 Java和Jni类型对照表引用类型对照表 Java的基本类型可以直接与C/C++的基本类型映射,基本类型的转换很简单。不过应注意下,转换成Native类型后对应数据类型的字长,例如char在java中占2个字节jchar在Native语言中也是...原创 2019-09-18 14:30:59 · 677 阅读 · 0 评论 -
Java语言在原有日期时间上加几个月或几天
在原有的时间上添加几个月:SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式Date date = new Date();System.out.println(df.format(date)); // 当前系统时间 Date newDate = stepMonth(dat...原创 2020-01-16 18:40:50 · 3687 阅读 · 0 评论 -
Java语言判断当前时间在时间范围内
最近在开发项目的过程中需要判断当前时间是否在时间范围内,特此记录便于日后查阅。public static void main(String[] args) throws ParseException { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); Date startTime = ft.parse...原创 2020-03-12 20:31:29 · 5474 阅读 · 2 评论 -
Java语言new Date()得到的时间和系统时间不一样
在启动java程序时增加以下运行参数: -Duser.timezone=GMT+8到此new Date()得到的时间和系统时间不一样问题解决。原创 2020-05-11 16:32:38 · 2725 阅读 · 2 评论 -
JAVA语言十六进制数字符串数和十进制数字符串互转的方法(个别方法也适用于其他进制之间的转换)
方法1:使用Integer自带的方法以十进制获取数值,并以十六进制输出为字符串使用该方法也能实现其他进制数之间的互转,但是使用Int类型也就意味着能转的数值不能大于2147483647。/** * 十进制数据转换为十六进制字符串数 * * @param dec * @return */public static String decToHex(String dec) { ...原创 2020-04-22 20:28:35 · 1862 阅读 · 0 评论 -
Java语言Int与byte[]互转详解分析
我先贴出最终转换的代码,再来进行一步一步的介绍: /** * 将int数值转换为占四个字节的byte数组 * @param value * 要转换的int值 * @return byte数组 */ public static byte[] intToBytes(int value ) { byte[] sr...原创 2019-10-17 09:48:33 · 5490 阅读 · 3 评论 -
Java语言生成固定位16进制随机数
/** * 产生numSize位16进制随机数 * * @param numSize * @return java.lang.String * @author zxzhang * @date 2019/11/9 */public static String getRandomValue(int numSize) { String str = ""; for (in...原创 2019-11-09 12:09:37 · 4247 阅读 · 0 评论 -
Java语言处理C语言中的unsigned char类型进行原样输出
方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取。Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法:(1)intreadUnsignedByte() //从流中读取一个0~255(0xFF)的单...原创 2019-10-07 09:56:19 · 4814 阅读 · 0 评论 -
Java语言进制转换—二进制、八进制、十进制、十六进制之间的转换
最近在研究图像识别的时候遇到进制之间的转换,虽然之前也了解基二进制、八进制、十进制、十六进制之间转换的基本原理,但还没有在java里对其进行实现过。于是就对其进行了一翻研究,现将自己学习的总结与大家分享一下。基本原理二进制——>十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13八进制——>十进制 1101(8...原创 2019-08-12 21:39:41 · 2080 阅读 · 0 评论 -
Java语言对字节数组截取指定长度
Java通过arraycopy来实现字节数组截取,类比于C语言memcpy,代码如下:System.arraycopy(src, srcPos, dest, destPos, length);参数解析:src:byte源数组srcPos:截取源byte数组起始位置(0位置有效)dest,:byte目的数组(截取后存放的数组)destPos:截取后存放的数组起始位置(0位置有效)...原创 2019-10-11 10:28:41 · 2233 阅读 · 0 评论 -
Java将C语言16进制无符号数组转为字符串输出
最近写JNI,遇到一个很麻烦的问题,C语言的unsigned char 16进制数组想要在Java中原样字符串输出,思索了一下午找到了解决方法,代码如下:private static String buling(String str){ return "0" + str;}public static String reverse(String s) { String ...原创 2019-10-06 21:10:52 · 1187 阅读 · 0 评论 -
Java语言byte数组如何截取
byte数组截取当然要提到效率非常高的arraycopy,java中调用方式如下:System.arraycopy(src, srcPos, dest, destPos, length)参数解析:src:byte源数组srcPos:截取源byte数组起始位置(0位置有效)dest:byte目的数组(截取后存放的数组)destPos:截取后存放的数组起始位置(0位置有效)...原创 2019-10-08 14:47:22 · 1908 阅读 · 0 评论 -
Java语言int型与byte型数组的转换
为了在接下来的篇章中讲解用Java实现文件的归档和解归档,需要先了解一下Java中int型与byte型数组之间的相互转换。首先,我们先来看看int型转换成byte型数组。我们知道,Java中,一个int型占用4个字节,一个byte型占用1个字节,所以,对于一个int型,我们需要一个长度为4的byte型数组来对其进行存储。 31位——24位 23位——16...原创 2019-10-08 15:29:58 · 4083 阅读 · 0 评论 -
Java语言将10进制转为双位16进制
最近项目中需要将10进制转为双位16进制,特此记录便于日后查阅。/** * 将10进制转为16进制 * * @param n * @return java.lang.String * @author zxzhang * @date 2020/3/19 */private static String intToHex(int n) { if (n == 0) { ...原创 2020-03-20 11:52:06 · 1240 阅读 · 1 评论