01 2023 档案
摘要:职责链模式 Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理 命令模式 将请求转换为一个包含与请求相关的所有信息的独立对象。 可根据不同的请求将方法参数化或加入队列等待处理 解释器模式 实现一个表达式接口,用于解释一个特定的上下文。例如:Java代
阅读全文
摘要:装饰者模式 组合的方式扩展类。符合开闭原则 外观模式 隐藏子系统接口,提供统一对外服务接口。符合迪米特法制(最少知道原则) 代理模式 使用代理对象控制对原对象的访问,降低系统耦合度。例如:A调用B的计算方法。B在计算方法中调用计算器的计算方法,则B为计算器的代理 适配器模式 通过第三方对象使两个接口
阅读全文
摘要:创建型设计模式是对类的实例化过程进行抽象。 简单工厂模式 根据传入参数返回不同对象 缺点:当对象具体类型增加时,需要修改工厂代码,添加新的具体类型判断和生成逻辑,违反了开闭原则 工厂方法模式 不仅将具体对象抽象,同时将工厂也抽象,解决新增加具体类型时需要修改工厂代码的问题,但是需要新建工厂 缺点:维
阅读全文
摘要:开闭原则 对扩展开放,对修改关闭。 使用抽象类,接口等构建抽象层,通过实现接口(继承抽象类)的方式构建具体实现。当系统修改时,无需对抽象层代码修改,只需编写新的具体实现类达到扩展的目的 里氏替换原则 对方法method(base),那么它必然可以接受一个子类对象sub 依赖倒置原则 通过抽象来搭建框
阅读全文
摘要:消除指令重排序 保证了不同线程对变量进行操作时的可见性,cpu对变量值修改后,其他线程读取变量信息时从内存读取而非cpu缓存 使用场景: 1. 双重检查锁,防止重排序 uniqueSingleton = new Singleton(); 赋值操作在编译后不是原子的,分为三步: (1)分配内存空间 (
阅读全文
摘要:AbortPolicy:丢弃任务并抛出RejectedExecutionException异常,线程池默认拒绝策略 DiscardPolicy:丢弃任务,但不抛出异常 DiscardOldestPolicy:丢弃队列最前面的任务后重新提交被拒绝的任务 CallerRunsPolicy:由调用exec
阅读全文
摘要:具体报错信息: docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:281
阅读全文
摘要:首先一句话: 在循环中加入Thread.sleep(0),用于在循环中放入safepoint,JVM进行STW,然后触发GC。 详细: 说白了,它的作用就是给可数(int控制)循环加入safepoint,让JVM可以GC。 对于JVM,执行native函数的线程看作“已经进入safepoint“,而
阅读全文
摘要:Cglib JDK Proxy 实现方式 生成被代理类的子类 通过被代理类实现的接口+反射 速度 慢(曾经快于JDK Proxy,但JDK Proxy几次迭代后逐渐落后) 快 限制 被代理类不能是final,因为需要被继承 被代理类必须实现接口
阅读全文
摘要:耗时操作异步,可以考虑使用Future或Java8后出现的CompletableFuture 内存缓存,分布式用Redis,单机用Guava,注意缓存问题(击穿,穿透和雪崩),Redis的三种缓存策略 锁粒度控制 数据库批量修改 使用队列+异步处理应对流量突增 通过限流等方案保证服务稳定性
阅读全文
摘要:Java 8引入的CompletableFuture,对Future做了改进: 1.可以传入回调对象,不再像Future那样循环查询执行结果。 2.另外可以将多个Future结合到一起并行或串行执行,主要方法如下: 1> thenAccept()处理正常结果; 2> exceptional()处理异
阅读全文
摘要:后端API需要接受fe传过来的参数,就必然涉及到参数校验。 Spring提供了使用注解进行非法判断的引用(需要主动引入),继承自 spring-boot-starter-parent <dependency> <groupId>org.hibernate.validator</groupId> <a
阅读全文
摘要:什么情况下需要分表呢?分表又能解决什么问题呢? 一般情况下分表的直接原因是数据量太大了,比如一张表一共只有1w条数据,确实没必要分表。为什么数据量大了就需要分表呢?首先得看看数量量过大后会带来什么问题。 以InnoDB为例: 使用的是B+树,聚簇索引。如果数据量过大,可能会导致多一次甚至多次磁盘IO
阅读全文
摘要:先说B树和B+树的区别 B树:非叶子节点也存储数据 B+树:只有叶子节点存储数据,且所有叶子节点通过指针相连接。 为什么MongoDB选择B树而,MySQL选择B+树呢?两种数据结构的区别摆在上面了,那就看MongoDB和MySQL的需求 首先: MongoDB属于文档型存储的NoSQL,意味着它并
阅读全文
摘要:首先一句话: 使用hash值保存到bitmap进行值是否已存在的判定:不存在->一定不存在,存在->可能存在。 用途(例): 1.判断随机数是否重复 使用: Redis的SetBit/GetBit可以用于构建布隆过滤器,但需要注意hash算法,不要产生大Value
阅读全文
摘要:首先一句话: 旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存 读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没有则将DB写入cache,再读cache 异步缓存写入策略:写->写缓存,异步更新到DB,读->读cache,没有则将DB写
阅读全文
摘要:首先一句话: Java8后(1)interface支持default和static方法有实现,abstract class依然是抽象方法和非抽象方法,(2)可同时实现多个interface,(3)但成员变量只能是static final的。 我的理解: abstract class的出现是为了防止直
阅读全文
摘要:首先一句话: 如果出现网络分区(P),持有旧数据的节点是否要继续提供服务,提供就保证了可用(A),但数据不一定新,放弃了C;如果不提供服务,则意味着放弃了可用性A,但是保证数据一致(C)。 我的理解: P就是网络延迟,CAP不可兼得,但是分布式系统必然会有网络延迟问题,即分布式系统必然具备P的属性。
阅读全文