<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[michaelgo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/michaelgo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; michaelgo]]></copyright><item><title><![CDATA[ELK基础介绍]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/119186370</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/119186370</guid><author>michaelgo</author><pubDate>Wed, 28 Jul 2021 17:58:35 +0800</pubDate><description><![CDATA[ELK是什么？

ELK是E（Elasticsearch），L（LogStash）,K（Kibana）的缩写，可以理解为一套分布式快速检索与展示的解决方案套装。按照what-why-how的三段论技术讲解方法论，本文主要是What阶段的介绍。



Elasticsearch 的工作原理是什么？

原始数据会从多个来源（包括日志、系统指标和网络应用程序）输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elast]]></description><category></category></item><item><title><![CDATA[什么是Service Mesh]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/106837797</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/106837797</guid><author>michaelgo</author><pubDate>Thu, 18 Jun 2020 16:29:53 +0800</pubDate><description><![CDATA[原文链接：https://zhuanlan.zhihu.com/p/61901608

Service Mesh作为下一代微服务技术的代名词，初出茅庐却深得人心一鸣惊人，大有一统微服务时代的趋势。

那么到底什么是Service Mesh？

一言以蔽之：Service Mesh是微服务时代的TCP协议。



有了这样一个感性的初步认知，我们再来看到底什么是Service Mesh。

提到Service Mesh，就不得不提微服务。根据维基百科的定义：

微服务 (Microservices) 是一种.]]></description><category></category></item><item><title><![CDATA[Code Velocity-如何提高一个研发团队的“代码速度” ？(转)]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/98870651</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/98870651</guid><author>michaelgo</author><pubDate>Thu, 08 Aug 2019 14:48:03 +0800</pubDate><description><![CDATA[转注：

虽然道理都很容易明白，真正能落地下来并且推广跑顺真的是非常非常难的。用高频去打是非常好的策略，推荐给大家看下。同时转一句南门大佬的名言，IF IT HURTS, DO IT MORE OFTEN.

------------------------------------------------

阿里妹导读：Code Velocity（代码速度），体现了一个研发团队快速响应业务需求的...]]></description><category></category></item><item><title><![CDATA[Java异常类型及处理]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/82790253</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/82790253</guid><author>michaelgo</author><pubDate>Fri, 21 Sep 2018 10:54:18 +0800</pubDate><description><![CDATA[前言：

Java异常，大家都很熟悉。但是对于具体怎么分类的，JVM对其怎么处理的，代码中怎么处理的，应该怎么使用，底层怎么实现的等等，可能就会有些不是那么清晰。本文基于此详细捋一下异常类型，实现以及使用时应怎么注意。

一、异常实现及分类

1.先看下异常类的结构图



上图可以简单展示一下异常类实现结构图，当然上图不是所有的异常，用户自己也可以自定义异常实现。上图已经足够帮我们解释和理解异常...]]></description><category></category></item><item><title><![CDATA[java.util.ConcurrentModificationException 原因分析及解决方案]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/82428176</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/82428176</guid><author>michaelgo</author><pubDate>Wed, 05 Sep 2018 18:33:43 +0800</pubDate><description><![CDATA[码代码的时候发现了这个异常，java.util.ConcurrentModificationException，倒是很熟悉，非线程安全的容器被非法修改了，具体什么原因呢，怎么避免呢，本文简单分析一下，这个小问题其实反映了对容器实现理解的不深刻。

首先，本着从源头找问题的原则，贴一下错误代码：


String str = &quot;test&quot;;
Iterator&amp;lt;Map.Entry&amp;lt;Stri...]]></description><category></category></item><item><title><![CDATA[MySQL InnoDB与MyISAM的区别和使用场景]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/82348782</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/82348782</guid><author>michaelgo</author><pubDate>Mon, 03 Sep 2018 15:17:34 +0800</pubDate><description><![CDATA[1. InnoDB支持事务，MyISAM不支持，对于InnoDB每一条SQL语言都默认封装成事务，自动提交，这样会影响速度，所以最好把多条SQL语言放在begin和commit之间，组成一个事务；

2. InnoDB支持外键，而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败；

3. InnoDB是聚集索引，数据文件是和索引绑在一起的，必须要有主键，通过主键索引效率很高...]]></description><category></category></item><item><title><![CDATA[谈谈JVM GC 收集器]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/82226733</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/82226733</guid><author>michaelgo</author><pubDate>Thu, 30 Aug 2018 20:20:24 +0800</pubDate><description><![CDATA[前言：

目前已经发展到jdk11了。很多资料上的垃圾收集器还停留在1.7以前。本文基于收集器的发展路线，从前到后汇总和简单分析一下JVM垃圾收集器的roadmap。本文暂且从对内存区管理和回收特色方面分为分代收集和非分代两个part。

 

Part I、分代收集阶段

一、新生代收集器

1.Serial New

这是最早的新生代收集器，也是jdk1.5之前默认的收集器，在GC log里可...]]></description><category></category></item><item><title><![CDATA[PriorityQueue是否真正有序]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81983360</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81983360</guid><author>michaelgo</author><pubDate>Thu, 23 Aug 2018 16:57:06 +0800</pubDate><description><![CDATA[PriorityQueue是jdk1.5开始提供的优先队列，是一个优先“有序”的队列。通过其定义我们能得到如下特点：

1.元素有序，默认自然序，也就是数字默认是小的在队列头，字符串则按字典序排列，可以自定义comparator来自定义优先级

2.非线程安全，如果要并发修改要使用


java.util.concurrent.PriorityBlockingQueue

3.PriorityQu...]]></description><category></category></item><item><title><![CDATA[海量数据解决思路之Hash算法]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81949372</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81949372</guid><author>michaelgo</author><pubDate>Wed, 22 Aug 2018 19:09:37 +0800</pubDate><description><![CDATA[一、概述

   本文将粗略讲述一下Hash算法的概念特性，里边会结合分布式系统负载均衡实例对Hash的一致性做深入探讨。另外，探讨一下Hash算法在海量数据处理方案中的通用性。最后，从源代码出发，具体分析一下Hash算法在MapReduce框架的中的应用。

二、Hash算法

   Hash可以通过散列函数将任意长度的输入变成固定长度的输出，也可以将不同的输入映射成为相同的相同的输出，而且这些...]]></description><category></category></item><item><title><![CDATA[prometheus+grafana+springboot2监控集成配置]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81709652</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81709652</guid><author>michaelgo</author><pubDate>Wed, 15 Aug 2018 20:37:44 +0800</pubDate><description><![CDATA[前言

本文基于设计开发一个应用功能监控项目的需求，其能在不入侵系统的情况下正常监控应用功能。调研之后选择了prometheus+grafana+springboot2的方案。本文基于此简单讲述一下这几个系统之间的配置、交互和使用。并从prometheus的功能，配置，使用，以及与dashboard和springboot/springcloud的集成等方面简单分析，对于各单独系统的安装不在本文讲述...]]></description><category></category></item><item><title><![CDATA[java.awt.headless模式]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81634017</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81634017</guid><author>michaelgo</author><pubDate>Mon, 13 Aug 2018 17:44:51 +0800</pubDate><description><![CDATA[最近在看springboot源码的时候看到启动过程中有这么一句：


configureHeadlessProperty();

private void configureHeadlessProperty() {
		System.setProperty(SYSTEM_PROPERTY_JAVA_AWT_HEADLESS, System.getProperty(
				SYSTEM_PROPE...]]></description><category></category></item><item><title><![CDATA[CommandLineRunner、ApplicationRunner of SpringBoot]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81629476</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81629476</guid><author>michaelgo</author><pubDate>Mon, 13 Aug 2018 15:08:26 +0800</pubDate><description><![CDATA[如果需要在容器启动的时候就开始执行一些内容。比如配置初始化等，SpringBoot提供的这个接口就是干这个的。同时，通过其源码发现，它还提供了另外一个有同样功能的接口叫ApplicationRunner。两者的区别在于所接受的参数类型不一样。

CommandLineRunner的run方法定义如下：


/**
	 * Callback used to run the bean.
	 * @pa...]]></description><category></category></item><item><title><![CDATA[Java浮点数除法，整数除得小数，指定小数位数]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81627069</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81627069</guid><author>michaelgo</author><pubDate>Mon, 13 Aug 2018 14:10:30 +0800</pubDate><description><![CDATA[在Java中如果除运算符“/”，在不加任何限制的情况下，两个整数相除，得到的是整数，小数点后的被舍弃。但是有些场景下我们需要拿到除得的小数，还要指定位数的小数。这时候有以下处理方法：

1.使用DecimalFormat来限定得到的小数位数


            int pcm = 98;
            int fcm = 11;

            DecimalForma...]]></description><category></category></item><item><title><![CDATA[ReentrantLock的lock(), tryLock(), tryLock(long timeout, TimeUnit unit), lockInterruptibly() 及使用场景示例]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81481068</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81481068</guid><author>michaelgo</author><pubDate>Tue, 07 Aug 2018 18:33:20 +0800</pubDate><description><![CDATA[一直在用concurrent包里的东西，最近想研究一下个中细节，先从ReentrantLock提供的集中获取锁的方式开始吧。

1.ReentrantLock简要介绍

简单介绍一下ReentrantLock，可重入锁，互斥锁，提供了fair和unfair两种模式的锁。默认构造函数是unfair的锁，如果初始化时传入true的参数则会返回fair锁。所谓不公平就是在锁可获取时，不用考虑该锁队列是否...]]></description><category></category></item><item><title><![CDATA[mysql中的编码方式utf8与utf8mb4]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81147075</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81147075</guid><author>michaelgo</author><pubDate>Sat, 21 Jul 2018 17:43:10 +0800</pubDate><description><![CDATA[前言

mysql中的utf8并不是真正的UTF-8编码，它只有3个字节来表示字符，如果有超过3个字节的字符，那么这种编码方式就表示不了，并且会抛错。这是为什么呢，当然是有历史原因的，后面详细介绍一下。

一、mysql的utf8编码

mysql的utf8编码能够表示Unicode的BMP标准面的所有字符，但是后来随着Unicode的扩展，总共有17个面，对于其他面的字符，包括 Emoji 表情...]]></description><category></category></item><item><title><![CDATA[Unicode、UTF-8、ASCII等编码方式浅述]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/81147002</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/81147002</guid><author>michaelgo</author><pubDate>Sat, 21 Jul 2018 17:20:56 +0800</pubDate><description><![CDATA[关于编码问题，虽然在开发中经常用到，但是对于各种编码方式的实现、相互之间的转换、在实际场景中的使用区别等方面并没有深刻的理解。今天针对Unicode、UTF-8、ASCII、ANSI、GB2312/GBK、ISO8859-1等编码方式做一些解释和说明。

一、ASCII

首先从最基础的ASCII码开始说起。计算机真正的内部实现上，任何字符都是0和1的组合，那么ASCII码是最早是上世纪60年代的...]]></description><category></category></item><item><title><![CDATA[springboot+gradle配置过程中遇到的一些小坑和解决记录]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/80861801</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/80861801</guid><author>michaelgo</author><pubDate>Fri, 29 Jun 2018 21:07:47 +0800</pubDate><description><![CDATA[从spring转到springboot，配置过程中遇到了一些小问题，虽然都很快的解决了，还是记录一下吧，前车之鉴，以供所需。1.gradle打包遇到错误14:39:27.810 [INFO] [org.gradle.api.internal.tasks.compile.JdkJavaCompiler] Compiling with JDK Java compiler API.14:39:28.03...]]></description><category></category></item><item><title><![CDATA[springboot 2.0+mybatis+hikari/druid+atlas+mysql 配置多数据源及遇到的坑]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/80861005</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/80861005</guid><author>michaelgo</author><pubDate>Fri, 29 Jun 2018 20:41:43 +0800</pubDate><description><![CDATA[前言：由于项目中用到了多个数据源，所以需要配置多数据源。这时候就不能使用springboot的默认数据源加载了，需要自定义多个数据源。一、配置准备看了springboot的doc和一些博主的经验之谈，发现配置多数据源并不麻烦。选择了一种比较简单的方式，自定义DataSource，SqlSessionFactoryBean，SqlSessionTemplate和DataSourceTransacti...]]></description><category></category></item><item><title><![CDATA[Springboot mybatis配置及踩过的坑]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/80825917</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/80825917</guid><author>michaelgo</author><pubDate>Wed, 27 Jun 2018 11:38:18 +0800</pubDate><description><![CDATA[springboot是近两年比较火爆的框架，比springMVC轻量，易用。但是新的东西用起来可能会多少有些小坑和需要熟悉的地方，本文从实践出发概述一下使用mybatis的配置方法，以及在配置过程中可能遇到的一些坑。注：1. 本文用到的springboot版本为2.x版本，相较于1.x版本还是有些不同的。本着向前看的原则，以2.x为例。      2.本文使用的gradle作为编译工具一、spri...]]></description><category></category></item><item><title><![CDATA[基础札记--shell 操作 mysql sql语句]]></title><link>https://blog.youkuaiyun.com/michaelgo/article/details/80031783</link><guid>https://blog.youkuaiyun.com/michaelgo/article/details/80031783</guid><author>michaelgo</author><pubDate>Sat, 21 Apr 2018 17:45:17 +0800</pubDate><description><![CDATA[核心的用法：1.连接到指定db：conn=&quot;mysql -hlocalhost -P3306 -uuser_w -puser_w -D customer_db&quot;
2.操作指定sqlsql=&quot;delete from order_details where uid=$USERID&quot;

 $conn -e &quot;$sql&quot;3.取得select语句的返回值sql=&quot;select uid from user_i...]]></description><category></category></item></channel></rss>