once

Grand Central Dispatch (GCD)

此生再无相见时 提交于 2020-04-03 05:30:38
1. 关于 dispatch_once dispatch_once Executes a block object once and only once for the lifetime of an application. 在stackoverflow上有个对dispatch_once的解释,非常棒: What's the exact reason for using dispatch_once in the shared instance accessor of a singleton under ARC? +(MyClass*)sharedInstance { // Static local predicate must be initialized to 0 staticMyClass*sharedInstance = nil; staticdispatch_once_t onceToken =0; dispatch_once(&onceToken,^{ sharedInstance =[[MyClass alloc] init]; // Do any other initialisation stuff here }); return sharedInstance; } dispatch_once() is absolutely synchronous. Not all

饿汉模式单例模板

老子叫甜甜 提交于 2020-03-30 19:37:22
使用c11的std::call_once实现饿汉模式的单例模板 #ifndef SINGLETON_H #define SINGLETON_H #include <memory> #include <mutex> //单例模板 template <typename T> class Singleton { public: static T& GetInstance(); private: static std::unique_ptr<T> instance; }; template <typename T> std::unique_ptr<T> Singleton<T>::instance; template <typename T> T& Singleton<T>::GetInstance() { std::once_flag sflag; std::call_once(sflag, [&](){ instance.reset(new T()); }); return *instance; } #define SINGLETON(Class) \ public: \ ~Class() = default; \ private: \ Class() = default; \ Class(const Class &other) = delete; \ Class& operator=

Flink Kafka Connector 与 Exactly Once 剖析

限于喜欢 提交于 2020-03-30 14:33:50
Flink Kafka Connector 是 Flink 内置的 Kafka 连接器,它包含了从 Kafka Topic 读入数据的 Flink Kafka Consumer 以及向 Kafka Topic 写出数据的 Flink Kafka Producer,除此之外 Flink Kafa Connector 基于 Flink Checkpoint 机制提供了完善的容错能力。本文从 Flink Kafka Connector 的基本使用到 Kafka 在 Flink 中端到端的容错原理展开讨论。 1.Flink Kafka 的使用 在 Flink 中使用 Kafka Connector 时需要依赖 Kafka 的版本,Flink 针对不同的 Kafka 版本提供了对应的 Connector 实现。 1.1 版本依赖 既然 Flink 对不同版本的 Kafka 有不同实现,在使用时需要注意区分,根据使用环境引入正确的依赖关系。 <dependency> <groupId>org.apache.flink</groupId> <artifactId>${flink_kafka_connector_version}</artifactId> <version>${flink_version}</version> </dependency> 在上面的依赖配置中 ${flink

【Kafka】(二十二)Kafka Exactly Once 语义与事务机制原理

你离开我真会死。 提交于 2020-03-08 20:18:37
写在前面的话 本文所有Kafka原理性的描述除特殊说明外均基于Kafka 1.0.0版本。 为什么要提供事务机制 Kafka事务机制的实现主要是为了支持 Exactly Once 即正好一次语义 操作的原子性 有状态操作的可恢复性 Exactly Once 《 Kafka背景及架构介绍 》一文中有说明Kafka在0.11.0.0之前的版本中只支持 At Least Once 和 At Most Once 语义,尚不支持 Exactly Once 语义。 但是在很多要求严格的场景下,如使用Kafka处理交易数据, Exactly Once 语义是必须的。我们可以通过让下游系统具有幂等性来配合Kafka的 At Least Once 语义来间接实现 Exactly Once 。但是: 该方案要求下游系统支持幂等操作,限制了Kafka的适用场景 实现门槛相对较高,需要用户对Kafka的工作机制非常了解 对于Kafka Stream而言,Kafka本身即是自己的下游系统,但Kafka在0.11.0.0版本之前不具有幂等发送能力 因此,Kafka本身对 Exactly Once 语义的支持就非常必要。 操作原子性 操作的原子性是指,多个操作要么全部成功要么全部失败,不存在部分成功部分失败的可能。 实现原子性操作的意义在于: 操作结果更可控,有助于提升数据一致性 便于故障恢复。因为操作是原子的

【php】include、include_once、require、require_once的区别【转】

巧了我就是萌 提交于 2020-03-04 16:30:28
首先要说的是,include、include_once、require、require_once的核心功能都是一样的,都是相当于把目标网页的代码生硬地直接复制过来。 基本上,如果不从性能上考虑,使用include、include_once、require、require_once都可以达到基本的效果。基本上爱怎么用就怎么用。 其中的微小差别如下: 例如1.php中有句简单的打印语句: <?php echo "1"; ?> 下面的程序运行的结果: <?php include '1.php'; require '1.php'; include_once '1.php'; require_once '1.php'; ?> 为2个1,而不是4个1,因为include和require都是引入指定的文件,_once表示只引入一次,即之前已经引入过的不再引入。 如果写成: <?php include_once '1.php'; require_once '1.php'; include '1.php'; require '1.php'; ?> 结果将是4个1。 值得注意的是,_once虽然表示之前已经引入过的不再引入,但这个语句不会检查所引入的网页中的代码是否相同,比如有两个代码一模一样的网页untitled.html与untitled1.html皆为: <!DOCTYPE html

Vue指令-Vue

寵の児 提交于 2020-03-03 02:01:38
v-model <!-- v-model会将msg的值赋予输入框,输入框的值改变了会影响数据--> <input type="text" v-model="msg"> v-text <!-- v-text==={{}} 防止{{}}出现在页面上--> <div v-text="msg"></div> v-once <!-- v-once只绑定一次,当数据再次发生变化也不会导致页面刷新--> <div v-once>{{msg}}</div> v-html <!-- v-html把html字符串当做html渲染,一定是可以信任的html--> <div v-html="p"></div> 来源: https://www.cnblogs.com/wangshouren/p/11677669.html

009 预处理 #pragma once; typedef; #ifdef

╄→尐↘猪︶ㄣ 提交于 2020-02-29 16:48:39
/* 目录: 一 #pragma once 二 typedef 三 #ifdef */ 一 #pragma once 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式 二 typedef // 给类型/结构取别名 #include "stdafx.h" typedef char * PCHAR; int main(int argc, char *argv[]) { char szStr[20] = "test"; PCHAR pStr = szStr; printf("%c", *pStr); return 0; } // 系统编写 - minwindef.h typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef FLOAT *PFLOAT; typedef BOOL near *PBOOL; typedef BOOL far *LPBOOL; typedef BYTE near *PBYTE; typedef BYTE far *LPBYTE; typedef int near *PINT;

C++11: std::call_once和std::one_flag

Deadly 提交于 2020-02-28 12:59:55
有时候我们需要的变量(variable)容器(container)只需要初始化一次,以容器(containter)为例子,可能只是需要向其中注入一次元素. 只打C++11开始标准库提供了 std::call_once() 和 std::once_flag 的组合可以帮助我们做到这一点. demo1: #include <iostream> #include <thread> #include <mutex> #include <vector> std::vector<int> vec; std::mutex mutex; std::once_flag flag; static int val = 0; void initialized_vec(std::vector<int>& vec) { for (int i = 0; i < 10; ++i) { vec.push_back(val++); } } void print_vec() { std::call_once(flag, initialized_vec, vec); std::lock_guard<std::mutex> auto_lock(mutex); for (const int& number : vec) { std::cout << number << " "; } std::cout << std:

设计模式学习笔记(三)—抽象工厂模式

↘锁芯ラ 提交于 2020-02-27 21:41:28
概念 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。 优缺点 优点: 1、抽象工厂模式隔离了具体类的生产,客户不需要知道什么被创建。 2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象,不会造成混淆和混乱。 3、增加新的具体工厂和具体产品的时候会十分方便,不需要修改现有的代码,符合“开闭原则”。 缺点: 增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。 实现 下面我们通过一个例子来说明抽象工厂模式。 说明: 很多游戏里面都有符文系统,像我们经常玩的英雄联盟里面,就是红色,蓝色和黄色的三种符文,然后每种符文又有一级、二级、三级三个等级。我们现在就针对这个来写抽象工厂模式的例子的代码。这里我们只对应红色符文和蓝色符文两种。首先是两个接口类:IRedMark,IBlueMark

iOS开发——常用宏的定义

筅森魡賤 提交于 2020-02-26 10:08:25
有些时候,我们需要将代码简洁化,这样便于读代码。我们可以将一些不变的东东抽取出来,将变化的东西作为参数。定义为宏,这样在写的时候就简单多了。 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 1.#define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 1.#define kScreenIphone5 (([[UIScreen mainScreen] bounds].size.height)>=568) 3.获取当前屏幕的高度 1.#define kMainScreenHeight ([UIScreen mainScreen].applicationFrame.size.height) 4.获取当前屏幕的宽度 1.#define kMainScreenWidth ([UIScreen mainScreen].applicationFrame.size.width) 5.获得RGB颜色 1.#define SMSColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] 6..自定义Log