JUST DO IT


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

规则执行器替代大量if判断

发表于 2021-05-25 | 分类于 设计模式

业务场景

对之前已有的试用用户申请规则进行拓展。

1
2
3
4
5
6
7
8
9
10
11
12
if (是否海外用户) {
return false;
}
if (刷单用户) {
return false;
}
if (未付费用户 && 不再服务时段) {
return false
}
if (转介绍用户 || 付费用户 || 内推用户) {
return true;
}

分析:

  • 主要流程主要是基于 and 或者 or 的关系。
  • 如果有一个不匹配,后续的流程不用执行,需要具备一个短路的功能。
  • 如果在原有基础上改,稍微注意解决需求不是大问题,但后面可维护性非常差。
阅读全文 »

策略模式干掉if-else/switch

发表于 2021-05-25 | 分类于 设计模式

结构图

策略模式需要一个策略接口,不同的策略实现不同的实现类。

在具体业务环境中仅持有该策略接口,根据不同的场景使用不同的实现类即可。

面向接口编程,而不是面向实现。

阅读全文 »

《Oracle查询优化改写》笔记(高级查询)

发表于 2021-05-24 | 分类于 数据库

《Oracle查询优化改写》笔记(基础语句)

《Oracle查询优化改写》笔记(应用案例)

范围处理

定位连续值的范围

方法一:自关联

1
2
3
SELECT v1.proj_id AS 工程号,v1.proj_start 开始日期,v1.proj_end 结束日期
FROM v v1,v v2
WHERE v2.proj_start = v1.proj_end

方法二:分析函数 lead() over()

1
2
3
SELECT proj_id AS 工程号,proj_start 开始日期,proj_end 结束日期
lead(proj_start) over(ORDER BY proj_id) 下一工程开始日期
FROM v;

自关联需要扫描两次视图“V”,而使用分析函数只需要一次,大部分情况可以通过分析函数优化查询性能。

阅读全文 »

Centos7定时任务

发表于 2021-04-15 | 分类于 Linux

《Centos7 利用crontab定时执行任务及配置方法》

《centos实现两种秒级任务的简单方法》

概述

crond 和 crontab是不可分割的。

  • crontab是一个命令,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
  • crond是crontab的守护进程。cron服务是一个定时执行的服务,可以通过 crontab 命令添加或者编辑需要定时执行的任务。
阅读全文 »

Oracle触发器trigger

发表于 2021-04-07 | 分类于 数据库

触发器语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE [OR REPLACE] TRIGGER trigger_name

{BEFORE | AFTER }

{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]

ON [schema.]table_name | [schema.]view_name

[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]

[FOR EACH ROW ]

[WHEN condition]

PL/SQL_BLOCK | CALL procedure_name;
阅读全文 »

《Oracle查询优化改写》笔记(基础语句)

发表于 2021-03-21 | 分类于 数据库

《Oracle查询优化改写》笔记(高级查询)

《Oracle查询优化改写》笔记(应用案例)

单表查询

空值转换为实际值

相对于nvl来说,coalesce支持多个参数,能很方便的返回第一个不为空的值。

1
2
3
4
SELECT coalesce(comm,0) FROM emp;
SELECT COALESCE(C1,C2,C3,C4,C5,C6) AS c FROM V;
# 若改用nvl,要嵌套很多层
SELECT nvl(nvl(nvl(nvl(nvl(c1,c2),c3),c4),c5),c6) AS c FROM V;
阅读全文 »

Java类隔离加载实现

发表于 2021-02-23 | 分类于 Java深入

类隔离技术是为了解决依赖冲突而诞生的,它通过自定义类加载器破坏双亲委派机制,然后利用类加载传导规则实现了不同模块的类隔离。

自定义的类加载器,首先继承 java.lang.ClassLoader,然后重写类加载方法:

  • 重写 findClass(String name)
  • 重写 loadClass(String name),破坏双亲委派模式。

类加载传导规则:JVM 会选择当前类的类加载器来加载所有该类的引用的类。

例如:我们定义了 TestA 和 TestB 两个类,TestA 会引用 TestB,只要我们使用自定义的类加载器加载 TestA,那么在运行时,当 TestA 调用到 TestB 的时候,TestB 也会被 JVM 使用 TestA 的类加载器加载。依此类推,只要是 TestA 及其引用类关联的所有 jar 包的类都会被自定义类加载器加载。

通过这种方式,只要让模块的 main 方法类使用不同的类加载器加载,那么每个模块的都会使用 main 方法类的类加载器加载,这样就能让多个模块分别使用不同类加载器。

阅读全文 »

Java并发总结-线程组

发表于 2020-11-21 | 分类于 Java并发

线程组概念

Java中用ThreadGroup来表示线程组

  • 每个Thread必然存在于一个ThreadGroup中,不能独立于ThreadGroup存在。
  • 如果在new Thread时没有显式指定,那么默认将父线程(当前执行new Thread的线程)线程组设置为自己的线程组。
  • 我们可以使用线程组对线程进行批量控制(统一异常处理)。
阅读全文 »
1234…13
Try.Catch

Try.Catch

孤单而灿烂

102 日志
16 分类
26 标签
© 2017 — 2023 Try.Catch
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
本站访客数 人次 本站总访问量 次
0%