ARTS-Week7 有序数组去重、Flogger、jar、规则引擎Drools

拜拜,五一!

Algorithm


LeetCode原题链接: 删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

我的解法:

    public static int removeDuplicates(int[] nums) {
        if(nums.length <= 1){
            return nums.length;
        }

        int index = 0;
        for (int i = 1; i < nums.length ; i++) {
            if(nums[index] != nums[i]){
                index++;
                nums[index] = nums[i];
            }
        }

        return index + 1;
    }

Review


Google Releases New Java Logging Framework

这篇文章主要介绍了谷歌发布新的Java日志框架Flogger,它的一些优点及使用示例。

  • 通过对API的设计,降低了禁用日志的成本。
  • 在启用的日志中有很好的性能表现
  • 能满足现有的和未来的功能需求
  • 在代码的可读性和扩展性上有很大改进

Github: flogger

Tip


一个关于Springboot项目和jar包依赖的坑:添加了依赖,jar包也在对应路径的文件夹中,但在类中引用不到jar包中的方法

自己用idea根据页面正确引导创建的SpringBoot+Maven项目ProjectA,pom文件自动生成的。
对ProjectA用maven命令: clean install,打成jar包到本地maven仓库。

这时再建立SpringBoot+Maven项目ProjectB,pom文件自动生成。在pom文件中添加对项目A的依赖。在ProjectB项目中始终调用不到ProjectA jar包中的方法。

spring-boot maven项目自动生成的pom.xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

相比普通的jar包,以上配置生成的jar里会多一个目录BOOT-INF,同时引用该jar包的项目会报找不到该jar包

解决方法:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

Share


这次分享的是一个有趣又有用的开源项目,一款规则引擎,刚好也在项目中用来做投资风险分析系统。


Drools是一款基于Java的开源规则引擎。它是用Java编写,由JBoss和红帽公司扩展支持,并实现Rete模式匹配算法的一个开源项目。

什么是规则引擎???

小明是一家互联网公司的软件工程师,他们公司为了吸引新用户经常会搞活动,小明常常为了做活动加班加点很烦躁,这不今天呀又来了一个活动需求,我们大家一起帮他看看。

活动规则是根据用户购买订单的金额给用户送相应的积分,购买的越多送的积分越多,用户可以使用积分来兑换相应的商品,我们这次活动的力度很大,肯定会吸引很多的用户参加,产品经理小王兴高采烈唾液横飞的对小明讲到。小明心想,又tm来这套,这次需求又要变更多少次呢?表面上还的配合,说赶紧把规则给我们吧,早点开发早点上线,小王说这次需求老简单啦,估计你们两个小时就搞定了,不信你看需求文档。

用户购买的金额和对应送多少积分的规则如下:

  • 100元以下, 不加分
  • 100元-500元,加100分
  • 500元-1000元,加500分
  • 1000元 以上,加1000分

小明一看,这需求果然简单呀,作为一个工作了两三年的程序员来讲,这不就是小case,半天搞定,送积分的代码如下:

public void execute() throws Exception {  
     
   List<Order> orderList = getInitData();
   for (int i=0; i<orderList.size(); i++){  
       Order order = orderList.get(i);  
       if (order.getAmout() <= 100){  
           order.setScore(0);  
           addScore(order);  
       }else if(order.getAmout() > 100 && order.getAmout() <= 500){  
           order.setScore(100);  
           addScore(order);  
       }else if(order.getAmout() > 500 && order.getAmout() <= 1000){  
           order.setScore(500);  
           addScore(order);  
       }else{  
           order.setScore(1000);  
           addScore(order);  
       }  
   }  
     
}   

上线运行了半天之后,财务部的小财突然监测到活动账户的金额大为减少,发现产品做活动竟然没有通知到他,非常不爽,于是给领导小马说,这样大规模的活动,对公司财务有压力,领导小马权衡了一番说,这样吧活动继续,但是金额翻倍在送积分,于是规则变成了这样:200元以下不给积分,1000元以下给100积分...

小明看领导都发话了,没办法改呀,不过也简单,就是将里面的值都翻了倍,在投产上去,只是挨了不少测试的白眼。

活动又进行了一天,运营人员通过后台监控发现提到2倍以后,用户积极性变的很差,活动效果不理想,和领导商议了一下,改为最初规则的1.5倍,及150元一下不给积分,750元以下给给100积分... 小明这时候的心情大概是这样子的,一万个下图动物狂奔而过。

没办法还的改不是,当然这次小明可学乖了,将这些数据(多少元送多少分)存到了数据库中,当老板在改主意的时候,只要改一下数据库的值就可以了,小明为自己的明聪感到有点小高兴。

核心代码变成了这样:

public void execute() throws Exception {  
     
   List<Order> orderList = getInitData();
   List<int> values = getTableValues();
   for (int i=0; i<orderList.size(); i++){  
       Order order = orderList.get(i);  
       if (order.getAmout() <= values.get(0)){  
           order.setScore(values.get(3));  
           addScore(order);  
       }else if(order.getAmout() > values.get(0) && order.getAmout() <= values.get(1)){  
           order.setScore(values.get(4));  
           addScore(order);  
       }else if(order.getAmout() > values.get(1) && order.getAmout() <= values.get(2)){  
           order.setScore(values.get(5));  
           addScore(order);  
       }else{  
           order.setScore(values.get(6));  
           addScore(order);  
       }  
   }  
     
} 

正当小明得意洋洋的打个了最新版本投产上线之后,产品经理小王说积分规则层次太少了,由以前的4组变成8组,小明此刻的心情:kao ...



小明想这样下去非得被他们弄死,必须要找找有什么技术可以将活动规则和代码解耦,不管规则如何变化,执行端不用动。小明搜了半天还真有这样的东西,那就是规则引擎,那么规则引擎到底是什么东西呢?

规则引擎介绍

规则引擎起源于基于规则的专家系统,而基于规则的专家系统又是专家系统的其中一个分支。利用它可以在应用系统中分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时可以动态地管理和修改,从而为企业保持灵活性和竞争力提供有效的技术支持。

java开源的规则引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最为广泛并且开源的是Drools。
gui

  • 声明式编程
    规则可以很容易地解决困难的问题,并得到解决方案的验证。与代码不同,规则以较不复杂的语言编写; 业务分析师可以轻松阅读和验证一套规则。

  • 逻辑和数据分离
    数据位于“域对象”中,业务逻辑位于“规则”中。根据项目的种类,这种分离是非常有利的。

  • 速度和可扩展性
    写入Drools的Rete OO算法已经是一个成熟的算法。在Drools的帮助下,您的应用程序变得非常可扩展。如果频繁更改请求,可以添加新规则,而无需修改现有规则。

  • 知识集中化
    通过使用规则,您创建一个可执行的知识库(知识库)。这是商业政策的一个真理点。理想情况下,规则是可读的,它们也可以用作文档。

参考链接:
小明历险记:规则引擎Drools教程详解
深入了解Drools
Drools Documentation
易百教程:Drools

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249