上下文

Flask的上下文管理机制

喜夏-厌秋 提交于 2019-11-27 14:36:21
前引   在了解flask上下文管理机制之前,先来一波必知必会的知识点。 面向对象双下方法   首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__、__getattr__系列、__getitem__系列。   __call__   这个方法相信大家并不陌生,在单例模式中,我们可能用到过,除此之外,还想就没有在什么特殊场景中用到了。我们往往忽视了它一个很特殊的用法:对象object+()或者类Foo()+()这种很特殊的用法。在Flask上下文管理中,入口就是使用了这种方式。   __getitem__系列   使用这个系列的方法时,我们最大的印象就是调用对象的属性可以像字典取值一样使用中括号([])。使用中括号对对象中的属性进行取值、赋值或者删除时,会自动触发对应的__getitem__、__setitem__、__delitem__方法。 class Foo(object): def __init__(self): self.name = "boo" def __getitem__(self, item): print("调用__getitem__了") if item in self.__dict__: return self.__dict__[item] def __setitem__(self, key, value): print("调用_

函数式编程中的函数—函数式编程的多态

♀尐吖头ヾ 提交于 2019-11-27 13:37:44
函数式编程中的函数—函数式编程的多态 保存了计算上下文和计算过程的特殊值 保存了计算上下文和计算过程的有输入输出的可计算结构。 保存了计算上下文和计算过程的可配置结构;(柯里化)。 函数作为一种特殊的值和结构,可以由更高阶的函数对其进行组合、变换、柯里化等操作; 函数作为输入和输出:本质上都是可配置、可计算结构。 可配置的是作为参量输入的计算上下文; 可计算是计算上下文配置完备后直接进行计算; 普通函数; 参数函数(闭包函数); 高阶函数; 返回函数(内部函数); 值函数:被其它函数引用和调用的函数; 上下文函数:给值函数提供上下文(参量)的函数。 函数:需要初始化的可求值结构; 函数变量:需要二阶初始化的可求值变量 1、求值结构初始化;函数绑定; 2、求值上下文初始化;参数变量绑定; 函数作为返回值的函数的解析 1、定义函数变量,引用函数返回值; 2、对函数变量进行上下文初始化,执行求值; 形参上下文: 函数内部对其它函数的引用,一部分是通过形参初始化的; 编译器会对所有的基础函数:不管是内部还是外部的进行编译存储。 函数式编程中可变的是同一签名下,不同实现的函数的可替代性。 基础函数:函数式编程中所有的不可变的函数; 组合函数:通过不可变的函数结合而成的函数。 组合函数的调用入口仍然是基础函数; 函数式编程的多态: 同一个基础函数与不同的其它函数组合,会有不同的行为形式。 来源

9.源码分析---SOFARPC内置链路追踪SOFATRACER是怎么做的?

别来无恙 提交于 2019-11-27 12:32:43
SOFARPC源码解析系列: 1. 源码分析---SOFARPC可扩展的机制SPI 2. 源码分析---SOFARPC客户端服务引用 3. 源码分析---SOFARPC客户端服务调用 4. 源码分析---SOFARPC服务端暴露 5.源码分析---SOFARPC调用服务 6.源码分析---和dubbo相比SOFARPC是如何实现负载均衡的? 7.源码分析---SOFARPC是如何实现连接管理与心跳? 8.源码分析---从设计模式中看SOFARPC中的EventBus? 9.源码分析---SOFARPC是如何实现故障剔除的? 大家在看链路追踪之前可以先去看看官方的这篇文章 SOFARPC 链路追踪剖析 ,有助于理解。 我先把官方的一个图拿过来,这张图表示的是整个RPC调用框架的一个事件发送的先后顺序。 图中分别对应的事件是: ClientStartInvokeEvent ClientBeforeSendEvent ClientAfterSendEvent ServerReceiveEvent ServerSendEvent ServerEndHandleEvent ClientSyncReceiveEvent ClientAsyncReceiveEvent ClientEndInvokeEvent 其中因为ClientAfterSendEvent

夯实JS主要知识点

。_饼干妹妹 提交于 2019-11-27 12:25:13
夯实JS主要知识点 转自:https://juejin.im/post/5d54e78be51d4561b072dce6 从事前端行业到现在,感觉自己进步最大的时候就是去年打算换工作开始学习的那段时间,特别是看 yck 大佬的掘金小册《前端面试之道》的那段时间。正是那段时间的学习,慢慢对前端知识体系有了个模糊的轮廓,而且也开始接触掘金这个有意思的技术平台。如今工作尘埃落定,倒开始懒散了,通勤路上又开始玩游戏了,晚上回家又开始玩游戏不看书了,闲的时候开始在微信群QQ群注水了。可是距离30岁越来越近,眼前的路却越来越模糊。我知道留给我补课的时间不多了。工作的前三年已经被我挥霍掉,如果这两年不把失去的时间补回来,我可能永远都只能停留在初中级程序员的水平。谨记我还是一个半路出家的非科班出身的大龄初级前端开发工程师,自勉! 基本类型和引用类型 类型判断 强制类型转换 作用域 执行上下文 理解函数的执行过程 this 指向 闭包 原型和原型链 js 的继承 event loop 基本类型和引用类型 js中数据类型分为基本类型和引用类型,基本类型有六种: number string boolean null undefined symbol (es6) 引用类型包括对象 object 、数组 array 、函数 function 等,统称对象类型: object string 类型即字符串

DDD初学指南

痞子三分冷 提交于 2019-11-27 11:03:48
  因为不想对原文进行修改了,所以直接把评论贴上来了,现在看来,当年的认识确实有些问题,不只评论提到的,当年只是按部就班,其实真的做好应该是于无声处听惊雷,不过既然是给初学者看的,还是从简单的地方来吧,虽然有问题,但是对初学者来说也是有参考价值的,还是建议看一看想一想,尤其那些整天提DDD,但是书都没看过的 2016-05-31 12:46 ImCoOLeR 写得不错,好话我就不说了,浪费时间也没意义。我不同意的是DDD不适用于小项目,你说的一点我很肯定,就是DDD是设计方法,但是适不适合小项目要看DDD架构,DDD是适用于多架构的。当然小项目也许没有必要用DDD,但不等同于小项目不适合用DDD。 关于精炼我也有不同看法,精炼不仅仅是业务领域,模型或者设计元件的细分,剥洋葱的说法我不赞同。精炼是对模型的锤炼,是对业务深层次探索得出的。精炼不等于细化,而是聆听领域专家,是模型跟接近于现实中的业务领域。 我没有全部看完,大致上的看法就是这样,希望共同进步。 @ ImCoOLeR 刚看到。。。,这篇开始写的时候比较早差不多是14年写了大概,一直在草稿里15年发的,就现在来看,这篇博客里有很多不准确的地方,但是作为当年的学习的历程,所以不想改了 说不适合小项目大概是因为当时正在公司推DDD,也是一边学一边推,按部就班的落实到项目中,忽视了其实所有项目都是可以借鉴DDD思想的

spring之ioc

ε祈祈猫儿з 提交于 2019-11-27 10:53:09
1. 什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 2. 什么是控制反转(或依赖注入) 控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。 IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中 使用spring框架 先导入依赖 pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www

变量提升与执行上下文

。_饼干妹妹 提交于 2019-11-27 10:52:30
变量提升 (预处理) js引擎在代码正式施行前会做一个预处理的工作:   1.收集变量   2.收集函数 变量提升的原理即是html中的执行上下文概念 执行上下文(execute context) EC 理解:代码执行的环境 时机:代码正式执行前会进入到执行环境 工作:   1.创建变量对象:     1)变量     2)函数及函数的参数     3)全局:window     4)局部:抽象但确实存在的对象   2.确认this的指向     1)全局:this -----》 window     2)局部:this ------》 调用的对象   3.创建作用域链     父级作用域链 + 当前的变量对象   4.扩展:     ECObj = {       变量对象:{变量 , 函数 , 函数的形参 }       scopeChain:父级作用域链 + 当前的变量对象,       this:{ window || 调用的对象}     } 来源: https://www.cnblogs.com/BR-Tao/p/11360517.html

常见的前端常见问题01

不想你离开。 提交于 2019-11-27 09:27:12
目录 1.this指向什么......及call/apply/bind改变this指向8 2.作用域和作用域链 3.执行上下文 4.类 5.继承 6.原型、原型链 7. 执行多个并发请求 8.diff算法和虚拟DOM 1.this指向什么......及call/apply/bind改变this指向8 this是运行期间绑定,和它声明的环境没有关系,只与调用它的对象有关。 1.默认绑定: var name = 'lufei' function show() { var name = 'namei' console.log(this.name) } show() // lufei 可以看出最后 this 绑定在全局对象上,所以结果是 lufei。 2.隐式绑定: function show() { var member = 'namei' console.log(this.member) } var member = 'zoro' var caomao = { member: 'lufei', showMember: show } caomao.showMember() // lufei 这里最后通过 caomao 来调用这个函数,函数中的 this 则被绑定到 caomao 这个对象上。 3.显示绑定: var caomao = { member: 'lufei' } var

上下文管理协议总结

给你一囗甜甜゛ 提交于 2019-11-27 07:52:28
```python with obj as f: '代码块' 1.with obj ----》触发obj.__enter__(),拿到返回值 2.as f----->f=返回值、 3.with obj as f 等同于 f=obj.__enter__() 4.执行代码块 一:没有异常的情况下,整个with代码块运行完毕后去触发__exit__,它的三个参数都为None 二:有异常的情况下,从异常出现的位置直接触发__exit__ a:如果__exit__的返回值为True,代表吞掉了异常 b:如果__exit__的返回值不为True,代表吐出了异常 c:__exit__的的运行完毕就代表了整个with语句的执行完毕。 若为a情况,with里面的语句,后面部分不会执行,执行with外面的语句 若为b情况,报出异常,后面的所有代码全部不会执行 好处:不用手动关闭这个存在内存中的obj,with代码执行完毕或遇到异常时,触发__exit__,二这里面可以自定义自动释放资源的机制,结束掉内存中的obj 比如文件处理,网络连接等等 ``` 当执行with 语句时,会先执行enter ,当代码执行完毕后执行exit,或者代码遇到了异常会立即执行exit,并传入错误信息包含错误的类型.错误的信息.错误的追踪信息 ``` enter 函数应该返回对象自己 exit函数 可以有返回值

Go语言并发机制

冷暖自知 提交于 2019-11-27 05:36:21
Go语言中的并发 使用goroutine编程 使用 go 关键字用来创建 goroutine 。将go声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程。这种线程在Go语言中称作goroutine。 goroutine的用法如下: //go 关键字放在方法调用前新建一个 goroutine 并执行方法体 go GetThingDone(param1, param2); //新建一个匿名方法并执行 go func(param1, param2) { }(val1, val2) //直接新建一个 goroutine 并在 goroutine 中执行代码块 go { //do someting... } 因为 goroutine 在多核 cpu 环境下是并行的。如果代码块在多个 goroutine 中执行,我们就实现了代码并行。 如果我们需要了解程序的执行情况,怎么拿到并行的结果呢?需要配合使用channel进行。 使用Channel控制并发 Channels用来同步并发执行的函数并提供它们某种传值交流的机制。 通过channel传递的元素类型、容器(或缓冲区)和传递的方向由“<-”操作符指定。 可以使用内置函数 make分配一个channel: i := make(chan int) // by default the