<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TcCookEgg的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TcCookEgg</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TcCookEgg]]></copyright><item><title><![CDATA[【地理空间】轨迹相似度算法（DTW、LCSS）]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/115400945</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/115400945</guid><author>TcCookEgg</author><pubDate>Fri, 02 Apr 2021 15:59:41 +0800</pubDate><description><![CDATA[序列相似度
在现实生活中我们常常需要比较两串数字的相似度，比如两串数字（一维），再比如两条轨迹（二维），那么如何计算两个序列的相似度呢？有人提出了DTW算法，一种计算序列距离的方法。
DTW算法原理
算法原理主要参考：https://blog.youkuaiyun.com/raym0ndkwan/article/details/45614813。
在这里只是进行更详细的分析和介绍，以两个数组为例：

s1 = [1, 2, 3, 4, 5, 5, 5, 4]
s2 = [3, 4, 5, 5, 5, 4]

首先将这两]]></description><category></category></item><item><title><![CDATA[【Java基础】WebSocket在Spring中的使用]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/114401598</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/114401598</guid><author>TcCookEgg</author><pubDate>Fri, 05 Mar 2021 16:29:34 +0800</pubDate><description><![CDATA[WebSocket
使用
关于怎么使用WebSocket，以及WebSocket的一些概念，这篇文章有做详细的介绍。
为什么要使用WebSocket
我接触到WebSocket，是因为想使用WebSocket来替代HTTP 长连接。

HTTP1.1通过使用Connection:keep-alive进行长连接，HTTP 1.1默认进行持久连接，在一次 TCP 连接中可以完成多个 HTTP 请求，但是对每个请求仍然要单独发 header，Keep-Alive不会永久保持连接，它有一个保持时间，可以在不同的服务]]></description><category></category></item><item><title><![CDATA[【地理空间】OpenLayers加载geojson文件]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/112675344</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/112675344</guid><author>TcCookEgg</author><pubDate>Fri, 15 Jan 2021 16:25:28 +0800</pubDate><description><![CDATA[OpenLayers简述

OpenLayers是用于制作交互式Web地图的开源客户端JavaScript类库，制作的地图几乎可以在所有的浏览器中查看。它可以显示从任何来源加载的地图图块，矢量数据和标记。OpenLayers的开发旨在进一步利用各种地理信息。

官网：https://openlayers.org/，在这里可以查找相关api的说明以及实例。
通过OpenLayers加载geoJson文件
获取geoJson文件
参考这篇文章，通过QGIS将osm文件转化为geoJson格式文件。
##加载文件]]></description><category></category></item><item><title><![CDATA[【Java基础】A*算法在有向图中的应用]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/110918514</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/110918514</guid><author>TcCookEgg</author><pubDate>Wed, 09 Dec 2020 11:07:21 +0800</pubDate><description><![CDATA[A*算法

A*（念做：A Star）算法是一种很常用的路径查找和图形遍历算法，有较好的性能和准确度。

可参考这篇文章，详细的介绍了它与其他路径查找算法的区别。
A* 算法的重点在于计算节点的优先级函数f(n)=g(n)+h(n)。
f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时，我们总会选取综合优先级最高（值最小）的节点。
g(n)是节点n距离起点的代价。
h(n)是节点n距离终点的预计代价，这也就是A* 算法的启发函数。
只要充分理解并掌握这一点，应用A* 算法也不在话下。
有向图实现
]]></description><category></category></item><item><title><![CDATA[【地理空间】通过QGIS将osm格式转化为shp格式文件]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/110496606</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/110496606</guid><author>TcCookEgg</author><pubDate>Wed, 02 Dec 2020 19:41:28 +0800</pubDate><description><![CDATA[QGIS安装
QGIS介绍

QGIS（原称Quantum GIS）是一个用户界面友好的开源桌面端软件，支持数据的可视化、管理、编辑、分析以及印刷地图的制作，并支持多种矢量、栅格与数据库格式及功能。

之所以使用QGIS是因为它是轻量级软件，虽然功能不如ArcGIS强大，但是它安装简单，包含了大部分的基础功能，能够满足日常需求。
而我在这里只是做一下文件格式转化的功能，使用QGIS足够了。
QGIS安装
QGIS安装比较简单，首先打开QGIS官网，点击下载。

有各种版本，根据自己的需要选择，我选择的是64]]></description><category></category></item><item><title><![CDATA[【Spring基础】自定义线程池及异步调用]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/109470018</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/109470018</guid><author>TcCookEgg</author><pubDate>Tue, 03 Nov 2020 15:12:36 +0800</pubDate><description><![CDATA[背景
其实我们经常碰到这样的场景：自定义线程池，然后把业务代码丢到线程池中异步执行。代码在执行的时候，将会在独立的线程中被执行，我们无需等待它的完成，也无需关心它的调用结果。
ThreadPoolTaskExecutor
新建一个spring项目（点击https://start.spring.io/，根据需要命名，选择Maven或者Gradle，下载压缩包，在IDE中打开解压缩后的文件夹即可。）

线程池参数配置
可具体根据业务场景需要在配置文件（resources/application.properti]]></description><category></category></item><item><title><![CDATA[【Spring基础】Spring中的AOP框架]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/109243581</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/109243581</guid><author>TcCookEgg</author><pubDate>Fri, 23 Oct 2020 15:33:27 +0800</pubDate><description><![CDATA[什么是AOP
OOP(面向对象编程)提供“从上到下”的关系，而AOP(面向方面编程)提供一种“横切”的方式，也可以说是“从左到右”。
简单来说就是将那些与业务无关，却为业务模块所共同调用的逻辑或责任封装起来，便于减少系统的重复代码，降低模块间的耦合度，并有利于未来的可操作性和可维护性。
实例
可能光是说AOP的定义，大家都不太能理解。
举个例子，比如日志功能，实现这个功能的代码可能是很多类所需要的功能之一，但是如果我们在每一个类里都重复添加实现日志功能的代码，将会有很多重复代码。
上代码（代码参考https]]></description><category></category></item><item><title><![CDATA[【设计模式】工厂模式——简单工厂模式、工厂模式以及抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/108887489</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/108887489</guid><author>TcCookEgg</author><pubDate>Wed, 30 Sep 2020 16:33:35 +0800</pubDate><description><![CDATA[背景
最近看了一篇挺有意思的漫画https://blog.youkuaiyun.com/bjweimengshu/article/details/108459337?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-7.nonecase&amp;depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-7.nonecase&amp;request_id=5f6000f2dfc5]]></description><category></category></item><item><title><![CDATA[【设计模式】拷贝和原型模式]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/108489030</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/108489030</guid><author>TcCookEgg</author><pubDate>Wed, 09 Sep 2020 14:28:18 +0800</pubDate><description><![CDATA[我对于设计模式还是一知半解的，最近看了几个设计模式，单例模式和工厂模式是比较基础和简单的，这里我就不赘述了，但是他们是最为普遍的设计模式，不了解的小伙伴们还是去看看为好。https://www.runoob.com/design-pattern/design-pattern-tutorial.html
拷贝
关于拷贝，这篇文章写得特别好，深入浅出。
总结起来就是：类初始化的过程比作打印，拷贝的过程比作复印。
类加载的过程很复杂，如果我们循环的使用new来初始化对象的话，对于性能的压力是非常大的。而拷贝对象不]]></description><category></category></item><item><title><![CDATA[【Java基础】浅谈反射机制]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/108280098</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/108280098</guid><author>TcCookEgg</author><pubDate>Fri, 28 Aug 2020 15:10:13 +0800</pubDate><description><![CDATA[我对于设计模式还是一知半解的，最近看了几个设计模式，单例模式和工厂模式是比较基础和简单的，这里我就不赘述了，但是他们是最为普遍的设计模式，不了解的小伙伴们还是去看看为好。https://www.runoob.com/design-pattern/design-pattern-tutorial.html
反射机制
首先我们来了解一下反射的原理。
具体参考https://www.cnblogs.com/chanshuyi/p/head_first_of_reflection.html，这篇博文是我认为最容易让人]]></description><category></category></item><item><title><![CDATA[【Spring基础】@Configuration和@Import]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/108078800</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/108078800</guid><author>TcCookEgg</author><pubDate>Tue, 18 Aug 2020 15:46:50 +0800</pubDate><description><![CDATA[起因
偶然间，用到了@Configuration创建Bean，对于@Configuration又学到了一些知识点。
单例模式
网上查资料，理解有误差，以为单例模式一个类只有一个实例，只能创建一个Bean；但是如果同一个类需要创建多个对象的时候，该怎么办？
后来经过大佬的点拨，再加上查找资料，发现：

在Spring中，bean可以被定义为两种模式：prototype（多例）和singleton（单例）。
singleton（单例）：只有一个共享的实例存在，所有对这个bean的请求都会返回这个唯一的实例。
p]]></description><category></category></item><item><title><![CDATA[【Java基础】面向对象之多态性]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/107862956</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/107862956</guid><author>TcCookEgg</author><pubDate>Fri, 07 Aug 2020 15:15:27 +0800</pubDate><description><![CDATA[为什么要讲多态性
最近发现大学时候学习的知识太不扎实了，连面向对象的三大特性都不怎么了解，之前可能学了一个假的面向对象吧。
所以打算写一篇关于多态的博客。
什么是多态
多态指的是一类事物有多种形态。一般是抽象的形式，它们之间是继承的关系。
遇到的问题
直接切入正题，来讲讲我遇到了什么问题。
现在有一个父类：
public class People {
    String name;
    int age;

    public People(String name, int age) {
      ]]></description><category></category></item><item><title><![CDATA[【地理空间】JTS构建R树索引]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/107508563</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/107508563</guid><author>TcCookEgg</author><pubDate>Wed, 22 Jul 2020 11:13:46 +0800</pubDate><description><![CDATA[空间索引（Spatial Indexing）

回忆下数据库最基本的操作：增删改查以及稍复杂些的比如连接操作，基本都需要先锁定数据位置，再执行操作。而定位这个步骤，如果没有index，基本都是O(n)的时间复杂度，这是一个非常“耗时”的操作。“找”这个操作就需要定位。注意这里的定位不再是指在存储器上的位置，而是在空间中的位置，这里的空间，是由数据的维度张成的空间。空间数据，也即是这些拥有多维度的数据。这是空间数据的一个比较延展性的说法。但通常，空间数据都focus on 几何类型数据，比如点，线，面，球等，]]></description><category></category></item><item><title><![CDATA[初识influxDB——时序数据库]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/107109316</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/107109316</guid><author>TcCookEgg</author><pubDate>Fri, 03 Jul 2020 16:57:06 +0800</pubDate><description><![CDATA[influxDB是什么？
参考这篇文章，轻松理解：

InfluxDB（时序数据库），常用的一种使用场景：监控数据统计。每毫秒记录一下电脑内存的使用情况，然后就可以根据统计的数据，利用图形化界面（InfluxDB V1一般配合Grafana）制作内存使用情况的折线图；
可以理解为按时间记录一些数据（常用的监控数据、埋点统计数据等），然后制作图表做统计；

简单来说，就是每一条记录都携带时间。
安装
安装比较简单，进入官网下载，我是windows，安装InfluxDB 1.8版本的windows版本二进制文件]]></description><category></category></item><item><title><![CDATA[【地理空间】geotools连接PostgreSQL数据库]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/106905155</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/106905155</guid><author>TcCookEgg</author><pubDate>Mon, 22 Jun 2020 16:50:14 +0800</pubDate><description><![CDATA[geotools快速入门
GeoTools是一个开放源代码（LGPL）Java代码库，它提供了符合标准的方法来处理地理空间数据，例如实现地理信息系统（GIS）。
步骤
参照官网：https://geotools.org/

我使用的是idea

其实我创建的时候并不是按照官网上的步骤来的，因为我比较习惯从https://start.spring.io/
上面构建一个新的maven项目，填写命名下载压缩包，然后在idea中打开。
pom中增加依赖包：
	&lt;properties&gt;
		&lt;jav]]></description><category></category></item><item><title><![CDATA[【地理空间】Uber H3使用]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/106643059</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/106643059</guid><author>TcCookEgg</author><pubDate>Tue, 09 Jun 2020 15:19:02 +0800</pubDate><description><![CDATA[Uber H3地理索引
正六边形优点
首先正六边形相邻单元距离相等，且近似圆，不仅自身近似圆形，贴合密度概念，很适合大多数的汇总分析场景，而且周围相近近似圆形且等距，方便附近查找，阶梯分析等等。
全球怎么划分成正六边形
如果光是正六边形是没办法构成一个球体的，所以将全球分为正二十面体，每个交点有五条边，所以交点处有五边形。


并且H3支持逐级拆分


H3使用
H3 Core Library由C写成，但是绑定其他语言，Java也可以调用核心的API。具体参考使用文档：https://h3geo.org/d]]></description><category></category></item><item><title><![CDATA[【Spring基础】在Spring中使用Redis]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/106276175</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/106276175</guid><author>TcCookEgg</author><pubDate>Fri, 22 May 2020 11:23:30 +0800</pubDate><description><![CDATA[Redis安装教程
首先必须在本机上安装Redis数据库，参考Redis安装教程，在使用redis的之前，必须运行redis：
1、打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis（安装的redis目录下）；
2、运行redis-server.exe redis.windows.conf命令，在使用redis的时候不能关闭cmd窗口。

Iedis插件安装
如果想要看到redis里面存放的数据，可以在IntelliJ IDEA里安装插件Iedis。选择Iedis2版本安装，之前安装了Ie]]></description><category></category></item><item><title><![CDATA[【Spring基础】Spring源码学习（二）]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/106276134</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/106276134</guid><author>TcCookEgg</author><pubDate>Fri, 22 May 2020 11:21:52 +0800</pubDate><description><![CDATA[step-2将bean创建放入工厂
BeanDefinition
用BeanDefinition来描述bean（spring的bean本质上就是Object），相比step-1可以明显的看出来，更加完整了。
public class BeanDefinition {
    private Object bean;

    private Class beanClass;

    private String beanClassName;

    public BeanDefinition() {
 ]]></description><category></category></item><item><title><![CDATA[【Spring基础】Spring源码学习（一）]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/106098439</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/106098439</guid><author>TcCookEgg</author><pubDate>Wed, 13 May 2020 15:02:22 +0800</pubDate><description><![CDATA[目录如何阅读spring源码IOCBeanDefinitionstep-1项目的代码spring源代码AttributeAccessorBeanMetadataElementBeanDefinitionAnnotatedBeanDefinition
如何阅读spring源码
最近想学习一下spring，但是发现无从下手，看了一些网上的建议，决定这种方法试试。
https://www.jianshu.com/p/aae58cd13460
总结下来就是：


建议不要硬着头皮看spring代码，本身的代码800]]></description><category></category></item><item><title><![CDATA[【Spring基础】Spring从入门就没有放弃]]></title><link>https://blog.youkuaiyun.com/TcCookEgg/article/details/105956628</link><guid>https://blog.youkuaiyun.com/TcCookEgg/article/details/105956628</guid><author>TcCookEgg</author><pubDate>Wed, 06 May 2020 18:32:38 +0800</pubDate><description><![CDATA[一些术语的定义
POJO
“Plain Ordinary Java Object”，简单普通的java对象。没有从任何类继承、也没有实现任何接口，更没有被其它框架侵入的java对象。
比如：
public class HelloWorld {
    private String message;
    public void setMessage(String message){
      ...]]></description><category></category></item></channel></rss>