文章目录

  • 活动时长计算尝试用Lambada 实现责任链的代码优化
    • 原流程
    • 原代码
      • 主控流程
      • 计算标准费率时长子过程
        • 电访和面访活动计算标准费率时长
        • 路演活动计算标准费率时长
        • 问卷活动计算标准费率时长
      • 计算结算时长子过程
    • 新流程
    • 新代码
      • 定义活动时长计算上下文类及相关Dto成员类型
        • 活动时长计算上下文类
        • 活动计算时长规则配置Dto
        • 活动计算时长输入数据Dto
        • 活动计算时长输出结果Dto
      • 定义规则存储Map
      • 各子模式的计算规则实现代码
        • 活动计算时长上下文-预处理器
        • 常规的计算标准费率时长方法
        • 计算服务目的处理器
        • 计算调整时长处理器
        • 计算标准费率时长处理器
          • 测试活动计算标准费率时长方法
          • 常规活动计算标准费率时长方法
          • 跟进活动计算标准费率时长方法
          • 客户满意度为满意情况下的计算标准费率时长方法
          • 客户满意度为一般情况下的计算标准费率时长方法
          • 客户满意度为不满意的计算标准费率时长方法
        • 计算结算时长处理器
          • 套餐扣费的计算结算时长的方法
          • 免费的计算结算时长的方法
          • 优惠试用的计算结算时长的方法
          • 后付费的计算结算时长的方法
        • 终结处理器
      • 配置规则代码
      • 主控代码

活动时长计算尝试用Lambada 实现责任链的代码优化

记录下一次尝试用Lambada 来替代责任链模式下的各种接口实现的优化代码的处理。

原流程

原代码

主控流程


public ActivityCalcCustomerCostCheckResult calcCustomerCostCheckResult(ActivityCalcCustomerCostCheckResultDto dto) {ActivityCalcCustomerCostCheckResult result = new ActivityCalcCustomerCostCheckResult();//活动时长Integer activityDuration = dto.getActivityDuration()!=null?dto.getActivityDuration():0;result.setDuration(activityDuration);//调整后的时长Integer adjustedDuration = dto.getAdjustedDuration()!=null?dto.getAdjustedDuration():0;result.setAdjustedDuration(adjustedDuration);//调整的时长result.setAdjustDuration(adjustedDuration-activityDuration);//计费规则result.setType(dto.getChargeTypeEnum().value());//倍率result.setRate(dto.getRate);//标准费率时长Integer standardDuration = calcCustomerCostCheckStandardDuration(dto);result.setStandardDuration(standardDuration);//计算结算时长Integer balanceDuration = standardDuration!=null?calcBalanceDuration(dto.getChargeTypeEnum(),rate,standardDuration):0;//结算时长result.setBalanceDuration(balanceDuration);//满意度result.setSatisfaction(dto.getSatisfaction().value());//报价类型result.setQuoteType(dto.getQuoteType().value());return result;
}

计算标准费率时长子过程

/*** 计算客户费用核对标准时长(分钟)* @param dto* @return java.lang.Integer*/private Integer calcCustomerCostCheckStandardDuration(ActivityCalcCustomerCostCheckResultDto dto) {if (dto.getAdjustedDuration()==null || dto.getAdjustedDuration() <=0){return 0;}if(dto.getServiceType()==null){return null;}switch (dto.getServiceType()){case TELEPHONE_INTERVIEW:case FACE_INTERVIEW:return calcCustomerCostCheckStandardDurationForTelephoneInterviewAndFaceInterview(dto);case ROADSHOW:return calcCustomerCostCheckStandardDurationForRoadshow(dto);case QUESTIONNAIRE:return calcCustomerCostCheckStandardDurationForQuestionnaire(dto);default:return null;}}

电访和面访活动计算标准费率时长

/*** 计算电话访谈和面访活动的客户标准费率结算时长* @param parameter* @return java.lang.Integer*/private Integer calcCustomerCostCheckStandardDurationForTelephoneInterviewAndFaceInterview(ActivityCalcCustomerCostCheckResultDto parameter) {if(parameter.getQuoteType()==null){return null;}int duration = parameter.getAdjustedDuration();switch (parameter.getQuoteType()){case HOUR://按小时if (BooleanUtils.isTrue(parameter.getIfRelationConf())) {//是跟进活动 0<h<=15 -> 15if (duration <= 15) {return 15;}else{// h > 15 -> 按照实际分钟结算return duration;}}else{if(BooleanUtils.isTrue(parameter.getIfTestCall())){//测试活动if(parameter.getTestCallLimitMinute()!=null && duration<=parameter.getTestCallLimitMinute()){// h<=客户测试活动限定时长  -> 0return 0;}// h > 客户测试活动限定时长 ->按常规活动规则计算}//常规活动if (CustomerSatisfactionEnum.NO.equals(parameter.getSatisfaction())) {//客户不满意if (duration < 10L) {// h <10 -> 0return 0;} else if (duration >= 10 && duration <= 30) {// 10<=h <=30 -> 30return 30;} else{// h > 30 -> 按照实际分钟结算return duration;}} else {//客户满意/一般if(duration <= 30){return 30;}else{// h > 30 -> 按照实际分钟结算return duration;}}}case SCENE://按场次 (电话访谈和面访暂不支持按场次计算时长)default:return null;}}

路演活动计算标准费率时长

    /*** 计算路演活动的客户标准费率结算时长* @param parameter* @return java.lang.Integer*/private Integer calcCustomerCostCheckStandardDurationForRoadshow(ActivityCalcCustomerCostCheckResultDto parameter) {return parameter.getAdjustedDuration();}

问卷活动计算标准费率时长

 /*** 计算问卷活动的标准费率时长* @param parameter* @return java.lang.Integer*/private Integer calcCustomerCostCheckStandardDurationForQuestionnaire(ActivityCalcCustomerCostCheckResultDto parameter) {return parameter.getAdjustedDuration();}

计算结算时长子过程

    /*** 计算结算时长* @param chargeTypeEnum* @param rate* @param duration* @return java.lang.Integer*/private Integer calcBalanceDuration(ActivityCustomerChargeTypeEnum chargeTypeEnum,BigDecimal rate,Integer duration){switch (chargeTypeEnum){case PACKAGE_DEDUCTION:return rate.multiply(new BigDecimal(duration)).setScale(0, RoundingMode.CEILING).intValue();case FREE:return 0;case TRIAL:case POST_PAID:return duration;}return duration;}

新流程

新的版本需要调整活动时长计算规则,对于常规的活动标准费率计算增加了起访时长和跳档时长两个参数(其实就是把旧版的默认的这两个值是固定,调整为根据每个客户动态获取的)。并且移除了按场次 还是按时长 这两种报价形式对活动时长计算的影响。

新版本的规则流程图如下:

由于新版本本身就要修改这套活动时长计算代码,因此趁机对这套代码做一次重构优化,优化的思路为:
1、拆分各模式的下具体的计算规则,让各个规则独立。
2、通过用Map组合不同的计算规则
3、通过参数选择Map中不同的规则来计算处理。
4、通过一个活动时长计算上下文来解决参数传递的问题。

新代码

定义活动时长计算上下文类及相关Dto成员类型

活动时长计算上下文类

/*** 活动计算时长上下文* @author 徐明龙 XuMingLong 2022-08-04*/
@Data @AllArgsConstructor @NoArgsConstructor @Builder
public class ActivityCalcDurationContentDto {/*** 活动计算时长规则配置*/private ActivityCalcDurationRuleConfigDto ruleConfig;/*** 活动计算时长输入数据*/private ActivityCalcDurationInputDataDto inputData;/*** 活动计算时长输出结果*/private ActivityCalcDurationOutPutResultDto outPutResult;}

活动计算时长规则配置Dto

/*** 活动计算时长规则配置*/
@Data @AllArgsConstructor @NoArgsConstructor @Builder
public class ActivityCalcDurationRuleConfigDto {/*** 起访时长*/private int durationOfAtLeast;/*** 跳档时长*/private int durationOfEachGrade;/*** 测试活动限定时长*/private Integer durationOfTestCallLimit;}

活动计算时长输入数据Dto

/*** 活动计算时长输入数据*/
@Data @AllArgsConstructor @NoArgsConstructor @Builder
public class ActivityCalcDurationInputDataDto {/*** 活动时长*/private int activityDuration;/*** 调整后的时长*/private int adjustedDuration;/*** 倍率*/private BigDecimal rate;/*** 活动类型*/private ActivityServiceTypeEnum serviceType;/*** 客户满意度*/private CustomerSatisfactionEnum satisfaction;/*** 报价类型*/private CustomerPricingQuoteTypeEnum quoteType;/*** 计费规则*/private ActivityCustomerChargeTypeEnum chargeType;/*** 活动服务目的*/private ActivityServicePurposeEnum servicePurpose;}

活动计算时长输出结果Dto

/*** 活动计算时长输出结果* @author 徐明龙 XuMingLong 2022-08-04*/
@Data
public class ActivityCalcDurationOutPutResultDto {/*** 活动时长*/private Integer activityDuration;/*** 调整后的时长*/private Integer adjustedDuration;/*** 调整的时长*/private Integer adjustDuration;/*** 标准费率时长*/private Integer standardDuration;/*** 结算时长*/private Integer balanceDuration;/*** 倍率*/private BigDecimal rate;/*** 活动类型*/private ActivityServiceTypeEnum serviceType;/*** 客户满意度*/private CustomerSatisfactionEnum satisfaction;/*** 报价类型*/private CustomerPricingQuoteTypeEnum quoteType;/*** 计费规则*/private ActivityCustomerChargeTypeEnum chargeType;/*** 活动服务目的*/private ActivityServicePurposeEnum servicePurpose;}

定义规则存储Map

    /*** 活动类型计算时长责任链Map*/private final static Map<ActivityServiceTypeEnum, List<Function<ActivityCalcDurationContentDto,Boolean>>> calcDurationChainMap = new EnumMap<>(ActivityServiceTypeEnum.class);/*** 活动服务目的标准费率时长计算方法Map*/private final static Map<ActivityServicePurposeEnum, Consumer<ActivityCalcDurationContentDto>> calcStandardDurationFunByServicePurposeMap = new EnumMap<>(ActivityServicePurposeEnum.class);/*** 客户满意度标准费率时长计算方法Map*/private final static Map<CustomerSatisfactionEnum, Consumer<ActivityCalcDurationContentDto>> calcStandardDurationFunBySatisfactionMap = new EnumMap<>(CustomerSatisfactionEnum.class);/*** 活动扣费类型计算结算时长的方法Map*/private final static Map<ActivityCustomerChargeTypeEnum,Consumer<ActivityCalcDurationContentDto>> calcBalanceDurationFunMap = new EnumMap<>(ActivityCustomerChargeTypeEnum.class);

各子模式的计算规则实现代码

活动计算时长上下文-预处理器

   /*** 预处理处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> preHandler = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();ActivityCalcDurationOutPutResultDto outPutResult = new ActivityCalcDurationOutPutResultDto();outPutResult.setActivityDuration(inputData.getActivityDuration());outPutResult.setAdjustedDuration(inputData.getAdjustedDuration());outPutResult.setAdjustDuration(0);outPutResult.setStandardDuration(0);outPutResult.setBalanceDuration(0);outPutResult.setRate(inputData.getRate());outPutResult.setServiceType(inputData.getServiceType());outPutResult.setSatisfaction(inputData.getSatisfaction());outPutResult.setQuoteType(inputData.getQuoteType());outPutResult.setChargeType(inputData.getChargeType());outPutResult.setServicePurpose(inputData.getServicePurpose());contentDto.setOutPutResult(outPutResult);return true;};

常规的计算标准费率时长方法

   /*** 常规的计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> normalCalcStandardDurationFun= (contentDto)->{//获取计算规则配置ActivityCalcDurationRuleConfigDto ruleConfig = contentDto.getRuleConfig();//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();if(inputData.getAdjustedDuration() <=0){//调整后的时长小于等于0,则标准费率时长也为0contentDto.getOutPutResult().setStandardDuration(0);}else if(inputData.getAdjustedDuration() <= ruleConfig.getDurationOfAtLeast()){//调整后的时长<= 起访时长,标准费率时长 = 起访时长contentDto.getOutPutResult().setStandardDuration(ruleConfig.getDurationOfAtLeast());}else{//否则标准费率时长= 起访时长+ceil((调整后的时长-起访时长)/跳档时长)*跳档时长// 计算超过起访时长部分的时长int exceedDuration = inputData.getAdjustedDuration()-ruleConfig.getDurationOfAtLeast();//计算最终跳档时长exceedDuration = (int)Math.ceil(exceedDuration*1.0/ruleConfig.getDurationOfEachGrade())*ruleConfig.getDurationOfEachGrade();//计算标准费率时长contentDto.getOutPutResult().setStandardDuration(ruleConfig.getDurationOfAtLeast() + exceedDuration);}};

计算服务目的处理器

    /*** 计算服务目的处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> calcServicePurposeHandler = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();if(inputData.getServicePurpose() == ActivityServicePurposeEnum.TEST){//获取规则配置ActivityCalcDurationRuleConfigDto ruleConfig = contentDto.getRuleConfig();//没有测试活动时长限制的配置,则测试活动自动转换为常规活动if(ruleConfig.getDurationOfTestCallLimit() == null ){inputData.setServicePurpose(ActivityServicePurposeEnum.CONVENTION);contentDto.getOutPutResult().setServicePurpose(inputData.getServicePurpose());return true;}//调整后的时长 > 客户测试活动限定时长,则转变为常规活动if(inputData.getAdjustedDuration() > ruleConfig.getDurationOfTestCallLimit()){inputData.setServicePurpose(ActivityServicePurposeEnum.CONVENTION);contentDto.getOutPutResult().setServicePurpose(inputData.getServicePurpose());return true;}}return true;};

计算调整时长处理器

    /*** 计算调整时长处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> calcAdjustDurationHandler = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();//调整时长 = 调整后的时长 - 活动时长contentDto.getOutPutResult().setAdjustDuration(inputData.getAdjustedDuration()-inputData.getActivityDuration());return true;};

计算标准费率时长处理器

    /*** 计算标准费率时长处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> calcStandardDurationHandler = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();//执行活动服务目的对应的处理方法calcStandardDurationFunByServicePurposeMap.get(inputData.getServicePurpose()).accept(contentDto);return true;};
测试活动计算标准费率时长方法
    /*** 测试活动计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunForTest = (contentDto)->{//测试活动的标准费率时长为0contentDto.getOutPutResult().setStandardDuration(0);};
常规活动计算标准费率时长方法
    /*** 常规活动计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunForConvention = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();//执行活动客户满意度对应的处理方法calcStandardDurationFunBySatisfactionMap.get(inputData.getSatisfaction()).accept(contentDto);};
跟进活动计算标准费率时长方法
    /*** 跟进活动计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunForRelation = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();if(inputData.getAdjustedDuration() <=0){//调整后的时长小于等于0,则标准费率时长也为 0contentDto.getOutPutResult().setStandardDuration(0);}else if(inputData.getAdjustedDuration() < 15){//调整后的时长小于15分钟,则标准费率时长= 15contentDto.getOutPutResult().setStandardDuration(15);}else{contentDto.getOutPutResult().setStandardDuration(inputData.getAdjustedDuration());}};
客户满意度为满意情况下的计算标准费率时长方法
    /*** 客户满意度为满意情况下的计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunWhenSatisfactionYes = (contentDto)->{//正常的标准费率时长计算处理normalCalcStandardDurationFun.accept(contentDto);};
客户满意度为一般情况下的计算标准费率时长方法
    /*** 客户满意度为一般情况下的计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunWhenSatisfactionCommon = (contentDto)->{//正常的标准费率时长计算处理normalCalcStandardDurationFun.accept(contentDto);};
客户满意度为不满意的计算标准费率时长方法
    /*** 客户满意度为不满意的计算标准费率时长方法*/private final static Consumer<ActivityCalcDurationContentDto> calcStandardDurationFunWhenSatisfactionNo = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();if(inputData.getAdjustedDuration() <=0){//调整后的时长小于等于0,则标准费率时长也为0contentDto.getOutPutResult().setStandardDuration(0);}else if(inputData.getAdjustedDuration() < 10){//调整后的时长 < 10 ,标准费率时长 = 0contentDto.getOutPutResult().setStandardDuration(0);}else {//正常的标准费率时长计算处理normalCalcStandardDurationFun.accept(contentDto);}};

计算结算时长处理器

    /*** 计算结算时长处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> calcBalanceDurationHandler = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();//执行活动扣费类型的对应的处理方法calcBalanceDurationFunMap.get(inputData.getChargeType()).accept(contentDto);return true;};
套餐扣费的计算结算时长的方法
    /*** 套餐扣费的计算结算时长的方法*/private final static Consumer<ActivityCalcDurationContentDto> calcBalanceDurationFunByPackageDeduction = (contentDto)->{//获取输入参数ActivityCalcDurationInputDataDto inputData = contentDto.getInputData();//获取输出结果ActivityCalcDurationOutPutResultDto outPutResult = contentDto.getOutPutResult();if(outPutResult.getStandardDuration() == 0 ){outPutResult.setBalanceDuration(0);}else{//结算时长 = ceil(报价倍率 * 标准倍率时长)outPutResult.setBalanceDuration(inputData.getRate().multiply(new BigDecimal(outPutResult.getStandardDuration())).setScale(0, RoundingMode.CEILING).intValue());}};
免费的计算结算时长的方法
    /*** 免费的计算结算时长的方法*/private final static Consumer<ActivityCalcDurationContentDto> calcBalanceDurationFunByFree = (contentDto)->{//免费的结算时长为0contentDto.getOutPutResult().setBalanceDuration(0);};
优惠试用的计算结算时长的方法
    /*** 优惠试用的计算结算时长的方法*/private final static Consumer<ActivityCalcDurationContentDto> calcBalanceDurationFunByTrial = (contentDto)->{//获取输出结果ActivityCalcDurationOutPutResultDto outPutResult = contentDto.getOutPutResult();//优惠的结算时长 = 标准费率时长outPutResult.setBalanceDuration(outPutResult.getStandardDuration());};
后付费的计算结算时长的方法
    /*** 后付费的计算结算时长的方法*/private final static Consumer<ActivityCalcDurationContentDto> calcBalanceDurationFunByPostPaid = (contentDto)->{//获取输出结果ActivityCalcDurationOutPutResultDto outPutResult = contentDto.getOutPutResult();//后付费的结算时长 = 标准费率时长outPutResult.setBalanceDuration(outPutResult.getStandardDuration());};

终结处理器

目前不需要对上下文做额外的处理,保留这个是为了方便后续扩展

    /*** 终结处理器*/private final static Function<ActivityCalcDurationContentDto,Boolean> finisherHandler = (contentDto)->{return true;};

配置规则代码

目前所有类型的活动都可以使用同一套的规则配置,以后如果业务规则修改,也可以不同的活动类型使用不同的配置。

static{//配置客户满意度活动标准费率计算方法calcStandardDurationFunBySatisfactionMap.put(CustomerSatisfactionEnum.YES,calcStandardDurationFunWhenSatisfactionYes);calcStandardDurationFunBySatisfactionMap.put(CustomerSatisfactionEnum.COMMON,calcStandardDurationFunWhenSatisfactionCommon);calcStandardDurationFunBySatisfactionMap.put(CustomerSatisfactionEnum.NO,calcStandardDurationFunWhenSatisfactionNo);//配置服务目的计算方法MapcalcStandardDurationFunByServicePurposeMap.put(ActivityServicePurposeEnum.CONVENTION,calcStandardDurationFunForConvention);calcStandardDurationFunByServicePurposeMap.put(ActivityServicePurposeEnum.TEST,calcStandardDurationFunForTest);calcStandardDurationFunByServicePurposeMap.put(ActivityServicePurposeEnum.RELATION,calcStandardDurationFunForRelation);//配置活动扣费类型的计算方法MapcalcBalanceDurationFunMap.put(ActivityCustomerChargeTypeEnum.PACKAGE_DEDUCTION,calcBalanceDurationFunByPackageDeduction);calcBalanceDurationFunMap.put(ActivityCustomerChargeTypeEnum.FREE,calcBalanceDurationFunByFree);calcBalanceDurationFunMap.put(ActivityCustomerChargeTypeEnum.TRIAL,calcBalanceDurationFunByTrial);calcBalanceDurationFunMap.put(ActivityCustomerChargeTypeEnum.POST_PAID,calcBalanceDurationFunByPostPaid);//配置活动的计算规则责任链List<Function<ActivityCalcDurationContentDto,Boolean>> calcDurationChain = List.of(//预处理preHandler,//计算服务目的处理器calcServicePurposeHandler,//计算调整的时长处理器calcAdjustDurationHandler,//计算标准费率时长处理器calcStandardDurationHandler,//计算结算时长处理器calcBalanceDurationHandler,//终结处理器finisherHandler);//配置电话访谈活动的计算时长的责任链calcDurationChainMap.put(ActivityServiceTypeEnum.TELEPHONE_INTERVIEW, calcDurationChain);//配置面访活动的计算时长的责任链calcDurationChainMap.put(ActivityServiceTypeEnum.FACE_INTERVIEW, calcDurationChain);//配置路演活动的计算时长的责任链calcDurationChainMap.put(ActivityServiceTypeEnum.ROADSHOW, calcDurationChain);//配置问卷活动的计算时长的责任链calcDurationChainMap.put(ActivityServiceTypeEnum.QUESTIONNAIRE, calcDurationChain);}

主控代码

    /*** 计算时长* @param contentDto* @return void*/public static void calcDuration(ActivityCalcDurationContentDto contentDto){//获取责任链List<Function<ActivityCalcDurationContentDto,Boolean>> handlerChain =calcDurationChainMap.get(contentDto.getInputData().getServiceType());for(Function<ActivityCalcDurationContentDto,Boolean> handler:handlerChain){boolean executeNext = handler.apply(contentDto);if(!executeNext){break;}}}

活动时长计算尝试用Lambada 实现责任链的代码优化相关推荐

  1. 请假时长计算和每月工作天数计算

    绪论 请假时长计算和每月工作天数计算其实六月份开发OA系统时就已经写出来了,只是一直没时间去整理,其实最近也很忙,毕竟年底要清一些开发任务.不过感觉自己今年博客写的太少了,所以这些日子基本每天都在加班 ...

  2. Java 游泳时长计算

    题目描述 小鱼给自已的游泳时间做了精确的计时(24小时制),它发现自己从a时b分一直游泳到当天的c时d分,编写程序,请你帮小鱼计算一下,它这天一共游了几小时几分钟? 输入描述 四个整数分别表示a,b, ...

  3. 日出日落时间和年均光照时长计算 java

    至入行多年仍是新手的我 文章目录 前言 一.天文知识 1.太阳高度角 2.太阳方位角 3.赤纬角 4.时角 二.计算方法 1.核心计算公式 2.日出日落时间 3.年均光照时长 1.建筑物实体类 3.工 ...

  4. Java 视频时长计算

    计算某个文件夹下面所有wmv视频的总时长: String path = "F:\\BaiduNetdiskDownload\\Python\\尚硅谷Python项目之谷粒教育\\视频&quo ...

  5. 基于keras的mnist训练-训练时长计算、loss-acc图形绘制和模型保存加载

    代码注释 loss_acc.py # -*- coding: utf-8 -*-# 加载keras模块 from __future__ import print_function import num ...

  6. JS实现请假时长计算(计算小时数差)

    给公司做了一套系统,涉及到请假单功能开发.在计算请假时长这块总结一下:按天计算的就不总结了比较简单,这里总结一下按小时数计算的 ,话不多说,直接上代码 // 获取两个日期相差的工作小时(不包括节假日) ...

  7. 腾讯云服务器CVM标准型S5实例五年活动时长来了请把握!

    腾讯云服务器CVM五年时长,2核2G服务器5年1728元.2核4G1M带宽五年3550.4核8G服务器6437元五年,CVM标准型S5实例可选2核2G.2核4G和4核8M,公网带宽可1M.3M和5M, ...

  8. 服务器平均响应时长计算,并发数 = QPS*平均响应时间

    每秒查询率QPS:对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒请求数,即最大谈吐能力. 并发数:并发数和QPS是不一样的概念,通常说QPS会说多少并发用户下QPS,当QPS相同时 ...

  9. AAC音频文件时长计算

    https://blog.csdn.net/muclenerd/article/details/52944438

最新文章

  1. python实现卡方(Chi-Squared Test)相关性检验
  2. RuntimeError at /admin 解决办法(亲测)
  3. unable to execute dex: multiple dex files Cocos2dxAccelerometer
  4. 支持nvme的linux_Linux nvme驱动初探
  5. Java学习笔记1.1.2 搭建Java开发环境 - 安装配置JDK
  6. 机器学习--LR逻辑回归与损失函数理解
  7. bcd 初始化库系统卷失败_开源IP地址管理系统,告别传统IP统计方式(安装部署篇)
  8. python下载pip包_python之路-离线pip下载Python包
  9. Linux驱动开发(九)---树莓派I2C设备驱动开发(BME280)
  10. 小猿日记 - 程序猿的日常日记(2)
  11. Educoder Python顺序结构习题
  12. 用Python下载学习通课程首页的资料
  13. 第六章 北京奥林匹克公园三维场景网络发布应用
  14. python实现简单图书管理系统
  15. Add Python Interpreter 报错 Error code:2. XX can‘t open file XX [Errno 2] No such file or directory
  16. 万字阐述智能驾驶汽车安全体系
  17. 量化分析之(四)股票暴涨行情不错过之买持股基金
  18. 钉钉撤回的信息服务器内能否看到,在钉钉群中撤回消息别人能看到“你撒回了一条消息”的文字吗?...
  19. 转录组数据分析(2)——基因组比对STAR
  20. openstack部署及使用过程中遇到的问题汇总

热门文章

  1. run vue task的项目报错:Error while running task C:\IT\xxxxxx:serve with message‘spawn vue-cli-service
  2. D3D11的颜色处理
  3. LAMP--系统、平台、数据库和程序
  4. k8s(八)—调度因素(nodeName、nodeSelector、亲和与反亲和、Taints 污点)、影响pod调度的指令
  5. 概率论-事件的概率--公理化定义(统计、古典、几何)
  6. css自适应图片样式,css怎么让图片自适应?css图片自适应大小的方法介绍
  7. html的img标签repeat,border-image-repeat属性怎么用
  8. iOS LeetCode ☞ Fizz Buzz
  9. df命令和du命令-个人
  10. 多线程—如何下载网图