<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tqy的博客]]></title><description><![CDATA[tqy的博客]]></description><link>https://blog.csdn.net/starryninglong</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; starryninglong]]></copyright><item><title><![CDATA[根据经纬度，使用h3算法获取所有方向上的索引，并且按照距离排序]]></title><link>https://blog.csdn.net/starryninglong/article/details/128713167</link><guid>https://blog.csdn.net/starryninglong/article/details/128713167</guid><author>starryninglong</author><pubDate>Tue, 17 Jan 2023 17:09:10 +0800</pubDate><description><![CDATA[H3是一个针对地球的空间划分和空间索引系统。H3地理空间索引系统是一个离散的全局网格系统，该系统由具有层次结构索引的球形多精度六边形拼贴组成。在球形外接二十面体的平面上创建六边形网格系统，然后使用反面为中心的多面体结构投影将网格单元投影到球体的表面。从单纯的点到点覆盖范围计算，查询效率低下，而Uber H3通过为全球地理位置定制了一套，正六边形构成的覆盖图，每个覆盖图有一个唯一Id，通过空间换时间的思想，让点对点的查询变成了索引结构的匹配查询。实现了在没有巨大误差前提下的高效查询。]]></description><category></category></item><item><title><![CDATA[http和dubbo接口调用主动设置超时时间]]></title><link>https://blog.csdn.net/starryninglong/article/details/128093551</link><guid>https://blog.csdn.net/starryninglong/article/details/128093551</guid><author>starryninglong</author><pubDate>Tue, 29 Nov 2022 11:11:58 +0800</pubDate><description><![CDATA[动态修改每个http接口的超时时间，使用RestTemplate调用和OkHttp3ClientHttpRequestFactory封装
主动设置dubbo接口的超时时间]]></description><category></category></item><item><title><![CDATA[java业务代码自动降级实现]]></title><link>https://blog.csdn.net/starryninglong/article/details/126070865</link><guid>https://blog.csdn.net/starryninglong/article/details/126070865</guid><author>starryninglong</author><pubDate>Sat, 30 Jul 2022 14:14:03 +0800</pubDate><description><![CDATA[我们设想的是，在需要降级的方法上，加上一个注解，就能够实现降级的全部功能。所以先定义一个注解。/***是否需要降级的注解配置*35/***是否降级**@return/***需要降级的部门接口*假设有部门A和部门B*部门A有接口C和D*部门B有接口E和F*则在C和D的方法上配置A，并且降级开关打开的时候，就会直接降级接口C和D*@return/***降级日志描述，方便定位问题**@return}...]]></description><category></category></item><item><title><![CDATA[mybatis plus分页查询count数量和返回list结果不一致]]></title><link>https://blog.csdn.net/starryninglong/article/details/124091296</link><guid>https://blog.csdn.net/starryninglong/article/details/124091296</guid><author>starryninglong</author><pubDate>Mon, 11 Apr 2022 10:35:02 +0800</pubDate><description><![CDATA[本地调试一个方法，方法名为
	
模拟分页参数为

	，出现奇怪的现象

	分页插件使用threadlocal保存当前的分页参数并在调用查询的时候先count一次，此问题现象为count的时候是有1条数据的，但是返回的list结果集却没有数据并且没有打印执行select list的sql语句，好奇怪啊，按道理是两者的数据量肯定是一样的并且要执行2次sql查询
	
	
	于是进入debug查看，首先进入到executeForMany方法

	
	
	
	接着进入selectList方法
	
	
	继续进入P..]]></description><category></category></item><item><title><![CDATA[http接口返回中文数据偶现乱码问题排查]]></title><link>https://blog.csdn.net/starryninglong/article/details/119420433</link><guid>https://blog.csdn.net/starryninglong/article/details/119420433</guid><author>starryninglong</author><pubDate>Thu, 05 Aug 2021 16:46:49 +0800</pubDate><description><![CDATA[目录



问题产生

排查过程

问题分析

结论

问题产生

本地环境(spring框架)调试一个http接口，数据从数据库获取并缓存到redis，偶现接口返回的数据有乱码，如下图



排查过程

去掉缓存，每次都从数据库获取，不会产生乱码
	每次都从缓存获取，不会乱码（前提缓存的数据都是正确的）
	只使用测试环境，不管数据从缓存还是从数据库都不会产生乱码
	只使用本地开发环境，不管数据从缓存还是从数据库都不会产生乱码
	测试环境和本地环境都启动，每次请求都删除缓存，让缓存重新生成，偶现乱码...]]></description><category></category></item><item><title><![CDATA[shardingsphere批量插入引起的mysql主键和分布式自增键递增顺序不一致的bug]]></title><link>https://blog.csdn.net/starryninglong/article/details/115264774</link><guid>https://blog.csdn.net/starryninglong/article/details/115264774</guid><author>starryninglong</author><pubDate>Sat, 27 Mar 2021 16:27:49 +0800</pubDate><description><![CDATA[shardingsphere批量插入，数据库主键和分布式自增键递增顺序不一致问题复现和排查过程版本相关关键词使用背景bug分析进入debug调试
问题复现和排查过程
版本相关

shardingsphere版本：4.1.1
mybatis版本：3.5.3

关键词

mybatis、shardingsphere、sharding-jdbc、shardingjdbc、批量插入、自增主键、分布式主键、排序不一致、desc、递增

使用背景

使用 INSERT INTO *** VALUES \&lt;fore]]></description><category></category></item><item><title><![CDATA[如何应对spring框架的HTTP ERROR 400 Bad Request错误返回]]></title><link>https://blog.csdn.net/starryninglong/article/details/108828672</link><guid>https://blog.csdn.net/starryninglong/article/details/108828672</guid><author>starryninglong</author><pubDate>Sun, 27 Sep 2020 17:21:45 +0800</pubDate><description><![CDATA[HTTP ERROR 400产生的流程和应对方法HTTP ERROR 400 Bad Request 产生的流程HTTP ERROR 400 Bad Request 产生的原因400错误为什么不能被自定义的异常处理器捕获并且处理为什么不能自己定制输出内容目前可以做的
HTTP ERROR 400 Bad Request 产生的流程
在使用springmvc相关的框架的时候，调用接口经常产生以下错误

这种错误往往在info的log级别下看不到日志，难以排查，我们先来模拟错误产生的其中一个原因
从spring]]></description><category></category></item><item><title><![CDATA[基于cglib的接口代理和非接口代理的区别]]></title><link>https://blog.csdn.net/starryninglong/article/details/89737419</link><guid>https://blog.csdn.net/starryninglong/article/details/89737419</guid><author>starryninglong</author><pubDate>Wed, 01 May 2019 14:04:53 +0800</pubDate><description><![CDATA[这是目录jdk动态代理cglib动态代理cglib代理接口cglib代理实现类对比源码版权所有
jdk动态代理
jdk动态代理只可以代理接口，因为最后的实现类要继承Proxy并实现该接口
cglib动态代理
cglib既可代理接口又可以代理实现类，那背后的源码是如何实现的呢？
cglib代理接口

接口代码

package com.tqy.document.reader.extention.de...]]></description><category></category></item><item><title><![CDATA[spring源码学习之1--spring扩展之自定义XmlWebApplicationContext和DefaultBeanDefinitionDocumentReader实现动态修改配置文件内容]]></title><link>https://blog.csdn.net/starryninglong/article/details/89281755</link><guid>https://blog.csdn.net/starryninglong/article/details/89281755</guid><author>starryninglong</author><pubDate>Sat, 13 Apr 2019 15:41:07 +0800</pubDate><description><![CDATA[spring扩展之自定义XmlWebApplicationContext和DefaultBeanDefinitionDocumentReader断点加载配置文件的流程自定义配置文件和类文件实现修改配置效果展示总结
断点加载配置文件的流程

首先我们在AbstractApplicationContext文件的refresh()方法加上断点

进入obtainFreshBeanFactory()方法
...]]></description><category></category></item><item><title><![CDATA[pomelo使用采坑记(学习使用部署相关)]]></title><link>https://blog.csdn.net/starryninglong/article/details/83213108</link><guid>https://blog.csdn.net/starryninglong/article/details/83213108</guid><author>starryninglong</author><pubDate>Sat, 20 Oct 2018 15:32:29 +0800</pubDate><description><![CDATA[pomelo学习、使用和部署pomelo推送方式频道推送直接推送bearcat集成remote和handler集成非pomelo框架的service、util等的集成bearcat优势默认路由规则采坑未进行用户Id绑定的多服务器远程调用路由配置log按照时间日期服务器分割按服务器和天分割按服务端和小时分割按天分割IDEA调式服务器配置IDEA配置步骤分布式部署ssh方式非ssh方式
pomelo推...]]></description><category></category></item><item><title><![CDATA[JAVA中JOIN和WAIT的关系]]></title><link>https://blog.csdn.net/starryninglong/article/details/81144894</link><guid>https://blog.csdn.net/starryninglong/article/details/81144894</guid><author>starryninglong</author><pubDate>Sat, 21 Jul 2018 15:06:54 +0800</pubDate><description><![CDATA[JAVA中JOIN和WAIT的关系

首先上代码1：



执行结果1：

main end !!!
Thread-0 running ...
Thread-0 end ...


代码2：



执行结果2：

Thread-0 running ...
Thread-0 end ...
main end !!!


可以知道，join方法，可以使得某个线程阻塞执行，让出cpu给其他线程，此示例就...]]></description><category></category></item><item><title><![CDATA[记录一次索引优化经历]]></title><link>https://blog.csdn.net/starryninglong/article/details/77995342</link><guid>https://blog.csdn.net/starryninglong/article/details/77995342</guid><author>starryninglong</author><pubDate>Fri, 15 Sep 2017 20:21:34 +0800</pubDate><description><![CDATA[表结构如下： 
    主要用到FIS_BACKUP、FID和FSTATUS几个字段做查询。索引如下：整张表，前半部分数据FIS_BACKUP都是1，后半部分数据FIS_BACKUP都是0，共2000w多条数据查询语句如下：SELECT *
    FROM `T_MP_COMMENT` C
    WHERE C.FID>=15041538 AND C.FSTATUS!=9 AND C.FIS_B]]></description><category></category></item><item><title><![CDATA[JDK动态代理实现原理]]></title><link>https://blog.csdn.net/starryninglong/article/details/75010680</link><guid>https://blog.csdn.net/starryninglong/article/details/75010680</guid><author>starryninglong</author><pubDate>Wed, 12 Jul 2017 14:10:44 +0800</pubDate><description><![CDATA[之前虽然会用JDK的动态代理，但是有些问题却一直没有搞明白。比如说：InvocationHandler的invoke方法是由谁来调用的，代理对象是怎么生成的，直到前几个星期才把这些问题全部搞明白了。  
    废话不多说了，先来看一下JDK的动态是怎么用的。 package dynamic.proxy;   import java.lang.reflect.InvocationHandler;]]></description><category></category></item><item><title><![CDATA[Java获取package下所有的class对象,根据包名获取class字节码（普通文件包和Jar文件包）]]></title><link>https://blog.csdn.net/starryninglong/article/details/74732446</link><guid>https://blog.csdn.net/starryninglong/article/details/74732446</guid><author>starryninglong</author><pubDate>Fri, 07 Jul 2017 16:07:04 +0800</pubDate><description><![CDATA[读取一个package路径下面所有的class/**
 * 获得包下面的所有的class
 * 
 * @param pack
 *            package完整名称
 * @return List包含所有class的实例
 */
public static List<Class> getClasssFromPackage(String pack) {
  List<Class> cla]]></description><category></category></item><item><title><![CDATA[静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式]]></title><link>https://blog.csdn.net/starryninglong/article/details/74076548</link><guid>https://blog.csdn.net/starryninglong/article/details/74076548</guid><author>starryninglong</author><pubDate>Sat, 01 Jul 2017 18:03:27 +0800</pubDate><description><![CDATA[百度众说纷纭的情况下就不如自己写例子测试理论，话不多说，上代码：public class Sta {  
    public static long date=System.currentTimeMillis();//1  
    public int da=1;//3,5  
    static{  
        System.out.println("Sta:"+System.curr]]></description><category></category></item><item><title><![CDATA[Vue实现app中搜索页面的炫酷搜索热词布局样式]]></title><link>https://blog.csdn.net/starryninglong/article/details/72802928</link><guid>https://blog.csdn.net/starryninglong/article/details/72802928</guid><author>starryninglong</author><pubDate>Mon, 29 May 2017 17:06:57 +0800</pubDate><description><![CDATA[首先是效果图
可以自适应屏幕大小
可以每次刷新改变热词底色
在电脑显示如下下面是实现过程
数据准备：原始数据为["透视小医神","白鹿原","我的绝色美女房客","首席总裁：契约宠妻","仕途天骄","择天记","爆宠狂妻：神医五小姐","溺宠成妃","很纯很暧昧","我的名模总裁","极道军医","斗破苍穹"]
布局：
其中hotWords是上面的数据。以上代码是根据原始数据的个数自动生成hotW]]></description><category></category></item><item><title><![CDATA[集成vue到jquery/bootstrap项目]]></title><link>https://blog.csdn.net/starryninglong/article/details/70877541</link><guid>https://blog.csdn.net/starryninglong/article/details/70877541</guid><author>starryninglong</author><pubDate>Thu, 27 Apr 2017 19:55:48 +0800</pubDate><description><![CDATA[说明，项目本身使用jquery和bootstrap做的管理后台，部分登录接口跑在node服务端，大部分接口使用springmvc实现。现在，使用vue开发，集成vue到原先的项目中。不影响原先的框架。原来的打包方式是使用fis打包，集成vue之后，先用webpack打包，再用fis打包。互不影响。
由于原先使用jquery和bootstrap，所以package.json文件夹下面没有数据。使用vu]]></description><category></category></item><item><title><![CDATA[使用Twemproxy搭建redis服务器集群]]></title><link>https://blog.csdn.net/starryninglong/article/details/70821752</link><guid>https://blog.csdn.net/starryninglong/article/details/70821752</guid><author>starryninglong</author><pubDate>Wed, 26 Apr 2017 20:00:04 +0800</pubDate><description><![CDATA[Redis集群搭建的目的其实也就是集群搭建的目的，所有的集群主要都是为了解决一个问题，横向扩展。使用proxy就可以实现。 
 源码：https://github.com/twitter/twemproxy 
 1. 首先，选一台安装了zookeeper的机器。 
 2. 这里不讲解如何安装zookeeper。将twemproxy-master解压到目录/data下。 
 3. 修改proxy配置v]]></description><category></category></item><item><title><![CDATA[SprignMVC+myBatis整合+mybatis源码分析+动态代理实现流程+如何根据mapper接口生成其实现类]]></title><link>https://blog.csdn.net/starryninglong/article/details/68961226</link><guid>https://blog.csdn.net/starryninglong/article/details/68961226</guid><author>starryninglong</author><pubDate>Mon, 03 Apr 2017 16:12:30 +0800</pubDate><description><![CDATA[首先熟悉三个概念： 
SqlSessionFactoryBean 
–为整合应用提供SqlSession对象资源 
MapperFactoryBean 
–根据指定的Mapper接口生成Bean实例 
MapperScannerConfigurer 
–根据指定包批量扫描Mapper接口并生成实例SqlSessionFactoryBean: 
在单独使用MyBatis时，所有操作都是围绕SqlSes]]></description><category></category></item><item><title><![CDATA[java动态代理--代理接口无实现类]]></title><link>https://blog.csdn.net/starryninglong/article/details/68958388</link><guid>https://blog.csdn.net/starryninglong/article/details/68958388</guid><author>starryninglong</author><pubDate>Mon, 03 Apr 2017 13:15:32 +0800</pubDate><description><![CDATA[使用通过接口定义，或解析接口注解等完成相关功能，如mybatis的SqlSession.getMapper的实现
接口定义
package cn.proxy;  public interface IHello {  
    String say(String aa);  
}  
代理实现
package cn.proxy;  
import java.lang.reflect.Invocatio]]></description><category></category></item></channel></rss>