leetcode-20天[算法]刷题计划
第一天 二分查找704. 二分查找难度简单279收藏分享切换为英文接收动态反馈
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:
123输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4
示例 2:
123输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
1234567891011121314151617181920212223class Solution { public int search(int[] nums, int target) { return getTarget ...
(七)drools实战开发案例
Drools实战开发案例1 个人所得税计算器本小节我们需要通过Drools规则引擎来根据规则计算个人所得税,最终页面效果如下:
1.1 名词解释税前月收入:即税前工资,指交纳个人所得税之前的总工资
应纳税所得额:指按照税法规定确定纳税人在一定期间所获得的所有应税收入减除在该纳税期间依法允许减除的各种支出后的余额
税率:是对征税对象的征收比例或征收额度
速算扣除数:指为解决超额累进税率分级计算税额的复杂技术问题,而预先计算出的一个数据,可以简化计算过程
扣税额:是指实际缴纳的税额
税后工资:是指扣完税后实际到手的工资收入
1.2 计算规则要实现个人所得税计算器,需要了解如下计算规则:
规则编号
名称
描述
1
计算应纳税所得额
应纳税所得额为税前工资减去3500
2
设置税率,应纳税所得额<=1500
税率为0.03,速算扣除数为0
3
设置税率,应纳税所得额在1500至4500之间
税率为0.1,速算扣除数为105
4
设置税率,应纳税所得额在4500志9000之间
税率为0.2,速算扣除数为555
5
设置税率,应纳税所得额在9000志35000之 ...
(六)drools可视化规则编辑器WorkBench安装
1. WorkBench1.1 WorkBench简介WorkBench是KIE组件中的元素,也称为KIE-WB,是Drools-WB与JBPM-WB的结合体。它是一个可视化的规则编辑器。WorkBench其实就是一个war包,安装到tomcat中就可以运行。使用WorkBench可以在浏览器中创建数据对象、创建规则文件、创建测试场景并将规则部署到maven仓库供其他应用使用。
下载地址:https://download.jboss.org/drools/release/7.6.0.Final/kie-drools-wb-7.6.0.Final-tomcat8.war
注意:下载的war包需要安装到tomcat8中。
1.2 安装方式软件安装时经常会涉及到软件版本兼容性的问题,所以需要明确各个软件的使用版本。
本课程使用的软件环境如下:
操作系统:Windows 10 64位
JDK版本:1.8
maven版本:3.5.4
Tomcat版本:8.5
具体安装步骤:
第一步:配置Tomcat的环境变量CATALINA_HOME,对应的值为Tomcat安装目录
第二步:在Tomcat的 ...
(五)Spring整合drools
1. Spring整合Drools1.1 Spring简单整合Drools在项目中使用Drools时往往会跟Spring整合来使用。具体整合步骤如下:
第一步:创建maven工程drools_spring并配置pom.xml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P ...
(四)drools高级语法
1 Drools高级语法前面章节我们已经知道了一套完整的规则文件内容构成如下:
关键字
描述
package
包名,只限于逻辑上的管理,同一个包名下的查询或者函数可以直接调用
import
用于导入类或者静态方法
global
全局变量
function
自定义函数
query
查询
rule end
规则体
本章节我们就来学习其中的几个关键字。
1.1 global全局变量global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。可以用来为规则文件提供数据或服务。
语法结构为:global 对象类型 对象名称
在使用global定义的全局变量时有两点需要注意:
1、如果对象类型为包装类型时,在一个规则中改变了global的值,那么只针对当前规则有效,对其他规则中的global不会有影响。可以理解为它是当前规则代码中的global副本,规则内部修改不会影响全局的使用。
2、如果对象类型为集合类型或JavaBean时,在一个规则中改变了global的值,对java代码和所有规则都有效。
下面我们通过代码进行验证:
第 ...
(三)drools基础语法和规则属性
1.Drools基础语法1.1 规则文件构成在使用Drools时非常重要的一个工作就是编写规则文件,通常规则文件的后缀为.drl。
drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。
一套完整的规则文件内容构成如下:
关键字
描述
package
包名,只限于逻辑上的管理,同一个包名下的查询或者函数可以直接调用
import
用于导入类或者静态方法
global
全局变量
function
自定义函数
query
查询
rule end
规则体
Drools支持的规则文件,除了drl形式,还有Excel文件类型的。
1.2 规则体语法结构规则体是规则文件内容中的重要组成部分,是进行业务规则判断、处理业务结果的部分。
规则体语法结构如下:
1234567rule "ruleName" attributes when LHS then RHSend
rule:关键字,表示规则开始,参数为规则的唯一名称。
attributes:规则属性,是rule与w ...
(二)drools入门案例
Drools入门案例1 业务场景说明业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下:
规则编号
规则名称
描述
1
规则一
所购图书总价在100元以下的没有优惠
2
规则二
所购图书总价在100到200元的优惠20元
3
规则三
所购图书总价在200到300元的优惠50元
4
规则四
所购图书总价在300元以上的优惠100元
现在需要根据上面的规则计算优惠后的价格。
2 开发实现第一步:创建maven工程drools_quickstart并导入drools相关maven坐标
12345678910<dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.10.0.Final</version></dependency><dependency> < ...
(一)drools规则引擎介绍
1 规则引擎概述1.1 什么是规则引擎规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。
需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。
规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。
例如通过如下代码来检查用户信息合法性:
1234567891011121314151617181920212223242526272829303132//此处为伪代码//检查用户信息合法性,返回true表示检查通过,返回false表示检查不通过public boolean checkUser(User user){ //如果申请人既没房也没车,同时学历为大专以下,并且月 ...
分布式服务框架(RPC):dubbo-快速入门
1 分布式基础理论1.1 分布式系统概览《分布式系统原理与范型》定义:
“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”,分布式系统(distributed system)是建立在网络之上的软件系统。
1.2 分布式系统演变随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构当服务越来越多 ...
Redis分布式锁的实现原理
分布式锁场景例如:摸电商平台抢购某商品优惠券
如果使用如下代码作为抢购优惠券后台程序,看看有什么问题:
1234567891011121314151617181920212223@Controller@RequestMapping("redisLock")public class redisController { @Autowired private StringRedisTemplate stringRedisTemplate; @RequestMapping("decrCount") @ResponseBody public String decrCount() { String lockKey = "surplus"; Object surplusObj = stringRedisTemplate.opsForValue().get(lockKey); Integer surplusNum = Objects.isNull(su ...