<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MaoJ的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u013759988</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u013759988]]></copyright><item><title><![CDATA[Java中的阻塞队列基础]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/108711943</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/108711943</guid><author>u013759988</author><pubDate>Mon, 21 Sep 2020 15:44:10 +0800</pubDate><description><![CDATA[文章目录Java中的阻塞队列基础使用案例JUC中的阻塞队列阻塞队列的基本操作方法
Java中的阻塞队列基础
阻塞队列可以用于线程之间的通信，实现线程与线程之间的解耦。可用于简单的单服务中生成者消费者模式。
使用案例
模拟场景
发布重要通知后，需要进行钉钉消息通知

但实际上，这样会带来一些问题

正常发布通知接口只需要1s，添加发送钉钉消息逻辑后，变成了2s，效率下降。
强耦合，正常发布新闻通知，发送钉钉消息不是必须的过程，发送钉钉消息失败会导致发布通知失败。

原代码
public class NewsC]]></description><category></category></item><item><title><![CDATA[Mysql性能优化 - MVCC]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/108001729</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/108001729</guid><author>u013759988</author><pubDate>Fri, 14 Aug 2020 11:54:51 +0800</pubDate><description><![CDATA[Mysql性能优化 - MVCC
什么是mvcc
多版本并发控制
并发访问数据库时，对正在事务内处理的数据做多版本的管理，以达到避免写操作的阻塞，从而引发读操作的并发问题
mvcc插入流程

mvcc删除流程

mvcc修改流程

mvcc查询流程

Undo Log
undo意为取消，以撤销操作为目的，返回指定某个状态的操作
undo log指事务开始之前，在操作任何数据之前，首先把要操作的数据备份到一个地方（Undo Log）
Undo log是为了实现事务的原子性而存在的：
​	事务处理过程中如果出现]]></description><category></category></item><item><title><![CDATA[Mysql性能优化 - innodb的事务和锁]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/108000671</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/108000671</guid><author>u013759988</author><pubDate>Fri, 14 Aug 2020 11:15:57 +0800</pubDate><description><![CDATA[文章目录Mysql性能优化 - innodb的事务和锁事务什么是事务事务ACID特性事务并发会产生的问题事务的四种隔离级别锁innodb 锁类型
Mysql性能优化 - innodb的事务和锁
事务
什么是事务
事务数据库中的最小操作单元，是一组不可再分割的操作集合
mysql中开启事务
begin/start transaction -》 commit/ rollback  手动启动事务提交或者回滚
set session autocommit = on/off  设定事务是否自动开启
事务ACID特性
]]></description><category></category></item><item><title><![CDATA[Mysql性能优化 - 慢sql查询]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/107949278</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/107949278</guid><author>u013759988</author><pubDate>Wed, 12 Aug 2020 08:50:19 +0800</pubDate><description><![CDATA[Mysql性能优化 - 慢sql查询
开启慢日志记录

show variables like ‘slow_query_log’ 查看慢日志是否开启
set global slow_query_log = on  开启慢日志记录
set global slow_query_log_file = ‘地址’  设置慢日志保存地址
set global log_queries_not_using-indexes= on 开启未使用索引的日志记录
set global long_query_time = 0.1(秒]]></description><category></category></item><item><title><![CDATA[Mysql性能优化 - Mysql运行原理]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/107931598</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/107931598</guid><author>u013759988</author><pubDate>Tue, 11 Aug 2020 11:25:56 +0800</pubDate><description><![CDATA[Mysql性能优化 - Mysql运行原理
Mysql体系

Client Connectors 接入方，支持协议有很多
Management Serveices &amp; Utilities  系统管理和控制工具，mysqldump，mysql复制集群，分区管理等
Connection Pool  连接池，夫案例缓冲用户连接， 用户名，密码，权限校验，线程处理等需要缓存的需求
SQL Interface  SQL 接口，接受用户的SQL命令，并且返回用户需要查询的结果
Parser 解析器，SQL命令传]]></description><category></category></item><item><title><![CDATA[Mysql性能优化 - 存储引擎]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/107927264</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/107927264</guid><author>u013759988</author><pubDate>Tue, 11 Aug 2020 08:55:01 +0800</pubDate><description><![CDATA[Mysql性能优化 - 存储引擎
存储引擎介绍

插拔式的插件方式
存储引擎是指定在表上的。每一张表都可以指定专用的存储引擎
不管采用何种存储引擎都会在数据区，产生对应的frm （表结构定义文件）

几大存储引擎概述
CSV存储引擎
数据以CSV文件存储

不能定义索引，列必须定义为NOT NULL，不能设置自增列，不适用大表或者数据的在线处理
CSV数据使用“，”隔开，可直接编辑CSV文件进行数据的编排，在通过flush table XXX命令使其生效，数据安全性较低

应用场景

数据的快速导入导出
表]]></description><category></category></item><item><title><![CDATA[Mysql性能优化-索引]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/107907447</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/107907447</guid><author>u013759988</author><pubDate>Mon, 10 Aug 2020 11:15:19 +0800</pubDate><description><![CDATA[Mysql性能优化-索引MYSQL体系结构索引索引是什么？为什么要使用索引？为什么选择B+树作为索引？相关索引知识总结
本文基于mysql5.7版本
MYSQL体系结构

client connectors 连接客户端 jdbc odbc
services &amp; uitlities 服务和工具类  备份还原 安全
connection pool 连接池
sql interface 接收用户sql  DML DDL Trigger Views etc等
Parser 解析器  解析sql 由lex和ya]]></description><category></category></item><item><title><![CDATA[Mysql hibernate Jpa环境添加空间数据支持]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/103453059</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/103453059</guid><author>u013759988</author><pubDate>Mon, 09 Dec 2019 11:42:17 +0800</pubDate><description><![CDATA[由于项目环境限制，现需求在当前架构体系下储存空间数据。查询了一些网上的资料，发现一个是问题解决的不全面，再一个就是没有考虑到数据序列化的问题，现记录问题完备解决思路及过程。

问题解决思路

确认mysql对空间数据的支持
	添加hibernate对空间数据的支持
	确认hibernate对geometry类型的支持及序列化的支持
mysql对空间数据的支持

mysql自4.1开始，便对空间数据...]]></description><category></category></item><item><title><![CDATA[解决spring data jpa 双向依赖死循环问题]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/99677327</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/99677327</guid><author>u013759988</author><pubDate>Fri, 16 Aug 2019 14:34:27 +0800</pubDate><description><![CDATA[在使用spring data jpa 的过程中，有时候会有双向依赖的需求，如查询班级时需要级联查出班级内所有的学生，查询学生时需要查询学生所在的班级。体现在代码中便是


public class ClassOne implements Serializable{

    private static final long serialVersionUID = -1553531838801480...]]></description><category></category></item><item><title><![CDATA[maven下载依赖慢，试试最优配置阿里源]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/99676989</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/99676989</guid><author>u013759988</author><pubDate>Fri, 16 Aug 2019 14:15:50 +0800</pubDate><description><![CDATA[默认的maven源为国外，由于国内网络的原因，下载速度慢的令人发指，解决方法其一便是更改maven源为阿里源。

（1）找到maven安装目录下 conf文件夹下的settings.xml文件

（2）打开文件，找到&lt;mirrors&gt;&lt;/mirrors&gt; 标签

（3）将如下节点添加至标签内


&lt;mirrors&gt;

	&lt;mirror&gt;
      ...]]></description><category></category></item><item><title><![CDATA[SpringBoot2源码解析 @SpringBootApplication注解]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/98870533</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/98870533</guid><author>u013759988</author><pubDate>Thu, 08 Aug 2019 16:17:10 +0800</pubDate><description><![CDATA[在接触spring boot之前，我们要了解他的思想。spring boot 的核心思想就是“习惯优于配置”，spring boot将大量的配置文件用最常用的方式配置在jar包中，使我们在使用的过程中省去了大量的配置。所以在一个spring boot项目中，你可能看不到任何的配置文件，只有下面这些代码，但是它仍是个可运行的项目。


@SpringBootApplication
public cl...]]></description><category></category></item><item><title><![CDATA[通俗易懂的JAVA设计模式之命令模式]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/98594093</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/98594093</guid><author>u013759988</author><pubDate>Tue, 06 Aug 2019 15:24:24 +0800</pubDate><description><![CDATA[命令模式的作用
了解一个模式首先要了解这个模式所能解决的问题，命令模式所能提供的便是将“动作发起者” 和 “动作执行者进行”进行解耦，正如字面上表示的，“动作发起者” 和 “动作执行者”便是通过“命令”进行解耦的。
生活中的命令模式
可能这样的说明会比较抽象，让我们来结合生活中实际的情境来说明这个问题。
当你去餐厅吃饭的时候，首先你会要求服务员进行点餐服务，然后由服务员通知厨师进行烹饪。

在这个...]]></description><category></category></item><item><title><![CDATA[如何将jar包加入windows服务]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/90174718</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/90174718</guid><author>u013759988</author><pubDate>Mon, 13 May 2019 15:47:54 +0800</pubDate><description><![CDATA[如何将jar包加入windows服务


下载winsw


编写于exe文件同名的xml配置文件
 &lt;service&gt;
   
   &lt;!-- ID of the service. It should be unique accross the Windows system--&gt;
   &lt;id&gt;dam&lt;/id&gt;
   &lt;!-- Display...]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud（六）Hystrix断路器实现容错]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82767638</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82767638</guid><author>u013759988</author><pubDate>Wed, 10 Oct 2018 14:08:02 +0800</pubDate><description><![CDATA[Hystrix简介

Hystrix是一个实现了超时机制和断路器模式的工具类库。用于隔离访问远程系统，服务或者第三方库，防止级联失败，从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。

1.包裹请求，使用HystrixCommand（或者HystrixObservableCommand）包裹对依赖的调用逻辑，每个命令在独立的线程中执行。

2.跳闸机制，当某个服务的错误...]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud（五）使用Feign实现声明式REST调用]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82703331</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82703331</guid><author>u013759988</author><pubDate>Fri, 14 Sep 2018 16:45:17 +0800</pubDate><description><![CDATA[前文示例中是使用RestTemplate实现REST API调用的，使用的是拼接字符串的形式来构造url，这种方式显然是具有很多缺点的，在现实中请求往往带着很多参数，如果使用拼接url的方式，会导致效率低下，难以维护。Feign可以很好解决这个问题。

Feign 简介

Feign是netflix开发的声明式，模板化的客户端，可以帮助我们更加便捷，优雅的调用HTTP API，在spring cl...]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud（四）使用ribbon实现客户端侧负载均衡]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82699769</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82699769</guid><author>u013759988</author><pubDate>Fri, 14 Sep 2018 15:03:41 +0800</pubDate><description><![CDATA[Ribbon简介

Ribbon是Netflix发布的负载均衡器，他有助于控制http和tcp客户端行为。为Ribbon配置服务者提供列表后，Ribbon就可以基于某种负载均衡算法，自动的帮助服务消费者去请求。Ribbon 默认为我们提供了很多负载均衡算法，如轮询，随机等等。当然也可以自定义负载均衡算法。

在spring cloud中当Ribbon与Eureka配合使用时，Ribbon可以自动从...]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud（三）创建服务消费者]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82686804</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82686804</guid><author>u013759988</author><pubDate>Thu, 13 Sep 2018 14:03:00 +0800</pubDate><description><![CDATA[上一篇文章编写了一个服务提供者，本篇来编写一个服务消费者，该服务非常简单，只是调用上篇的服务提供者的获取用户接口。

1.同前面文章，创建consumer 服务的model，并且创建相应的.gradle文件添加依赖


project(':maoj-eureka-consumer'){
    dependencies {
        compile('org.springframework....]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud（二）创建服务提供者]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82682408</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82682408</guid><author>u013759988</author><pubDate>Thu, 13 Sep 2018 09:30:44 +0800</pubDate><description><![CDATA[ 

服务提供者与消费者 使用微服务构建的是分布式系统，微服务直接通过网络进行通信，服务提供者与服务消费者来描述微服务直接的关系。

服务提供者：服务的被调用方（为其他服务提供服务的服务）

服务消费者：服务的调用方（依赖其他服务的服务）

本次提供一个用户微服务作为服务提供者，该服务可以通过主键查询用户信息。使用Spring Data JPA作为持久性框架，使用h2作为数据库。

1.在父项目上...]]></description><category></category></item><item><title><![CDATA[从零开始搭建spring cloud （一）创建eureka server注册中心]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82660324</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82660324</guid><author>u013759988</author><pubDate>Wed, 12 Sep 2018 14:44:32 +0800</pubDate><description><![CDATA[sring cloud简介

spring cloud 为开发人员提供了快速构建分布式系统中的一些通用模式（例如配置管理，服务发现，断路器，只能路由，微代理，控制总线，一次性令牌，全局锁，领导选举，分布式会话，群集状态）。分布式系统的协调导致了锅炉板模式，并且使用spring cloud开发人员可以快速的站起来实现这些模式的服务和应用程序。他们在任何分布式环境中正常工作。

高深的内容我也不说太多...]]></description><category></category></item><item><title><![CDATA[Java集合类]]></title><link>https://blog.youkuaiyun.com/u013759988/article/details/82624756</link><guid>https://blog.youkuaiyun.com/u013759988/article/details/82624756</guid><author>u013759988</author><pubDate>Tue, 11 Sep 2018 15:17:05 +0800</pubDate><description><![CDATA[ArrayList和LinkList

ArrayList和LinkList都是实现了List的接口类。

ArrayList在末尾添加和删除的时间是一样的，中间部分的增删所需时间大大增加。根据索引查找元素的速度大大加快。

LinkList插入和删除集合中在任何位置元素花费的时间都是一样的，根据索引查找一个元素的时间较长。

原因是ArrayList的实现是基于数组，LinkList的实现是基于...]]></description><category></category></item></channel></rss>