shanyin笔记

    xiaoxiao2022-07-13  153

    1.尝试网络 :curl -X POST -H "Content-type: application/json" -d '{"ShipperCode":"SF", "LogisticCode":"11111111"}' 'https://crawlers-test.wecash.net/api/50103/v1/logistic/dist'

    2.public Integer add(@RequestParam Integer a, @RequestParam Integer b) {}

     

    2.java8 lamerd表达式

    Map<Integer, List<GoUserTicket>> map = goList.stream().collect(Collectors.groupingBy(GoUserTicket::getStatus));

    List<Long> idList = batchVoucherList.stream().map(Voucher::getId).collect(Collectors.toList());

    Map<Long, VoucherTemplate> templateMap = byQueryBean.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));

    voucherList.stream().forEach(e -> {})

     

    list.sort(Comparator.comparing(DistributeDetail::getId));

     

    3。乐观锁实现

        @Scheduled(cron = "0/5 * * * * *")

        @Async

        public void scheduled(){

            JobLocks jobLocks = null;

            log.info("Current Thread:" + Thread.currentThread().getName());

     

            try{

                // 查询id=1的记录,对应一个定时任务

                jobLocks = jobLocksService.selectByPrimaryKey(1);

                if(null != jobLocks && jobLocks.getStatus() == 0) {

                    int result = jobLocksService.requireLock(jobLocks);

                    if(result == 1) {   // get the lock successfully

                        log.info(Thread.currentThread().getName() + " got the lock of job " + jobLocks.getName());

     

                        try {

                            Thread.sleep(10 * 1000);

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

     

                        log.info(jobLocks.getName() + " is done!");

                    }

                }

            } finally {

                if(null != jobLocks)

                    jobLocksService.releaseLock(jobLocks);

            }

        }

     

    4.

    常用设计模式 工厂模式

    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新 创建的对象。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程 延迟到子类进行。 有多个类,实现同一个接口,但是提供的功能是不同的,将他们封装在工厂中,根据条件选择需要生成的 类。 简单工厂模式:一个模块仅需要一个工厂类,没有必要把它生产出来(new),使用静态的方法就可以了, 即只使用静态方法,工厂模式的缩小版,不利于扩展。

    单例模式

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了 一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 适配器模式 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的 那些类可以一起工作。

    如何解决:继承或依赖(推荐)。 关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。 装饰器模式 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功 能。将原类传入装饰类,装饰类与原类实现相同的接口,在接口的方法中调用传入的原类的方法,并添加 一些自己的方法 享元模式

    享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与 工厂模式一起使用。 当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对 象,如果没有,则创建一个新对象。一提到共享池,我们很容易联想到 Java 里面的 JDBC 连接池、线程 池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿 数据库连接池来说,url、driverClassName、username、password 及 dbname,这些属性对于每个连接来 说都是一样的,所以就适合用享元模式来处理,建一个工厂类,将上述类似属性作为内部数据,其它的作 为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量。

    代理模式

    代理模式就是多一个代理类出来,替原对象进行一些操作

    责任链模式

    在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会 把相同的请求传给下一个接收者,依此类推。避免请求发送者与接收者耦合在一起,让多个对象都有可能 接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 观察者模式 当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其 它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

    策略模式

    策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使 用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个 抽象类(可有可无,属于辅助类),提供辅助函数 MVC 模式(好像不是)

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开 发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控 制器。

    View(视图) - 视图代表模型包含的数据的可视化。 Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新 视图。它使视图与模型分离开。 迭代器模式 迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见 模板方法模式

    解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义 1...n 个方法,可以是抽象的, 也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用 抽象类就相当于一个模板http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 

     

     

    GCroot

    垃圾回收机制。线程池,线程池的几个参数   动态规划里面的台阶问题  打印出来杨辉三角。约瑟夫环问题

    对排序

     

    JDK 的动态代理机制只能代理实现了接口的类。cglib 是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆

    盖其中方法实现增强,但因为采用的是继承,所以不能对 final 修饰的类进行代理 

    最新回复(0)