java
文章平均质量分 78
学习才能变得强大
这个作者很懒,什么都没留下…
展开
-
设计模式-中介者模式
定义:用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。在软件开发中,通过提供一个统一的接口让系统不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过中央控制点进行交互。中介者模式可以让这些子模块不需要直接沟通,从而达到进行解耦的目的。在现实生活中,有很多中介者模式的身影,例如二手车平台、婚姻中介和房产中介,通过平台方介入进行协调供需之间的关系。原创 2023-10-22 20:15:51 · 541 阅读 · 0 评论 -
Java(八)FutureTask源码
任务发起线程可以调用get()方法来获取任务执行结果,如果此时任务已经执行完毕则会直接返回任务结果,如果任务还没执行完毕,则调用方会阻塞直到任务执行结束返回结果为止。发起任务线程跟执行任务线程通常情况下都不会是同一个线程,在任务执行线程执行任务的时候,任务发起线程可以查看任务执行状态、获取任务执行结果、取消任务等等操作,接下来分析下这些操作。 1 .判断任务当前执行状态,如果任务状态不为NEW,则说明任务或者已经执行完成,或者执行异常,不能被取消,直接返回false表示执行失败。原创 2023-10-15 20:24:19 · 221 阅读 · 0 评论 -
Elasticsearch(二)kibana数据检索
有了数据学习使用kibana调用api检索数据,熟练kibana操作后再进一步使用spring data。termmatch文档内容格式参考。原创 2023-09-03 19:10:59 · 1267 阅读 · 0 评论 -
ElasticSearch(一)数据类型
Es数据类型分为基础数据类型和复杂类型数据,掌握ES数据类型才能进一步使用ES检索数据内容。原创 2023-08-27 21:23:21 · 1316 阅读 · 0 评论 -
Java-JUC(七)
3、ArrayBlockingQueue,一个有界缓存等待队列,可以指定缓存队列的大小,当正在执行的线程数等于corePoolSize时,多余的元素缓存在ArrayBlockingQueue队列中等待有空闲的线程时继续执行,当ArrayBlockingQueue已满时,加入ArrayBlockingQueue失败,会开启新的线程去执行,当线程数已经达到最大的maximumPoolSizes时,再有新的元素尝试加入ArrayBlockingQueue时会报错。但是当请求没有的时候,允许核心线程也终止。原创 2023-08-06 21:07:49 · 196 阅读 · 0 评论 -
Java - Synchronized(六)
在Java中,“synchronized” 是一个关键字,用于实现多线程的同步机制,其含义是“同步”的意思。在多线程编程中,当多个线程同时访问共享资源时,可能会导致竞态条件(Race Condition)和数据不一致的问题。为了避免这些问题,可以使用 synchronized 关键字来标记一个代码块或方法,使得同一时间只有一个线程可以进入该代码块或方法,从而保证了对共享资源的互斥访问。原创 2023-07-30 15:48:17 · 252 阅读 · 0 评论 -
JAVA-ReentrantLock(五)
非公平锁的特点是,当有多个线程同时请求锁时,不会按照线程的请求顺序来获取锁,而是直接尝试获取锁,如果能获取成功,则立即获得锁,即使其他线程在等待。说明: 跟踪lock方法的源码可知,当资源空闲时,它总是会先判断sync队列(AbstractQueuedSynchronizer中的数据结构)是否有等待时间更长的线程,如果存在,则将该线程加入到等待队列的尾部,实现了公平获取原则。当有多个线程等待锁时,锁会选择最早等待的线程来获取锁。如果锁的计数归零,说明锁可以完全释放,此时清空锁的持有者,并返回。原创 2023-07-23 12:48:11 · 839 阅读 · 0 评论 -
Java-LockSupport(四)
LockSupport提供了更灵活、直接的线程阻塞和唤醒机制,不需要依赖于特定的对象实例。它可以直接操作线程本身,无需和特定对象关联,更容易控制和管理线程的阻塞和唤醒操作。无需锁对象:LockSupport不需要和特定的锁对象关联,避免了在等待和唤醒过程中对锁的获取和释放,减少了可能的死锁和竞争条件。先唤醒后阻塞:LockSupport的park()方法可以先于unpark()方法调用,这意味着可以提前唤醒线程,而不会导致线程永久阻塞。原创 2023-07-09 13:20:15 · 189 阅读 · 0 评论 -
MQTT(一)
学习目标:经过了解,Netty占用服务器资源内存大、远距离传感器在极端条件下数据处理兼容较差(网络条件差,需要反复重连等)。从同行业了解到,现在主流工业传输使用MQTT作为通信框架基础,同时网上更多资料也倾向于使用MQTT,因此把学习MQTT作为了解方向。原创 2023-06-18 20:22:17 · 800 阅读 · 0 评论 -
Java-CAS(三)
CAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。原创 2023-06-04 20:11:37 · 635 阅读 · 0 评论 -
Java - AQS-CountDownLatch实现类(二)
CountDownLatch是Java中的一个同步辅助类,用于实现线程间的等待和通知机制。它通过一个计数器来实现,该计数器被初始化为一个正整数,并且只能递减。线程在等待阶段通过调用await()方法等待计数器变为0,而其他线程在完成自己的任务后通过调用countDown()方法来减少计数器的值。当计数器的值变为0时,所有等待的线程都将被唤醒继续执行。原创 2023-05-28 19:06:05 · 1004 阅读 · 0 评论 -
Java - AQS(一)
在Java中,AQS代表AbstractQueuedSynchronizer(抽象队列同步器)。AQS是Java并发包中用于构建同步器的基础框架。它提供了一种实现同步状态管理、线程等待和通知的机制。AQS主要通过一个int类型的状态值来表示同步状态,并提供了一些方法来操作和管理这个状态。它使用一个FIFO(先进先出)的等待队列来管理等待线程,并通过内部的一些算法和机制来确保线程的安全等待和唤醒。AQS的核心思想是通过继承和重写来实现具体的同步器。它提供了几个关键的方法供子类实现,包括(获取当前状态值)、(设原创 2023-05-21 18:31:04 · 534 阅读 · 0 评论 -
JUC-线程Callable使用与FutureTask源码阅读
带返回值的线程(实现implements Callable),使用示例为了定义这样一个事物“有返回结果”,暂且称之为RunnableFuture。它集合了Runnable和Future两种事物(其中Future接口 表示了一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。在并发包中许多异步任务类都继承自Future)其中Future接口主要使用get()方法获取线程任务返回值。原创 2023-05-12 17:56:59 · 604 阅读 · 0 评论 -
Openlayers(四)WMTS请求优化和图层颜色更改
WMTS请求优化和图层颜色修改加载我们自定义图层时候,我们的面数据在地图上只显示部分位置,但是使用WMTS加载满屏瓦片会导致很多无效的瓦片请求,具体报错为“ XX is out of range, min: XX max:XX”,简单的意思就是由于请求的瓦片超出了WMTS服务的范围而引起的。WMTS服务通常只提供有限的瓦片范围,请求超出该范围的瓦片会导致此错误。原创 2023-04-02 15:54:28 · 2323 阅读 · 0 评论 -
#Sharding-绑定表-链表查询(六)
之前分表查询都是基于单表查询,但是在实际业务中通常需要链表才能查询到相应的结果。例如:order表和 order_detail表,均按照 order_id分片,则此两张表一对一关系。原创 2023-03-19 20:47:51 · 1259 阅读 · 0 评论 -
Sharding-Complex策略和强制路由(五)
最后两种策略原创 2023-03-12 17:23:09 · 612 阅读 · 0 评论 -
Sharding-standard策略(四)
第三节使用springboot搭建sharding环境时候以最简单的inline策略为演示,发现inline只支持最简单的等于查询。对于范围查询不支持(表通常要结合时间最范围查询)此时要引用标准分片策略(standard)standard策略可以看到配置信息一共3个参数#分片主键# 精准分片算法-》指定我们实现类# 范围查询算法-》指定我们实现类。原创 2023-03-05 15:44:39 · 1081 阅读 · 0 评论 -
Sharding-Springboot-mybatis-plus整合(三)-inline策略
本节目标,使用SpringBoot整合Sharding和Mybatis-Plus验证上节分片策略从配置文件上看策略包括( inline、standard、complex、hint)环境搭建以inline策略演示inline 策略inline策略是简单的表达式策略,不支持特殊范围查询。原创 2023-02-26 20:05:20 · 661 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式提供一种方法顺序访问一个聚合对象(将多个对象聚合在一起形成的总体)中的各个元素,而又不暴露该对象的内部表示,其本质是抽离集合对象迭代行为到迭代器中,对外提供一致的访问接口;迭代器和循环不是等价的,循环是迭代器的基础,迭代器是按照指定的顺序进行多次重复的循环某一程序,但是会有明确的终止条件;遍历是指按照规定访问非线性结构中的每一项 - 可以访问某一个区间段内的元素,而迭代只能按顺序依次访问;原创 2022-09-18 20:28:48 · 477 阅读 · 0 评论 -
设计模式桥接模式
桥接模式的一个常见使用场景就是替换继承。我们知道,继承拥有很多优点,比如,抽象、封装、多态等,父类封装共性,子类实现特性。继承可以很好的实现代码复用(封装)的功能,但这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类需不需要,这说明继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为优先使用组合/聚合,而不是继承。当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式通常适用于以下场景。原创 2022-09-11 22:29:25 · 250 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式和工厂模式的职责比较相像,他们都是为了封装创建对象的创建过程。但是工厂模式的侧重点是为我们提供了一系列具有相同特点对象的创建,而建造者模式关注的是复杂对象的创建,建造者模式可以让我们灵活的编排对象内属性的构建顺序。指挥者角色(Director):指挥者的职责,是指挥建造者按照一定顺序完成产品对象的构建。抽象建造者角色(Builder):为创建一个Product对象的各个部件指定的抽象接口。具体建造者角色(ConcreteBuilder):实现Builder接口,构造和装配各个部件。原创 2022-09-04 21:25:24 · 191 阅读 · 0 评论 -
设计模式-责任链模式
在讲责任链模式之前,我们先来看一下它的定义责任链模式(Chain of Responsibility Pattern),顾名思义,它为请求创建了一个接收者对象的链。为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链,当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。(责任链模式也叫职责链模式)...原创 2022-08-28 20:37:59 · 213 阅读 · 0 评论 -
设计模式-代理模式
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。这个定义好像不太好理解,那么还是本着“繁琐问题必有猥琐解法”的宗旨,我们来把他的定义描述的再直白一些。比如买火车票这件事,在以前没有12306APP的时候,很多人都是去联系黄牛去买火车票,黄牛相当于是我们本人的的代理,通过黄牛买票,我们可以避免与火车站的直接交互,可以省很多事,并且还能享受到黄牛更好的服务(当然啦,钞票💴还是要给足的)。接下来我们就要引入另一个概念了:静态代理和动态代理。原创 2022-08-21 22:39:03 · 94 阅读 · 0 评论 -
设计模式-适配器模式
Target:目标接口,期望接口,当前系统业务所期待的接口,它可以是抽象类或接口。Adaptee:被访问和适配的现存组件库中的组件接口。Adapter:适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:它将对被适配Adaptee角色已有的接口通过继承或者类关联的方法转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配。...原创 2022-08-07 16:27:18 · 270 阅读 · 0 评论 -
设计模式-外观模式
外观模式原创 2022-07-31 21:13:31 · 98 阅读 · 0 评论 -
设计模式-观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。被观察者要继承Observable类被观察者通知观察者时,也就是调用notifyObservers方法时一定要先调用setChanged()方法,该方法作用是将对象里面的changed这个boolean变量设为true,因为notifyObservers要首先检查该变量是否为true,如果为false就不执行而直接返回了。的第二个参数arg中的。...原创 2022-07-24 11:59:00 · 178 阅读 · 0 评论 -
设计模式-策略模式
所谓策略模式,即定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。通俗的一点来讲,当同一个操作,可能有不同的表现或者动作的时候,我们可以将这个操作抽象出来,然后将具体的表现或者动作分别的封装起来,并且都实现抽象的操作,这样我们就可以在执行这个操作的时候,根据不同的表现类型,来执行不同表现或者动作。策略模式结构可分为,策略接口,具体策略实现和策略容器。策略接口用于抽象定义具体的操作。策略实现用于定义不同策略下的具体实现。策略容器用于存放策略和执行策略。...原创 2022-07-17 12:38:56 · 109 阅读 · 0 评论 -
java DelayQueue 延时队列
java DelayQueue延时队列原创 2022-07-10 14:33:37 · 2644 阅读 · 0 评论 -
Java 锁概(二)ReentrantLock
Java 锁概(二)ReentrantLock原创 2022-07-03 12:43:48 · 621 阅读 · 0 评论 -
Java 锁概念(一)synchronized
java锁原创 2022-06-26 21:22:37 · 222 阅读 · 0 评论 -
列队数据结构学习
JAVA数据结构原创 2022-06-19 13:26:41 · 154 阅读 · 0 评论 -
Stream流
java stream流原创 2022-06-10 17:46:24 · 188 阅读 · 0 评论 -
Geometry数据存储
地理信息的表示:地理信息通常是以经纬度来表示,如东径多少北纬多少;但在不同的坐标系和投影标准中,表示地理信息经纬度的单位是不同的。如:在地理坐标系中经纬度的单位是度,坐标表示为:(117.435974 33.609617);但在投影坐标系中不同的投影标准有不同的单位,如常用到的投影标准:3857以米为单位4326以度为单位。实体类 @Data@TableName("city")public class CityEntity implements Serializable {原创 2022-05-16 10:58:40 · 657 阅读 · 0 评论 -
Geometry理解
WKT含义WKT,是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。以下为几何WKT字串样例:POINT(6 10)LINESTRING(3 4,10 50,20 25)POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))MULTIPOINT(3.5 5.6, 4原创 2022-05-07 19:10:17 · 2612 阅读 · 0 评论 -
flowableUI源码分析(三)
应用发布使用的表act_app_deployment 应用部署act_app_appdef 应用定义act_app_deployment_resource 应用zip包中每个资源文件 /** * 应用发布->流程部署 */ @PostMapping(value = "/rest/app-definitions/{modelId}/publish", produces = "application/json") public AppDefini原创 2022-05-01 21:45:24 · 1182 阅读 · 0 评论 -
flowableUI源码分析(一)
计划从flowable–ui-admin入手,分析flowable框架操作sql表情况。1. Model类UI应用,使用 Model类来存储BPM流程图、表单、流程应用。创建BPM流程图、表单、流程应用。都会创建到 act_de_model 表中代码通过常量定义model的类型 public static final int MODEL_TYPE_BPMN = 0; public static final int MODEL_TYPE_FORM = 2; public sta原创 2022-04-17 22:32:32 · 1435 阅读 · 0 评论 -
实现内网web服务器能够直接被访问
首先来理解内网和公网区别就拿我们现在上网的个人电脑、手机连着WIFI或者宽带来说。首先是当地网络运营商分配的一个公网IP给小区的服务器G,在一个公网服务器G里,又可以生成很多内网IP。当A用户上百度等门户网站,都是通过244.62.14.12网关帮你转发请求百度,百度把消息页面返回给244.62.14.12,网关再把消息返回给A用户。想要实现两个服务器G和H之间的内网服务器交流基本就不可能了...原创 2019-10-26 11:26:43 · 2190 阅读 · 0 评论