借贷系统在计算利息时,总少不了对利率的处理。利率字段通常由资产端同事手工录入,或者通过数据接口传入(最终也是由接口调用方的同事手工录入)。而人工操作不可避免会出现错误,即使加入了初审、复审等交叉审核环节,审核也会因为系统和业务逐渐稳定而流于形式。
本文尝试从不同角度解答“系统如何自动甄别标的利率是否合理”这一问题,在深入讨论之前,先做以下约定:
- 在判断某产品利率是否合理的时候,应该选取同类型产品的利率池(比如历史利率)作为参考。
- 活动期间的爆款产品的利率不能作为参考。
本文记录笔者参与的某Java服务的JVM启动参数。
从JDk1.4起,可以通过此参数以无外设(显示器、键盘等)模式运行JVM实例。无外设模式下,代码中仅能使用部分GUI组件,比如Canvas类。 当使用了Button和Frame等依赖于显示设备的类时,将会抛出HeadlessException。
当然,在Java服务端开发中,不会用到java.awt.*的类,使用此参数可以防止误拷贝了Java GUI开发的代码所引发的问题。
此参数默认为false,如果操作系统支持IPv6,JVM可以与IPv4及IPv6主机进行socket通信。 设置为true,则告诉JVM仅允许与IPv4主机进行socket通信。
事务是数据库的原子操作,由一个或者一组操作组合而成。事务的重要性不言而喻,本文也无需过多阐述背景,直接进入正题。
在实际的代码中,使用事务通常有以下几种方式:
注解式:如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命令包裹的语句块属于原子操作。
在现代金融活动中,借贷是一种最常见的方式。借贷经过各种包装和杠杆,就形成了各式各样的金融产品。 本文以P2P系统中的等额本息借贷关系为例,讨论如何保证金额在不同流程中计算的准确性。
一般来说,投资人的回款计划,以及借款人的还款计划会在项目成立(也就是满标),放款完成之后生成。 在后续的所有流程中,均不会更改已生成的金额数据,比如在还款成功之后,只会变更计划的状态为已还清。对于本文中可能会出现的名词,现如下定义:
投资人:出钱的人。当借贷关系成立时,为资金流出方,当借贷关系结束时,为资金流入方。
借款人:借钱的人。当借贷关系成立时,为资金流入方,当借贷关系结束时,为资金流出方。
标的:将借款人的需求包装而成的金融产品。
投资:投资成功后,投资人账户金额会被冻结。
放款:当标的成立之后,托管机构将钱从投资人账户转到借款人账户。
还款:借款人将本息通过托管机构还给投资人。
资金端:拥有投资人资源,提供资金来源。
资产端:拥有借款人资源,提供借款需求。