1、你们的运费是怎么计算的?体积和重量怎么计算,到底以哪个为准?
运费计算是通过【首重价格 + 续重 * 续重单价】 计算的。体积和重量是没办法直接比较的,我们会将体积转化成重量,这里要用到轻抛系数,用体积/轻抛系数就可以计算出重量,与实际的重量进行比较,取大值,进行运费计算。
2、详细聊聊你们的运费模板是做什么的?
我所说的运费模板,实际上就是运费规则,我们定义了有同城、省内、经济区互寄、跨省,这四种类型的规则,其中保存了首重、续重、轻抛系数、模板类型、关联城市等字段。
在计算运费时,需要根据收发件人的地址确定使用的模板,再根据模板中具体的值进行运费计算。
3、前面听你提到了责任链模式,能详细聊聊你们是怎么用的吗?为什么要这样用? (项目中有没有用过设计模式?)
我刚刚说的责任链模式是用在运费计算模块中,在运费计算时,首先需要查询运费模板,由于运费模板是有多种类型的,并且它们之间是有优先级的,同城 > 省内 > 经济区互寄 > 跨省,按照优先级选择符合条件的模板即可。
这种场景下就比较适合使用责任链模式来做,如果第一种类型没有找到模板,就第二种类型进行查找,如果依然没有,就第三种.... 依次类推,最后由跨省模板兜底。
4、有没有针对运费计算做什么优化?
有优化的。在之前的实现中,对于运费模板的查询是基于MySQL数据库完成的,这样性能比较差,组长要求我把运费模板存入到Redis中(可以考虑hash类型),查询时优先从Redis中进行查询,如果查询不到再查询数据库,从而提升了性能。