java

Java数据结构之加权无向图的设计实现

2022-11-02
目录 前言 边的表示 API设计 代码实现 图的实现 API设计 代码实现 前言 加权无向图是一种为每条边关联一个权重值或是成本的图模型.这种图能够自然地表示许多应用.在一副航空图中,边表示航线,权值则可以表示距离或是费用.在一副电路图中,边表示导线,权值则可能表示导线的长度即成本,或是信号通过这条先所需的时间.此时我们很容易就能想到,最小成本的问题,例如,从西安飞纽约,怎样飞才能使时间成本最低或者是金钱成本最低?在下图中,从顶点0到顶点4有三条路径,分别为0-2-3-4,0-2-4,0-5-3

java开发使用StringUtils.split避坑详解

2022-11-01
目录 正文 StringUtils.split 的坑 StringUtils.split 源码分析 如何解决? 正文 在日常的 Java 开发中,由于 JDK 未能提供足够的常用的操作类库,通常我们会引入 Apache Commons Lang 工具库或者 Google Guava 工具库简化开发过程.两个类库都为 java.lang API 提供了很多实用工具,比如经常使用的字符串操作,基本数值操作.时间操作.对象反射以及并发操作等. <dependency> <groupId>

Java数据结构之有向图的拓扑排序详解

2022-11-01
目录 前言 拓扑排序介绍 检测有向图中的环 实现思路 API设计 代码实现 基于深度优先的顶点排序 实现思路 API设计 代码实现 拓扑排序 API设计 代码实现 测试验证 前言 在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的.以我们学习java 学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要按照先后次序来完成的.从java基础,到 jsp/servlet,到ssm,到springboot等是个循序渐进且有依赖的过程.在学习jsp前要首先掌

Java&nbsp;Properties作为集合三个方法详解

2022-11-01
Properties作为集合的方法主要有以下三个 我们在程序中演示并讲解 我们先创建一个 Properties 对象 import java.util.Properties; public class text { public static void main(String args[]) { Properties prop = new Properties(); } } 然后我们来看第一个方法 setProperty 往集合中注入一对键值 都要字符串类型的 参考代码如下 prop.setPr

一篇文章带你搞懂Java线程池实现原理

2022-11-01
目录 1. 为什么要使用线程池 2. 线程池的使用 3. 线程池核心参数 4. 线程池工作原理 5. 线程池源码剖析 5.1 线程池的属性 5.2 线程池状态 5.3 execute源码 5.4 worker源码 5.5 runWorker源码 1. 为什么要使用线程池 使用线程池通常由以下两个原因: 频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程. 使用线程池可以更容易管理线程,线程池可以动态管理线程个数.具有阻塞队列.定时周期执行任务.环境隔离等. 2. 线程池的使用 /** *

Java设计模式之状态模式State&nbsp;Pattern详解

2022-10-31
目录 概述 UML类图 状态模式与策略模式 谁决定状态转换的流向 State是接口还是抽象类 应用案例分析 状态抽象类 可以抽奖的状态 奖品发放完毕状态 发放奖品的状态 不能抽奖状态 抽奖活动(Context) 测试状态模式 概述 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.这个模式将状态封装成独立的类,并将动作委托到 代表当前状态的对象,我们知道行为会随着内部状态而改变. 一个对象“看起来好像修改了它的类”是什么意思呢?从客户的视角来看:如果说你使用的对象能够完全

Java数据结构之图的路径查找算法详解

2022-10-31
目录 前言 算法详解 实现 API设计 代码实现 前言 在实际生活中,地图是我们经常使用的一种工具,通常我们会用它进行导航,输入一个出发城市,输入一个目的地 城市,就可以把路线规划好,而在规划好的这个路线上,会路过很多中间的城市.这类问题翻译成专业问题就是: 从s顶点到v顶点是否存在一条路径?如果存在,请找出这条路径. 例如在上图上查找顶点0到顶点4的路径用红色标识出来,那么我们可以把该路径表示为 0-2-3-4. 如果对图的前置知识不了解,请查看系列文章: [数据结构与算法]图的基础概念和数据

Java数据结构之图的基础概念和数据模型详解

2022-10-31
目录 图的实际应用 图的定义及分类 图的相关术语 图的存储结构 邻接矩阵 邻接表 图的实现 图的API设计 代码实现 图的实际应用 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决. 地图: 我们生活中经常使用的地图,基本上是由城市以及连接城市的道路组成,如果我们把城市看做是一个一个的点,把道路看做是一条一条的连接,那么地图就是我们将要学习的图这种数据结构. 图的定义及分类 定义: 图是由一组顶点和一组能够将两个顶点相连的边组

MyBatis插件机制超详细讲解

2022-10-31
目录 MyBatis的插件机制 InterceptorChain MyBatis中的Plugin MyBatis插件开发 总结 MyBatis的插件机制 MyBatis 允许在已映射语句执行过程中的某一点进行拦截调用.默认情况下,MyBatis 允许使用插件来拦截的方法调用包括: Executor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler(

Java数据结构之有向图设计与实现详解

2022-10-30
目录 前言 定义及相关术语 API设计 代码实现 前言 在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前学习的无向图,最大的区别就在于连接是具有方向的,在代码的处理上也会有很大的不同. 定义及相关术语 定义: 有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的边都连着一对有序的顶点. 出度: 由某个顶点指出的边的个数

redisson特性及优雅实现示例

2022-10-30
目录 redisson的几大特性 可重入性 阻塞能力 续约 初始化timer的代码 redisson的几大特性 相信看了这个标题的同学,对这个问题以已经非常不陌生了,信手拈来redisson的几大特性: 可重入性 [多个业务线同一时刻n条扣款,如果用setnx,我怎么监控的加锁解锁线程?死锁不得发生呐?] redisson使用hash结构,业务名称作为key,uuid+线程id作为field,加锁次数作为value,这不就解决上述问题了吗 阻塞能力 [加锁有两个策略,一是互斥,二是阻塞.互斥比如

Java安全之Tomcat6&nbsp;Filter内存马问题

2022-10-30
目录 回顾Tomcat8打法 探索Tomcat6与Tomcat8之间的区别 回顾Tomcat8打法 先回顾下之前Tomcat789的打法 这里先抛开 7 8之间的区别, 在8中,最后add到filterchain的都是一个filterconfig对象 ApplicationFilterConfig包含了FilterDef对象 构造方法如下,如果当前filter属性为null会从FilterDef取filter的实例对象 ApplicationFilterConfig(Context contex

Java数据结构之图的两种搜索算法详解

2022-10-30
目录 前言 深度优先搜索算法 API设计 代码实现 广度优先搜素算法 API设计 代码实现 案例应用 前言 在很多情况下,我们需要遍历图,得到图的一些性质,例如,找出图中与指定的顶点相连的所有顶点,或者判定某个顶点与指定顶点是否相通,是非常常见的需求. 有关图的搜索,最经典的算法有深度优先搜索和广度优先搜索,接下来我们分别讲解这两种搜索算法. 学习本文前请先阅读这篇文章 [数据结构与算法]图的基础概念和数据模型. 深度优先搜索算法 所谓的深度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,

Spring Cloud 整合 nacos实现动态配置中心的详细步骤

2022-10-30
目录 前提条件 整合步骤 1. 添加依赖 2. 新建 nacos 配置 3. bootstrap.properties 配置 4. 配置dataId 4.1 自动配置 dataId 4.2 手动设置 dataId 5.获取数据 总结 源码 参考文献 上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实现动态配置服务.主要参考官方部署手册点我. 前提条

java中有关构造方法中的输出

2022-10-29
目录 有关构造方法中的输出 先来看一个例子 java中构造方法的作用 有关构造方法中的输出 在构造方法中的System.out.println是怎么运行的呢?下面让我们一起来看一下. 构造方法中的System.out.println: 先来看一个例子 package testasdd; public class Abcdefg { String name; int age; Abcdefg(String namel,int agel){ name=namel; age=agel; System.

详解SpringMVC中的四种跳转方式、视图解析器问题

2022-10-29
目录 一.视图解析器: 1.springmvc核心配置文件,添加视图解析器: 2.视图解析器的使用: 3.视图解析器类InternalResourceViewResolver源码解析: 二.SpringMVC四种跳转方式: 1.跳转方式案例: 一.视图解析器: 1.springmvc核心配置文件,添加视图解析器: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www

如何将Set直接转成数组

2022-10-29
目录 Set直接转成数组 例子 Set,List转String数组 注意事项如下 正确转换如下 Set直接转成数组 例子 public class Test{          public void test1(){         Set<String> set = new HashSet<>();         set.add("1");         set.add("2");         set.add("3&qu

Mybatis入门指南之实现对数据库增删改查

2022-10-29
目录 前言 MyBatis 简介 优点 缺点 搭建第一个Mybatis程序 新建项目. 引入pom.xml依赖. 新建数据库数据表. 新建Student实体类. 配置Mybatis的配置文件. 创建StudentMapper.xml文件. 在config.xml中加入mapper. 调用Mybitis原生接口进行操作 增 删 改 查 总结 前言 我们关于Spring和Spring MVC的学习也有一段时间了,都还没有进行过数据库的操作,而在实际项目中数据库是必不可少的部分,所以我们接下来将来学习

Java安全&nbsp;ysoserial&nbsp;CommonsCollections3示例分析

2022-10-27
目录 cc3利用链如下: 一.为构造的恶意字节码文件找一个newInstance启动入口 构造恶意类: 加载的字节码类需要继承AbstractTranslet 二.将字节码内容直接赋值序列化 三.让newTransformer得到执行 cc3利用链如下: TrAXFilter(Templates templates) TemplatesImpl->newTransformer() TemplatesImpl->getTransletInstance() _class[_transletInde

Spring&nbsp;Retry&nbsp;重试实例详解

2022-10-27
spring-retry是什么? spring-retry是spring提供的一个重试框架,原本自己实现的重试机制,现在spring帮封装好提供更加好的编码体验. 重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次.用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有.话不多说,先看演示. 首先引入依赖 <dependency> <groupId>org.springframework.retry