随笔分类 - JAVA高级
摘要:笔者最近遇到一个问题 我们根据自己业务需要 需要首次启动springboot项目时 把数据库数据同步至本地缓存(比如ehcache)但有一个要求 在缓存未载入成功 不允许有流量打入
一开始我们使用的是一个类实现ApplicationRunner 但发现 这个启动任务是需要等bean全部完成初始化 springmvc等完成初始化后才开始执行,这个时候 如果刚好遇到同步缓存进行中,就会出现缓存穿透的情况 而我们的应用又是希望完成同步完成之后 从缓存中获取数据 这个时候 笔者改成侦听ContextRefreshedEvent初始化完成事件 其实这个方案也已经能解决,
只是笔者项目里面 已经有一个地方用到了这个 刚好尴尬的地方是 这个地方 是发布dubbo的执行方法 而我其实是希望在发布dubbo接口之前完成初始化工作 因为dubbo接口也很有可能消费者会调用 这个还是会造成缓存穿透 所以我单独写了一个@Configuration
阅读全文
摘要:发布定义:
指一个对象可以在对象的作用域范围以外使用。
溢出定义:
当某个不应该发布的对象被发布时称为溢出。
阅读全文
摘要:设计模式六大原则之单一原则的设计注意事项
阅读全文
摘要:Spring Boot中初始化资源的几种方式
阅读全文
摘要:JAVA提供了一种内置锁的机制来支持原子性,同步代码块。同步代码块分两部分组成:1)一个是作为锁的对象引用2)由这个锁保护的代码块
注意点:以关键字sync...修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。
阅读全文
摘要:JDK中关于观察者模式主要了解俩个概念
Observer观察者
Observable事件源;当事件源发生某事件时,有两个事情需要注意 1.里面有一个isChange属性 当为false时不会发通知给观察者。所以一般先setChange为true,然后注册观察者,再调用notifyObservers方法 通知所有观察者中的update方法
阅读全文
摘要:此篇文章主要介绍了事件驱动模式的概念及对应的实现,事件驱动模型其实只是一个概念 ,从具体实现的角度讲可以有详细的方案实现,比较常见的比如观察者模式,发布订阅模式,再详细的方案落地话比如我们熟悉的MQ产品,rocketMq rabbitMq都是基于发布订阅的落地
阅读全文
摘要:通过阻塞队列实现生产者和消费者异步解耦。
它的确是一种实用的设计模式,常用于编写多线程或并发代码。下面是它的一些优点:
它简化的开发,你可以独立地或并发的编写消费者和生产者,它仅仅只需知道共享对象是谁
生产者不需要知道谁是消费者或者有多少消费者,对消费者来说也是一样
生产者和消费者可以以不同的速度执行
分离的消费者和生产者在功能上能写出更简洁、可读、易维护的代码
阅读全文
摘要:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在CSRF漏洞的应用/网站,攻击者可以事先构造好URL,只要受害者用户一访问,后台便在用户不知情情况下对数据库中用户参数进行相应修改
只要协议、域名、端口有任何一个不同,都被当作是不同的域,之间的请求就是跨域操作。
阅读全文
摘要:lambda表达式之方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器
阅读全文
摘要:什么是lambda;优势是什么;为什么JDK8花费了这么长时间弄出这个新特性
阅读全文
摘要:CAP理论和BASE理论及数据库的ACID
阅读全文
摘要:大家知道synchronized是可以实现互斥进程内语义,分布式场景不适合建议使用(redis,etcd(推荐因为是CP模型))下暂时不讨论,那么单一进程内 synchronized还是比较简单的实现互斥的语义
阅读全文
摘要:在多线程环境中对于全局变量的使用,往往这个变量存在线程不安全性,通过将对象保存在ThreadLocal中,使得每个线程都拥有自己的对象,达到维持线程封闭性效果。
volatile变量上存在一种特殊的线程封闭。只要确保只有单个线程对共享的volatile变量执行写入操作,那么就可以完全的在这些共享volatile变量上执行“读取-修改-写入”操作。。。
生产环境中的案例:
登录 一般登录实现会选择在登录成功后 将user上下文对象封装在ThreadLocal对象内 ,其他线程需要用到登录的用户ID...
阅读全文
摘要:Map context = Collections.singletonMap("key", "value");
阅读全文
摘要:/** * NIO非阻塞式编程<p> * 服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道 (channel) 上的事件。 * 我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,阻塞I/O这时会调用rea
阅读全文