自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 地理信息数据处理-坐标系转化(三)

导入的数据坐标坐标系需要转化为WGS84。搜索4326找到WGS 1984坐标系。转化即可得到对应shap文件。

2024-03-21 15:28:14 193

原创 地理信息数据处理-线面数据转化和数据合并(二)

有些线数据是MultiLineString,因此转化出来的数据为MultiPolygon,现在想把多个MultiPolygon合并为一个面数据。1.在arcgis中选中对应图层, 然后在“数据管理工具-要素-要素转面”打开转化工具。根据上节内容,把数据转化到postgresql数据库中。2.数据为多个分散的线、面数据,需要转化为一条。解决方案使用,arcgis转化工具。选择导出shap文件目录和名称。拖动转化图层到任务栏。

2024-03-21 15:28:01 169

原创 地理信息数据处理-PostgreSQL空间地理信息postGis(一)

PostgreSQL有各种各样的插件扩展其功能,其中地理信息有PostGis插件的支持,丰富PostgreSQL 数据库的使用功能。因此PostgreSQL 结合PostGis可以存储Geometry类型数据的点、线、面等数据,同时还可以结合相应的专有函数做空间运算。参考。

2023-11-05 22:21:22 467

原创 Mybatis之typeHandler

经常在项目上遇到一些Mysql的字段在基本定义类型以外的数据,比如geometry地理信息数据、列表、JSON数据等,这些数据都尝试通过一个字段存储,这时候可以用上mybatis中TypeHandler自定义数据映射。 类是 MyBatis 中用于处理数据库类型和 Java 类型之间转换的基本抽象类。它有一些方法,可以根据需要进行覆盖来实现自定义类型处理器。以下是 中的一些主要方法和它们的作用: 方法:该方法用于将 Java 对象(parameter)转换为数据库字段类型,并将转换后的值设置到 Prepa

2023-10-29 20:50:42 311

原创 设计模式-中介者模式

定义:用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。在软件开发中,通过提供一个统一的接口让系统不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过中央控制点进行交互。中介者模式可以让这些子模块不需要直接沟通,从而达到进行解耦的目的。在现实生活中,有很多中介者模式的身影,例如二手车平台、婚姻中介和房产中介,通过平台方介入进行协调供需之间的关系。

2023-10-22 20:15:51 532

原创 Java(八)FutureTask源码

任务发起线程可以调用get()方法来获取任务执行结果,如果此时任务已经执行完毕则会直接返回任务结果,如果任务还没执行完毕,则调用方会阻塞直到任务执行结束返回结果为止。发起任务线程跟执行任务线程通常情况下都不会是同一个线程,在任务执行线程执行任务的时候,任务发起线程可以查看任务执行状态、获取任务执行结果、取消任务等等操作,接下来分析下这些操作。​ 1 .判断任务当前执行状态,如果任务状态不为NEW,则说明任务或者已经执行完成,或者执行异常,不能被取消,直接返回false表示执行失败。

2023-10-15 20:24:19 186

原创 Elasticsearch(四)深分页Scroll

1.1、scroll与from+size区别ES对于from+size的个数是有限制的,二者之和不能超过1w。当所请求的数据总量大于1w时,可用scroll来代替from+size。1、先将用户指定的关键字进行分词;2、将词汇去分词库中进行检索,得到多个文档的id;3、去各个分片中拉取指定的数据,相对耗时较长;4、将数据根据score进行排序,耗时相对较长;5、根据from,size的值,截取满足条件的查询到的数据;6、返回结果;优点:每次都能获取到最新的记录;

2023-09-17 21:55:29 537

原创 Elasticsearch(三)聚合基本使用

可以理解成Java中的Map<String, List>结构,类似于Mysql中的group by后的查询结果。对一个数据分组执行的统计,比如计算最大值,最小值,平均值等 类似于Mysql中的max(),min(),avg()函数的值,都是在group by后使用的。这里为两层aggs聚合查询,先按服务类型统计,得到数据分组,再在数据分组里算平均价格。最常用的统计:count,avg,max,min,sum,语法含义与mysql相同。多个aggs嵌套语法也是如此,aggs代码块的位置即可。

2023-09-10 20:13:44 359

原创 Elasticsearch(二)kibana数据检索

有了数据学习使用kibana调用api检索数据,熟练kibana操作后再进一步使用spring data。termmatch文档内容格式参考。

2023-09-03 19:10:59 1091

原创 ElasticSearch(一)数据类型

Es数据类型分为基础数据类型和复杂类型数据,掌握ES数据类型才能进一步使用ES检索数据内容。

2023-08-27 21:23:21 1289

原创 Java-JUC(七)

3、ArrayBlockingQueue,一个有界缓存等待队列,可以指定缓存队列的大小,当正在执行的线程数等于corePoolSize时,多余的元素缓存在ArrayBlockingQueue队列中等待有空闲的线程时继续执行,当ArrayBlockingQueue已满时,加入ArrayBlockingQueue失败,会开启新的线程去执行,当线程数已经达到最大的maximumPoolSizes时,再有新的元素尝试加入ArrayBlockingQueue时会报错。但是当请求没有的时候,允许核心线程也终止。

2023-08-06 21:07:49 165

原创 Java - Synchronized(六)

在Java中,“synchronized” 是一个关键字,用于实现多线程的同步机制,其含义是“同步”的意思。在多线程编程中,当多个线程同时访问共享资源时,可能会导致竞态条件(Race Condition)和数据不一致的问题。为了避免这些问题,可以使用 synchronized 关键字来标记一个代码块或方法,使得同一时间只有一个线程可以进入该代码块或方法,从而保证了对共享资源的互斥访问。

2023-07-30 15:48:17 139

原创 JAVA-ReentrantLock(五)

非公平锁的特点是,当有多个线程同时请求锁时,不会按照线程的请求顺序来获取锁,而是直接尝试获取锁,如果能获取成功,则立即获得锁,即使其他线程在等待。说明: 跟踪lock方法的源码可知,当资源空闲时,它总是会先判断sync队列(AbstractQueuedSynchronizer中的数据结构)是否有等待时间更长的线程,如果存在,则将该线程加入到等待队列的尾部,实现了公平获取原则。当有多个线程等待锁时,锁会选择最早等待的线程来获取锁。如果锁的计数归零,说明锁可以完全释放,此时清空锁的持有者,并返回。

2023-07-23 12:48:11 660

原创 Java-LockSupport(四)

LockSupport提供了更灵活、直接的线程阻塞和唤醒机制,不需要依赖于特定的对象实例。它可以直接操作线程本身,无需和特定对象关联,更容易控制和管理线程的阻塞和唤醒操作。无需锁对象:LockSupport不需要和特定的锁对象关联,避免了在等待和唤醒过程中对锁的获取和释放,减少了可能的死锁和竞争条件。先唤醒后阻塞:LockSupport的park()方法可以先于unpark()方法调用,这意味着可以提前唤醒线程,而不会导致线程永久阻塞。

2023-07-09 13:20:15 169

原创 MQTT(三)MQTTX工具使用

MQTT是一种轻量级的消息传输协议,通常用于物联网设备和应用程序之间的通信。MQTTX提供了一个用户友好的界面,可以方便地与MQTT代理进行连接、订阅主题、发布消息以及监视消息的传输。它支持多个MQTT代理的管理,并且具有许多有用的功能,如历史记录、自动完成、TLS/SSL支持等。使用MQTTX,开发人员可以更容易地验证和调试他们的MQTT应用程序,确保消息的正确传输和处理。总结来说,MQTTX是一个开源的MQTT客户端工具,用于测试和调试MQTT协议,提供了易于使用的界面和许多实用的功能。

2023-07-02 20:39:21 6594

原创 MQTT(二)Java整合MQTT

上一节知道MQTT是一个通信协议,需要一个代理服务Broker;通信设备作为客户端Client,后台系统服务器也作为客户端Client。经过了解选用EMQX作为代理服务Broker(支持WEB界面查看)后台服务使用Spring Integration链接EMQX。

2023-06-25 18:20:55 7518 1

原创 MQTT(一)

学习目标:经过了解,Netty占用服务器资源内存大、远距离传感器在极端条件下数据处理兼容较差(网络条件差,需要反复重连等)。从同行业了解到,现在主流工业传输使用MQTT作为通信框架基础,同时网上更多资料也倾向于使用MQTT,因此把学习MQTT作为了解方向。

2023-06-18 20:22:17 690

原创 Java-CAS(三)

CAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。

2023-06-04 20:11:37 610

原创 Java - AQS-CountDownLatch实现类(二)

CountDownLatch是Java中的一个同步辅助类,用于实现线程间的等待和通知机制。它通过一个计数器来实现,该计数器被初始化为一个正整数,并且只能递减。线程在等待阶段通过调用await()方法等待计数器变为0,而其他线程在完成自己的任务后通过调用countDown()方法来减少计数器的值。当计数器的值变为0时,所有等待的线程都将被唤醒继续执行。

2023-05-28 19:06:05 981

原创 Java - AQS(一)

在Java中,AQS代表AbstractQueuedSynchronizer(抽象队列同步器)。AQS是Java并发包中用于构建同步器的基础框架。它提供了一种实现同步状态管理、线程等待和通知的机制。AQS主要通过一个int类型的状态值来表示同步状态,并提供了一些方法来操作和管理这个状态。它使用一个FIFO(先进先出)的等待队列来管理等待线程,并通过内部的一些算法和机制来确保线程的安全等待和唤醒。AQS的核心思想是通过继承和重写来实现具体的同步器。它提供了几个关键的方法供子类实现,包括(获取当前状态值)、(设

2023-05-21 18:31:04 499

原创 JUC-线程Callable使用与FutureTask源码阅读

带返回值的线程(实现implements Callable),使用示例为了定义这样一个事物“有返回结果”,暂且称之为RunnableFuture。它集合了Runnable和Future两种事物(其中Future接口 表示了一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。在并发包中许多异步任务类都继承自Future)其中Future接口主要使用get()方法获取线程任务返回值。

2023-05-12 17:56:59 569

原创 大数据框架-Hadoop

大数据通过分布式文件系统来存储大量数据,同时利用分布式计算来高效地处理数据,并提供数据采集、预处理、分析和可视化等服务,

2023-05-06 18:18:10 2240 1

原创 Vue3 Antd 父子嵌套子表格

点击处理按钮,修改当前父表格下子表格数据,这时候需要回调reload()重新加载表格,由于使用expandedRowKeys参数记录展开节点,只需要在请求父表格接口时候遍历更新innerDataMap容器就可以了。可以看到嵌套子表格使用innerDataMap是一个Map而不是List,好处是,表格行数据更新,或者点击表格上方查询表格时,可以根据Map[Key]的方式刷新子表格数据。目标2:父表格数据刷新重载,解决子表格数据不刷新问题。目标1:可以点击多个父节点表格,正确显示子表格数据。

2023-04-28 17:19:28 2381

原创 VUE3子组件-业务代码优化

Vue 3组件的主要优势之一就是它们可以帮助你将你的应用程序分解成可维护和可重用的部分。当你在应用程序中多次使用相同的代码时,你可以将它们抽象成一个组件,然后在应用程序中的多个地方使用该组件,而不必每次都编写相同的代码。最近写前端代码,有些功能代码可以复用,于是尝试使用子组件方式优化代码。总结主要有两个使用方向一:像方法一样调用传递参数,调用组件(打开一个可复用的复杂详情页)

2023-04-23 18:56:08 549

原创 Openlayers(五)点位聚合Cluster

OpenLayers 中聚合是通过 `ol.source.Cluster` 实现,聚合的原理是将距离比较近的点位合并为一个点,并计算合并后点位的属性值。在聚合源 `ol.source.Cluster` 中,当一个点被添加进来时,会检查该点与已有聚合点的距离是否在指定的聚合距离之内,如果是,则将该点加入到该聚合点中,同时更新聚合点的属性值(例如点数等)。如果该点与已有聚合点的距离都超出聚合距离,则将该点作为新的聚合点,加入到聚合源中。在渲染时,对于聚合后的点,可以根据聚合点的属性值设置不同的样式,以区

2023-04-09 15:48:58 2971

原创 Openlayers(四)WMTS请求优化和图层颜色更改

WMTS请求优化和图层颜色修改加载我们自定义图层时候,我们的面数据在地图上只显示部分位置,但是使用WMTS加载满屏瓦片会导致很多无效的瓦片请求,具体报错为“ XX is out of range, min: XX max:XX”,简单的意思就是由于请求的瓦片超出了WMTS服务的范围而引起的。WMTS服务通常只提供有限的瓦片范围,请求超出该范围的瓦片会导致此错误。

2023-04-02 15:54:28 1969

原创 Openlayers(三) vue3结合Geoservser加载城市边界

创建图层、数据仓库、工作空间,有两个名称中文部分是为了方便我们维护数据时候能够快捷看明白是什么数据,英文名称是为了前端使用openlayer请求的时候能够对应上。数据图层通过geoserver发布后,我们可以获取图片、JSON数据等多种方式图层信息,geoserver内置预览是以wms数据形式加载图层信息。然后点击发布,我们可以在图层预览中看到我们发布的图层信息,geoserver前端使用openlayer加载数据。图层,对点位数据转化为对外提供服务能力,转化为(图片、JSON数据等)

2023-03-26 19:45:11 1280

原创 #Sharding-绑定表-链表查询(六)

之前分表查询都是基于单表查询,但是在实际业务中通常需要链表才能查询到相应的结果。例如:order表和 order_detail表,均按照 order_id分片,则此两张表一对一关系。

2023-03-19 20:47:51 1000

原创 Sharding-Complex策略和强制路由(五)

最后两种策略

2023-03-12 17:23:09 507

原创 Sharding-standard策略(四)

第三节使用springboot搭建sharding环境时候以最简单的inline策略为演示,发现inline只支持最简单的等于查询。对于范围查询不支持(表通常要结合时间最范围查询)此时要引用标准分片策略(standard)standard策略可以看到配置信息一共3个参数#分片主键# 精准分片算法-》指定我们实现类# 范围查询算法-》指定我们实现类。

2023-03-05 15:44:39 822

原创 Sharding-Springboot-mybatis-plus整合(三)-inline策略

本节目标,使用SpringBoot整合Sharding和Mybatis-Plus验证上节分片策略从配置文件上看策略包括( inline、standard、complex、hint)环境搭建以inline策略演示inline 策略inline策略是简单的表达式策略,不支持特殊范围查询。

2023-02-26 20:05:20 596

原创 分片策略(二)

分片策略

2023-02-19 22:44:18 646

原创 分库分表(一)基础概念

分库分表

2023-02-12 13:54:36 335

原创 网络通信粘包和拆包

稍后添加内容

2023-02-05 21:42:47 248

原创 设计模式之迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象(将多个对象聚合在一起形成的总体)中的各个元素,而又不暴露该对象的内部表示,其本质是抽离集合对象迭代行为到迭代器中,对外提供一致的访问接口;迭代器和循环不是等价的,循环是迭代器的基础,迭代器是按照指定的顺序进行多次重复的循环某一程序,但是会有明确的终止条件;遍历是指按照规定访问非线性结构中的每一项 - 可以访问某一个区间段内的元素,而迭代只能按顺序依次访问;

2022-09-18 20:28:48 432

原创 设计模式桥接模式

桥接模式的一个常见使用场景就是替换继承。我们知道,继承拥有很多优点,比如,抽象、封装、多态等,父类封装共性,子类实现特性。继承可以很好的实现代码复用(封装)的功能,但这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类需不需要,这说明继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为优先使用组合/聚合,而不是继承。当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式通常适用于以下场景。

2022-09-11 22:29:25 223

原创 设计模式之建造者模式

建造者模式和工厂模式的职责比较相像,他们都是为了封装创建对象的创建过程。但是工厂模式的侧重点是为我们提供了一系列具有相同特点对象的创建,而建造者模式关注的是复杂对象的创建,建造者模式可以让我们灵活的编排对象内属性的构建顺序。指挥者角色(Director):指挥者的职责,是指挥建造者按照一定顺序完成产品对象的构建。抽象建造者角色(Builder):为创建一个Product对象的各个部件指定的抽象接口。具体建造者角色(ConcreteBuilder):实现Builder接口,构造和装配各个部件。

2022-09-04 21:25:24 178

原创 设计模式-责任链模式

在讲责任链模式之前,我们先来看一下它的定义责任链模式(Chain of Responsibility Pattern),顾名思义,它为请求创建了一个接收者对象的链。为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链,当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。(责任链模式也叫职责链模式)...

2022-08-28 20:37:59 194

原创 设计模式-代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。这个定义好像不太好理解,那么还是本着“繁琐问题必有猥琐解法”的宗旨,我们来把他的定义描述的再直白一些。比如买火车票这件事,在以前没有12306APP的时候,很多人都是去联系黄牛去买火车票,黄牛相当于是我们本人的的代理,通过黄牛买票,我们可以避免与火车站的直接交互,可以省很多事,并且还能享受到黄牛更好的服务(当然啦,钞票💴还是要给足的)。接下来我们就要引入另一个概念了:静态代理和动态代理。

2022-08-21 22:39:03 72

原创 设计模式- 组合模式

在讲解组合模式之前,我们先来看一下它的定义组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。...

2022-08-12 17:07:51 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除