Observer

面试官:用过 ZooKeeper 吗?基本原理你明白吗?

笑着哭i 提交于 2020-08-10 21:52:24
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! ZooKeeper 简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ZooKeeper 设计目的 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。 可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。 等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。 原子性:更新只能成功或者失败,没有中间状态。 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。 ZooKeeper数据模型

RAC <五> 循环引用分析

廉价感情. 提交于 2020-08-10 06:44:04
RAC 可以接管iOS开发中所有的事件,之前文章也说过。虽然学习成本比较大,但是不用RAC的话,很多事件的写法都不太一样,东写一块,西写一块。 RAC 如何取代 KVO? @property ( nonatomic , strong ) Person * person ; - ( void ) viewDidLoad { [ super viewDidLoad ]; //RAC 如何取代 KVO self . person = [[ Person alloc ] init ]; //监听 name 属性的变化 两个参数 第一个监听对象是谁,第二个监听的属性 RACObserve ( self . person , name ); //一行代码完成 KVO的监听,而且不需要自己去取消监听,RAC已经帮忙做好了。 } 利用上节的查看运行原理: - (void)viewDidLoad { [super viewDidLoad]; self.person = [[Person alloc] init]; ({ __attribute__((objc_ownership(weak))) id target_ = (self.person); [target_ rac_valuesForKeyPath:@(((void)(__objc_no && ((void)self.person.name

跟我一起学习设计模式(一)总览

南楼画角 提交于 2020-08-10 01:44:59
Dessign Pattern Overview 目录 Dessign Pattern Overview Overview Core Concepts Design Principle Refactoring to Patterns GOF-23 Encapsulate Change Overview 在 软件工程 中, 设计模式 (design pattern)是对 软件设计 中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希·伽玛 (Erich Gamma)等人在1990年代从 建筑设计 领域引入到 计算机科学 的。 设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类别 或 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 引用自维基百科 Core Concepts 变化是复用的天敌,本质是找到变化,封装变化,提高可复用性 如果一个系统所有点都在变化或者一直不变,是不能用设计模式来解决的 Design Principle 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应当依赖于抽象(稳定) 抽象(稳定

python中文件变化监控-watchdog

99封情书 提交于 2020-08-09 21:34:41
起步 在python中文件监控主要有两个库,一个是 pyinotify ,一个是 watchdog 。pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装。因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅读一下watchdog实现源码,有利于深刻的理解其中的原理)。 watchdog在不同的平台使用不同的方法进行文件检测。在init.py中发现了如下注释: |Inotify| Linux 2.6.13+ ``inotify(7)`` based observer |FSEvents| Mac OS X FSEvents based observer |Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer |WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer |Polling| Any fallback implementation 给出示例代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by victor # 本模块的功能:<检测文件夹变化> #

史上最便捷搭建 ZooKeeper 服务器的方法

左心房为你撑大大i 提交于 2020-08-09 14:23:56
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是 ZooKeeper ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。 ZooKeeper 有三种运行模式:单机模式、伪集群模式和集群模式。 单机模式:这种模式一般适用于开发测试环境,一方面我们没有那么多机器资源,另外就是平时的开发调试并不需要极好的稳定性。 集群模式:一个 ZooKeeper 集群通常由一组机器组成,一般 3 台以上就可以组成一个可用的 ZooKeeper 集群了。组成 ZooKeeper 集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。 伪集群模式:这是一种特殊的集群模式,即集群的所有服务器都部署在一台机器上。当你手头上有一台比较好的机器,如果作为单机模式进行部署,就会浪费资源,这种情况下,ZooKeeper允许你在一台机器上通过启动不同的端口来启动多个 ZooKeeper 服务实例,以此来以集群的特性来对外服务。

观察者Observer

烈酒焚心 提交于 2020-08-09 06:52:42
总结:相当于一个有监视器监视事件源,事件触发,之后不同的观察者去执行的逻辑 介绍 意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用: 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。 如何解决: 使用面向对象技术,可以将这种依赖关系弱化。 关键代码: 在抽象类里有一个 ArrayList 存放观察者们。 应用实例: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。 优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。 缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 使用场景: 图解: /designPatterns/src/com/feiyu/observer 代码结构

一起聊聊PHP的几个设计模式

本小妞迷上赌 提交于 2020-08-09 04:26:28
工厂模式 1、简单工厂模式 目的 简单工厂模式是一个精简版的工厂模式 。 它与静态工厂模式最大的区别是它不是『静态』的。因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类。甚至可以模拟(Mock)他,这对编写可测试的代码来讲至关重要。 这也是它比静态工厂模式受欢迎的原因! UML 图 代码 SimpleFactory.php Bicycle.php 用法 测试 Tests/SimpleFactoryTest.php 2、静态工厂模式 目的 与抽象工厂模式类似,此模式用于创建一系列相关或相互依赖的对象。 『静态工厂模式』与『抽象工厂模式』的区别在于,只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 factory 或 build。 例子 Zend Framework: Zend_Cache_Backend 或 _Frontend 使用工厂方法创建缓存后端或前端 UML 图 代码 StaticFactory.php FormatterInterface.php FormatString.php FormatNumber.php 测试 Tests/StaticFactoryTest.php 3、抽象工厂模式 目的 在不指定具体类的情况下创建一系列相关或依赖对象。 通常创建的类都实现相同的接口。 抽象工厂的客户并不关心这些对象是如何创建的

2020年面向高级开发人员的iOS面试题总结(附答案)

北城余情 提交于 2020-08-08 07:37:09
前言: 欢迎关注 我的简书 查看更多好文章 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的各个方面,旨在触及对平台的广泛理解。 毕竟,高级开发人员应该能够从头到尾地发布完整的iOS产品。 这绝不是一个详尽的列表,但它可以帮助你为即将到来的技术iOS面试做准备。 目录 你使用的最新版本的iOS是什么?你喜欢什么,为什么? 什么是iOS应用程序,你的代码适合哪里? 你喜欢或不喜欢什么Swift特性?为什么? 内存管理在iOS上如何处理? 你对单身人士有什么了解?你会在哪里使用一个,你不在哪里? 你能否解释一下Delegate和KVO有什么不同? iOS应用中通常使用哪些设计模式? 你知道除了常见的可可模式外还有哪些设计模式? 你能否解释并展示SOLID原则的例子? 你有什么选择在iOS上实现存储和持久性? 你有什么选择在iOS上实现网络和HTTP? 如何以及何时需要在iOS上序列化和映射数据? 在iOS上布置UI有什么选择? 你将如何优化动态大小的表或集合视图的滚动性能? 你将如何在iOS上执行异步任务? 你如何管理依赖关系? 你如何在iOS上调试和配置文件? 你有TDD经验吗?你如何在iOS上进行单元和UI测试? 你编码审查和/或配对计划? 在下面的章节中,我们将讨论每个问题,背后的原因,预期的答案,以及可能为面试官带来危险的答案。 1

zookpeer常见面试题

早过忘川 提交于 2020-08-08 04:31:53
1.ZAB 协议是什么? ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持崩溃恢复的原子广播协议。 ZAB 协议包括两种基本的模式: 崩溃恢复和消息广播 。 当整个 zookeeper 集群刚刚启动或者 Leader 服务器宕机、重启或者网络故障导致不存在过半 的服务器与 Leader 服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式; 首先 选举产生新的 Leader 服务器,然后集群中 Follower 服务器开始与新的 Leader 服务器进行数 据同步,当集群中超过半数机器与该 Leader 服务器完成数据同步之后,退出恢复模式进入 消息广播模式, Leader 服务器开始接收客户端的事务请求生成事物提案来进行事务请求处 理。 2.Znode 有哪几种类型 PERSISTENT- 持久节点 除非手动删除,否则节点一直存在于 Zookeeper 上 EPHEMERAL- 临时节点 临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与 zookeeper 连接断 开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。 PERSISTENT_SEQUENTIAL- 持久顺序节点 基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整 型数字。 EPHEMERAL_SEQUENTIAL- 临时顺序节点

java+微信小程序结合发布订阅模式实现异步发送订阅消息

和自甴很熟 提交于 2020-08-07 13:27:27
需求:用户报名成功发送通知 一.首先定义事件的even @Data @AllArgsConstructor @NoArgsConstructor public class ApiCyActivityEven { /** * openId */ private String touser ; /** * 模板id */ private String template_id ; /** * 跳转页面路径 */ private String page ; /** * 跳转小程序类型 */ private String miniprogram_state ; /** * 语言类型 */ private String lang ; /** * 推送文字 */ private Map < String , Object > data ; } ; 二.然后自定义事件监听器 @Component ( "apiCyActivityListener" ) @AllArgsConstructor @Slf4j public class ApiCyActivityListener { private final WxConfig wxConfig ; @Async @EventListener ( ApiCyActivityEven . class ) @Order ( 0 ) public void