工作中小细节总结(一)

1. 代码的规范性
   代码顺序

   一般思路是  1:参数声明/获取  2:调用service层获取要取的数据  3:放数据 4:跳转页面

2. 事务的开启  提交  回滚
    1.该使用的地方,未使用事务
    2.没有事务但异常中有事务回滚
    3.事务提交的位置发在发报(耗时操作)前
    4.有事务的操作一般异常是首先进行回滚,再记录日志,再抛异常。

3.  但任何技术或者事物都有其适用的场景,如果用在了不合适的场景下,我们就不得不为滥用而付出相应的代价。
    所以每种技术我们得了解它的作用和作用域 以及针对的方向

4.  Ioc  setter方法注入

5.  hrmp 系统架构
    1) hrmp系统首先是SzbocFilter的防重检查
    2) hrmp框架的编码过滤 utf-8
    3) CMS登录过滤  是否有transID
    4) session监听器实现HttpSessionListener接口 用于clear时移除所有session session销毁时更新用户状态
    5) 添加excel下载sevlet  主要操作验证transid正确时

6.  登出时 将windows.onunload方法覆盖 (为提供更好的用户体验 通常也会覆盖onbeforeunload方法)
    function closeUnload()
    {
        //强行退出系统
        if(!inLogout)
        {
            var url = "<%=request.getContextPath()%>/logout.do?";
            var ajaxRequest = new AjaxRequest(url); //afterAjax为调用成功后的回调函数,如果没有,可传入null
            ajaxRequest.appendValue('userUID','<%=userUID%>');
            //jQuery.blockUI();
            ajaxRequest.postAjax();


            //postData("<%=request.getContextPath()%>/logout.do?method=logout&userUID=<%=userUID%>", "", "txt");
        }
    }
    window.onunload = closeUnload;


    function beforeCloseUnload()
    {
        if(!inLogout)
        {
            window.event.returnValue = '你正试图离开<bean:message key="global.sysname"/>';
        }
    }
    window.onbeforeunload = beforeCloseUnload;

7.  字符串常量 在类中定义为static final 类型 调用时使用 类名.参数名

8.  js 奇偶行使用不同的样式 even:偶数的元素 从0开始
                            odd:  奇数的元素
    $("#tbody1 td:even").addClass("bluebg").attr("width","20%").attr("align","center").attr("height","23");
    $("#tbody1 td:odd").addClass("whitebg").attr("width","30%").attr("align","left").attr("height","23");

9.  siblings

   取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合。可以用可选的表达式进行筛选。

10. //计算字符串的正真长度(数字、英文字母长度为1,中文字符长度为2)
    function trueLength(strValue)
    {
        var j = 0;
        for (var i = 0; i< strValue.length; i++)
        {
            if (strValue.charCodeAt(i) > 127 || strValue.charCodeAt(i) == 94)
                j = j + 2;
            else
                j = j + 1;
        }
        return (j);
    }

11. //注册时,实时显示输入文字数
    jQuery.fn.extend({
        // 注册执行方法-实时显示文本框中文字字数,文本框中必须包含属性maxLength,文本框后必须有span
        showNowLength:function(){
            $(this).keyup(function(){
                var nowLength = trueLength($(this).val());
                var maxLength = $(this).attr('maxLength');
                $(this).siblings('span').html('&nbsp;&nbsp;'+nowLength+'/'+maxLength+'字');
            });
        }
    });

12. table 中的 <td colspan=""></td>  合并的单元格数目

13. 上传照片
    jsp页面:<script language="JavaScript" src="<%=path%>/zh_cn/js/hrmp_picture.js"></script>


            $(function(){ // wait for document to load
                //照片预览
                $("#formFile").uploadPreview({ height: 159,width:120 });


            });


            <html:form action="/empcard/add.do?method=add&transID=03-18-01" οnsubmit="return check();" enctype="multipart/form-data">
                <tr>
                    <td >上传照片&nbsp;<span class="red">*</span></td>
                    <td colspan="3" >
                        <input name="formFile" type="file" id="formFile" size="40"/>
                    </td>
                </tr>
            </html:form>


    Action: Hashtable files = myForm.getMultipartRequestHandler().getFileElements(); // 获取文件


            service.mInsert(bean, loginBean, files, type);


    Service:// 上传照片
            upload(files, bean.getSeqNo(), true);


            /**
             * 上传图片
             *
             * @param files
             * @param fileName 图片名 不带后缀
             * @param check 图片为空时是否校验
             * @throws Exception
             */
            private void upload(Hashtable files, String fileName, boolean check) throws Exception
            {
                if (Check.isEmpty(files))
                {
                    throw new Exception("没有要上传的图片!");
                }
                // 获取上传照片文件
                FormFile file = FileUtil.returnFile(files, "formFile");
                if (file != null)
                {
                    // 上传图片
                    ImageUtil.upload(file, PATH_PHOTO, fileName, PersonService.IMAGE_WIDTH, PersonService.IMAGE_HEIGHT);
                }
                else
                {
                    if (check)
                    {
                        throw new Exception("文件为空!");
                    }
                }
            }


    注意事项:1.jsp页面的Form元素中必须有 enctype="multipart/form-data" 属性

14. 全选
    // 全选/全不选
    function selectAll(flag)
    {
        var boxs = document.getElementsByName('gaCheckBox');
        for(var i = 0; i < boxs.length; i++)
        {
            if( boxs[i].disabled == '') // 只选择自己需要的
            {
                boxs[i].checked = flag;
            }
        }
    }

15. 枚举类型needCreateCost的select使用
    jsp页面:
    <td >是否需制证费用&nbsp;<span class="red">*</span></td>
    <td >
        <html:select styleId="needCreateCost" property="needCreateCost" name="empCard">
            <html:option value="">--请选择--</html:option>
            <logic:present name="needCreateCosts">
                <c:forEach items="${needCreateCosts}" var="needCreateCost">
                    <html:option value="${needCreateCost}">
                    ${needCreateCost.desc}
                    </html:option>
                </c:forEach>
            </logic:present>
        </html:select>
    </td>


    Action:request.setAttribute("needCreateCosts", NeedCreateCost.values());


    枚举类needCreateCost.java
    public enum NeedCreateCost
    {


        @Description("是")
        Y,


        @Description("否")
        N;


        /**
         * 获取描述性内容
         */
        public String getDesc()
        {
            Class<?> clazz = this.getClass();
            Field filed = null;
            try
            {
                filed = clazz.getField(this.name());
            }
            catch (Exception e)
            {
            }
            Description description = filed.getAnnotation(Description.class);
            if (description == null)
            {
                return null;
            }
            else
            {
                return description.value();
            }
        }


        public String getName()
        {
            return this.name();
        }


    }

16. servlet的强项在于无缝地衔接业务对象和web层对象之间的调用,以及二进制显示内容的输出等。

17. Jsp与其他模块技术有一个主要区别,那就是,它最终是编译为Servlet来运行的。

18. web框架存在的意义在于,它们为web应用程序的开发提供了一套可复用的基础设施,这样开发人员
只需关注特定于每个应用的逻辑开发工作,而不需要每次都重复那些可以统一处理的通用逻辑。

19. netstat -ano 查看占用端口的进程 获得pid   使用任务管理器关闭占用的进程

20. --'有则更新,无则新增'
  MERGE INTO TD_CTIS_DZD T
  USING TD_CTIS_DZD_TMP T1
  ON (T.TRAN_JRNL_NO = T1.TRAN_JRNL_NO and T.TRAN_DATE = T1.TRAN_DATE)
  WHEN MATCHED THEN
    UPDATE
       SET T.APPG_MODE           = T1.APPG_MODE,
           T.APPG_DATE           = T1.APPG_DATE,
           T.TRAN_CODE           = T1.TRAN_CODE,
           T.BANCS_NO            = T1.BANCS_NO,
           T.RGNBNK              = T1.RGNBNK,
           T.TRAN_CUSM_NO        = T1.TRAN_CUSM_NO,
           --T.TRAN_DATE           = T1.TRAN_DATE,
           T.INCT_REC_NO         = T1.INCT_REC_NO,
           T.REC_NO              = T1.REC_NO,
           T.PROV_BR_NO          = T1.PROV_BR_NO,
           T.ACT_NO              = T1.ACT_NO,
           T.TRAN_ACCT_TYPE      = T1.TRAN_ACCT_TYPE,
           T.TRAN_VOLUME_NO      = T1.TRAN_VOLUME_NO,
           T.TRAN_SEQ_NO         = T1.TRAN_SEQ_NO,
           --T.TRAN_JRNL_NO        = T1.TRAN_JRNL_NO,
           T.UUID                = T1.UUID,
           T.PROSUP_TYPE         = T1.PROSUP_TYPE,
           T.PROSUB_TYPE         = T1.PROSUB_TYPE,
           T.PRO_MSG             = T1.PRO_MSG,
           T.CONTRACT_NO         = T1.CONTRACT_NO,
           T.ACT_FLAG            = T1.ACT_FLAG,
           T.CUSM_SORT           = T1.CUSM_SORT,
           T.ACT_TYPE            = T1.ACT_TYPE,
           T.CARD_NO             = T1.CARD_NO,
           T.TRAN_PROPERTY       = T1.TRAN_PROPERTY,
           T.TRAN_FLAG           = T1.TRAN_FLAG,
           T.TRAN_TYPE           = T1.TRAN_TYPE,
           T.TRAN_MSG            = T1.TRAN_MSG,
           T.TRAN_TIME           = T1.TRAN_TIME,
           T.TRAN_TELLER         = T1.TRAN_TELLER,
           T.TRAN_BRCH_NO        = T1.TRAN_BRCH_NO,
           T.TRAN_BRCH_NAME      = T1.TRAN_BRCH_NAME,
           T.INT_FRM_DT          = T1.INT_FRM_DT,
           T.BATCH_TYPE          = T1.BATCH_TYPE,
           T.INCT_TRN_CODE       = T1.INCT_TRN_CODE,
           T.INCT_ORIG_TRN_CODE  = T1.INCT_ORIG_TRN_CODE,
           T.INCT_BATCH_NO       = T1.INCT_BATCH_NO,
           T.PROMPT_MSG          = T1.PROMPT_MSG,
           T.SYS_CODE            = T1.SYS_CODE,
           T.ORIG_DATE           = T1.ORIG_DATE,
           T.ORIG_JRNL           = T1.ORIG_JRNL,
           T.TRAN_CURR           = T1.TRAN_CURR,
           T.TRAN_CURE_EN        = T1.TRAN_CURE_EN,
           T.CURR_RATE           = T1.CURR_RATE,
           T.CR_DR_IND           = T1.CR_DR_IND,
           T.REVERSAL_CODE       = T1.REVERSAL_CODE,
           T.TRAN_AMOUNT         = T1.TRAN_AMOUNT,
           T.ACCT_BALANCE        = T1.ACCT_BALANCE,
           T.ACCT_AVAIL_BALANCE  = T1.ACCT_AVAIL_BALANCE,
           T.HOLD_AMOUNT         = T1.HOLD_AMOUNT,
           T.OD_LIM_AMOUNT       = T1.OD_LIM_AMOUNT,
           T.OD_AVAIL_AMOUNT     = T1.OD_AVAIL_AMOUNT,
           T.DISCOUNT_AMOUNT     = T1.DISCOUNT_AMOUNT,
           T.NOL_PAL_AMOUNT      = T1.NOL_PAL_AMOUNT,
           T.ODE_PAL_AMOUNT      = T1.ODE_PAL_AMOUNT,
           T.OWE_EST_AMOUNT      = T1.OWE_EST_AMOUNT,
           T.PRINCIPAL_AMOUNT    = T1.PRINCIPAL_AMOUNT,
           T.INTEREST_AMOUNT     = T1.INTEREST_AMOUNT,
           T.ODE_PAL_PENALTY     = T1.ODE_PAL_PENALTY,
           T.ODE_EST_PENALTY     = T1.ODE_EST_PENALTY,
           T.IMPO_PENALTY        = T1.IMPO_PENALTY,
           T.REMBAK              = T1.REMBAK,
           T.USAGE_NAME          = T1.USAGE_NAME,
           T.TRAN_PS             = T1.TRAN_PS,
           T.SUMMARY             = T1.SUMMARY,
           T.REMIT_TYPE          = T1.REMIT_TYPE,
           T.REMIT_TYPE_NAME     = T1.REMIT_TYPE_NAME,
           T.PAY_NAME            = T1.PAY_NAME,
           T.PAY_CARD_NO         = T1.PAY_CARD_NO,
           T.PAY_ACCT_NO         = T1.PAY_ACCT_NO,
           T.PAY_ACCT_TYPE       = T1.PAY_ACCT_TYPE,
           T.PAY_VOLUME_NO       = T1.PAY_VOLUME_NO,
           T.PAY_SEQ_NO          = T1.PAY_SEQ_NO,
           T.PAY_BR_NAME         = T1.PAY_BR_NAME,
           T.PAY_BRCH_NO         = T1.PAY_BRCH_NO,
           T.PAY_AREANO          = T1.PAY_AREANO,
           T.REL_PAY_NAME        = T1.REL_PAY_NAME,
           T.REL_PAY_CARD_NO     = T1.REL_PAY_CARD_NO,
           T.REL_PAY_ACCT_NO     = T1.REL_PAY_ACCT_NO,
           T.REL_PAY_ACCT_TYPE   = T1.REL_PAY_ACCT_TYPE,
           T.REL_PAY_VOLUME_NO   = T1.REL_PAY_VOLUME_NO,
           T.REL_PAY_SEQ_NO      = T1.REL_PAY_SEQ_NO,
           T.REL_PAY_BR_NAME     = T1.REL_PAY_BR_NAME,
           T.REL_PAY_BRCH_NO     = T1.REL_PAY_BRCH_NO,
           T.REL_PAY_AREANO      = T1.REL_PAY_AREANO,
           T.PAYEE_NAME          = T1.PAYEE_NAME,
           T.PAYEE_CARD_NO       = T1.PAYEE_CARD_NO,
           T.PAYEE_ACCT_NO       = T1.PAYEE_ACCT_NO,
           T.PAYEE_ACCT_TYPE     = T1.PAYEE_ACCT_TYPE,
           T.PAYEE_VOLUME_NO     = T1.PAYEE_VOLUME_NO,
           T.PAYEE_SEQ_NO        = T1.PAYEE_SEQ_NO,
           T.PAYEE_BR_NAME       = T1.PAYEE_BR_NAME,
           T.PAYEE_BRCH_NO       = T1.PAYEE_BRCH_NO,
           T.PAYEE_AREANO        = T1.PAYEE_AREANO,
           T.REL_PAYEE_NAME      = T1.REL_PAYEE_NAME,
           T.REL_PAYEE_CARD_NO   = T1.REL_PAYEE_CARD_NO,
           T.REL_PAYEE_ACCT_NO   = T1.REL_PAYEE_ACCT_NO,
           T.REL_PAYEE_ACCT_TYPE = T1.REL_PAYEE_ACCT_TYPE,
           T.REL_PAYEE_VOLUME_NO = T1.REL_PAYEE_VOLUME_NO,
           T.REL_PAYEE_SEQ_NO    = T1.REL_PAYEE_SEQ_NO,
           T.REL_PAYEE_BR_NAME   = T1.REL_PAYEE_BR_NAME,
           T.REL_PAYEE_BRCH_NO   = T1.REL_PAYEE_BRCH_NO,
           T.REL_PAYEE_AREANO    = T1.REL_PAYEE_AREANO,
           T.CHQ_TYPE            = T1.CHQ_TYPE,
           T.CHQ_MSG             = T1.CHQ_MSG,
           T.CHQ_NO              = T1.CHQ_NO,
           T.CRT_CHQ_TYPE        = T1.CRT_CHQ_TYPE,
           T.CRT_CHQ_MSG         = T1.CRT_CHQ_MSG,
           T.CRT_CHQ_NO          = T1.CRT_CHQ_NO,
           T.FEE_ACCT_NO         = T1.FEE_ACCT_NO,
           T.FEE_ACCT_TYPE       = T1.FEE_ACCT_TYPE,
           T.FEE_COUNT           = T1.FEE_COUNT,
           T.CHARGE_AMT          = T1.CHARGE_AMT,
           T.REBATE_AMT          = T1.REBATE_AMT,
           T.PAY_ADD_TEL         = T1.PAY_ADD_TEL,
           T.PAYEE_ADD_TEL       = T1.PAYEE_ADD_TEL,
           T.BUSINESS_NO         = T1.BUSINESS_NO,
           T.OTH_BUSINESS_NO     = T1.OTH_BUSINESS_NO,
           T.REMIT_NO            = T1.REMIT_NO,
           T.TOBREF              = T1.TOBREF,
           T.CUSSEQ              = T1.CUSSEQ,
           T.TRCNUM              = T1.TRCNUM,
           T.SYS_NAME            = T1.SYS_NAME,
           T.IBKNUM              = T1.IBKNUM,
           T.TXDATE              = T1.TXDATE,
           T.ORGIDT              = T1.ORGIDT,
           T.TRNFLC              = T1.TRNFLC,
           T.GATHTYP             = T1.GATHTYP,
           T.TRANSIDE_TYPE       = T1.TRANSIDE_TYPE,
           T.RELAKE              = T1.RELAKE,
           T.GCMS_TRIGGER_ACCT   = T1.GCMS_TRIGGER_ACCT,
           T.GCMS_TRIGGER_AREANO = T1.GCMS_TRIGGER_AREANO,
           T.TRAN_ORD            = T1.TRAN_ORD,
           T.ABSFLAG             = T1.ABSFLAG,
           T.OPP_ACT_NO          = T1.OPP_ACT_NO,
           T.OPP_ACT_NAME        = T1.OPP_ACT_NAME,
           T.LAST_TIME           = T1.LAST_TIME,
           T.LAST_TELLER         = T1.LAST_TELLER,
           T.LAST_TYPE           = T1.LAST_TYPE,
           T.RESERVE1            = T1.RESERVE1,
           T.RESERVE2            = T1.RESERVE2,
           T.RESERVE3            = T1.RESERVE3,
           T.RESERVE4            = T1.RESERVE4,
           T.SYS_ID              = T1.SYS_ID,
           T.OPP_ACC             = T1.OPP_ACC,
           T.OPP_ACC_NAME        = T1.OPP_ACC_NAME,
           T.USEAGE              = T1.USEAGE,
           T.BANKNO              = T1.BANKNO,
           T.TELLER              = T1.TELLER,
           T.MEMO                = T1.MEMO,
           T.FILL_FLAG           = '',
           T.FILL_DATE           = '',
           T.FILL_TIME           = '',
           T.FILL_USER           = ''


     WHERE T.TRAN_DATE = IN_TRAN_DATE
       AND T.ACT_NO = IN_AC_NO
  WHEN NOT MATCHED THEN
    INSERT
    VALUES
      (T1.APPG_MODE,
       T1.APPG_DATE,
       T1.TRAN_CODE,
       T1.BANCS_NO,
       T1.RGNBNK,
       T1.TRAN_CUSM_NO,
       T1.TRAN_DATE,
       T1.INCT_REC_NO,
       T1.REC_NO,
       T1.PROV_BR_NO,
       T1.ACT_NO,
       T1.TRAN_ACCT_TYPE,
       T1.TRAN_VOLUME_NO,
       T1.TRAN_SEQ_NO,
       T1.TRAN_JRNL_NO,
       T1.UUID,
       T1.PROSUP_TYPE,
       T1.PROSUB_TYPE,
       T1.PRO_MSG,
       T1.CONTRACT_NO,
       T1.ACT_FLAG,
       T1.CUSM_SORT,
       T1.ACT_TYPE,
       T1.CARD_NO,
       T1.TRAN_PROPERTY,
       T1.TRAN_FLAG,
       T1.TRAN_TYPE,
       T1.TRAN_MSG,
       T1.TRAN_TIME,
       T1.TRAN_TELLER,
       T1.TRAN_BRCH_NO,
       T1.TRAN_BRCH_NAME,
       T1.INT_FRM_DT,
       T1.BATCH_TYPE,
       T1.INCT_TRN_CODE,
       T1.INCT_ORIG_TRN_CODE,
       T1.INCT_BATCH_NO,
       T1.PROMPT_MSG,
       T1.SYS_CODE,
       T1.ORIG_DATE,
       T1.ORIG_JRNL,
       T1.TRAN_CURR,
       T1.TRAN_CURE_EN,
       T1.CURR_RATE,
       T1.CR_DR_IND,
       T1.REVERSAL_CODE,
       T1.TRAN_AMOUNT,
       T1.ACCT_BALANCE,
       T1.ACCT_AVAIL_BALANCE,
       T1.HOLD_AMOUNT,
       T1.OD_LIM_AMOUNT,
       T1.OD_AVAIL_AMOUNT,
       T1.DISCOUNT_AMOUNT,
       T1.NOL_PAL_AMOUNT,
       T1.ODE_PAL_AMOUNT,
       T1.OWE_EST_AMOUNT,
       T1.PRINCIPAL_AMOUNT,
       T1.INTEREST_AMOUNT,
       T1.ODE_PAL_PENALTY,
       T1.ODE_EST_PENALTY,
       T1.IMPO_PENALTY,
       T1.REMBAK,
       T1.USAGE_NAME,
       T1.TRAN_PS,
       T1.SUMMARY,
       T1.REMIT_TYPE,
       T1.REMIT_TYPE_NAME,
       T1.PAY_NAME,
       T1.PAY_CARD_NO,
       T1.PAY_ACCT_NO,
       T1.PAY_ACCT_TYPE,
       T1.PAY_VOLUME_NO,
       T1.PAY_SEQ_NO,
       T1.PAY_BR_NAME,
       T1.PAY_BRCH_NO,
       T1.PAY_AREANO,
       T1.REL_PAY_NAME,
       T1.REL_PAY_CARD_NO,
       T1.REL_PAY_ACCT_NO,
       T1.REL_PAY_ACCT_TYPE,
       T1.REL_PAY_VOLUME_NO,
       T1.REL_PAY_SEQ_NO,
       T1.REL_PAY_BR_NAME,
       T1.REL_PAY_BRCH_NO,
       T1.REL_PAY_AREANO,
       T1.PAYEE_NAME,
       T1.PAYEE_CARD_NO,
       T1.PAYEE_ACCT_NO,
       T1.PAYEE_ACCT_TYPE,
       T1.PAYEE_VOLUME_NO,
       T1.PAYEE_SEQ_NO,
       T1.PAYEE_BR_NAME,
       T1.PAYEE_BRCH_NO,
       T1.PAYEE_AREANO,
       T1.REL_PAYEE_NAME,
       T1.REL_PAYEE_CARD_NO,
       T1.REL_PAYEE_ACCT_NO,
       T1.REL_PAYEE_ACCT_TYPE,
       T1.REL_PAYEE_VOLUME_NO,
       T1.REL_PAYEE_SEQ_NO,
       T1.REL_PAYEE_BR_NAME,
       T1.REL_PAYEE_BRCH_NO,
       T1.REL_PAYEE_AREANO,
       T1.CHQ_TYPE,
       T1.CHQ_MSG,
       T1.CHQ_NO,
       T1.CRT_CHQ_TYPE,
       T1.CRT_CHQ_MSG,
       T1.CRT_CHQ_NO,
       T1.FEE_ACCT_NO,
       T1.FEE_ACCT_TYPE,
       T1.FEE_COUNT,
       T1.CHARGE_AMT,
       T1.REBATE_AMT,
       T1.PAY_ADD_TEL,
       T1.PAYEE_ADD_TEL,
       T1.BUSINESS_NO,
       T1.OTH_BUSINESS_NO,
       T1.REMIT_NO,
       T1.TOBREF,
       T1.CUSSEQ,
       T1.TRCNUM,
       T1.SYS_NAME,
       T1.IBKNUM,
       T1.TXDATE,
       T1.ORGIDT,
       T1.TRNFLC,
       T1.GATHTYP,
       T1.TRANSIDE_TYPE,
       T1.RELAKE,
       T1.GCMS_TRIGGER_ACCT,
       T1.GCMS_TRIGGER_AREANO,
       T1.TRAN_ORD,
       T1.ABSFLAG,
       T1.OPP_ACT_NO,
       T1.OPP_ACT_NAME,
       T1.LAST_TIME,
       T1.LAST_TELLER,
       T1.LAST_TYPE,
       T1.RESERVE1,
       T1.RESERVE2,
       T1.RESERVE3,
       T1.RESERVE4,
       T1.SYS_ID,
       T1.OPP_ACC,
       T1.OPP_ACC_NAME,
       T1.USEAGE,
       T1.BANKNO,
       T1.TELLER,
       T1.MEMO,'','','','');

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值