Java
文章平均质量分 73
java 学习
小杨同学~
我为成功而来,不为失败低头
展开
-
Springboot 实现数据加解密
AES(Advanced Encryption Standard)**:是一种对称加密算法,用于替代过时的DES(Data Encryption Standard)。AES支持128位、192位和256位密钥长度,被广泛用于保护敏感信息。:是一种非对称加密算法,用于实现数据的加密和数字签名。RSA基于数学问题,涉及公钥和私钥,公钥用于加密,私钥用于解密。Diffie-Hellman密钥交换:是一种用于安全地交换密钥的协议,通过不安全的通信渠道,双方可以生成一个共享的密钥,然后用于对称加密。原创 2023-08-28 11:26:24 · 966 阅读 · 0 评论 -
前后端API交互数据加密
随时技术的发展,前后端分离已经不在是尝试,在实际项目中如何保证在数据传输中的安全性?大家可能会说https,https虽说是可以保证一部分的数据安全,但无法严格意义上的数据安全,大家可以阅读这篇文章,基于这样的前端,我们就需要对敏感数据进行加密,小编这里给大家推荐一个工具SecureTransmit,可以无缝的接入到springboot项目中 ,这是项目的源地址,下面是对SecureTransmit的一些介绍。原创 2023-08-22 10:08:07 · 250 阅读 · 0 评论 -
testng数据驱动实战
testng数据驱动的集中方式,已经如何将实体类作为数据进行驱动原创 2022-11-25 08:37:37 · 745 阅读 · 0 评论 -
JUC线程池: ThreadPoolExecutor详解
和newFixedThreadPool创建的线程池不同,newCachedThreadPool在没有任务执行时,当线程的空闲时间超过keepAliveTime,会自动释放线程资源,当提交新任务时,如果没有空闲线程,则创建新线程执行任务,会导致一定的系统开销;输出表明线程池中至始至终只有五个名为 “pool-1-thread-1” 到 “pool-1-thread-5” 的五个线程,这五个线程不随着工作的完成而消亡,会一直存在,并负责执行分配给线程池的任务,直到线程池消亡。转载 2022-11-14 13:03:04 · 274 阅读 · 0 评论 -
深入解析Java多线程下 ArrayBlockingQueue
文章目录一.ArrayBlockingQueue 介绍一.ArrayBlockingQueue 介绍ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,实现了BlockingQueue接口。底层以数组的形式保存数据(Object [])。常用的操作包括 add,offer,put,remove,poll,take,peek。public...原创 2019-12-16 22:16:39 · 370 阅读 · 0 评论 -
Java多线程进阶实战
书接上回Java创建多线程,我们对多线程的创建和使用有了初步的了解,本次我们将进行通用的配置和封装一.配置线程池import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configurat...原创 2019-12-13 16:55:17 · 450 阅读 · 0 评论 -
线程池的执行原理
微信交流社区添加管理员微信 372787553使用线程池的好处Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监原创 2021-07-26 09:30:48 · 3648 阅读 · 0 评论 -
ReentrantLock详解与实战
ReentrantLock在处理线程安全问题上,在JDK5以后引入了 Lock ,synchronized和Lock都可以保证线程安全问题!而Lock比synchronized使用更加灵活,也更适合复杂的并发场景。本文主要讲解Lock的子类ReentrantLock。一.ReentrantLock与synchronized 比较(1)synchronized是独占锁,加锁和解锁的过程自动进行...原创 2020-03-16 16:10:19 · 758 阅读 · 0 评论 -
高并发中StampedLock理解与应用
ReadWriteLock大家都用过或者听说过,可以解决多线程同时读,但只有一个线程能写的问题。如果我们深入分析ReadWriteLock,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的读锁。要进一步提升并发的效率,Java 8引入了新的读写锁:StampedLock一.StampedLock 简介基于功能的锁,具有三...原创 2020-04-06 18:29:05 · 273 阅读 · 0 评论 -
InheritableThreadLocal详解
InheritableThreadLocal详解简介在之前我们详细介绍了ThreadLocal,原理及设计,从源码层面上分析了ThreadLocal。但是它只能解决当前线程的信息传递,当然 ThreadLocal的最初设计也是这样的,但当我们需要将当先信息传递给子线程时ThreadLocal已经明显无法满足。这时InheritableThreadLocal 就显得尤为重要!应用为什么今天会谈到InheritableThreadLocal呢?这还是应为在项目上使用线程池的时候发现,子线程无法获取前端原创 2021-08-24 09:30:52 · 576 阅读 · 0 评论 -
ThreadLocal在解读
ThreadLocal在解读ThreadLocal 字面意思是本地线程源码里给的说明大概如下:这个类提供线程局部变量。 这些变量与其正常的对应方式不同,因为访问每个线程(通过其get或set方法)都有自己独立初始化的变量副本。 ThreadLocal实例通常是希望将状态与线程关联的类中的私有静态字段(例如,用户ID或事务ID)。只要线程存活并且ThreadLocal实例可以访问,每个线程都保存对其线程局部变量副本的隐式引用; 线程消失后,线程本地实例的所有副本都将被垃圾收集(除非存在原创 2021-05-20 13:45:23 · 129 阅读 · 0 评论 -
Java调用Shell 脚本
java 代码实现调用shell脚本,含代码原创 2021-01-26 15:15:01 · 1859 阅读 · 0 评论 -
KMP算法
1. 引言本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。KMP本身不复杂,但网上绝大部分的文章(包括本文的2011年版本)把它讲混乱了。下面,咱们从暴力匹配算法讲起,随后阐述KMP的流程 步骤、next 数组的简单求解 递推原理 代码求解,接着基于next 数组匹配,谈到有限状态自动机,next 数组的优化,KMP的时间复杂度分析,最后简要介绍两个KMP的扩展算法转载 2021-01-06 17:35:13 · 142 阅读 · 0 评论 -
JDK15重大更新
目录1.JDK 15的新增功能-新功能和增强功能1.1 Char 在CharSequence中添加了isEmpty默认方法1.2 支持Unicode 13.01.3 JEP 371 隐藏类1.4 添加了对SO_INCOMING_NAPI_ID支持的支持1.5 TreeMap方法的专用实现1.6 jstatd中添加了用于指定RMI连接器端口号的新选项1.7 jcmd中添加了用于编写gzip压缩堆转储的新选项1.8 JEP 378 Text Blocks1.9 为调试模式向jhsdb添加了新选项1.10 适用于原创 2020-10-21 15:39:31 · 1433 阅读 · 4 评论 -
JDK14 ArrayList 分析
Java 社区交流群添加小编微信: 372787553带您进入Java学习交流群1.概述作为程序员,一定很熟悉 ArrayList, 可调整大小的数组的实现List接口。实现所有可选列表操作,并允许所有元素,包括null 。除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。(这个类是大致相当于Vector,不同之处在于它是不同步的)。该size,isEmpty,get,set,iterator和listIterator操作在固定时间内运行。 add操作以摊余常原创 2020-07-26 13:40:17 · 239 阅读 · 0 评论 -
java 8 一行代码搞定集合去重,差集,并集,交集,是否相等
List<String> list1 = Stream.of("S0337", "S0ZOM", "S0ZP1").collect(Collectors.toList()); List<String> list2 = Stream.of("S0337", "S0ZOM", "S0ZP1", "S0ZPL","S0337").collect(Collectors.toList()); //去重 List<String> distinct =...原创 2020-07-14 14:59:17 · 843 阅读 · 0 评论 -
AbstractMethodError那些事
Java社区添加小编微信进入java学习交流群,小编微信:372787553,备注进群AbstractMethodErrorException in thread “main” java.lang.AbstractMethodError 这样的异常并不常见,如果您有幸遇到了,那么一定要珍惜,否则转瞬即逝!发生原因为什么会发生这样的错误?让我们看一下官方的解释:当应用程序尝试调用抽象方法时抛出。 通常,该错误被编译器捕获; 如果某些类的定义自上次编译当前执行的方法以来不兼容地更改,则此错误只能原创 2020-06-23 21:42:53 · 3031 阅读 · 0 评论 -
Java 8 Map merge一些骚操作
导语添加小编微信:372787553,带您进入java学习交流群1. 介绍本入门教程将介绍Java8中如何合并两个map。更具体说来,我们将研究不同的合并方案,包括Map含有重复元素的情况。2. 初始化我们定义两个map实例private static Map<String, Employee> map1 = new HashMap<>();private static Map<String, Employee> map2 = new HashMap<翻译 2020-06-18 21:11:48 · 363 阅读 · 0 评论 -
JDK 8 HashMap鬼斧神工的优化
导语添加小编微信:372787553,带您进去Java开发社区交流群!前言HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是Hash转载 2020-06-17 13:42:06 · 913 阅读 · 1 评论 -
IDEA 2020重大更新,带来全新的体验
Idea从IDE下载JDKidea 支持在线检测JDK版本已经安装,如图 所示点击downloadLightEdit(禅)模式在这个模式下,我们心中和屏幕中只有代码,心无杂念,索引叫他禅模式进入禅模式效果我们的电脑屏幕全都是代码,其他的几种禅模式,大家可以尝试一下...原创 2020-04-15 15:36:44 · 2627 阅读 · 0 评论 -
Java自定义异常输出
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常...原创 2020-04-06 18:28:36 · 1760 阅读 · 0 评论 -
并发编程之CompletableFuture
在多线程多,使用线程池时使用Future获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,这两种方法都不是很好,因为主线程也会被迫等待。从Java 8开始引入了CompletableFuture,它针对Future做了改进,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法。一.CompletableFuture简介Future...原创 2020-03-27 10:11:45 · 593 阅读 · 0 评论 -
JDK14的重大更新
一.JDK 14版本中的重大更改1.1 Java SE 14和JDK 14中的一些更改Switch进行了扩展,因此可以用作语句或表达式,以便两种形式都可以使用传统case ... :标签(带有直通)或新case ... -> 标签(不带有直通),还可以使用新的语句从中产生值开关表达式。示例:"->"以表示如果标签匹配则仅执行标签右边的代码。建议每种情况允许多个常量,以逗号分...原创 2020-03-23 18:58:01 · 1462 阅读 · 0 评论 -
jdk1.8新特性Stream流处理
导语Stream流处理,不是IO流的处理,而是真正的函数式编程风格引入到Java中概念Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。...原创 2020-02-09 17:20:04 · 2402 阅读 · 0 评论 -
jdk1.8新特性Lambda表达式推过程
上一篇我们对 jdk的函数型接口 有了一定了解,这对我们本片文章还是有帮助的!概念Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。Lambda表达式推演定义一个函数接口这里为了方便使用,参与泛型定义@FunctionalInterfacepublic interface MyInterface<T,R> { R strategy (T t,...原创 2020-02-09 16:10:31 · 169 阅读 · 0 评论 -
jdk1.8新特性之函数型接口
概念函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。函数接口的开发函数接口定义@FunctionalInterface 注解用于声明为函数接口@FunctionalInterfacepublic...原创 2020-02-09 15:36:49 · 293 阅读 · 0 评论 -
ASE实现数据加密
本文主要实现加密代码,更多ASE简介,还请在简介的连接去观看大佬的介绍一、AES简介AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,推荐加密轮数也不同,如下表...原创 2019-11-12 14:59:41 · 767 阅读 · 0 评论 -
Java运算详解,含代码演示
1. 位移运算带有符号的位移左位移: <<右位移: >>例: int i = 130二进制为 : 10000010i >> 2 : 100000 (右移动两位)过程:首先求得 130 的二进制,然后将求得的二进制数值,整体向右移动两位,左位移相反结论:正数左右位移补位都是 0 ,左位移使其数值变大,右位移相反负数最高位为1 代表 负数, ...原创 2019-11-07 15:21:04 · 401 阅读 · 0 评论 -
哈希冲突如何解决,请看这里!
文章目录一、哈希表简介二、解决Hash冲突的方式1.线性探测法:2.链地址法(拉链法):三、代码实现四、效果演示一、哈希表简介哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的...原创 2019-10-13 09:43:02 · 785 阅读 · 0 评论 -
二分查找法实现以及时间复杂度
文章目录一、二分查找实现二、时间复杂度一、二分查找实现public static void main(String[] args) { int array[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101}; System.out.println(binSerch(array,5,array.length-1,81));}/...原创 2019-10-13 09:30:39 · 1596 阅读 · 1 评论 -
MongoDB学习记录
MongoDB学习记录MongoRepository使用@Repositorypublic interface SysMenuRepository extends MongoRepository<SysMenu,String> { /** * 模糊查询 * StartsWith 起始位置开始匹配 * EndsWith 结束位...原创 2019-07-21 18:40:15 · 192 阅读 · 0 评论 -
ArrayList源码解读
ArrayList源码解读由于本文内容较长,还请各位耐心阅读ArrayList类图ArrayList API源码解读public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seri...原创 2019-07-16 12:44:46 · 112 阅读 · 0 评论 -
Java设计模式之策略者模式
策略者模式简单的说就是提供一种策略,实现不同的结果展示例:比如我们需要根据某个条件去判断用户具有的权限,我们会写很多的if(){}这样的判断,而策略者就是为了解决这样的问题;当然他也很多缺点,还是要根据实际情况进行应该基于Spring实现1.策略者public interface AbstractHandler { /** * 策略接口 * @par...原创 2019-06-25 19:05:29 · 2133 阅读 · 1 评论 -
JAVA多线程创建、使用看这一篇就够了
多线程Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 -进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程...原创 2019-06-21 00:30:21 · 251 阅读 · 0 评论 -
SpringBoot + MybatisPlus实现敏捷开发
MyBatisPlus简洁MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,...原创 2019-06-19 17:49:43 · 921 阅读 · 3 评论 -
jdk1.8 HashMap源码解读
HashMap继承关系HashMap几个关键常量 //默认初始化数量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //最大容量 static final int MAXIMUM_CAPACITY = 1 << 30; //加载因子 static final float DEFAU...原创 2019-06-14 17:50:59 · 115 阅读 · 0 评论 -
Docker从安装到入门到项目部署
Docker简介Docker Community Edition(CE)非常适合希望开始使用Docker并尝试使用基于容器的应用程序的开发人员和小型团队。Docker CE有三种类型的更新通道:stable,test和nightly:Stable为您提供一般可用性的最新版本。测试提供在一般可用之前准备好进行测试的预发布。Nightly为您提供下一个主要版本的最新正在进行的工作。有关Doc...原创 2019-06-13 00:56:38 · 562 阅读 · 0 评论 -
常用DateUtil
导语最近项目中用到一些时间的操作,当然我们可以选择lang3,或者其他三方的jar,来进行操作,小编将项目中用到的一些用于的时间工具整理了一下,给大家参考一下!先给大家展示一下使用及效果使用@GetMapping(value = "/getTime") public void getTime(){ Role role = roleService.selectB...原创 2018-12-05 14:42:59 · 10456 阅读 · 0 评论