自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Bug记录】调用Controller中的方法的Service为null

今天写代码的时候遇到了一个奇怪的Bug,在Controller中调用某个方法时突然报空指针异常,打断点时发现service为null,并尝试了数种注入方式,发现均为null。

2024-04-29 10:16:45 478

原创 RocketMQ学习笔记

用户购物积分服务:当我们购物后进行积分的一个累加,在实际开发中,会用到使用订单服务来调用我们的积分服务进行积分的累加,但是如果积分服务出现问题,就会导致我们相应的接口出问题,此时就可以把积分放到MQ中,积分服务作为消费者去处理,也就可以实现我们服务的解耦。

2024-04-25 18:15:03 1060

原创 服务部署后出错怎么快速调试?试试JDWP协议

在我们日常开发工作中,经常会遇到写好的代码线上出了问题,但是本地又无法复现,看着控制台输出的日志恨自己当初没有多打几条日志,然后追着日志一条一条查,不说找起来有多费事费劲,再我们找到后还要去对应的代码进行修改,最后再将改过的代码打包部署重新测试,这个流程下来十几二十分钟就没了。那么有没有什么办法能帮助我们进行调试呢?答案是有的!使用Java为我们提供的来实现。

2024-04-25 18:12:56 1061

原创 一文教会你SpringBoot是如何启动的

首先我们定义一个类来实现,并重写一下方法接着我们在resource目录下创建一个名为META-INF的文件夹,并在文件夹中创建一个名为的文件再在其中写上我们的初始化器的全限定名即可接着我们启动我们的应用发现我们的打印是正常的首先定义一个类来实现中的方法再在中来定义一下我们要加载的监听器接着我们启动一下项目,可以看到我们的监听器成功被加载了,并且也在初始化器的后面首先我们要先创建一个类来实现中的方法然后在中定义即可。

2024-03-18 17:58:22 1126 1

原创 更好用的Mybatis Plus:Mybatis Flex(下)

除此之外,我们还可以去自定义脱敏规则,我们利用内部提供的来实现。MaskManager.registerMaskProcessor("自定义规则名称",data-> {//进行脱敏操作//返回脱敏后的数据});IDialect在自定义数据方言中,我们可以通过重写方法来构建通过来查询的方法。@Override//此处可以获取当前用户信息、角色信息或部门信息//通过用户信息或部门信息给查询增加条件。

2023-09-28 16:47:08 526

原创 更好用的的MybatisPlus:MybatisFlex(上)

中确实提供了一些比中更好用的功能,扩展性与灵活性都比较高,总体来说是一款不错的ORM框架。

2023-09-27 10:35:55 1684

原创 一文详解二叉搜索树

当其左子树不为空时,其左子树上所有的节点的值均小于根节点的值。当其右子树不为空时,其右子树上所有节点的值均大于根节点的值。该树上的所有子树(左右子树)均为一颗二叉查找树。二叉查找树是一种特殊的二叉树,其搜索速率较快,类似于二分查找法,其在查询时先确定查找值的查询范围,再逐步缩小范围,直至查出结果或查完所有节点仍未找到返回null。其最坏情况为遍历所有节点,即时间复杂度为O(n),空间复杂度为O(1)。

2023-09-16 16:56:14 190

原创 利用Hutool+自定义注解实现数据脱敏

*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置(包含)/*** 脱敏结束位置(不包含)/*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置(包含)/*** 脱敏结束位置(不包含)/*** @description 数据脱敏自定义注解/*** 数据脱敏类型/*** 脱敏开始位置(包含)/**

2023-09-06 14:07:30 513

原创 【算法学习】平方数之和

双指针法和sqrt函数法。在双指针法中,数组最多遍历到c\sqrt{c}c​,则时间复杂度为OcOc​,空间复杂度为 O(1)。在sqrt函数法中,我们最大判定条件为a * a ≤ c,那么时间复杂度为 O(c\sqrt{c}c​),空间复杂度为O(1)。

2023-08-19 10:51:14 173

原创 【算法学习】两数之和II - 输入有序数组

双指针法和二分查找法。其中在双指针法中,数组最多遍历n次,则时间复杂度为 O(n) ,空间复杂度为O(1)。在二分查找法中,遍历数组的时间复杂度为 O(n) ,二分查找来寻找参数的时间复杂度为OlognO(log_n)Ologn​,所以在该题目中,总时间复杂度为OnlognO(nlog_n)Onlogn​,空间复杂度为O(1)。

2023-08-19 10:50:17 131

原创 教你如何使用AES对接口参数进行加密

对称加密算法和非对称加密算法。该注解作用于接口上,可以对接口的加密或者解密实现更加粒子化的控制,默认入参解密,出参加密。/*** @description AES加解密注解/*** 入参是否解密,默认解密/*** 出参是否加密,默认加密/*** @description AES加解密注解/*** 入参是否解密,默认解密/*** 出参是否加密,默认加密/*** @description AES加解密注解/*** 入参是否解密,默认解密/**

2023-08-12 17:29:19 852

原创 教你如何实现接口防刷

我们在浏览网站后台的时候,假如我们频繁请求,那么网站会提示的字样,那么这个功能究竟有什么用呢,又是如何实现的呢?其实这就是接口防刷的一种处理方式,通过在一定时间内限制同一用户对同一个接口的请求次数,其目的是为了防止恶意访问导致服务器和数据库的压力增大,也可以防止用户重复提交。

2023-08-10 21:04:59 321

原创 【表达式引擎】简单高效的轻量级Java表达式引擎:Aviator

在见识过以上两种使用方式后,Aviator还支持以自定义函数的形式来执行表达式// 将自定义函数注册到Aviator中 AviatorEvaluator . addFunction(new CustomFunction());// 执行 Long result =(Long) AviatorEvaluator . execute("customFunc(50,20)");// 输出结果 System . out . println(result);} }

2023-07-22 18:24:48 5468

原创 【Java实现短信通知】教你几步完成短信通知

在日常工作中,我们经常会遇到通知类型的场景,常见的一般为短信通知和邮件通知,这里我们单独将短信通知拎出来跟大家讨论一下。各个大厂基本都与三大运营商有合作,并拥有自己独立的Sms服务,但是如果我们要集成到我们的系统中,每个厂的代码都不太一样,难不成我们要一个一个的集成进来吗?有没有更简单便捷的方式呢?在日常的开发过程中,短信的发送经常使用(尤其是中小型的外包公司),毕竟不是每个公司都有阿里腾讯一样的实力, 也不是每个都像银行联通等公司一样有内部的短信规程。

2023-07-17 11:35:11 2719

原创 【思路分享】一键生成树形结构

在日常工作中,我们经常会遇到需要生成树形结构的需求,例如:部门树、菜单树等,我们以往的实现方式是写一个递归算法来实现,但是如果这样的需求多了,我们难不成要给每个需求都写一个递归算法来实现吗?显然这是不合理的,我们这样操作会造成很多的冗余代码。那么我们有没有更好的实现思路呢?

2023-07-05 14:51:11 425

原创 【设计模式】第十六章:迭代器模式详解及应用案例

提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

2023-07-05 14:36:20 756

原创 【设计模式】第二十一章:命令模式详解及应用案例

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象实现二者之间的松耦合。这就是命令模式(Command Pattern)。

2023-07-05 14:25:22 1194

原创 【设计模式】第二十二章:中介者模式详解及应用案例

用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改。

2023-07-05 14:25:20 592

原创 【设计模式】第十九章:访问者模式详解及应用案例

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

2023-07-05 14:21:02 787

原创 【设计模式】第二十章:解释器模式详解及应用案例

*摘自百度百科:**定义了一个解释器,来解释给定语言和文法的句子。其实质是把语言中的每个符号定义成一个(对象)类,从而把每个程序转换成一个具体的对象树。

2023-07-05 14:20:51 478

原创 【设计模式】第十八章:备忘录模式详解及应用案例

在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

2023-07-05 14:15:20 500

原创 【设计模式】第十七章:状态模式详解及应用案例

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

2023-07-05 14:13:15 1165

原创 【设计模式】第十五章:责任链模式详解及应用案例

在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

2023-07-04 10:24:07 466

原创 【设计模式】第十四章:策略模式详解及应用案例

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

2023-07-04 10:21:57 565

原创 【设计模式】第十三章:模板方法模式详解及应用案例

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

2023-07-04 10:18:56 384

原创 【设计模式】第十二章:观察者模式详解及应用案例

观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是如那件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

2023-07-04 09:49:24 606

原创 【设计模式】第十一章:享元模式详解及应用案例

它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

2023-07-04 09:45:47 393

原创 【设计模式】第十章:组合模式详解及应用案例

组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。

2023-07-04 09:41:09 408

原创 【设计模式】第九章:外观模式(门面模式)详解及应用案例

是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。

2023-07-04 09:38:01 325

原创 【设计模式】第八章:桥接模式详解及应用案例

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为 柄体(Handle and Body)模式 或 接口(interface)模式。

2023-07-04 09:32:36 282

原创 【设计模式】第七章:代理模式详解及应用案例

所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。

2023-07-04 09:27:46 595

原创 【设计模式】第六章:装饰器模式详解及应用案例

摘自菜鸟教程:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

2023-07-04 09:22:45 471

原创 【设计模式】第四章:原型模式详解及应用案例

摘自百度百科:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

2023-06-13 16:50:10 458

原创 【设计模式】第五章:适配器模式详解及应用案例

摘自百度百科:在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。假如我们已经定义了一个方法,后续由于各种场景要求我们改造该方法,但是又不能影响到其他调用到这个方法的代码,这时候我们就可以使用适配器模式来进行包装,以符合我们的业务需求。适配器模式适用于在不修改原有代码结构的情况下,完成扩展功能的需求。我们可以根据业务场景的不同来选择适配器模式不同的实现方式。

2023-05-24 09:53:11 406

原创 【Lambda表达式】封装函数式接口消除if-else

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包,和传统数学上的意义有区别。【摘自百度百科】Java在JDK8的时候引入了Lambda表达式的用法,它简化了我们的代码并且可以让我们的代码更简洁,也大大的提高了我们代码的可读性。

2023-05-22 18:36:07 675

原创 【SpringBoot+WebSocket】实现简单的即时通讯

很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每10秒请求一次),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

2023-03-21 12:03:03 1419

原创 【SpringBoot+自定义注解+Aop+长轮询】实现简单的实时消息推送

平常在网站上都可以看到右上角的消息上未读消息数量,以及有消息时右下角实时弹出的例子我公司项目刚好也有这个需求,但是由于甲方要求不能使用第三方服务,于是便有了本文的解决思路

2023-02-22 01:31:35 1274 2

原创 【设计模式】第三章:建造者模式详解及应用案例

建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是将一个复杂对象的构建与其分离开,使之可以通过同样构建过程来创建不同的内容。

2022-10-12 15:37:45 519

原创 【设计模式】第二章:工厂模式详解及应用案例

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

2022-10-11 17:30:46 290

原创 【设计模式】第一章:单例模式详解及应用案例

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)也就是说,一个类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例类有且只能有一个实例单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。

2022-10-11 13:50:48 399

SSM酒店管理系统源码

主要使用SSM+LayUI进行编写的酒店管理系统,供大家下载学习使用

2021-06-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除