业务场景
对之前已有的试用用户申请规则进行拓展。
1 | if (是否海外用户) { |
分析:
- 主要流程主要是基于 and 或者 or 的关系。
- 如果有一个不匹配,后续的流程不用执行,需要具备一个短路的功能。
- 如果在原有基础上改,稍微注意解决需求不是大问题,但后面可维护性非常差。
方法一:自关联
1 | SELECT v1.proj_id AS 工程号,v1.proj_start 开始日期,v1.proj_end 结束日期 |
方法二:分析函数 lead() over()
1 | SELECT proj_id AS 工程号,proj_start 开始日期,proj_end 结束日期 |
自关联需要扫描两次视图“V”,而使用分析函数只需要一次,大部分情况可以通过分析函数优化查询性能。
crond 和 crontab是不可分割的。
1 | CREATE [OR REPLACE] TRIGGER trigger_name |
类隔离技术是为了解决依赖冲突而诞生的,它通过自定义类加载器破坏双亲委派机制,然后利用类加载传导规则实现了不同模块的类隔离。
自定义的类加载器,首先继承 java.lang.ClassLoader
,然后重写类加载方法:
类加载传导规则:JVM 会选择当前类的类加载器来加载所有该类的引用的类。
例如:我们定义了 TestA 和 TestB 两个类,TestA 会引用 TestB,只要我们使用自定义的类加载器加载 TestA,那么在运行时,当 TestA 调用到 TestB 的时候,TestB 也会被 JVM 使用 TestA 的类加载器加载。依此类推,只要是 TestA 及其引用类关联的所有 jar 包的类都会被自定义类加载器加载。
通过这种方式,只要让模块的 main 方法类使用不同的类加载器加载,那么每个模块的都会使用 main 方法类的类加载器加载,这样就能让多个模块分别使用不同类加载器。