Observer

【DB宝30】使用Docker测试Oracle 11g高可用DG功能

余生颓废 提交于 2020-11-30 20:49:50
目录 一、下载镜像 二、初始化环境 三、测试 DG 的高可用功能 3 .1 主备同步 3 .2 switchover 3 .3 failover 3 .4 FSFO ( Fast-Start Failover ) 3 .5 故障切换 四、重建 DG 一、下载镜像 Oracle 11g DG搭建方法参考: 【DB宝29】使用Docker搭建Oracle 11g的DG环境 小麦苗DG环境的hub地址: https://hub.docker.com/r/lhrbest/dg_pri_11.2.0.4/tags https://hub.docker.com/r/lhrbest/dg_phy_11.2.0.4/tags 1 nohup docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/dg_phy_11.2.0.4:1.0 & 2 nohup docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/dg_pri_11.2.0.4:1.0 & 查看镜像: 1 [root@docker36 ~] # docker images | grep dg 2 registry.cn-hangzhou.aliyuncs.com/lhrbest/dg_phy_11.2.0.4 1.0

3分钟看完Java 8——史上最强Java 8新特性总结之第三篇 函数式编程技巧

耗尽温柔 提交于 2020-11-24 10:41:19
目录 · 改写设计模式 · 策略模式(Strategy Pattern) · 模板方法模式(Template Method Pattern) · 观察者模式(Observer Pattern) · 责任链模式(Chain of Responsibility Pattern) · 简单工厂模式(Simple Factory Pattern) · 高阶函数与柯里化 改写设计模式 策略模式(Strategy Pattern) 1. 改写前 a) ValidationStrategy.java 1 public interface ValidationStrategy { 2 3 boolean execute(String s); 4 5 } b) IsNumeric.java 1 public class IsNumeric implements ValidationStrategy { 2 3 public boolean execute(String s) { 4 return s.matches("\\d+" ); 5 } 6 7 } c) IsAllLowerCase.java 1 public class IsAllLowerCase implements ValidationStrategy { 2 3 public boolean execute(String s) {

HBase(八)HBase的协处理器

孤街浪徒 提交于 2020-11-24 06:14:35
一、协处理器简介 1、 起源   Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和、计数、排序等操作。比如,在旧版本的(<0.92)Hbase 中,统计数据表的总行数,需 要使用 Counter 方法,执行一次 MapReduce Job 才能得到。虽然 HBase 在数据存储层中集成 了 MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的相 加或者聚合计算的时候, 如果直接将计算过程放置在 server 端,能够减少通讯开销,从而获 得很好的性能提升。 于是,HBase 在 0.92 之后引入了协处理器(coprocessors),实现一些激动 人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等。 2、介绍   协处理器有两种: observer 和 endpoint   Observer 类似于传统数据库中的触发器,当发生某些事件的时候这类协处理器会被 Server 端调用。Observer Coprocessor 就是一些散布在 HBase Server 端代码中的 hook 钩子, 在固定的事件发生时被调用。比如:put 操作之前有钩子函数 prePut,该函数在 put 操作执 行前会被 Region Server 调用;在 put 操作之后则有 postPut 钩子函数  

React----react组件传值

不羁岁月 提交于 2020-11-23 08:49:41
react组件传值方式: (1)父传子:子组件标签定义自定义属性+子组件内部this.props接收 传递:子组件在父组件中当做标签使用时,子组件标签定义自定义属性val,值为需要传递的值<One val={fatherMsg}></One> 接收:子组件内部通过this.props.val进行接收(使用解构赋值能简化代码,将val先解构出来,直接使用) render(){ let {val} = this .props return ( <div className="one"><p>one接收到app传递过来的值为:{val}</p></div> ) } (2)子传父:子组件标签定义自定义属性fnName+子组件内部this.props.fnName来触发 传递:子组件内部通过this.props.fnName来触发这个函数,参数通过函数进行传递 render(){ return ( <div className="twoSon"> <button onClick={ this .handleClick.bind( this )}>发送给two</button> </div> ) } handleClick(){this.props.fnName(this.state.sonMsg)} 接收:子组件在父组件中当做标签使用时,子组件标签定义自定义属性fnName,值为一个函数

RxJava

ε祈祈猫儿з 提交于 2020-11-19 04:03:43
一 RxJava 的原理 RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。 1.创建一个简单的Observable public class Observable<T> { final OnSubscribe<T> onSubscribe; private Observable(OnSubscribe<T> onSubscribe) { this .onSubscribe = onSubscribe; } public static <T> Observable<T> create(OnSubscribe<T> onSubscribe) { return new Observable<T> (onSubscribe); } public Subscriber subscribe(Subscriber<? super T> subscriber) { // 是 Subscriber 增加的方法 事件还未发送之前执行,用于数据清零或重置 // 如果对线程有要求,要求在主线程上就只能用doOnSubscribe

PHP八大设计模式

感情迁移 提交于 2020-11-18 15:33:04
设计模式 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 单例模式 $_instance必须声明为静态的私有变量 构造函数和析构函数必须声明为私有,防止外部程序new 类从而失去单例模式的意义 getInstance()方法必须设置为公有的,必须调用此方法 以返回实例的一个引用 ::操作符只能访问静态变量和静态函数 new对象都会消耗内存 使用场景:最常用的地方是数据库连接。 使用单例模式生成一个对象后, 该对象可以被其它众多对象所使用。 私有的__clone()方法防止克隆对象 单例模式,使某个类的对象仅允许创建一个。构造函数private修饰,申明一个static getInstance方法,在该方法里创建该对象的实例。如果该实例已经存在,则不创建。比如只需要创建一个数据库连接。 工厂模式 工厂模式,工厂方法或者类生成对象,而不是在代码中直接new。 使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数。 Test1.php <?php class Test1 { static function test () { echo __FILE__ ; } } Factory.php <?php class Factory { /* * 如果某个类在很多的文件中都new

使用IDEA制作Java面向对象小游戏《原谅帽大作战》

蓝咒 提交于 2020-11-14 11:14:20
成果展示 制作思路 第1步:发现类(对象) 人物-小丑: Buffoon 子弹-帽子:Missile 墙体:Wall 爆炸物:Explode 第2步:发现属性 小丑:宽和高,位置(x,y),移动速度 帽子:宽和高,位置(x,y),移动速度 墙体:宽和高,位置(x,y) 爆炸物:宽和高,位置(x,y) 第3步:发现方法 小丑:移动、攻击、人物撞边界 子弹:移动、子弹撞墙、子弹撞边界 爆炸物:消失 重难点分析 窗体如何创建 public class GameClient extends Frame 通过继承Frame类实现Java窗体 public class Frame extends Window implements MenuContainer Frame类继承了Window类和MenuContainer接口 如何将图片加载到窗体里 步骤1:创建常用工具类CommonUtils,新建getImage方法实现将图片资源转换为Java对象 public class CommonUtils { /** * 读取图片资源, 转变为Java对象 Image * @param imgPath 图片路径 * @return Image对象 */ public static Image getImage ( String imgPath ) { ImageIcon imageIcon = new

Android架构之LiveData组件

拥有回忆 提交于 2020-11-10 13:17:31
前言 在上一节中,我们学习了ViewModel,我们使用的是接口来完成ViewModel与页面之间的通信,其实这并不是好的方案。 这篇博客,就让我们来了解LiveData与ViewModel是如何配合工作的。 LiveData介绍 LivaData是一个可被观察的数据容器类。具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为观察者,当该数据发生变化时,观察者能够获得通知。与常规的可观察类不同,LiveData可以感知(如Activity、Fragment或Service)的生命周期。 简单来说,LiveData具有如下优势 LiveData 遵循观察者模式。当生命周期状态发生变化时,LiveData 会通知 Observer 对象,可以在这些Observer对象中更新界面 不会发送内存泄露 如果观察者的生周期处于非活跃状态(如返回栈中的Activity),则它不会接收任何LivaData事件,但是,当非活跃状态变成活跃状态时会立刻接收最新的数据(后台的Activity返回前台时) 当config导致Activity/Fragment重建时,不需要再手动的管理数据的存储与恢复。 LiveData和ViewModel的关系 ViewModel用于存放页面所需要的各种数据,对页面来说,它并不关心ViewModel中的业务逻辑,它只关心需要展示的数据是什么

前端面试题整合(JS进阶篇)(一)

限于喜欢 提交于 2020-11-09 10:44:28
js的垃圾回收机制是什么原理 垃圾回收机制有两种方法 第一种是标记清除法:当变量进入执行环境时,就标记这个变量为”进入环境”,当变量离开环境的时候,则将其标记为”离开环境”,垃圾收集器在运行的时候会给储存在内存中的所有变量都加上标记,然后它会去掉环境中的标量以及被环境中的变量引用的标记,而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了,最后,垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间 第二种是引用计数法:当声明了一个变量并将一个引用类型赋值给改变量是,则这个值得引用次数就是1,相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值得引用次数就减1,当这个引用次数变成0时,则说明没有办法在访问这个值了,因而就可以将其所占的内存空间给收起来,这样垃圾收集器再下次运行时,它就会释放那些引用次数为0的值所占的内存 哪些操作会造成内存泄露,怎样避免内存泄露 会造成内存泄漏的操作: 意外的全局变量引起的内存泄露 闭包引起的内存泄露 控制台日志 没有清理的DOM元素引用 被遗忘的定时器或者回调 避免内存泄露的操作: 减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收 注意程序逻辑,避免“死循环”之类的 避免创建过多的对象 原则:不用了的东西要及时归还(置为null) AMD\CMD区别

ADT

三世轮回 提交于 2020-11-01 11:33:53
需要读的reading MIT6.031 12,13,14 ADT:abstract data type 抽象数据类型 抽象类型:强调“ 作用于数据上的操作”,程序员和 client 无需关心数据如何具体存储的,只需设计 / 使用操作即可。 ADT 是由操作定义的,与其内部如何实现无关! AF:abstraction functions 抽象函数 RI:representation invariants 表示不变量 ADT和RI:如何设计良好的数据结构,通过封装来避免客户端获取数据的内部表示(即表示泄露) 避免潜在的bug--在client和implementer之间建立防火墙 ADT的特性: Invariant 不变量 representation exposure 表示泄露 abstraction functions(AF) 抽象函数 Mutable and immutable types 可变类型的对象:提供了可改变其 内部数据的值的操作 不变数据类型: 其操作不改变 内部值,而是构造新的对象 有时一种类型会提供两种类型,可变数据类型和不可变数据类型 就像StringBuilder是String的可变版本 一个抽象类型的操作可以分为以下四种: Creater:构造器 构造器:可能实现为构造函数或静态函数 就像new ArrayList(),或者静态方法Arrays