阿空实训日记——永别牢笼计划第一天 6月29日

🏠个人主页:阿空12138
🧑个人简介:大家好,我是阿空,一个想要与大家共同进步的男人😉
😉目前状况🎉:目前大三,在找工作👏👏
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

前言

2023年6月29日,我来到了江西农业大学在北京与企业(传习教育)合作开办的实训基地并开始了长达三个月的坐牢生活,在奋起反抗和默默忍受之间苦苦挣扎,为了让自己平静下来,现立下flag,每天写日常总结,梳理每天学到的东西。


6月29日 天气晴 28~37℃

1.每日一道算法题

今天做的是 剑指 Offer II 045. 二叉树最底层最左边的值

解题思路 层次遍历 每次while循环遍历第i层元素

 public int findBottomLeftValue(TreeNode root) {

        // todo 层序遍历 用一个map 储存 k,v (key= 高度 , value= 第几个)

        Queue<TreeNode> queue=new ArrayDeque<>();

        queue.add(root);
          int b=0;
        while (!queue.isEmpty()){

            int size = queue.size();

              Integer a=null;
            for (int i = 0; i < size; i++) {


                TreeNode currentNode = queue.poll();

                //todo
                if (a==null) a=currentNode.val;

                if (currentNode.left!=null){
                    queue.add(currentNode.left);
                }
                if (currentNode.right!=null){
                    queue.add(currentNode.right);
                }


            }
            b=a;

        }

       return b;
    }

2.每日一道面试题
今天学习到的面试题是

Q:Aop的实现原理?
A:Spring AOP(Aspect-Oriented Programming)实现原理主要是基于动态代理技术。
Spring AOP基于代理模式和反射机制实现了AOP功能。它使用了JDK动态代理和CGLIB动态代理两种方式来生成代理对象。

当目标对象实现了接口时,Spring AOP会使用JDK动态代理来生成代理对象。JDK动态代理是Java提供的一种基于接口的代理技术。它通过在运行时创建一个实现目标对象接口的代理对象,并将目标对象的方法调用转发到代理对象进行处理。通过动态代理,Spring AOP能够在目标对象的方法执行前、执行后或异常抛出时插入横切逻辑。

示例代码

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 定义接口
interface Hello {
    void sayHello();
}

// 实现InvocationHandler接口
class MyInvocationHandler implements InvocationHandler {
    private Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before Hello");
        Object result = method.invoke(target, args);
        System.out.println("After Hello");
        return result;
    }
}

// 创建目标对象
class HelloImpl implements Hello {
    @Override
    public void sayHello() {
        System.out.println("Hello, World!");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建目标对象
        Hello hello = new HelloImpl();
        
        // 创建 InvocationHandler 对象
        InvocationHandler handler = new MyInvocationHandler(hello);
        
        // 创建代理对象
        Hello proxy = (Hello) Proxy.newProxyInstance(
                hello.getClass().getClassLoader(),
                hello.getClass().getInterfaces(),
                handler);
        
        // 调用代理对象的方法
        proxy.sayHello(); 
    }
}

当目标对象没有实现接口时,Spring AOP会使用CGLIB动态代理来生成代理对象。CGLIB(Code Generation Library)是一个功能强大的字节码生成库,它通过生成目标对象的子类来实现代理。CGLIB动态代理可以直接代理目标对象的类而不需要接口,通过继承父类的方式来实现方法重写以插入横切逻辑。

总结

提示:这里对文章进行总结:

以上就是今天要讲的内容,今天是第一天到基地,用老师的话来说就是条件很艰难,八人寝好兄弟轮流洗澡 满头大汗,坐了一天车了有点累,抽空学了一会,今天就到这了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值