<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bird_tp的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/bird_tp</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; bird_tp]]></copyright><item><title><![CDATA[读取PPT模板替换数据生成PDF报表]]></title><link>https://blog.csdn.net/bird_tp/article/details/130930169</link><guid>https://blog.csdn.net/bird_tp/article/details/130930169</guid><author>bird_tp</author><pubDate>Wed, 31 May 2023 15:36:31 +0800</pubDate><description><![CDATA[记录如何不借助其他第三方库的情况下，单纯使用java读取数据库数据生成PPT，并转PDF]]></description><category></category></item><item><title><![CDATA[Spring Boot + Redis 实现分布式限流]]></title><link>https://blog.csdn.net/bird_tp/article/details/126767814</link><guid>https://blog.csdn.net/bird_tp/article/details/126767814</guid><author>bird_tp</author><pubDate>Fri, 09 Sep 2022 14:02:19 +0800</pubDate><description><![CDATA[Spring Boot + Redis实现分布式固定窗口限流]]></description><category></category></item><item><title><![CDATA[Spring Cache使用Redis自定义缓存key]]></title><link>https://blog.csdn.net/bird_tp/article/details/126727727</link><guid>https://blog.csdn.net/bird_tp/article/details/126727727</guid><author>bird_tp</author><pubDate>Tue, 06 Sep 2022 19:41:59 +0800</pubDate><description><![CDATA[本篇博客，简单的介绍了sprig cache，spring cache如何使用redis作为缓存，已经自定义缓存key策略，以及通过配置缓存过期时间]]></description><category></category></item><item><title><![CDATA[java流知识小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125460927</link><guid>https://blog.csdn.net/bird_tp/article/details/125460927</guid><author>bird_tp</author><pubDate>Sat, 25 Jun 2022 16:53:00 +0800</pubDate><description><![CDATA[java流知识小结]]></description><category></category></item><item><title><![CDATA[javascript知识点小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125400780</link><guid>https://blog.csdn.net/bird_tp/article/details/125400780</guid><author>bird_tp</author><pubDate>Wed, 22 Jun 2022 00:29:06 +0800</pubDate><description><![CDATA[javascript知识点小结]]></description><category></category></item><item><title><![CDATA[jsp知识点小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125353176</link><guid>https://blog.csdn.net/bird_tp/article/details/125353176</guid><author>bird_tp</author><pubDate>Sat, 18 Jun 2022 23:40:01 +0800</pubDate><description><![CDATA[jsp知识点小结]]></description><category></category></item><item><title><![CDATA[CSS知识点小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125353081</link><guid>https://blog.csdn.net/bird_tp/article/details/125353081</guid><author>bird_tp</author><pubDate>Sat, 18 Jun 2022 23:29:28 +0800</pubDate><description><![CDATA[css知识简单小结]]></description><category></category></item><item><title><![CDATA[html知识小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125352904</link><guid>https://blog.csdn.net/bird_tp/article/details/125352904</guid><author>bird_tp</author><pubDate>Sat, 18 Jun 2022 23:17:37 +0800</pubDate><description><![CDATA[html简单知识总结]]></description><category></category></item><item><title><![CDATA[java基础知识小结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125352724</link><guid>https://blog.csdn.net/bird_tp/article/details/125352724</guid><author>bird_tp</author><pubDate>Sat, 18 Jun 2022 22:57:01 +0800</pubDate><description><![CDATA[java基础知识总结]]></description><category></category></item><item><title><![CDATA[XML知识点总结]]></title><link>https://blog.csdn.net/bird_tp/article/details/125346856</link><guid>https://blog.csdn.net/bird_tp/article/details/125346856</guid><author>bird_tp</author><pubDate>Sat, 18 Jun 2022 15:31:10 +0800</pubDate><description><![CDATA[xml知识体系总结]]></description><category></category></item><item><title><![CDATA[Skywalking之学习文档]]></title><link>https://blog.csdn.net/bird_tp/article/details/125334134</link><guid>https://blog.csdn.net/bird_tp/article/details/125334134</guid><author>bird_tp</author><pubDate>Fri, 17 Jun 2022 15:36:48 +0800</pubDate><description><![CDATA[Skywalking学习文档]]></description><category></category></item><item><title><![CDATA[SkyWalking之安装Java agent]]></title><link>https://blog.csdn.net/bird_tp/article/details/125333232</link><guid>https://blog.csdn.net/bird_tp/article/details/125333232</guid><author>bird_tp</author><pubDate>Fri, 17 Jun 2022 15:07:16 +0800</pubDate><description><![CDATA[SkyWalking之Java agent]]></description><category></category></item><item><title><![CDATA[分布式链路追踪之Skywalking简单了解]]></title><link>https://blog.csdn.net/bird_tp/article/details/125312278</link><guid>https://blog.csdn.net/bird_tp/article/details/125312278</guid><author>bird_tp</author><pubDate>Thu, 16 Jun 2022 14:49:18 +0800</pubDate><description><![CDATA[分布式链路追踪]]></description><category></category></item><item><title><![CDATA[K8S容器项目容器内存配置规则]]></title><link>https://blog.csdn.net/bird_tp/article/details/124611294</link><guid>https://blog.csdn.net/bird_tp/article/details/124611294</guid><author>bird_tp</author><pubDate>Fri, 06 May 2022 15:47:50 +0800</pubDate><description><![CDATA[一、整体概览



整体原则：容器最小内存和容器最大内存设置为一致

更多参数里：最大堆内存和最小堆内存设置为一致

二、细节解释

在 Kubernetes 中，像 CPU 这样的资源被称作“可压缩资源”（compressible resources）。它的典型特点是，当可压缩资源不足时，Pod 只会“饥饿”，但不会退出。而像内存这样的资源，则被称作“不可压缩资源（incompressible resources）。当不可压缩资源不足时，Pod 就会因为 OOM（Out-Of-Memory）被内核杀掉。
]]></description><category></category></item><item><title><![CDATA[Log4j自定义Appender输出日志内容]]></title><link>https://blog.csdn.net/bird_tp/article/details/122882356</link><guid>https://blog.csdn.net/bird_tp/article/details/122882356</guid><author>bird_tp</author><pubDate>Fri, 11 Feb 2022 17:05:43 +0800</pubDate><description><![CDATA[一、Log4j知识了解

在自定义Appende之前，我们先来简单了解下Log4j

1、Log4j是什么

Log4j是由Apache提供的日志操作包，用于帮助用户处理日志信息。

2、log4j的作用

log4j提供了方法使我们能将日志信息分级存储。其次，log4j提供了日志不同的存储方式，我们可以将日志发送到控制台，或者文件，或者数据库中等等。

3、Log4j三大组件

Logger：日志写出器，负责供客户端代码调用，用于输入日志信息。Log4j 允许开发人员定义多个Logger，每个Logger]]></description><category></category></item><item><title><![CDATA[Spring动态选择实现类]]></title><link>https://blog.csdn.net/bird_tp/article/details/122328258</link><guid>https://blog.csdn.net/bird_tp/article/details/122328258</guid><author>bird_tp</author><pubDate>Thu, 06 Jan 2022 11:45:39 +0800</pubDate><description><![CDATA[一、需求描述


在实际工作中，我们经常会遇到一个接口及多个实现类的情况，并且在不同的条件下会使用不同的实现类，那么如何动态选择某一个实现类呢。

二、代码实现

1.根据ApplicationContext的getBeansOfType和自定义注解实现


spring上下文工具类ApplicationContextUtil


import org.springframework.beans.BeansException;
import org.springframework.context.Appli]]></description><category></category></item><item><title><![CDATA[xxl-job简单使用]]></title><link>https://blog.csdn.net/bird_tp/article/details/122218318</link><guid>https://blog.csdn.net/bird_tp/article/details/122218318</guid><author>bird_tp</author><pubDate>Wed, 29 Dec 2021 16:09:36 +0800</pubDate><description><![CDATA[本篇博客仅作为自己在使用xxl-job过程中的查看的一片文章，仅做记录使用
XXL-JOB快速入门 - 简书
]]></description><category></category></item><item><title><![CDATA[注解+切面式的分布式锁]]></title><link>https://blog.csdn.net/bird_tp/article/details/122131530</link><guid>https://blog.csdn.net/bird_tp/article/details/122131530</guid><author>bird_tp</author><pubDate>Mon, 27 Dec 2021 10:20:58 +0800</pubDate><description><![CDATA[一、案例需求

  在一个SpringBoot项目，其中定时任务和web端代码耦合在一起，并部署在多个服务器节点上，但这样会存在一个问题，每个节点都会触发一次定时任务，这显然重复执行了。为了达到唯一控制效果，引入了分布式锁的功能。但是有个缺点是每写一个定时任务都得写一份与业务无关的分布式锁代码，这样造成大量的冗余代码。所以想着通过注解+切面的方式来实现代码的精简。

二、代码

1.注解


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.R..]]></description><category></category></item><item><title><![CDATA[Tomcat 浅度解析]]></title><link>https://blog.csdn.net/bird_tp/article/details/122103429</link><guid>https://blog.csdn.net/bird_tp/article/details/122103429</guid><author>bird_tp</author><pubDate>Thu, 23 Dec 2021 11:42:23 +0800</pubDate><description><![CDATA[一、Tomcat 顶层架构





Tomcat 中最顶层的容器是 Server，代表着整个服务器，负责管理和启动各个 Service，同时监听 8005 端口发过来的 shutdown 命令，用于关闭整个容器。



从上图中可以看出，一个 Server 可以包含至少一个 Service，用于具体提供服务。



Service 主要包含两个部分：Connector 和 Container。从上图中可以看出 Tomcat 的心脏就是这两个组件，他们的作用如下：

1、Connector 提供 Socke]]></description><category></category></item><item><title><![CDATA[git解决本地分支合并test分支冲突的问题]]></title><link>https://blog.csdn.net/bird_tp/article/details/118810776</link><guid>https://blog.csdn.net/bird_tp/article/details/118810776</guid><author>bird_tp</author><pubDate>Fri, 16 Jul 2021 17:50:15 +0800</pubDate><description><![CDATA[一、博客背景

本篇博客仅作为工作记录使用，记录自己解决问题的过程，同样，本篇博客中介绍的方法不适合所有的人解决冲突。

二、分支介绍

master分支

test分支

dev-wuzhu分支（自己开发的分支）

dev-xiali分支（同事开发的分支）

分支使用前提：我现在所在的公司的发布流程是，先将自己的分支合并到test上，如果test分支发布且测试没问题后，合并到master分支发布生产环境，且不允许将test分支往自己的分支上合并，因为这样会存在将在test分支上，尚未测试通过的分支合并到本]]></description><category></category></item></channel></rss>