一点点

前言:

今天,小boss提了一个加日志的需求如下:

调用前日记记录:请求参数信息,请求时间,请求功能。。。

调用后日记记录:调用执行时间,调用执行结果。。。



过程:

public class AcctProxy {
    
    public static Object[] params = new Object[10];
    private static String contextName;
    public static void setParams(Object[] options) {
        params = options;
    }
    
    @SuppressWarnings("unchecked")
    public static <T> T getProxy(AcctSubContext clz) {
        LogAdvice ad = new LogAdvice();
        Object proxyobj = (AcctSubContext)Proxy.newProxyInstance(
                clz.getClass().getClassLoader(),
                clz.getClass().getInterfaces(),
        new InvocationHandler(){
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                Object obj = null;
                Long a = System.currentTimeMillis();
                try {
                    ad.beforeMethod(new Date().toString());
                    obj = method.invoke(clz, args);
                    ad.afterMethod(new Date().toString());
                    return obj;
                } finally {
                    ad.afterReturn("核算处理耗时: " + (System.currentTimeMillis() - a) + "ms,处理结果:" + obj);
                }
            }
        }           
        );
        return (T)proxyobj;
    }
    
    interface Advice{
        void beforeMethod(String info);
        void afterMethod(String info);
    }
    
    private static class LogAdvice implements Advice{
        protected Logger log = LoggerFactory.getLogger(getClass());
        @Override
        public void beforeMethod(String info) {
            log.info("接收到核算["+contextName+"]请求参数:" + params[0] + ";" + params[1] + ";" + info );
        }
        @Override
        public void afterMethod(String info) {
            log.info("核算["+contextName+"]处理完成" + info);
        }
        public void afterReturn(String info){
            log.info(info);
        }
    }
    
    public static void setContextName(String name){
        contextName = name;
    }

    public static AcctSubContext getSubContext(AcctContext acctContext, String ctx, Object... options) {
        setParams(options);
        setContextName(ctx);
        AcctSubContext context = null;
        context = (AcctSubContext) acctContext.getSubContext(ctx);
        return getProxy(context);
    }
}






### 关于PTA每天进步一点点题目解题思路 在PTA平台上,“每天进步一点点”的题目通常涉及计算每日增长的比例或者通过复利公式来模拟长期的进步效果。这类问题的核心在于理解指数增长的概念并将其应用到实际场景中。 #### 数学模型 此类问题一般可以用以下公式表示: \[ \text{最终值} = \text{初始值} \times (1 + r)^t \] 其中: - \( r \) 是每日增长率; - \( t \) 表示时间(天数或其他单位)[^5]。 如果目标是求达到某个特定值所需的天数,则可以通过对数运算反向推导: \[ t = \frac{\log(\text{目标值}/\text{初始值})}{\log(1+r)} \] #### 输入与输出分析 假设输入为三个参数:初始值 (\( v_0 \))、每日增长率 (\( r \)) 和目标值 (\( v_t \)),则程序的主要逻辑如下: 1. **读取输入数据** 使用标准输入方法获取上述三个变量的数值。 2. **验证条件** 确保 \( r > 0 \),并且 \( v_t > v_0 \)[^6]。 3. **迭代或解析计算** 可以采用两种方式之一完成计算: - 迭代法:逐日累加直到超过目标值为止。 - 解析法:利用对数函数直接得出所需天数。 以下是基于C语言实现的一个简单例子: ```c #include <stdio.h> #include <math.h> int main() { double initial_value, target_value, rate; scanf("%lf %lf %lf", &initial_value, &target_value, &rate); if(rate <= 0 || target_value <= initial_value){ printf("Invalid input\n"); return 1; } int days = ceil(log(target_value / initial_value) / log(1 + rate)); printf("Days required: %d\n", days); return 0; } ``` 此代码片段实现了基本功能,并考虑到了边界情况处理[^7]。 ### 注意事项 当设计解决方案时需要注意浮点精度误差可能带来的影响,在某些极端情况下可能导致结果偏差过大。因此建议适当调整判断阈值或将所有操作转换成更高精度的数据类型来进行更精确的结果判定[^8]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值