摘要:
概念 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同,不论执行多少次,产生的效果和返回的结果都是一样的 场景 查询操作:查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作 删除操作:删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意 阅读全文
posted @ 2020-06-30 15:35
双木l之林
阅读(109)
评论(0)
推荐(0)
摘要:
新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空 阅读全文
posted @ 2020-06-30 15:30
双木l之林
阅读(178)
评论(0)
推荐(0)
摘要:
事务中的几个常见的概念 脏写 一个事务修改了另一个未提交事务修改过的数据 脏读 一个事务读到了另一个未提交事务修改过的数据 不可重复读 一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值 幻读 一个事务先根据某些条件查询出一些记录, 阅读全文
posted @ 2020-06-30 15:22
双木l之林
阅读(100)
评论(0)
推荐(0)
摘要:
简介 ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个 通过ThreadLocalMap实现,内部是一个Entry[],继承WeakRefer 阅读全文
posted @ 2020-06-30 15:21
双木l之林
阅读(91)
评论(0)
推荐(0)
摘要:
概览 设计目标 是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用 简介 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 阅读全文
posted @ 2020-06-30 15:20
双木l之林
阅读(115)
评论(0)
推荐(0)
摘要:
NIO操作过程 非阻塞读/写操作 读-- 从通道读取数据到buffer,同时可以继续做别的事情,但数据都到buffer之后,线程再继续处理数据 写-- 一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程可以同时去做别的事情 Buffer(缓冲区) IO 面向流(Stream orie 阅读全文
posted @ 2020-06-30 15:19
双木l之林
阅读(96)
评论(0)
推荐(0)
摘要:
锁:是一种用来解决多个执行线程访问共享资源错误或数据不一致问题的工具。 本质:同一时间只允许一个用户操作 场景 避免不同节点重复相同的工作 避免破坏数据的正确性 实现 基于 MySQL 中的锁::MySQL 本身有自带的悲观锁 for update关键字,也可以自己实现悲观/乐观锁来达到目的,要关注 阅读全文
posted @ 2020-06-30 15:11
双木l之林
阅读(114)
评论(0)
推荐(0)
摘要:
过期处理 定期删除 redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除 惰性删除 定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 阅读全文
posted @ 2020-06-30 15:09
双木l之林
阅读(95)
评论(0)
推荐(0)
摘要:
快照(snapshotting)持久化(RDB) 该方式是redis默认 持久化方式 Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis主从结构,主要用来提高Re 阅读全文
posted @ 2020-06-30 15:02
双木l之林
阅读(116)
评论(0)
推荐(0)
摘要:
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉 解决方案 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。 事中:本地ehcache缓存+hystrix限流&降级,避免MySQL崩掉 事后:利用re 阅读全文
posted @ 2020-06-30 14:55
双木l之林
阅读(134)
评论(0)
推荐(0)
摘要:
1 完全基于内存 2 数据结构简单,对数据操作也简单 3 只有单线程,避免了不必要的上下文切换,也不存在竞态,不存在多进程或多线程导致的切换而消耗CPU,不用开了各种锁的问题 4 使用多路IO复用模型,非阻塞IO 5 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样(是基于 阅读全文
posted @ 2020-06-30 14:54
双木l之林
阅读(124)
评论(0)
推荐(0)
摘要:
三种集群方式 主从同步:主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave) 优点: master能自动将数据同步到slave,可以进行读写分离,分担master的读压力 master、slave之间的同步是以非阻塞的方式进行的,同步期间,客户端仍然可以提交查询或 阅读全文
posted @ 2020-06-30 14:53
双木l之林
阅读(170)
评论(0)
推荐(0)
摘要:
eureka 服务发现客户端 DiscoveryClinet职责(核心) 注册服务无试了到Eureka Server中; 发送新塘更新与Eureka Server的租约; 在服务关闭时从Eureka Server中取消租约,服务下线; 查询在Eureka Server中注册的服务实例列表。 Disc 阅读全文
posted @ 2020-06-30 14:52
双木l之林
阅读(100)
评论(0)
推荐(0)
摘要:
核心功能: 分布式/版本化配置 服务注册合发现 服务路由 服务和服务之间的调用 负载均衡 断路器 分布式消息传递 ...... 技术体系 组件 服务注册与发现组件:Eureka、Zookeeper和Consul等 Eureka是一个REST风格的服务注册与发现的基础服务组件 服务调用组件:Hystr 阅读全文
posted @ 2020-06-30 14:51
双木l之林
阅读(172)
评论(0)
推荐(0)
摘要:
作用域 singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。 prototype : 每次请求都会创建一个新的 bean 实例。 request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 session 阅读全文
posted @ 2020-06-30 14:50
双木l之林
阅读(135)
评论(0)
推荐(0)
摘要:
AOP(面向切面编程) 怎么理解这个切面编程的概念及优点? 概念: 横切关注点与业务逻辑相分离,切面能帮助我们模块化横切关注点; 优点: 现在每个关注点都集中于一个地方,而不是分散到多处代码中; 服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,而次要关注点的代码被转移到切面中了。 AO 阅读全文
posted @ 2020-06-30 14:48
双木l之林
阅读(168)
评论(0)
推荐(0)
摘要:
流程: 客户端(浏览器)发送请求,直接请求到 DispatcherServlet。 DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 Han 阅读全文
posted @ 2020-06-30 14:47
双木l之林
阅读(84)
评论(0)
推荐(0)
摘要:
工厂模式 Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。 BeanFactory :延迟注入(使用到某个 bean 的时候才会注入),相比于ApplicationContext 来说会占用更少的内存,程序启动速度更快。 Ap 阅读全文
posted @ 2020-06-30 14:46
双木l之林
阅读(110)
评论(0)
推荐(0)
摘要:
关于Transactional注解 五个表示隔离级别的常量 TransactionDefinition.ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别. 阅读全文
posted @ 2020-06-30 14:45
双木l之林
阅读(94)
评论(0)
推荐(0)
摘要:
判断对象是否死亡的两种方法 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。 优点: 简单 缺点: 无法解决相互循环引用 可达性分析算法 基本思想就是通过一系列的称为 “GC Roots” 的 阅读全文
posted @ 2020-06-30 14:44
双木l之林
阅读(142)
评论(0)
推荐(0)
摘要:
四种引用及其应用场景 强引用 强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收。 使用场景:啥时候都在使用 软引用 软引用在程序内存不足时,会被回收。 使用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。适用构建敏感数据的缓存。 阅读全文
posted @ 2020-06-30 14:42
双木l之林
阅读(116)
评论(0)
推荐(0)
摘要:
垃圾收集算法 标记-清除算法 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 缺点: 效率问题; 空间问题(标记清除后会产生大量不连续的碎片) 复制算法 它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空 阅读全文
posted @ 2020-06-30 14:40
双木l之林
阅读(102)
评论(0)
推荐(0)
摘要:
垃圾收集器 Serial 收集器 单线程收集器,不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( "Stop The World" ),直到它收集结束。 ParNew 收集器 Serial 多线程版本。 新生代采用复制算法,老 阅读全文
posted @ 2020-06-30 14:39
双木l之林
阅读(124)
评论(0)
推荐(0)
摘要:
类加载过程 系统加载 Class 类型的文件主要三步 加载 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class对象,作为方法区这些数据的访问入口 连接 验证 准备 准备阶段是正式为类变量分配内存并设置类变量初始值的阶 阅读全文
posted @ 2020-06-30 14:38
双木l之林
阅读(112)
评论(0)
推荐(0)
摘要:
类文件结构 结构图 魔数 头四个字节,作用是确定这个文件是否为一个能被虚拟机接收的 Class 文件。 Class 文件版本 第五和第六是次版本号,第七和第八是主版本号。 高版本的 Java 虚拟机可以执行低版本编译器生成的 Class 文件,但是低版本的 Java 虚拟机不能执行高版本编译器生成的 阅读全文
posted @ 2020-06-30 14:36
双木l之林
阅读(95)
评论(0)
推荐(0)
摘要:
类加载器 JVM 中内置了三个重要的 ClassLoader BootstrapClassLoader(启动类加载器):最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的jar包和类或者或被 -Xbootclasspath参数指定的路径中的所有类。 ExtensionCl 阅读全文
posted @ 2020-06-30 14:35
双木l之林
阅读(145)
评论(0)
推荐(0)
摘要:
内存模型 JDK1.6 JDK1.8 线程私有的: 程序计数器 虚拟机栈 本地方法栈 线程共享的: 堆 方法区 直接内存 (非运行时数据区的一部分) 程序计数器 线程私有 两个作用 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的 阅读全文
posted @ 2020-06-30 14:34
双木l之林
阅读(122)
评论(0)
推荐(0)
摘要:
线程 1. 简介 1)定义 现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(LightWeightProcess),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变 阅读全文
posted @ 2020-06-30 14:31
双木l之林
阅读(134)
评论(0)
推荐(0)
摘要:
Executor框架 Executor框架的两级调度模型(基于HotSpot) 在上层,Java多线程程序通常把应用分解为若干个任务,然后使用用户级的调度器(Executor框架)将这些任务映射为固定数量的线程; 在底层,操作系统内核将这些线程映射到硬件处理器上。 任务的两级调度模型 结构 3大部分 阅读全文
posted @ 2020-06-30 14:28
双木l之林
阅读(181)
评论(0)
推荐(0)
摘要:
并发编程模型 1.两个关键问题 1)线程之间如何通信 共享内存程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信 消息传递程之间没有公共状态,线程之间必须通过发送消息来显式进行通信 2)线程之间如何同步 线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信 总结:Java的并发 阅读全文
posted @ 2020-06-30 14:25
双木l之林
阅读(145)
评论(0)
推荐(0)
摘要:
简介 合理地使用线程池能够带来3个好处: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定 性,使用线程池可以进行统 阅读全文
posted @ 2020-06-30 14:24
双木l之林
阅读(104)
评论(0)
推荐(0)
摘要:
ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的HashMap。 为什么要使用ConcurrentHashMap。 jdk1.7的HashMap可能导致程序死循环:多线程会导致HashMap的Entry链表形成环形数据结构。而jdk1.8引入红 阅读全文
posted @ 2020-06-30 14:22
双木l之林
阅读(163)
评论(0)
推荐(0)
摘要:
CountDownLatch 允许一个或多个线程等待其他线程完成操作,某个线程A等待若干个其他线程执行完任务之后,它才执行.CountDownLatch强调的n个线程,等待若干个其他线程结束,线程开始执行 CyclicBarrier 强调的是n个线程,大家相互等待,只要有一个没完成,所有人都得等着 阅读全文
posted @ 2020-06-30 14:20
双木l之林
阅读(104)
评论(0)
推荐(0)
摘要:
简介 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 1)synchronized关键字与java.util.concurrent.locks的lock接口 synchronized关键字 JVM层面,会隐式地获取锁,获取和释放固化了,也就是先获取再释放。 阅读全文
posted @ 2020-06-30 14:19
双木l之林
阅读(153)
评论(0)
推荐(0)

浙公网安备 33010602011771号