<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[过河的小卒子的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TP89757</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TP89757]]></copyright><item><title><![CDATA[使用JavaVisualVM排查FullGC问题]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/136217956</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/136217956</guid><author>TP89757</author><pubDate>Wed, 21 Feb 2024 18:20:24 +0800</pubDate><description><![CDATA[2.2 观察是否有本项目使用的类和对象，在dump文件中实例数或者内存占比额外大，有这种类或实例，和1中怀疑出现问题的地方互相印证，确定问题原因。在分析dump文件之前，我们可以先观察应用中接口的流量情况，或者根据一线反馈，去初步估计问题可能出现的位置，这样在后面的问题排查中更有目的性。根据问题出现场景和出现原因，以及问题产生的影响范围，记录开发过程中出现此问题的环节，在后续开发过程中避免此类问题再发生。2.3 如果不在之前怀疑出现问题的地方，去找使用这些实例多的方法以及这些方法的上下文，确定问题原因。]]></description><category></category></item><item><title><![CDATA[线上问题排查-dubbo-Dubbo client can not supported string message]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/131880916</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/131880916</guid><author>TP89757</author><pubDate>Sun, 23 Jul 2023 16:49:07 +0800</pubDate><description><![CDATA[修复问题时，有两条思路，一种是修改dubbo配置文件中payload 参数的设置，另一种是在调用查询接口时，分批调用，减小接口返回数据量。两种方案评估代码影响范围和测试范围后，决定采用第一种，先修改配置文件。线上值班时，收到告警通知dubbo 调用异常。主要修改payload 参数。修改以后，发现服务正常。]]></description><category></category></item><item><title><![CDATA[我们如何选择mock方案]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/123478667</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/123478667</guid><author>TP89757</author><pubDate>Mon, 14 Mar 2022 19:00:00 +0800</pubDate><description><![CDATA[1.背景：我们为什么需一个mock方案？

我们需要对外提供稳定可靠的对外联调&amp;测试环境，同时我们作为平台（或者叫前台）应用，会依赖大量的业务应用。当某些业务应用不可用的时候，会相应导致我们的业务不可用。同时依赖服务中，一些服务没有稳定可靠的使用环境，我们要提供一个解决方案，来保证我们环境的可用和稳定。

2.可选方案


提出需求，让我们的同志团队，为我们的服务来部署一套专门由我们团队使用的环境，独自使用下相应的稳定性也会更好。这个方案就需要考虑我们自己服务的优先级，因为搭建相应的环境需要申请额外]]></description><category></category></item><item><title><![CDATA[MVCC(Mutil-Version Concurrency Control)]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/122327191</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/122327191</guid><author>TP89757</author><pubDate>Mon, 10 Jan 2022 19:11:00 +0800</pubDate><description><![CDATA[MVCC(Mutil-Version Concurrency Control)
多版本并发控制 - 省流量的说法就是“乐观锁”

数据库并发问题
首先我们要搞清楚相关的并发问题，脏读、不可重复读、幻读



脏读
事务A修改了数据a(3-&gt; 5),还没有提交事务；这个时候，事务B读取数据a,读到的a是5;然后事务A发生回滚，数据a还是3，这称为脏读。


不可重复读
事务B读取数据a(3)。事务A修改了数据a(3-&gt; 5),事务A提交了事务。事务B读取数据a(5)，在同一个事务里面，两次读到的数]]></description><category></category></item><item><title><![CDATA[OAuth2.0 里面的 state 参数是干什么的？]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/122112729</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/122112729</guid><author>TP89757</author><pubDate>Fri, 24 Dec 2021 09:24:40 +0800</pubDate><description><![CDATA[OAuth2.0 里面的 state 参数是干什么的？

是为了防止CSRF 攻击]]></description><category></category></item><item><title><![CDATA[redis的使用]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/116104143</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/116104143</guid><author>TP89757</author><pubDate>Sat, 24 Apr 2021 20:45:00 +0800</pubDate><description><![CDATA[总结
说是总结，谈不上是心得，最近学到的一个点，记录一下。
我的一个数据是存在redis里面，数据比较大，需要都拿出来，这是前因。
这个时候，会消耗比较长的时间，就有两种拿的方案，一种是一下子将数据全部取出来，这样io占用时间会比较长，还有一种是每一次都按照某个范围去拿，分批次去全部拿出来，这样的话需要多次使用网络连接。
最后采用的是第二张，分多次去拿。这种总消耗时间比第一种多，但是有一个好处就是每个单次的耗时短，和其他系统公用redis时，对其他系统的影响相对小一些。
还有一点，redis就是redis，]]></description><category></category></item><item><title><![CDATA[mapstruct的使用]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/116103307</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/116103307</guid><author>TP89757</author><pubDate>Sat, 24 Apr 2021 20:14:15 +0800</pubDate><description><![CDATA[mapstruct 优势
&nbsp;&nbsp;&nbsp;&nbsp;分布式系统中，应用与应用之间，还有单独的应用细分模块之后，DO 一般不会让外部依赖，这时候需要在提供对外接口的模块里放 DTO 用于对象传输，也即是 DO 对象对内，DTO对象对外，DTO 可以根据业务需要变更，并不需要映射 DO 的全部属性。对象与对象之间的互相转换，就需要有一个专门用来解决转换问题的工具，毕竟每一个字段都 get/set 会很麻烦。
&nbsp;&nbsp;&nbsp;&nbsp;MapStruct 就是这样的一个]]></description><category></category></item><item><title><![CDATA[宜搭和钉钉审批流的比较]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/115056356</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/115056356</guid><author>TP89757</author><pubDate>Sun, 21 Mar 2021 21:20:07 +0800</pubDate><description><![CDATA[一、宜搭
版本介绍 
使用场景
在宜搭的应用中，通过以下几类页面来配合完成完整的业务场景需求的解决：

表单：存储或收集数据，通过权限配置实现不同角色人员能够拥有不同的数据增删改查、导入、导出等权限；
流程表单：通过审批流程完成特定的业务，例如请假、报销等需要多级审批的场景；
1.基本流程
2.高级流程
为满足丰富的流程需求，宜搭提供了高级的流程设计器，它不仅能满足普通设计器的几乎所有功能，还在此基础上增强了部分功能，例如增加了分支、聚合等组件；同时也对组件功能及设置进行了增强，区分基础和高级设置；执行人.]]></description><category></category></item><item><title><![CDATA[@RequiresPermissions 生效]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/115056325</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/115056325</guid><author>TP89757</author><pubDate>Sun, 21 Mar 2021 21:18:27 +0800</pubDate><description><![CDATA[@RequiresPermissions 生效
org.apache.shiro.authz.aopPermissionAnnotationHandler

    public void assertAuthorized(Annotation a) throws AuthorizationException {
        if (!(a instanceof RequiresPermissions)) return;

        RequiresPermissions rpAnnotation]]></description><category></category></item><item><title><![CDATA[使用钉钉扫码完成第三方登录]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/114226518</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/114226518</guid><author>TP89757</author><pubDate>Sun, 28 Feb 2021 16:00:38 +0800</pubDate><description><![CDATA[package com.chs.mydingtalk.controller.demo;
import com.alibaba.fastjson.JSONObject;
import com.chs.mydingtalk.model.auto.Access;
import com.chs.mydingtalk.service.IUserService;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalk]]></description><category></category></item><item><title><![CDATA[题目（一）]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/113242499</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/113242499</guid><author>TP89757</author><pubDate>Wed, 27 Jan 2021 21:54:16 +0800</pubDate><description><![CDATA[1.
 问题：启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20....以此类推,
        直到打印到75.  程序的输出结果应该为:

        线程1: 1
        线程1: 2
        线程1: 3
        线程1: 4
        线程1: 5

        线程2: 6
        线程2: 7
   ]]></description><category></category></item><item><title><![CDATA[List集合增强for循环时产生的异常]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/110234536</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/110234536</guid><author>TP89757</author><pubDate>Wed, 09 Dec 2020 20:58:40 +0800</pubDate><description><![CDATA[List集合增强for循环时产生的异常
1.介绍
在List 集合使用增强for循环遍历时，我们如果改变了集合的长度，会抛出异常。下面举个例子：

    public static void main(String[] args){
        List&lt;String&gt; list = new ArrayList&lt;&gt;();
        list.add("a");
        list.add("b");
        list.add("c");

        f]]></description><category></category></item><item><title><![CDATA[Spring中 @EventListener 在消息服务和日志服务的使用]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108978022</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108978022</guid><author>TP89757</author><pubDate>Tue, 10 Nov 2020 09:12:28 +0800</pubDate><description><![CDATA[@EventListener 在消息服务和日志服务的使用
@EventListener介绍

在@EventListener出现之前，是通过实现ApplicationListener接口来实现Spring的监听-通知的。@EventListener出现之后，可以更方便的来使用这个功能。
我们是在日志和消息功能的实现过程中，使用到了这个注解。相比于其他方式，使用建通-通知这种方式，代码模块间的耦合度降低。

@EventListener使用

定义事件



public class MyEvent exte]]></description><category></category></item><item><title><![CDATA[Spring中使用@Async来实现异步调用]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108978004</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108978004</guid><author>TP89757</author><pubDate>Sun, 18 Oct 2020 11:54:30 +0800</pubDate><description><![CDATA[Spring中使用@Async用法来异步调用
1.关于异步调用

同步就是整个处理过程顺序执行，当各个过程都执行完毕，并返回结果。
异步调用则是只是发送了调用的指令，调用者无需等待被调用的方法完全执行完毕；而是继续执行下面的流程。
在Spring中，基于@Async标注的方法，称之为异步方法；这些方法将在执行的时候，将会在独立的线程中被执行，调用者无需等待它的完成，即可继续其他的操作。

2.@Async的使用
开启@Async

使用@EnableAsync注解可以在项目中开启@Async。

具体使用@]]></description><category></category></item><item><title><![CDATA[SpringCloud Feign：使用ApacheHttpClient代替默认client]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108881301</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108881301</guid><author>TP89757</author><pubDate>Fri, 09 Oct 2020 09:10:23 +0800</pubDate><description><![CDATA[ApacheHttpClient和默认实现的比较

Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求，没有连接池，但是对每个地址会保持一个长连接，即利用HTTP的persistence connection。
ApacheHttpClient实现了连接池，同时它封装了访问http的请求头，参数，内容体，响应等等，使客户端发送 HTTP 请求变得容易。

ApacheHttpClient 使用
maven 依赖

    &lt;dependency&gt;
       ]]></description><category></category></item><item><title><![CDATA[HTTP Basic Auth：使用和Postman 测试]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108732967</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108732967</guid><author>TP89757</author><pubDate>Sun, 27 Sep 2020 09:16:28 +0800</pubDate><description><![CDATA[1.HTTP Basic Auth百科介绍
Basic Auth是开放平台的一种认证方式，简单点说就是每次请求API时都提供用户的username和password。

优点：

使用非常简单；
开发和调试工作简单；
没有复杂的页面跳转逻辑和交互过程；
更利于发起方控制；

缺点：

安全性低，每次都需要传递用户名和密码，用户名和密码很大程度上存在被监听盗取的可能；
同时应用本地还需要保存用户名和密码，在应用本身的安全性来说，也存在很大问题；  
开放平台服务商出于自身安全性的考虑（第三方可以得到该服务商用]]></description><category></category></item><item><title><![CDATA[源代码分析 spring.factories 的使用原理和实现自动装配]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/107972559</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/107972559</guid><author>TP89757</author><pubDate>Mon, 14 Sep 2020 20:35:36 +0800</pubDate><description><![CDATA[spring.factories文件的使用

]]></description><category></category></item><item><title><![CDATA[Java8 Duplicate key 异常解决]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108447594</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108447594</guid><author>TP89757</author><pubDate>Mon, 07 Sep 2020 22:43:44 +0800</pubDate><description><![CDATA[Java8 Duplicate key 异常解决
1.在我们使用Java8中提供的list 转换map方法时，可能回出现下面的问题：
java.lang.IllegalStateException: Duplicate key...

&nbsp;&nbsp;&nbsp;&nbsp;产生这个问题的原因时我们参与转换的list中，作为key的属性有重复，没有办法确定使用哪个元素来作为
转换后map中的value,下面的例子可以复现这个场景：

    @Test
    public void duplic.]]></description><category></category></item><item><title><![CDATA[MySQL查询最大值、最小值所在行]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108433334</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108433334</guid><author>TP89757</author><pubDate>Sun, 06 Sep 2020 17:49:44 +0800</pubDate><description><![CDATA[SQL查询最大值所在行

]]></description><category></category></item><item><title><![CDATA[@RequestPart解决同时提交文件和其他字段的问题]]></title><link>https://blog.youkuaiyun.com/TP89757/article/details/108273733</link><guid>https://blog.youkuaiyun.com/TP89757/article/details/108273733</guid><author>TP89757</author><pubDate>Fri, 28 Aug 2020 21:05:42 +0800</pubDate><description><![CDATA[@RequestPart解决同时提交文件和其他字段的问题
对于同时提交文件和其他内容的时候，可以考虑使用 @RequestPart 注解来解决问题。

	@ApiImplicitParams({
            @ApiImplicitParam(name = "description", value = "描述", required = true, dataType = "String"),
            @ApiImplicitParam(name = "file", value = ]]></description><category></category></item></channel></rss>