9月项目小收获文本记录—fiting

将数字转换为中文
  • 最近开发过程中,有一个需求是:在展示课程列表的时候,根据序列号,展示文案为:第一期这种类似效果。PS:其实一直在想为啥不直接展示为:第1期这种的,感觉没啥区别。呵呵,产品视角理解不了。
  • 在代码的执行过程中,最开始是出现了:10->一十零;1001->一千零零一;11->十等等类似效果。经调试最终代码为:(PS,仅做记录+支持亿级)
  • 在开发一个算法过程中,开发人员应该做到最基本的常规自测+极端数据自测
  /**
     * 将数字转换为中文数字
     *
     * @param num 数字
     * @return 汉字
     */
    public static String toChinese(int num){
        String[] s1 = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        String[] s2 = {"十", "百", "千", "万", "十万", "百万", "千万", "亿"};

        String source=String.valueOf(num);
        //处理以0开头的数据
        source = source.replaceFirst("^0*", "");

        StringBuilder builder=new StringBuilder();
        char[] chars=source.toCharArray();
        int n=chars.length;
        if(n==1){
            return s1[Integer.valueOf(source)];
        }

        for (int i=0;i<n;i++) {
            int strNum=chars[i]-'0';
            if (i != n-1 && strNum != 0) {
                builder.append(s1[strNum]).append(s2[n-2-i]);
            }else{
                // 最后一个为0
                if(i==n-1 && strNum==0){
                    break;
                }

                //处理连续数字
                if(chars[i]!=chars[i-1] || (chars[i]==chars[i-1] & strNum!=0)){
                    builder.append(s1[strNum]);
                }

            }
        }
        String replaceStr="一十";
        String result=builder.toString();
        if(result.indexOf(replaceStr)==0){
            result=result.replaceFirst(replaceStr,"十");
        }
        if(result.endsWith(s1[0])){
            result=result.substring(0,result.length()-1);
        }
        return result;
    }
消息发送顺序
  • 在我们的课程业务中,有一个逻辑是佛系打卡分享,也就是说选择完成学习,后台记录打卡操作,并同时派发奖励和组装分享数据返回给客户端;并且,同步排行榜数据。
  • 为了响应速度,以及服务目前的划分,同步排行榜数据,是以发送消息再消费的形式,写入缓存的。
  • 问题:在假期中,由于某个数据配置,导致此流程异常进行事务回滚,然而消息发送出去被正常消费,Redis数据和数据库中发生严重不一致。而且由于用户重试,Redis的排行榜数据,被更新了不止一次,而数据库中查不到对应的记录。
  • 解决办法:1,消息事务化处理(消息事务我们好像有,不过没用过,而且如果是事务,感觉对于响应速度来讲又慢了,此接由于用户多,属于高频访问接口);2,我把发消息的方法,挪到了此方法的的最后一步。基本思路是:如果能执行到最后一步,说明主流程基本无误,事务基本上不发生回滚操作,这个时候,就算低概率的消息消费失败,也可以从数据库中查询数据进行补偿。
成长
  • 最近一段时间,好像都没有大的技术上的挑战了,如果有,也就是上个直播项目,处理了并发操作,进行压测,然后不断地调整。不过,收获还是有很多,因为不停的在维护优化线上服务,优化用户反馈的内容。对于产品的理解,用户的需求更为深刻。
  • 再记录一个自己感觉成长了一些的案例:假前突然有很多用户反馈课程无法正常打开上课,麻蛋,用户比较多,很紧张。上一次发生这种大规模事件的时候,应该是2年前左右在长城汽车,电话都要被经销商打爆了。整个人很紧张,慌到不知所措,看着组长在改东西处理订单调剂异常。这一次,我抗住了,首先是没有慌,然后因为自己平时也会看整个服务,其他服务的代码,查看APP主要业务流程线的调用关系和代码逻辑,对于每个页面的数据来源和业务处理的熟悉程度都比较深刻,最后,再不到2分钟的时间内,把问题解决了。PS:今年写年终,然后一定要犒劳自己一下。

猜你喜欢

转载自blog.csdn.net/u013034889/article/details/102389255