<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Gongyl的博客]]></title><description><![CDATA[初入Java]]></description><link>https://blog.youkuaiyun.com/StringBuff</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; StringBuff]]></copyright><item><title><![CDATA[GeoHash分享]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/133986661</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/133986661</guid><author>StringBuff</author><pubDate>Mon, 23 Oct 2023 11:56:39 +0800</pubDate><description><![CDATA[GeoHash是一种地址编码，可以将二维的经纬度编码成遵循“最左匹配原则”的字符串，在LBS(Location Based Services)服务中具有非常广泛的用途。]]></description><category></category></item><item><title><![CDATA[联合主键NULL值过多，ON DUPLICATE KEY UPDATE不更新的问题]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/133770470</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/133770470</guid><author>StringBuff</author><pubDate>Wed, 11 Oct 2023 15:01:32 +0800</pubDate><description><![CDATA[近来遇到一个问题，一个数据保存接口。两处调用，一处在联合主键相同是总是更新数据，一处在联合主键相同时却新增了一条。]]></description><category></category></item><item><title><![CDATA[Doris数据同步：stream load Java工具类实现]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/126640421</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/126640421</guid><author>StringBuff</author><pubDate>Thu, 01 Sep 2022 11:58:18 +0800</pubDate><description><![CDATA[java调用doris接口，快速进行数据导入]]></description><category></category></item><item><title><![CDATA[鹤壁异地公积金组合贷款攻略]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/125822222</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/125822222</guid><author>StringBuff</author><pubDate>Sat, 16 Jul 2022 17:31:29 +0800</pubDate><description><![CDATA[异地公积金组合贷款购房攻略]]></description><category></category></item><item><title><![CDATA[重谈Java类加载机制]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/119702678</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/119702678</guid><author>StringBuff</author><pubDate>Sat, 14 Aug 2021 18:02:37 +0800</pubDate><description><![CDATA[一、什么是类加载机制

虚拟机把描述类的数据从 Class 文件加载到内存，并对数据进行校验、转换解析和初始化，最终形成可以被虚拟机直接使用的 Java 类型，这就是虚拟机的类加载机制

二、类加载的步骤

加载
	通过全限定名获取定义此类的二进制字节流；
		将字节流所代表的静态存储结构转化为方法区的运行时数据结构；
		在内存中生成一个代表该类的Class对象；
	
	连接
	验证：确保Class文件的字节流中包含的信息符合《Java虚拟机规范》，文件格式验证、元数据验证、字节码验证、符号引用验证等；
]]></description><category></category></item><item><title><![CDATA[JVM篇：垃圾收集器总结]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/118071620</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/118071620</guid><author>StringBuff</author><pubDate>Sun, 20 Jun 2021 16:43:12 +0800</pubDate><description><![CDATA[太老的收集器就不做笔记了，想了解的可以看《深入理解JVM》

只要有垃圾收集和用户线程并行的，就必须要考虑新对象创建的问题；

三个重要指标：

内存占用、吞吐量、延迟；
	与CAP协议类似的，三者不可兼得。。。
垃圾收集器追求的变化：

之前追求一次把整个java堆清理干净；
	从G1开始追求收集的速度赶上对象分配的速度；
一、ParNew+CMS

ParNew

Serial的多线程版本

CMS

初始标记：枚举根节点，stw
	并发标记
	重新标记：stw
	并发清除
缺点：

无法处理浮动垃圾
]]></description><category></category></item><item><title><![CDATA[Mysql：记一次线上索引失效]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/117420276</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/117420276</guid><author>StringBuff</author><pubDate>Mon, 31 May 2021 17:46:22 +0800</pubDate><description><![CDATA[一、起因

今天在看服务质量看板时，发现我的一个服务质量明显偏低，可用性不到三个9，根据监控面板找到一个分页查询数据的接口频繁失败，故此找一下原因

二、排查过程

通过查询错误日志，发现ga
...]]></description><category></category></item><item><title><![CDATA[数据结构之优先队列]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/116568872</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/116568872</guid><author>StringBuff</author><pubDate>Sun, 09 May 2021 19:28:47 +0800</pubDate><description><![CDATA[一、数据结构

二叉堆

首先，二叉堆是一颗被完全填满的二叉树。

有任意节点的左节点为2i+1,右节点为2i+2；
	在一个堆中，对于每一个节点X，X的父亲中关键字小于（或等于）X中的关键字，根节点除外。
	insert操作：上滤，从下往上寻找可以插入的节点；
	delete操作：下滤，删除根，递归根节点的最小儿子补位。
	定理：包含2^(k+1)-1个节点，高为h的理想二叉树的节点的高度和为2^(k+1)-1-(h+1)；
d-堆

d-堆是二叉堆的简单推广，它就像一个二叉堆，只是所有节点都有d个儿子，]]></description><category></category></item><item><title><![CDATA[Spring事务管理（三）：How Spring TX Work?]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/112094055</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/112094055</guid><author>StringBuff</author><pubDate>Sat, 02 Jan 2021 17:48:26 +0800</pubDate><description><![CDATA[在事务管理（二）中，已经分析了Spring如何生成事务增强代理类，这一章分析一下Spring事务代理类是如何工作的。

一、执行

上一章的最后TransactionManagementConfigurationSelector加载了ProxyTransactionManagementConfiguration，里边注册了一个bean：TransactionInterceptor，实现了MethodInterceptor（Spring方法拦截器），事务就是在这个类中进行处理的，首先看一下类图



因为实现]]></description><category></category></item><item><title><![CDATA[Spring事务管理（二）：Spring生成事务代理增强类源码分析]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/111812282</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/111812282</guid><author>StringBuff</author><pubDate>Sun, 27 Dec 2020 17:41:17 +0800</pubDate><description><![CDATA[以SpringBoot为例，看下SpringBoot是怎么做的。

看着代码很复杂，但是其实我们只关注跟事务相关的就行了，其他的只做了解，等事务的搞明白了，回过头来再研究其他的，事半功倍，我们还可以借助事务的初始化过程，来了解Spring内部加载是怎么实现的！！！

一、/META-INF/spring.factories

要想实现某个功能，首先要做的肯定是把bean加载到容器中，Spring通过spring.factories的方式可以加载一些特定的bean

关于事务的bean请看下图：


Tran]]></description><category></category></item><item><title><![CDATA[Spring事务管理（一）：开篇，对于Spring事务的几个疑问]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/111773531</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/111773531</guid><author>StringBuff</author><pubDate>Sun, 27 Dec 2020 11:10:30 +0800</pubDate><description><![CDATA[一、背景

在项目开发的时候，经常会遇到方法加了事务注解，事务却没有生效的情况，请教同事之后，当时的一段代码是没有问题了，但是却不了解为什么，所以抽出一段时间专门学习下Spring的事务管理。

二、范围

本系列只讨论Spring+JDBC（MyBatis）声明式事务的实现原理

三、疑问点

为什么同一个类中，一个方法调用另一个加了事务注解@Transactional注解的方法，事务却没有生效？
	假如有两个加了@Transactional注解的方法，但是他们的transactionManager不一样]]></description><category></category></item><item><title><![CDATA[Apollo分布式部署指南（云服务器）]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/109435333</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/109435333</guid><author>StringBuff</author><pubDate>Sun, 01 Nov 2020 20:36:54 +0800</pubDate><description><![CDATA[参考：官方分布式部署指南

一、为什么要写这篇文章

之前参考quickstart，只能本地部署，当我想放到云服务器上时，本地java客户端总是连接不上；
	为了加深记忆，下次部署时可以快速完成
	云服务器部署时，请求eruaka返回给我的只有内网地址，需要在源码中加一行配置；
二、准备工作

准备工作比较繁琐，但是一步步来，也不会很难。

1.首先你需要有一台云服务器，最好是centOS7版本的

2.云服务器上需要装有jdk1.8的环境

3.准备一个mysql5.7以上的版本，并且把apollo的sq]]></description><category></category></item><item><title><![CDATA[五个方面搞定MySQL优化]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108270229</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108270229</guid><author>StringBuff</author><pubDate>Thu, 27 Aug 2020 23:02:25 +0800</pubDate><description><![CDATA[一、背景

最近在网上看了很多关于SQL优化的文章，参考这些文章和《深入浅出MySQL》一书，做一个总结（结尾有图，大致总结出了五个方面）

后期会持续优化这篇文章

二、一些配置或者函数的解释


// 1.开启慢查询日志：
slow_query_log=1
// 2.
show status like 'Com_%';
Com_select：执行 select 操作的次数，一次查询只累加 1。
Com_insert： 执行 INSERT 操作的次数， 对于批量插入的 INSERT 操作， 只累加一次。
]]></description><category></category></item><item><title><![CDATA[nginx负载均衡配置汇总]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108242017</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108242017</guid><author>StringBuff</author><pubDate>Wed, 26 Aug 2020 16:19:09 +0800</pubDate><description><![CDATA[一、轮询

每个请求按时间顺序逐一分配到不同的后端服务器，如果后端服务器down掉，能自动剔除。


upstream backserver { 
    server 192.168.0.14; 
    server 192.168.0.15; 
} 

二、指定权重

指定轮询几率，weight和访问比率成正比，用于后端服务器性能不均的情况


upstream backserver { 
    server 192.168.0.14 weight=8; 
    server 192.168.0.]]></description><category></category></item><item><title><![CDATA[Synchronized底层是如何实现的，锁升级过程]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108189277</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108189277</guid><author>StringBuff</author><pubDate>Sun, 23 Aug 2020 22:59:45 +0800</pubDate><description><![CDATA[首先，其实我们在看博客或者看视频都可以学到这个知识点，但是还是强烈建议大家看书，然后针对某一个不理解的细节去针对性的看博客或者视频。

一、Synchronized作用范围

谷歌翻译是已同步的意思。是Java为了处理并发编程的一个关键字。代表多个线程需要争抢同一把锁，抢到了才能进行自己的工作。在Java中，任何对象都可以用作线程竞争的锁，这也能解释，为什么Object类中有wait，notify等方法了。

可以作用在三个地方：

作用在代码块，需要传入一个锁对象；此时锁住的是传入的对象；
	作用在非静态]]></description><category></category></item><item><title><![CDATA[第四代编程语言会是什么样子的？]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108121697</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108121697</guid><author>StringBuff</author><pubDate>Thu, 20 Aug 2020 13:34:31 +0800</pubDate><description><![CDATA[当我对编程语言越来越熟悉，发现从0101到汇编语言，再到高级语言，计算机语言还会继续发展么？

越来越感觉现在的各种框架思想都是慢慢的将服务变得透明化来实现的，服务只负责一个职责，如何实现对外界透明，那如果抽象一下，这岂不是跟if,for这些关键字功能相同么？

会不会有第四代编程语言的出现，以某些特定的计算为编程基础，例如，一个冒泡排序方法可能最后就会简化为一个关键字，用最优的内部实现来进行处理。或者在服务层面，一个功能明确的服务就会被抽象成一个组件，然后万事万物协调配合，构成了第四代编程语言。

如果是]]></description><category></category></item><item><title><![CDATA[MyBatis原理（四）：MyBatis中代理模式的运用]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108067025</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108067025</guid><author>StringBuff</author><pubDate>Tue, 18 Aug 2020 00:00:39 +0800</pubDate><description><![CDATA[问题

先来思考几个问题：

为什么我们在mybatis中只需要写一个dao层接口就可以直接调用方法，返回数据库查询结果呢？
一、JDK动态代理

先说出答案，MyBatis是使用JDK动态代理来设计的：

利用java.lang.reflect.Proxy对象实现，底层用到其实是反射。

被代理对象必须实现接口（因为java类是单继承的，动态代理类在被创建后继承了Proxy类，所以目标对象必须实现接口，其实跟静态代理的条件差不多，只不过通过反射，很多东西可以动态执行，不需要手写）
	static Obje]]></description><category></category></item><item><title><![CDATA[SpringMVC中DispatchServlet是单例还是多例（附源码分析）]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/108043322</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/108043322</guid><author>StringBuff</author><pubDate>Sun, 16 Aug 2020 21:06:39 +0800</pubDate><description><![CDATA[一开始我只知道DispatchServlet是在web.xml中配置的，所以想当然的以为是单例，但结果和我预想的是有出入的。

一、servlet规范

因为DispatchServlet也是Servlet的一种，所以DispatchServlet和Servlet的表现结果应该相同。先贴上从网上找的servlet规范对于servlet实例个数的描述：

“Deployment Descriptor”, controls how the servlet container provides instances]]></description><category></category></item><item><title><![CDATA[Redis学习（十三）：使用哨兵自动管理主从数据库]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/107881583</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/107881583</guid><author>StringBuff</author><pubDate>Sat, 08 Aug 2020 16:56:31 +0800</pubDate><description><![CDATA[一、什么是哨兵

顾名思义，哨兵的作用就是监控Redis系统的运行状况。它的功能主要包括以下两个：

监控主数据库和从数据库是否正常运行；
	主数据库故障时自动将从数据库转换为主数据库，并使其他从数据库连接到新的主数据库上
二、哨兵配置

配置文件名称：sentinel.conf，内容如下：


sentinel monitor mymaster 127.0.0.1 6379 1

首先，对于一个主从数据库系统，哨兵只需要配置主数据库地址即可（后边解释），哨兵还可以同时监控多个主从数据库系统
	sentin]]></description><category></category></item><item><title><![CDATA[Gitee项目上传步骤（转载）]]></title><link>https://blog.youkuaiyun.com/StringBuff/article/details/107781800</link><guid>https://blog.youkuaiyun.com/StringBuff/article/details/107781800</guid><author>StringBuff</author><pubDate>Tue, 04 Aug 2020 10:54:29 +0800</pubDate><description><![CDATA[简书：将本地项目上传到码云，只需这几步，每个步骤都有图文
]]></description><category></category></item></channel></rss>