<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Bummon的学习随笔]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HackAzrael</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HackAzrael]]></copyright><item><title><![CDATA[【Bug记录】调用Controller中的方法的Service为null]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/138303606</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/138303606</guid><author>HackAzrael</author><pubDate>Mon, 29 Apr 2024 10:16:45 +0800</pubDate><description><![CDATA[今天写代码的时候遇到了一个奇怪的Bug，在Controller中调用某个方法时突然报空指针异常，打断点时发现service为null，并尝试了数种注入方式，发现均为null。]]></description><category></category></item><item><title><![CDATA[RocketMQ学习笔记]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/138196449</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/138196449</guid><author>HackAzrael</author><pubDate>Thu, 25 Apr 2024 18:15:03 +0800</pubDate><description><![CDATA[用户购物积分服务：当我们购物后进行积分的一个累加，在实际开发中，会用到使用订单服务来调用我们的积分服务进行积分的累加，但是如果积分服务出现问题，就会导致我们相应的接口出问题，此时就可以把积分放到MQ中，积分服务作为消费者去处理，也就可以实现我们服务的解耦。]]></description><category></category></item><item><title><![CDATA[服务部署后出错怎么快速调试？试试JDWP协议]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/138196394</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/138196394</guid><author>HackAzrael</author><pubDate>Thu, 25 Apr 2024 18:12:56 +0800</pubDate><description><![CDATA[在我们日常开发工作中，经常会遇到写好的代码线上出了问题，但是本地又无法复现，看着控制台输出的日志恨自己当初没有多打几条日志，然后追着日志一条一条查，不说找起来有多费事费劲，再我们找到后还要去对应的代码进行修改，最后再将改过的代码打包部署重新测试，这个流程下来十几二十分钟就没了。那么有没有什么办法能帮助我们进行调试呢？答案是有的！使用Java为我们提供的来实现。]]></description><category></category></item><item><title><![CDATA[一文教会你SpringBoot是如何启动的]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/136816623</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/136816623</guid><author>HackAzrael</author><pubDate>Mon, 18 Mar 2024 17:58:22 +0800</pubDate><description><![CDATA[首先我们定义一个类来实现，并重写一下方法接着我们在resource目录下创建一个名为META-INF的文件夹，并在文件夹中创建一个名为的文件再在其中写上我们的初始化器的全限定名即可接着我们启动我们的应用发现我们的打印是正常的首先定义一个类来实现中的方法再在中来定义一下我们要加载的监听器接着我们启动一下项目，可以看到我们的监听器成功被加载了，并且也在初始化器的后面首先我们要先创建一个类来实现中的方法然后在中定义即可。]]></description><category></category></item><item><title><![CDATA[更好用的Mybatis Plus：Mybatis Flex（下）]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/133386664</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/133386664</guid><author>HackAzrael</author><pubDate>Thu, 28 Sep 2023 16:47:08 +0800</pubDate><description><![CDATA[除此之外，我们还可以去自定义脱敏规则，我们利用内部提供的来实现。MaskManager.registerMaskProcessor("自定义规则名称",data-> {//进行脱敏操作//返回脱敏后的数据});IDialect在自定义数据方言中，我们可以通过重写方法来构建通过来查询的方法。@Override//此处可以获取当前用户信息、角色信息或部门信息//通过用户信息或部门信息给查询增加条件。]]></description><category></category></item><item><title><![CDATA[更好用的的MybatisPlus：MybatisFlex（上）]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/133343220</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/133343220</guid><author>HackAzrael</author><pubDate>Wed, 27 Sep 2023 10:35:55 +0800</pubDate><description><![CDATA[中确实提供了一些比中更好用的功能，扩展性与灵活性都比较高，总体来说是一款不错的ORM框架。]]></description><category></category></item><item><title><![CDATA[一文详解二叉搜索树]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132920898</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132920898</guid><author>HackAzrael</author><pubDate>Sat, 16 Sep 2023 16:56:14 +0800</pubDate><description><![CDATA[当其左子树不为空时，其左子树上所有的节点的值均小于根节点的值。当其右子树不为空时，其右子树上所有节点的值均大于根节点的值。该树上的所有子树（左右子树）均为一颗二叉查找树。二叉查找树是一种特殊的二叉树，其搜索速率较快，类似于二分查找法，其在查询时先确定查找值的查询范围，再逐步缩小范围，直至查出结果或查完所有节点仍未找到返回null。其最坏情况为遍历所有节点，即时间复杂度为O(n)，空间复杂度为O(1)。]]></description><category></category></item><item><title><![CDATA[利用Hutool+自定义注解实现数据脱敏]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132714124</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132714124</guid><author>HackAzrael</author><pubDate>Wed, 06 Sep 2023 14:07:30 +0800</pubDate><description><![CDATA[*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置（包含）/*** 脱敏结束位置（不包含）/*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置（包含）/*** 脱敏结束位置（不包含）/*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置（包含）/**]]></description><category></category></item><item><title><![CDATA[【算法学习】平方数之和]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132377492</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132377492</guid><author>HackAzrael</author><pubDate>Sat, 19 Aug 2023 10:51:14 +0800</pubDate><description><![CDATA[双指针法和sqrt函数法。在双指针法中，数组最多遍历到c\sqrt{c}c​，则时间复杂度为OcOc​，空间复杂度为 O(1)。在sqrt函数法中，我们最大判定条件为a * a ≤ c，那么时间复杂度为 O(c\sqrt{c}c​)，空间复杂度为O(1)。]]></description><category></category></item><item><title><![CDATA[【算法学习】两数之和II - 输入有序数组]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132377456</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132377456</guid><author>HackAzrael</author><pubDate>Sat, 19 Aug 2023 10:50:17 +0800</pubDate><description><![CDATA[双指针法和二分查找法。其中在双指针法中，数组最多遍历n次，则时间复杂度为 O(n) ，空间复杂度为O(1)。在二分查找法中，遍历数组的时间复杂度为 O(n) ，二分查找来寻找参数的时间复杂度为OlognO(log_n)Ologn​，所以在该题目中，总时间复杂度为OnlognO(nlog_n)Onlogn​，空间复杂度为O(1)。]]></description><category></category></item><item><title><![CDATA[教你如何使用AES对接口参数进行加密]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132251293</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132251293</guid><author>HackAzrael</author><pubDate>Sat, 12 Aug 2023 17:29:19 +0800</pubDate><description><![CDATA[对称加密算法和非对称加密算法。该注解作用于接口上，可以对接口的加密或者解密实现更加粒子化的控制，默认入参解密，出参加密。/*** @description AES加解密注解/*** 入参是否解密，默认解密/*** 出参是否加密，默认加密/*** @description AES加解密注解/*** 入参是否解密，默认解密/*** 出参是否加密，默认加密/*** @description AES加解密注解/*** 入参是否解密，默认解密/**]]></description><category></category></item><item><title><![CDATA[教你如何实现接口防刷]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/132218558</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/132218558</guid><author>HackAzrael</author><pubDate>Thu, 10 Aug 2023 21:04:59 +0800</pubDate><description><![CDATA[我们在浏览网站后台的时候，假如我们频繁请求，那么网站会提示的字样，那么这个功能究竟有什么用呢，又是如何实现的呢？其实这就是接口防刷的一种处理方式，通过在一定时间内限制同一用户对同一个接口的请求次数，其目的是为了防止恶意访问导致服务器和数据库的压力增大，也可以防止用户重复提交。]]></description><category></category></item><item><title><![CDATA[【表达式引擎】简单高效的轻量级Java表达式引擎：Aviator]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131871172</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131871172</guid><author>HackAzrael</author><pubDate>Sat, 22 Jul 2023 18:24:48 +0800</pubDate><description><![CDATA[在见识过以上两种使用方式后，Aviator还支持以自定义函数的形式来执行表达式// 将自定义函数注册到Aviator中 AviatorEvaluator . addFunction(new CustomFunction());// 执行 Long result =(Long) AviatorEvaluator . execute("customFunc(50,20)");// 输出结果 System . out . println(result);} }]]></description><category></category></item><item><title><![CDATA[【Java实现短信通知】教你几步完成短信通知]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131762802</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131762802</guid><author>HackAzrael</author><pubDate>Mon, 17 Jul 2023 11:35:11 +0800</pubDate><description><![CDATA[在日常工作中，我们经常会遇到通知类型的场景，常见的一般为短信通知和邮件通知，这里我们单独将短信通知拎出来跟大家讨论一下。各个大厂基本都与三大运营商有合作，并拥有自己独立的Sms服务，但是如果我们要集成到我们的系统中，每个厂的代码都不太一样，难不成我们要一个一个的集成进来吗？有没有更简单便捷的方式呢？在日常的开发过程中，短信的发送经常使用（尤其是中小型的外包公司），毕竟不是每个公司都有阿里腾讯一样的实力， 也不是每个都像银行联通等公司一样有内部的短信规程。]]></description><category></category></item><item><title><![CDATA[【思路分享】一键生成树形结构]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131555654</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131555654</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:51:11 +0800</pubDate><description><![CDATA[在日常工作中，我们经常会遇到需要生成树形结构的需求，例如：部门树、菜单树等，我们以往的实现方式是写一个递归算法来实现，但是如果这样的需求多了，我们难不成要给每个需求都写一个递归算法来实现吗？显然这是不合理的，我们这样操作会造成很多的冗余代码。那么我们有没有更好的实现思路呢？]]></description><category></category></item><item><title><![CDATA[【设计模式】第十六章：迭代器模式详解及应用案例]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131529642</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131529642</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:36:20 +0800</pubDate><description><![CDATA[提供一种方法顺序访问一个聚合对象中的各种元素，而又不暴露该对象的内部表示。]]></description><category></category></item><item><title><![CDATA[【设计模式】第二十一章：命令模式详解及应用案例]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131554865</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131554865</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:25:22 +0800</pubDate><description><![CDATA[在软件系统中，“行为请求者”与“行为实现者”通常呈现一种“紧耦合但在某些场合，比如要对行为进行“记录、撤销/重做、事务”等处理，这种无法抵御变化的紧耦合是不合适的。在这种情况下，如何将“行为请求者”与“行为实现者”解耦？将一组行为抽象为对象实现二者之间的松耦合。这就是命令模式（Command Pattern）。]]></description><category></category></item><item><title><![CDATA[【设计模式】第二十二章：中介者模式详解及应用案例]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131554931</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131554931</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:25:20 +0800</pubDate><description><![CDATA[用一个中介对象来封装一系列对象的交互，从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象，以有利于维护和修改。]]></description><category></category></item><item><title><![CDATA[【设计模式】第十九章：访问者模式详解及应用案例]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131554702</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131554702</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:21:02 +0800</pubDate><description><![CDATA[表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。]]></description><category></category></item><item><title><![CDATA[【设计模式】第二十章：解释器模式详解及应用案例]]></title><link>https://blog.youkuaiyun.com/HackAzrael/article/details/131554803</link><guid>https://blog.youkuaiyun.com/HackAzrael/article/details/131554803</guid><author>HackAzrael</author><pubDate>Wed, 05 Jul 2023 14:20:51 +0800</pubDate><description><![CDATA[*摘自百度百科：**定义了一个解释器，来解释给定语言和文法的句子。其实质是把语言中的每个符号定义成一个（对象）类，从而把每个程序转换成一个具体的对象树。]]></description><category></category></item></channel></rss>