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 修饰的类进行代理