Observer

《ASP.NET Core 3框架揭秘》勘误[逐步完善中…]

半腔热情 提交于 2020-04-10 17:19:57
第1版第1/2次印刷 [上册] P6 最后1段 原文:KestrelServer是采用 libuv 创建的跨平台Web服务器。 改为:KestrelServer是一款跨平台Web服务器。 P8 第1段 原文:注册的KestrelServer会绑定到“http//localhost:5000”和“https//localhost:5001”这两个地址监听请求 改为:注册的KestrelServer会绑定到“http : //localhost:5000”和“https : //localhost:5001”这两个地址监听请求 P14 第1段 原文:这两个 终结点 通过预先设置的规则将具有某些特征的请求(如路径、HTTP方法等)映射到对应的终结点 改为:这两个 中间件 通过预先设置的规则将具有某些特征的请求(如路径、HTTP方法等)映射到对应的终结点 P21 第1段 原文:curl.exe or the Invoke-WebRequest 改为: curl或者Invoke-WebRequest P25 第1个代码片段 原文: # 5.2 . 设置(运行)工作目录,并将发布文件复制到out子目录下 WORKDIR / app COPY -- from = build /app/ out . 改为 # 5.2 . 设置(运行)工作目录,并将发布文件复制到out子目录下 WORKDIR /

深入亿点点之Vue:数据响应式

最后都变了- 提交于 2020-04-10 16:23:38
前言 数据响应式原理也是老生常谈了,什么是数据响应式呢? 数据响应式 ,从官方定义来说,将Model绑定到View,当用代码更新Model时,View会自动更新。 数据响应式强调数据驱动DOM生成,而不是直接操作DOM。 而常常和 数据响应式 混为一谈的 数据双向绑定 ,则特指 v-model ,该指令实现了如果用户更新了View,Model也会随之更新。结合响应式原理,则形成了双向绑定,即 双向绑定 = 单向绑定 + UI事件监听 。 本文分为四个部分: 一图理解响应式原理 手把手教你实现数据双向绑定 来个极简实现方案 数据响应式的思考 一图理解响应式原理 Vue通过订阅发布者模式来实现,通过三个类 Observer 、 Dep 、 Watcher 来实现,主要关注每个类的功能和类之间的关系。 首先明确的是三个类之间的对应关系: Observer 与 Dep 是一对一的关系, Dep 与 Watcher 是多对多的关系 。 每个类的具体功能如下: Observer 类 :数据的 观察者 (个人理解上是一个代理发布者),当初始化数据时,遍历数据所有属性,为每一个属性设置一个调度中心( Dep 实例对象),通过 Object.defineProperty 把属性转为 getter/setter ,注入相关的 Dep 调度方法。 Watcher 类 :数据的 订阅者 ,当接收到调度中心

RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)

感情迁移 提交于 2020-04-10 11:21:11
入职公司后,公司要求组件化开发,经过讨论后我将网络请求框架单独进行了封装,不过当时框架里将常用的 util 和 ui 均放入到了共同的 Common 包下,导致里面部分代码耦合,后来为了降低耦合性又将 Common 拆分为了lib_common和lib_ui,但是 lib_ui 依赖了 lib_common,还是导致部分代码耦合,最新一期为了降低组件之间的耦合性,所以单独将 lib_common 中的网络请求单独拆分,并且我又做了新的封装和完善,总之网络框架经过3次大的改造后,使用已经非常稳定了。 使用步骤 1.在Application类中进行初始化操作 ApiConfig build = new ApiConfig.Builder() .setBaseUrl(baseUrl)//BaseUrl,这个地方加入后项目中默认使用该url .setInvalidateToken(0)//Token失效码 .setSucceedCode(200)//成功返回码 .setFilter("com.mp5a5.quit.broadcastFilter")//失效广播Filter设置 //.setDefaultTimeout(2000)//响应时间,可以不设置,默认为2000毫秒 //.setHeads(headMap)//动态添加的header,也可以在其他地方通过ApiConfig

Vue.observable源码解读(by实例)

本秂侑毒 提交于 2020-04-10 10:38:02
Vue.observable 官方文档: https://cn.vuejs.org/v2/api/#Vue-observable 实例: Vue.observable < body > < div id = " root " > {{message}} < button @click = " change " > Change </ button > </ div > < script > const state = Vue . observable ( { message : 'Vue 2.6' } ) const mutation = { setMessage ( value ) { state . message = value } } new Vue ( { el : '#root' , computed : { message ( ) { return state . message } } , methods : { change ( ) { mutation . setMessage ( 'Vue 3.0' ) } } } ) </ script > </ body > 官方解释: Vue.observable(object) 是vue2.6版本新增的全局API,它可以让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。

JAVA中常用的设计模式:单例模式,工厂模式,观察者模式

我的未来我决定 提交于 2020-04-07 12:21:18
1.单例模式 每个类只能创建一个实例对象 Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。 好处: 第一、控制资源的使用,通过线程同步来控制资源的并发访问; 第二、控制实例产生的数量,达到节约资源的目的。 第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。 应用场景:在线统计人数 public class SingleTon { private SingleTon(){} public static volatile SingleTon instance=null; public static SingleTon getInstance( ){ synchronized (SingleTon.class){ if(instance==null){ instance=new SingleTon(); } } } return instance; } public String getName() { return name; } public void setName(String name) { this.name=name;

JAVA中常用的设计模式:单例模式,工厂模式,观察者模式

帅比萌擦擦* 提交于 2020-04-07 10:10:49
1.单例模式 每个类只能创建一个实例对象 Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。 好处: 第一、控制资源的使用,通过线程同步来控制资源的并发访问; 第二、控制实例产生的数量,达到节约资源的目的。 第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。 应用场景:在线统计人数 public class SingleTon { private SingleTon(){} public static volatile SingleTon instance=null; public static SingleTon getInstance( ){ synchronized (SingleTon.class){ if(instance==null){ instance=new SingleTon(); } } } return instance; } public String getName() { return name; } public void setName(String name) { this.name=name;

星际争霸2 AI开发

假如想象 提交于 2020-04-06 16:55:04
准备 我的环境是python3.6,sc2包0.11.1 机器学习包下载链接: pysc2 地图下载链接: maps 游戏下载链接: 国际服 国服 pysc2是DeepMind开发的星际争霸Ⅱ学习环境。 它是封装星际争霸Ⅱ机器学习API,同时也提供Python增强学习环境。 以神族为例编写代码,神族建筑科技图如下: 教程 采矿 # -*- encoding: utf-8 -*- ''' @File : __init__.py.py @Modify Time @Author @Desciption ------------ ------- ----------- 2019/11/3 12:32 Jonas None ''' import sc2 from sc2 import run_game, maps, Race, Difficulty from sc2.player import Bot, Computer class SentdeBot(sc2.BotAI): async def on_step(self, iteration: int): await self.distribute_workers() run_game(maps.get("AcidPlantLE"), [ Bot(Race.Protoss, SentdeBot()), Computer(Race

OceanBase 2.2 安装部署问题解答

笑着哭i 提交于 2020-03-23 20:58:30
3 月,跳不动了?>>> OceanBase 2.2 安装部署问题解答 OceanBase 2.2 自官网提供试用下载后,受到不少数据库爱好者的关注,很多朋友都下载尝试安装,有些成功了,有些碰到了一些问题。本文就是总结一下最近大家遇到的问题,以供后来的朋友试用参考。 关于安装部署的疑问 关于OceanBase的安装方法的文章可能有多种,这里解释一下。 在今年1月份之前官网提供的是OceanBase 1.4版本的相关文件,里面也包含了 OCP 1.x版本及其安装方法。那个版本的OCP安装可能会因为机器环境问题、资源问题而失败。所以我基于那个版本写了一篇文章《 OceanBase数据库实践入门——手动搭建OceanBase集群 》。绕开OCP直接手动安装OceanBase集群。1.4版本的OB兼容MySQL,具备OB大部分的核心能力(高可用、强一致、水平拆分、可扩展等),最重要的一点是对机器内存资源要求比较低,每个节点机器16G内存就可以搭建成功。 机器资源问题是大部分网友试用OB的最大障碍,在2.2版本发布后这点尤为明显。官网提供的2.2的相关文件是按照POC环境或者生产环境要求,无论是OCP还是OB,机器至少要求是128G内存才能顺利跑成功。如果绕过OCP直接手动部署OB,至少每个节点64G内存才可以顺利部署。手动部署需要初始化机器、修改一些参数,详情参见《 OceanBase 2

OceanBase 2.2 安装部署问题解答

让人想犯罪 __ 提交于 2020-03-20 23:36:16
3 月,跳不动了?>>> OceanBase 2.2 安装部署问题解答 OceanBase 2.2 自官网提供试用下载后,受到不少数据库爱好者的关注,很多朋友都下载尝试安装,有些成功了,有些碰到了一些问题。本文就是总结一下最近大家遇到的问题,以供后来的朋友试用参考。 关于安装部署的疑问 关于OceanBase的安装方法的文章可能有多种,这里解释一下。 在今年1月份之前官网提供的是OceanBase 1.4版本的相关文件,里面也包含了 OCP 1.x版本及其安装方法。那个版本的OCP安装可能会因为机器环境问题、资源问题而失败。所以我基于那个版本写了一篇文章《 OceanBase数据库实践入门——手动搭建OceanBase集群 》。绕开OCP直接手动安装OceanBase集群。1.4版本的OB兼容MySQL,具备OB大部分的核心能力(高可用、强一致、水平拆分、可扩展等),最重要的一点是对机器内存资源要求比较低,每个节点机器16G内存就可以搭建成功。 机器资源问题是大部分网友试用OB的最大障碍,在2.2版本发布后这点尤为明显。官网提供的2.2的相关文件是按照POC环境或者生产环境要求,无论是OCP还是OB,机器至少要求是128G内存才能顺利跑成功。如果绕过OCP直接手动部署OB,至少每个节点64G内存才可以顺利部署。手动部署需要初始化机器、修改一些参数,详情参见《 OceanBase 2

《es6标准入门》知识整理(4)- Reflect

。_饼干妹妹 提交于 2020-03-18 22:42:28
3 月,跳不动了?>>> 昨天,我做了 es6 中的新对象 Proxy 的相关的知识整理,现在会整理一下 es6 中另外一个新的内置对象:Reflect。 Reflect 是一个在元编程中使用大量静态方法的全局对象。 跟着我一起来了解一下吧。 Reflect.get() 和 Reflect.set() 可以操作一个对象的属性。 const Jing = { sex: 'female', age: '22' }; console.log(Reflect.get(Jing, 'sex'));// 'female' console.log(Reflect.set(Jing, 'age','21')); console.log(Reflect.get(Jing,'age'))// '21' Reflect 还提供还提供了一种不使用 new,而是用 Refelct.construct 来调用构造函数的方法。如 function Employee(name) { this.name = name; } const huang = new Employee('yuanyuan'); console.log(huang.name)// yuanyuan const zhang = Reflect.construct(Employee, ['zhenzhen']); console.log