摘要: 消除指令重排序 保证了不同线程对变量进行操作时的可见性,cpu对变量值修改后,其他线程读取变量信息时从内存读取而非cpu缓存 使用场景: 1. 双重检查锁,防止重排序 uniqueSingleton = new Singleton(); 赋值操作在编译后不是原子的,分为三步: (1)分配内存空间 ( 阅读全文
posted @ 2023-01-20 09:14 马儿跑 阅读(11) 评论(0) 推荐(0) 编辑
摘要: AbortPolicy:丢弃任务并抛出RejectedExecutionException异常,线程池默认拒绝策略 DiscardPolicy:丢弃任务,但不抛出异常 DiscardOldestPolicy:丢弃队列最前面的任务后重新提交被拒绝的任务 CallerRunsPolicy:由调用exec 阅读全文
posted @ 2023-01-20 08:38 马儿跑 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 具体报错信息: docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:281 阅读全文
posted @ 2023-01-18 16:23 马儿跑 阅读(2351) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: 在循环中加入Thread.sleep(0),用于在循环中放入safepoint,JVM进行STW,然后触发GC。 详细: 说白了,它的作用就是给可数(int控制)循环加入safepoint,让JVM可以GC。 对于JVM,执行native函数的线程看作“已经进入safepoint“,而 阅读全文
posted @ 2023-01-18 13:38 马儿跑 阅读(206) 评论(1) 推荐(0) 编辑
摘要: Cglib JDK Proxy 实现方式 生成被代理类的子类 通过被代理类实现的接口+反射 速度 慢(曾经快于JDK Proxy,但JDK Proxy几次迭代后逐渐落后) 快 限制 被代理类不能是final,因为需要被继承 被代理类必须实现接口 阅读全文
posted @ 2023-01-18 09:27 马儿跑 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 耗时操作异步,可以考虑使用Future或Java8后出现的CompletableFuture 内存缓存,分布式用Redis,单机用Guava,注意缓存问题(击穿,穿透和雪崩),Redis的三种缓存策略 锁粒度控制 数据库批量修改 使用队列+异步处理应对流量突增 通过限流等方案保证服务稳定性 阅读全文
posted @ 2023-01-16 13:35 马儿跑 阅读(31) 评论(0) 推荐(0) 编辑
摘要: Java 8引入的CompletableFuture,对Future做了改进: 1.可以传入回调对象,不再像Future那样循环查询执行结果。 2.另外可以将多个Future结合到一起并行或串行执行,主要方法如下: 1> thenAccept()处理正常结果; 2> exceptional()处理异 阅读全文
posted @ 2023-01-16 11:21 马儿跑 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 后端API需要接受fe传过来的参数,就必然涉及到参数校验。 Spring提供了使用注解进行非法判断的引用(需要主动引入),继承自 spring-boot-starter-parent <dependency> <groupId>org.hibernate.validator</groupId> <a 阅读全文
posted @ 2023-01-16 11:15 马儿跑 阅读(2610) 评论(1) 推荐(1) 编辑
摘要: 什么情况下需要分表呢?分表又能解决什么问题呢? 一般情况下分表的直接原因是数据量太大了,比如一张表一共只有1w条数据,确实没必要分表。为什么数据量大了就需要分表呢?首先得看看数量量过大后会带来什么问题。 以InnoDB为例: 使用的是B+树,聚簇索引。如果数据量过大,可能会导致多一次甚至多次磁盘IO 阅读全文
posted @ 2023-01-16 08:55 马儿跑 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 先说B树和B+树的区别 B树:非叶子节点也存储数据 B+树:只有叶子节点存储数据,且所有叶子节点通过指针相连接。 为什么MongoDB选择B树而,MySQL选择B+树呢?两种数据结构的区别摆在上面了,那就看MongoDB和MySQL的需求 首先: MongoDB属于文档型存储的NoSQL,意味着它并 阅读全文
posted @ 2023-01-13 10:49 马儿跑 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: 使用hash值保存到bitmap进行值是否已存在的判定:不存在->一定不存在,存在->可能存在。 用途(例): 1.判断随机数是否重复 使用: Redis的SetBit/GetBit可以用于构建布隆过滤器,但需要注意hash算法,不要产生大Value 阅读全文
posted @ 2023-01-12 16:30 马儿跑 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: 旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存 读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没有则将DB写入cache,再读cache 异步缓存写入策略:写->写缓存,异步更新到DB,读->读cache,没有则将DB写 阅读全文
posted @ 2023-01-12 16:00 马儿跑 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: Java8后(1)interface支持default和static方法有实现,abstract class依然是抽象方法和非抽象方法,(2)可同时实现多个interface,(3)但成员变量只能是static final的。 我的理解: abstract class的出现是为了防止直 阅读全文
posted @ 2023-01-06 08:52 马儿跑 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: 如果出现网络分区(P),持有旧数据的节点是否要继续提供服务,提供就保证了可用(A),但数据不一定新,放弃了C;如果不提供服务,则意味着放弃了可用性A,但是保证数据一致(C)。 我的理解: P就是网络延迟,CAP不可兼得,但是分布式系统必然会有网络延迟问题,即分布式系统必然具备P的属性。 阅读全文
posted @ 2023-01-05 17:06 马儿跑 阅读(37) 评论(0) 推荐(0) 编辑