2019-12-23 项目总结-系统如何自动甄别标的利率是否合理?

       借贷系统在计算利息时,总少不了对利率的处理。利率字段通常由资产端同事手工录入,或者通过数据接口传入(最终也是由接口调用方的同事手工录入)。而人工操作不可避免会出现错误,即使加入了初审、复审等交叉审核环节,审核也会因为系统和业务逐渐稳定而流于形式。

       本文尝试从不同角度解答“系统如何自动甄别标的利率是否合理”这一问题,在深入讨论之前,先做以下约定:

  • 在判断某产品利率是否合理的时候,应该选取同类型产品的利率池(比如历史利率)作为参考。
  • 活动期间的爆款产品的利率不能作为参考。


c compile

图片来源

阅读全文

2019-10-31 项目总结-设计模式的应用

       本文对笔者经历的项目中关于设计模式的应用,进行简单的阶段性总结。


c compile

图片来源

主动使用的设计模式


策略模式 & 简单工厂模式


       对放款主流程来说,不管采用何种还款方式(比如等额本息、等额本金等),除了计算方式不同造成的结果差异之外,不会产生业务逻辑的差异。因此,将每个还款方式封装成单独的策略,给每个策略分配一个整型的type,在计算计划表时,根据type获取相应策略,可以直接获取结果。伪代码如下所示:

//简单工厂方法
public RepayStrategy getRepayStrategy(int type) {
    switch (type) {
        //for each case return corresponding instance
    }
    throw new RuntimeException("unsupported type");
}

...

//放款主流程,生成相应的收益计划
public Result transfer(TransferParams params) {
    int repayType = params.getType();
    RepayStrategy repayStrategy = Factory.getRepayStrategy(type);
    List<Plan> planList = repayStrategy.generatePlanList(params);
    //subsequent process
}

代码清单1

阅读全文

2019-09-05 生产环境JVM参数配置记录(一)

       本文记录笔者参与的某Java服务的JVM启动参数。


-Djava.awt.headless=true

       从JDk1.4起,可以通过此参数以无外设(显示器、键盘等)模式运行JVM实例。无外设模式下,代码中仅能使用部分GUI组件,比如Canvas类。 当使用了Button和Frame等依赖于显示设备的类时,将会抛出HeadlessException。

       当然,在Java服务端开发中,不会用到java.awt.*的类,使用此参数可以防止误拷贝了Java GUI开发的代码所引发的问题。


-Djava.net.preferIPv4Stack=true

       此参数默认为false,如果操作系统支持IPv6,JVM可以与IPv4及IPv6主机进行socket通信。 设置为true,则告诉JVM仅允许与IPv4主机进行socket通信。


c compile

图片来源

阅读全文

2019-08-08 工作问题记录(一):事务的错误使用方式

       事务是数据库的原子操作,由一个或者一组操作组合而成。事务的重要性不言而喻,本文也无需过多阐述背景,直接进入正题。

       在实际的代码中,使用事务通常有以下几种方式:

注解式:如spring的org.springframework.transaction.annotation.Transactional。

声明式:如在spring配置文件中编写的<tx>标签的相关内容。

手写代码:自行编写事务,手动commit。

       除数据库之外,缓存也有原子操作,以redis为例:

SET命令:SET key value expiration EX seconds PX milliseconds NX XX,其中NX参数的说明如下:Only set the key if it does not already exist。

SETEX命令:给某个key设置某个值,并为其设置过期时间。注:此命令可由SET命令替代。

MULTI/EXEC语句块:由MULTI命令和EXEC命令包裹的语句块属于原子操作。

c compile

阅读全文

2019-07-30 一种精确的理财金额算法的设计与实现(以等额本息为例)

       在现代金融活动中,借贷是一种最常见的方式。借贷经过各种包装和杠杆,就形成了各式各样的金融产品。 本文以P2P系统中的等额本息借贷关系为例,讨论如何保证金额在不同流程中计算的准确性。

       一般来说,投资人的回款计划,以及借款人的还款计划会在项目成立(也就是满标),放款完成之后生成。 在后续的所有流程中,均不会更改已生成的金额数据,比如在还款成功之后,只会变更计划的状态为已还清。对于本文中可能会出现的名词,现如下定义:

投资人:出钱的人。当借贷关系成立时,为资金流出方,当借贷关系结束时,为资金流入方。

借款人:借钱的人。当借贷关系成立时,为资金流入方,当借贷关系结束时,为资金流出方。

标的:将借款人的需求包装而成的金融产品。

投资:投资成功后,投资人账户金额会被冻结。

放款:当标的成立之后,托管机构将钱从投资人账户转到借款人账户。

还款:借款人将本息通过托管机构还给投资人。

资金端:拥有投资人资源,提供资金来源。

资产端:拥有借款人资源,提供借款需求。

c compile

图片来源

阅读全文