// //
Leongfeng's Blog

实现 Spring AOP 拦截对象内部调用的方法

一个SpringBoot项目中使用了 Scheduled Task ,如果任务出现异常,需要发送邮件给管理员,让管理员进行处理。而使用 AOP 对所有任务里的一些方法进行拦截处理时,由于方法经过封装(需要被拦截的),在 task 内部调用该方法时 AOP 不能直接拦截,所以我们需要进行一些特殊处理。

DFS(深度优先搜索)和BFS(广度优先搜索)

定义

所谓遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:

  • 深度优先遍历
  • 广度优先遍历

两种遍历的区别就是:从一开始从图中某个结点v出发,访问与v相邻的结点w(与v相邻的结点可以有多个);然后我们选择继续访问与w相邻的结点,也可以选择与v相邻的其它结点。如果选择访问w相邻的结点,那么就是深度优先遍历;而如果选择访问与v相邻的结点,那么就是广度优先算法

SQL Server 之 DMV(Dynamic Management View)

SQL Server数据库内置的 动态管理视图DMV函数DMF,通过监视服务器实例的运行状况、诊断故障以及优化性能的服务器状态信息,可用于进行故障诊断性能调优状态监控等。DMVDMF 保存在 sys_schema 中,以dm_xx开头, 有服务器数据库范围两种类型,因此,要查询这些范围内的 DMV&DMF**, 用户需要有 VIEW SERVER/DATABASE STATE 权限。

本文将列出一些可能需要使用的常用场景,如果需要查看所有的细节,请参考文档
附件是一个关于索引和执行计划相关的DMV:DMV_in_SqlServer.sql

正则表达式的零宽度先行断言(Lookahead)和后行断言(Lookbehind)

Java 中的正则表达式有四种断言(Assertions)形式:

  1. (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
  2. (?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
  3. (?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)
  4. (?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)

如同 ^ 代表开头,$ 代表结尾, \b 代表单词边界一样,先行断言和后街断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为零宽。所谓位置,是指字符串中(每行)第一个字符的左边、最后一个字符的右边以及相邻字符的中间。

使用 SpringFox、Swagger2Markup、Spring-Restdoc和 Maven 构建 RESTful API文档

有时候我们的的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开发或是前端开发等。为了减少与其他团队平时开发期间的频繁沟通成本,我们需要构造相应的开发文档进行说明。利用传统的方法构造的文档即耗时耗力,利用Swagger生成的API文档可以实时预览,而且可以实时更新。

Java的final关键字的使用

final 关键字非常重要,可以修饰变量方法

虽然知道Java推荐使用final关键字来修饰局部变量,但是至于具体原因好像不是很清楚。今天参考几篇文章总结一下 final 关键字,看看什么是final关键字?将变量方法声明为final代表了什么?使用final的好处是什么?

|