自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ellen艾琳的博客

学习、记录

  • 博客(56)
  • 收藏
  • 关注

原创 ZooKeeper 第四节 Watcher 监听

1、 Watcher 是一次性的操作,一个监听事件只会触发一次,当监听到数据的改变,会发送给设置了监听者的客户端。 可以通过循环监听去达到永久监听效果。理论上,客户端接收watch事件的时间要快于其看到watch对象状态变化的时间2、 通过这三个操作来绑定事件getData 、 Exists 、 getChildren ZooKeeper 可以为所有的读操作设置watch :exists()、getChildren() 、getData() 凡是事务类型的操作,都会触发监听事件。...

2020-11-19 14:13:14 481

原创 ZooKeeper 第三节 基本操作

1、 退出客户端:quit2、 查看帮助信息 zkCli.sh help3、 查找根目录下的znode ls/4、 zookeeper四种创建类型(CreateMode)节点 PERSISTENT 持久化节点(persistent) PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1 (persistent_sequential) EPHEMERAL ...

2020-11-19 14:11:47 203

原创 MySQL 六 事务

1、 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行; 事务是一组不可再分割的操作集合(工作逻辑单元)2、 在 MySQL 中只有 InnDB 引擎支持事务3、 开启事务 1)mysql中如何开启事务: begin / start transaction -- 手工 commit / rollback -- 事务提交或回滚 set session aut...

2020-11-17 14:01:13 175

原创 Redis 八 Jedis

1、 Redis 支持的 Java 客户端:1)Jedis、2)Redisson、3)lettuce2、 Jedis 是java操作redis所需的包,轻量,简洁,便于集成和改造 1)支持连接池 2)不支持读写分离,需要自己实现3、 在 Java 程序中使用Jedis 的基本使用方法 1)添加 Jedis 依赖 <dependency> <groupId>redis.clients</groupId>...

2020-11-14 22:07:44 107

原创 Redis 七 持久化

1、 Redis 是一个支持持久化的内存数据库,将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用。 两种持久化方式:1)RDB快照(默认) 2)AOF日志2、 RDB快照 (Redis DataBase) 1)在指定的时间间隔内,将内存中的数据集快照写入磁盘 2)默认方式是将 Reids 在内存中的数据集定时 dump 到磁盘上,文件是 dump.rdb 3)实际操作过程是 fork 一个子进程,先将数据集写入临时文件,写入成功后替换之前的文件,用二进制压...

2020-11-14 21:58:19 730

原创 Redis 六 缓存

1、 缓存预热是指系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。2、 缓存预热的两种实现方式: 1)数据量不大的时候,工程启动的时候进行加载缓存动作 2)数据量大的时候,设置一个定时任务脚本,进行缓存的刷新 3、 缓存穿透:指查询一个缓存中不存在的数据,需要去数据库中获取。如果数据库也查不到结果,将不会写入到缓存,导致这个不存在数据每次请求都要到数据库查询, 失去了缓存的意义4、 解决缓存穿透...

2020-11-14 21:19:57 80

原创 Redis 五 数据库及常用命令

1、 Redis 不像 MySQL 等关系型数据库那样有数据库的概念,不同的数据存在不同的数据库中。Redis 数据库是由一个整数索引标识,而不是一个数据库名称,默认情况下客户 端连接到数据库 0,可以在配置文件中控制数据库总数,默认Redis 里面有0到15一共16个数据库。2、 可以使用 select index 来切换数据库,如下所示: 127.0.0.1:6379> select 03、 获取数据库信息:info4、 清空当前数据库:flushdb 清空所...

2020-11-14 19:01:18 169

原创 Redis 四 高级特性

1、 Pub/Sub 发布订阅(Publish 与 Subscribe) Redis 提供了基于发布/订阅模式的消息机制,消息发布者和订阅者不能直接通信,客户端发布消息的时候指定发送的频道,然后订阅了该频道的用户可以接收到该消息。 具体指令如下: 1)PUBLISH channel message 发布消息,将信息发送到指定的频道 2)SUBSCRIBE channel [……] 订阅消息,订阅一个或多个频道的信息 3)UNSUBSCRI...

2020-11-14 18:19:37 239

原创 Redis 三 基本数据类型

1、 Redis 中 key 的最大容量是512 MB,官方上有说明 2、 String 1) SET key value 插入数据,不管 key 是否存在都设置。返回1成功,0失败 eg:set name ellen set age 30 3) GET key 查询数据 eg:get name get age 4) KEYS * 查看当前库中所有的 ...

2020-11-14 17:22:06 145

原创 Redis 二 Redis 与 Memcache

1、 Memcache 与 Redis 的区别 1)存储方式不同:Memcache 把数据全部存在内存之中,断电后会丢失。Redis 所有数据加载在内存,但也会持久化到磁盘,保证数据的持久性 2)支持数据类型不同:Memcache 对数据类型支持相对简单,只支持 key-value 结构。Redis 有复杂的数据类型 3)底层模型不同:底层实现方式以及客户端通信应用协议不一样。 Redis 直接自己构建了 VM 机制 4)运行环境不同:Redis 目前官方只支持 Linux...

2020-11-14 13:24:20 49

原创 Redis 一 概念理解

1、 Redis (Remote Dictionary Server远程数据服务),是一个基于内存且支持持久化的高性能 key-value 数据库2、 Redis 的典型使用场景: 1) 缓存系统,这是 Redis 使用最多的场景。热点数据缓存,如缓存近期热帖、缓存文章详情信息、记录用户会话信息 2) 计数器,如记录帖子点赞数、点击数、转发数、评论数。通过原子递增(Atomic Increment)保持计数;用 GETSET 来重置计数器;...

2020-11-14 13:11:47 68

原创 MySQL 五 日志

五、MySQL日志1、 错误日志: 重命名原来的错误日志文件,手动冲洗日志创建一个新的,命令为:mv hostname.err hostname.err.old mysqladmin flush-logs2、 查询日志模式是关闭的,可以通过以下命令开启查询日志:set global generallog=1 set global logoutput='table'; general_log=1 为开启查询日志,0 为关闭查询日志,这个设置命令即时生效,不用重启 MySQL 服...

2020-11-02 23:59:06 616

原创 MySQL 四 锁

四、MySQL 锁1、 锁用于数据库并发控制2、 死锁案例: 1)将投资的钱拆封几份借给借款人,这时处理业务逻辑就要把若干个借款人一起锁住 select * from xxx where id in (xx,xx,xx) for update。 2)批量入库,存在则更新,不存在则插入。解决方法 insert into tab(xx,xx) on duplicate key update xx='xx'。3、 对待死锁常见的两种策略: 1)通过 innod...

2020-11-02 23:55:59 242 1

原创 MySQL 三 索引

三、MySQL 事务1、 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行; 事务是一组不可再分割的操作集合(工作逻辑单元)2、 在 MySQL 中只有 InnDB 引擎支持事务3、 开启事务 1)mysql中如何开启事务: begin / start transaction -- 手工 commit / rollback -- 事务提交或回滚 set ...

2020-11-02 23:54:24 455

原创 MySQL 二 基础

二、MySQL 索引 1、 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构2、 索引的优点: 1)索引能极大的减少存储引擎需要扫描的数据量 2)索引可以把随机IO变成顺序IO 3)索引可以帮助我们在进行分组、排序等操作时,避免使用临时表3、 SHOW INDEX FROM T 查询表 T 所有索引4、 MySQL 中最多可以创建 16 个索引列5、 MySQL 索引的逻辑分类 1)主键索引:一张表只能有一个主键索引,不允许重复、不...

2020-11-02 23:53:00 139

原创 MySQL 一 体系结构

一、MySQL 体系结构1、 Client Connectors 接入方2、 Management Serveices & Utilities 系统管理和控制工具。例如:备份恢复、mysqldump、 mysql复制集群、分区管理3、 Connection Pool 连接池。管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求4、 SQL Interface SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL In..

2020-11-02 23:50:53 215 1

原创 SpringCloud 第一节 SpringCloud简介

1、 Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。2、 优点: 集大成者,Spring Cloud 包含了微服务架构的方方面面。 约定优于配置,基于注解,没有配置文件。 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。 开发灵...

2020-10-19 23:03:30 72

原创 数据结构 第四节 括号匹配问题

public interface Stack { public void push(Object obj) throws Exception; public Object pop() throws Exception; public Object getTop() throws Exception; public Boolean notEmpty();}public class SeqStack implements Stack { int top; .

2020-10-19 19:00:35 100

原创 多线程 第十一节 锁总结

锁总结这一节可以结合 第四节 Java 虚拟机对 synchronized 的优化 及 第三节中的锁优化一起学习1、 乐观锁和悲观锁 乐观锁 CAS——ABA 问题:Java 提供了一个 AtomicStampedReference 原子引用变量,通过添加版本号来解决 ABA 的问题 悲观锁 Synchronized2、 公平锁和非公平锁 ReentrantLock3、 独占锁和共享锁 ReentrantRea...

2020-10-09 16:56:33 64

原创 多线程 第十节 Java 中的原子操作

Java 中的原子操作1、 java.util.concurrent.atomic包下2、 线程原子性操作:AtomicInteger 作为成员变量使用3、 分类:原子更新基本类型、原子更新数组类型、原子更新引用类型、原子更新属性类型import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest { private static AtomicInteger at...

2020-10-09 16:43:03 92

原创 多线程 第九节 线程池

Thread Pool1、 为了避免系统频繁的创建和销毁线程,我们可以将创建的线程进行复用。2、 在线程池中总有那么几个活跃的线程,也有一定的最大值限制,一个业务使用完线程之后,不是立即销毁而是将其放入到线程池中,从而实现线程的复用。简而言之:创建线程变成了从线程池获取空闲的线程,关闭线程变成了向池子中归还线程。3、 线程池优点: 1) 可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。 2) 避免创建大量同类线程所导致的资源过度竞争和内存溢...

2020-10-09 16:33:45 89

原创 多线程 第八节 线程间通信之Lock

Lock1、 Lock 对象实现线程同步和线程间通信2、 Lock 其实是一个接口,在 JDK1.5 以后开始提供,其实现类常用的有 ReentrantLock,这里所说的 Lock 对象即是指 Lock 接口的实现类,简称为 Lock 对象。3、 使用 synchronized和Lock关键字实现同步功能 Lock 在使用时需要显式地获取和释放锁。拥有锁获取与释放的可操作性、可中断的获取锁、超时获取锁 synchronized 实现的隐式的获取所和释放锁4、...

2020-10-09 10:53:47 264

原创 多线程 第七节 CountDownLatch 与 CyclicBarrier

CountDownLatch线程计数器1、 CountDownLatch位于java.util.concurrent 包下,是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。2、 CountDownLatch 是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。3、 C...

2020-10-09 07:51:14 131

原创 多线程 第六节 ThreadLocal

ThreadLocal1、 ThreadLocal线程局部变量。 JDK 提供的 ThreadLocal 使每一个线程都有自己的局部变量。2、 ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。3、 使用场景: 1) ThreadLocal 可以用来管理 Session,因为每个人的信息都是不一样的,所以就很适合用 ThreadLocal 来管理 2) 数据库连接...

2020-10-02 01:27:37 99

原创 多线程 第五节 线程间通信

wait/notify 线程间通信1、Java 的一种实现线程间通信的机制是:wait/notify 线程间通信。wait() 方法实现线程等待,使用 notify()/notifyAll() 方法唤醒线程2、应用场景:去银行办业务,进门之后取票号,等叫到号码的时候会广播通知我们办业务3、wait 方法: 1) 在调用wait()之前,线程必须获得该对象级别锁(监视器),只能在同步方法或同步块中调用wait()方法。 2) 作用是使当前执行代码的线程等待,释放其对象...

2020-10-02 01:18:25 64

原创 多线程 第四节 Java 虚拟机对 synchronized 的优化

1、 synchronized 相对于 volatile 是重量了很多,因此在以前很让人诟病,但是从 JDK 1.6 版本以后为了减少获得锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁,以及锁的存储结构和升级过程。2、 在 Java SE 1.6 中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态3、 这四种状态会随着竞争情况逐渐升级。锁可以升级但不能降级4、 这是因为,自旋锁无法预知到底会空循环几个时钟周期,并且会很消耗 CPU,为了避免这种无用的自旋操作,

2020-09-19 12:57:52 185

原创 多线程 第三节 Synchronized与Volatile

Synchronized解释 1、 Java 中的每个对象都有一个锁或者叫做监视器(monitor) ,当访问某个对象的 synchronized 方法时, 表示将该对象上锁 ,此时其他任何线程都无法再去访问该 synchronized 方法了, 直到之前的那个线程执行方法完毕后 ( 或者是抛出了异常) ,将该对象的锁释放掉,其他线程才有可能再去访问该 synchronized 方法。 2、 Synchronized:是同步关键字,对需要锁定的资源加上该关键字,即为同步监视器。Sy...

2020-09-19 12:49:40 133

原创 ZooKeeper 第二节 ZooKeeper集群

1、 通常zookeeper 是由 2n+1 台 server 组成,每个 server 都知道彼此的存在。只要有 n+1 台(大多数) server 可用,整个系统保持可用。2、 集群角色 Leader角色 Leader服务器是整个 zookeeper 集群的核心,主要的工作任务有两项 1)事务请求的唯一调度和处理者,保证集群事物处理的顺序性 2)集群内部各服务器的调度者 Follower角色 Followe...

2020-09-18 23:03:16 134

原创 ZooKeeper 第一节 基本概念

1、 zookeeper 是一个开源的分布式协调服务2、 zookeeper 的设计目标:是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集(由若干条指令组成的,完成一定功能的一个过程),并且以一系列简单易用的接口提供给用户使用3、 zookeeper 的应用场景:服务中心、应用中心、实现负载均衡、分布式锁4、 zookeeper四种类型的节点 znode创建类型(CreateMode),有以下四种: PERSISTENT ...

2020-09-17 23:11:15 109

原创 多线程 第二节 线程创建与线程安全

1、 线程间的互斥 在Java中,用互斥锁来保证共享数据操作的完整性。 可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。2、 Synchronized的使用方式3、 Synchronized 锁重入 最大的作用是避免死锁 可重入锁具有父子可继承性4、 Java 虚拟机对 synchronized 的优化 在 Java SE 1.6 中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态 锁可以升级但...

2020-09-16 22:21:04 146

原创 多线程 第一节 基础知识

基础 1、进程: 执行中的程序 进程是线程的容器 是程序的实体 资源分配和调度的基本单位 2、 线程: 是来执行程序的 同一进程中的线程共用相同的地址空间 表示程序的执行流程 能够执行程序代码的一个执行单位 3、 一个进程至少要包含一个线程 同一进程下的线程共享全局变量、静态变量等数据 4、 线程的状态 新建- ...

2020-09-15 22:05:19 87

原创 设计模式 第十节 观察者模式(Observer)

1、 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。2、 特点:一般由两个角色组成:发布者和订阅者(观察者)。观察者通常有一个回调,也可以没有。3、 应用场景:监听器、xml解析、监听器、日志收集、短信通知、邮件通知 Sp...

2020-09-14 22:22:26 185

原创 设计模式 第九节 装饰器模式(Decorator)

1、 是指动态地给一个对象增加一些额外的功能,同时又不改变其结构。2、 特点:注重覆盖、扩展。 装饰器和被装饰器都实现同一个接口,主要目的是为了扩展之后依旧保留OOP 关系(同宗同源)3、 应用场景:数据源自动切换、IO 流包装、简历包装4、 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能 扩展功能的方式比较灵活; 每一个装饰器相互独立,需要修改时不会互相影响。 缺点:多层装饰比较复杂...

2020-09-14 22:07:10 111

原创 设计模式 第八节 适配器模式(Adapter)

1、 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。2、 特点:注重兼容、转换。适配者与被适配这之间没有层级关系,也没有必然联系。3、 应用场景:编码解码、一拖三充电头、HDMI 转VGA、Type-C 转USB Spring AOP 模块对BeforeAdvice、AfterAdvice、ThrowsAdvice 三种通知类型的支持实际上是借助适配器模式来实现的4、 优点: 可以让两个没有关联的类一起运行,起着中间转换的作用; ...

2020-09-14 21:43:51 222

原创 设计模式 第十一节 责任链模式(Chain of Responsibility)

1、 责任链模式为某个请求创建一个对象链,每个对象依次检查此请求,并对其进行处理,或者将它传给链中的下一个对象。2、 应用场景:经常用于过滤器,拦截器,事件( 鼠标键盘事件,冒泡事件等 )等场景。Servlet 中的过滤器 Filter 就是典型的责任链模式3、 优点 请求者和接收者解耦; 可以动态地增加或减少责任链上的对象,或者修改顺序。 缺点 调用者不知道请求可能被哪些责任链对象处理,不利于排错; 用户请求可能被责任链中途拦截,...

2020-09-14 15:43:19 92

原创 数据结构 第三节 基数排序

public class Node{ Object element; Node next; Node(Object obj,Node nextval){ element = obj; next = nextval; } Node(Node nextval){ next = nextval; } public Node getNext(){ return next; } public void setNext(Node nextval){ next .

2020-09-10 22:32:53 70

原创 设计模式 第七节 模板方法模式(Template Method)

1、 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 Spring ORM 数据模型2、 特点:执行流程固定,但中间有些步骤有细微差别(运行时才确定)。可实现批量生产。3、 应用场景:4、 优点: 提高代码复用性:将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中; 实现了反向控制:通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为...

2020-09-10 21:45:51 84

原创 设计模式 第六节 策略模式(Strategy)

1、 是指定义一系列算法,将每个算法都封装起来,并且使他们之间可以相互替换。 Spring 中在实例化对象的时候用到Strategy 模式,在SimpleInstantiationStrategy 有使用。2、 特点:最终执行结果是固定的。执行过程和执行逻辑不一样。3、 优点:遵循了开闭原则,扩展性良好。 缺点:随着策略的增加,对外暴露越来越多。4、 应用场景:更换主题public interface IFruit { void buyFruit();}p...

2020-09-10 21:42:10 101

原创 设计模式 第五节 代理模式(Proxy)

1、 代理模式的作用是为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下一个客户对象不想或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用2、 应用场景:AOP实现,拦截器、中介、延迟加载3、 代理模式分类:静态代理、动态代理 在静态代理中,被代理的类是固定的,一个代理类对应一个被代理类。 动态代理就是被代理的类是代码运行时指定的。JDK 为我们提供了一种动态代理的实现,通过实现 InvocationHandler 接口来实现动态代理...

2020-09-09 20:13:45 125

原创 设计模式 第四节 原型模式(Prototype)

1、 应用场景:从一个对象再创建另外一个可定制的对象,不需要知道任何创建的细节。就是Java 中的克隆技术。新的对象具备原型对象的特点,效率高(避免了重新执行构造过程步骤) 如:DTO、VO、POJO、Entity2、 特点: 首先有一个原型。 数据内容相同,但对象实例不同(完全两个个体)。3、 java用clone来实现原型模式,还可以用反射、循环来实现...

2020-09-09 20:06:35 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除