首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【单子】说白不过就是【自子范畴】上的一个【幺半群】而已?请说人话!!

起初本瓜看到【单子】说白不过就是【自子范畴】上的一个【幺半群】而已?这句话的时候,还以为自己在看量子力学的量子纠缠相关内容,单子、子、粒子、玻色子、费米子、绝绝子。。。...unit或return,将一个对象x嵌入到单子中: unit(x) :: T -> M T 组合子,典型的叫做bind(约束变量的那个bind),并表示为中缀算子>>=,去包装一个单体变量,接着插入到一个单体函数...),这些多出来的参数和返回值,掩盖在类型里面。...console.log(a.value === 5); // true 代码来源-孟思行 那为什么我们最开始说 Monad 和 Promise 很像?...,也就是一个「自子范畴」,那么相对的「幺半群」就是Promise

1K20

Kafka如何保证数据高可靠

虽然说它存储到某个topic的数据会先拆分多个partition,这体现分治的一个思想。每一个partition在最终存储的时候会保存多个副本,不同的副本存储在不同的节点。...以便增加磁盘的读写性能,缓存满了或者是失效,缓存的数据才会往磁盘里面进行溢写。 这种情况下就一定会带来风险,一旦你的集群断电,缓存的数据还没有来得及往磁盘溢写,那这个时候数据就丢失。...因为返回ack的时候,其实数据已经在多个节点。任意一个节点挂掉,其实对系统是没有影响的。 这里有一个细节,如果目前ISR里面的一个从副本,当长时间与leader数据不同步,也就是落后很多消息。...所以我们也印证前面说的,为什么Kafka它不是一个金融级别可用的,或者金融级别数据安全的消息系统。原因就在这里。...先依赖Kafka,让完成抗压的作用,数据可靠性既然不能依赖Kafka来完成,可以依赖谁来完成?依赖生产者。 生产者在将数据,向Kafka写入的时候,能不能顺手将这个数据写到数据库里

16920
您找到你想要的搜索结果了吗?
是的
没有找到

函数式编程(FP)

面向对象编程:的思维方式是现实世界中的事物抽象成程序世界中的类和对象,然后通过封装,继承和多态来演示事物之间的联系。...面向函数式编程:的思维方式是现实世界中的事物和事物之间的联系,抽象到程序世界中。 函数式编程特点: 程序的本质:就是利用计算机的计算能力将输入转化成对应的输出。...那什么是柯? 当函数有多个参数的时候,我们可以对函数进行改造,只接收部分参数,然后返回一个函数继续等待接收剩余参数,并且返回相应的结果。...什么是函数组合 弄明白化,我们开始函数组合。 开发过程中,有的同学使用高阶函数和高阶组件的时候很容易写出洋葱代码。...(Functor) 到目前来说,我们已经了解了一定的函数式编程的基础,但是我们还没有演示在函数式编程中如何副作用控制在可控范围内、异常处理、异步操作等。

1.6K10

函数式编程了解一下(下)

因为我们利用args来记录每次传入的值,所以我们每次拿curry函数后的传入的参数就必须使用arguments,由于它是类数组,我们想拿到参数值,所以这里我们使用slice。...咱通俗点,类似gulp的pipe概念,你处理完了,吐出来,我接着处理(此处不禁想起人体蜈蚣,哇~),咳咳,正式点,将最左侧的函数输出所为输入发送给右侧函数,从技术上来说,就是管道。 为什么要这样?...多个函数的组合 当前版本的compose只实现俩个函数的组合,那么如果对于多个函数?...我们用这种纯函数的方式来帮助我们处理错误。 子是一个普通对象,实现map函数,在遍历每一个对象的时候生成新的对象 一步步梳理概念 首先我们可以将子理解为容器。...,实现一个map函数。。。

1K20

“零基础”也能学会的python 函数

当然,这种方式的函数在编程实践中没什么用途,仅仅在这里冒出来,后面绝对不用这个形式。 输入 a=3,然后输入y,看看得到什么结果?...已经让a 等于3 为什么结果y 还是8? 还记得前面已经学习过的关于“变量赋值”的原理吗?a=2 的含义是将2 这个对象贴上了变量a 的标签,经过计算,得到了8,之后变量y 引用了对象8。...add_function(2, 3): 这才是真正调用前面建立的函数,并且传入两个参数:a=2,b=3。 仔细观察传入参数的方法,就是2 放在a 那个位置,3 放在b 那个位置。...定义函数的格式为: def 函数名(参数1,参数2,...,参数n): 函数体(语句块) 是不是样式很简单? 几点说明: 函数名的命名规则要符合Python 中的命名要求。...为什么?因为如果命 名乱,计算机就有点不知所措。看Python 对命名的一般要求。 文件名:全小写,可使用下画线。 函数名:小写,可以用下画线风格单词以增加可读性。

34330

函数式编程入门教程

你可能听说过函数式编程(Functional programming),甚至已经使用了一段时间。 但是,你能说清楚,到底是什么吗? ? 网上搜索一下,你会轻松找到好多答案。 ?...这时就需要函数化了。所谓"柯化",就是一个多参数函数,转化为单参数函数。 ? 有化以后,我们就能做到,所有函数只接受一个参数。...Maybe 子就是为了解决这一类问题而设计的。简单说,的map方法里面设置空值检查。 ? 有 Maybe 子,处理空值就不会出错了。 ?...凡是部署ap方法的子,就是 ap 子。 ? 注意,ap方法的参数不是函数,而是另一个子。 因此,前面例子可以写成下面的形式。 ?...ap 子的意义在于,对于那些多参数函数,就可以从多个容器之中取值,实现子的链式操作。 ? 上面代码中,函数add是柯化以后的形式,一共需要两个参数

1.1K20

为什么补码是按位取反加一_补码为什么加1

已经困惑很久,你明明知道补码就是按位取反,然后加一,但是你想知道的,不是怎么求滴,而是,怎来滴。...或许接下来很多资料又讨论反码,但是我们不,我们来求一个一元一次函数,一个小学的函数,1+x=0,求x=?,答:-1。没错,而且准确无误。...但是,还有一个问题,为什么补码的求法是按位取反再加一,其实当你不明白为什么各大书籍都要用按位取反来计算补码的时候,我们完全可以直接用0减去它就得到他相反数的二进制编码,譬如随便一个十六进制数 6C...知道进位丢失的你,肯定知道加起来后等于00000000,虽然结果应该是100000000(后面是8个0),但是只能有8位,所以最高位的1丢失,那么现在好了,也就是说,我们可以00000000看做(11111111...那么我们现在就可以公式写成这样,(11111111 – 一个数的补码)+00000001=相反数的补码,现在我们知道(11111111 – 一个数的补码)=这个数按位取反,然后公式的(11111111

60710

使用多线程增加kafka消费能力

由于是线程池认领这些任务,顺序性是无法保证的,可能有些任务没有执行完毕,后面的任务就已经的offset给提交了。o.O 不过这暂时不重要,首先让并行化运行就好。 ?...KafkaConsumer is not safe for multi-threaded access"); refcount.incrementAndGet(); } 得,只能将commitSync函数放在线程外面...虽然可以直接放在消费者线程运行,但显的特别的乱,可以加入一个生产者消费者模型(你可以认为这是画蛇添足)。这里采用的是阻塞队列依然是SynchronousQueue,充当了管道的功能。 ?...我们任务放入管道后,立马commit。如果线程池已经满了,将一直阻塞在消费者线程,直到有空缺。然后,我们单独启动了一个线程,用来接收这些数据,然后提交到这部分的代码看起来大概这样。 ?...5个9的消息保证是可以做到的,剩下的那点不完美问题消息,你为什么不从日志? ----

4.2K30

那个男人再发力,原来我以前学的 Lambda 都是假的

不过对于一个声明好的函数,不管是你要把作为参数传递给函数,还是要把赋值给变量,都得在函数名的左边加上双冒号才行: a(::b) val d = ::b 这……是为什么?...这个……是底层的逻辑,但我知道这个有什么用? 这个知识能帮你解开 Kotlin 的高阶函数以及接下来我马上要讲的匿名函数、Lambda 相关的大部分迷惑。...当然是,b 不是对象是因为来自函数名,但 d 已经是个对象,所以直接写就行了。 匿名函数 我们继续讲。...但是我们刚才也说过了函数是不能作为参数传递,也不能赋值给变量的,对吧? 那为什么匿名函数就这么特殊? 因为 Kotlin 的匿名函数不——是————数。它是个对象。...,一旦你信,你对于匿名 对比 Java 的 Lambda 再说一下 Java 的 Lambda。

64220

JS原生方法原理探究(六)从 Babel 转译过程浅谈 ES6 实现继承的原理

,有的函数不是我们讨论的重点,而且也完全可以单独拎出来分析,所以这里先简单它们的作用介绍,之后如果忘记了函数的作用,翻到这里来看即可。...为什么要做这个检查?后面我们再来解释。...这里我们会看到还传入了第二个参数,这个参数是子类原型的属性的特性描述对象(descriptor),我们对 constructor 属性进行了设置,将它设置为可写、可配置,同时利用 value 修复因重写子类原型而丢失的...可以看到,通过调用 _inherit 函数,我们已经成功让子类继承父类的原型方法和静态方法。不过,实例上的属性怎么继承?...;否则就是第三种情况,此时就对当初传进去的子类实例(已经通过 Super.apply 对进行了增强),也就是 this,进行断言,然后返回出去。

1.1K10

JS原生方法原理探究(六)从 Babel 转译过程浅谈 ES6 实现继承的原理

,有的函数不是我们讨论的重点,而且也完全可以单独拎出来分析,所以这里先简单它们的作用介绍,之后如果忘记了函数的作用,翻到这里来看即可。...为什么要做这个检查?后面我们再来解释。...这里我们会看到还传入了第二个参数,这个参数是子类原型的属性的特性描述对象(descriptor),我们对 constructor 属性进行了设置,将它设置为可写、可配置,同时利用 value 修复因重写子类原型而丢失的...可以看到,通过调用 _inherit 函数,我们已经成功让子类继承父类的原型方法和静态方法。不过,实例上的属性怎么继承?...;否则就是第三种情况,此时就对当初传进去的子类实例(已经通过 Super.apply 对进行了增强),也就是 this,进行断言,然后返回出去。

1.1K20

使用自变分原理改进正则化核回归:通过变分法推导和推广Nadaraya-Watson估计

现在让我们对上述公式应用一些数学变换,并逐步解释这些: 第一个等式就是平方展开,y的平方展开作为它们自己的和。...δ(delta)的正确定义需要对泛分析有一定的了解,更准确地说是分布理论或“广义函数”的理解。但是根据我们的最终目标,可以将狄拉克δ函数想象为以原点为中心的非常窄的峰。...(这个特定的拉格朗日函数实际上并不依赖于f '的导数,但我们稍后会用到的通用性) 找到像这样一个函数的平稳点——即一个用拉格朗日函数的积分表示的点——在数学和理论物理中有许多应用。...现在可以进行更多的研究,我们对变分原理进行一些修改。例如,可以添加一个使模型正则化的项,并惩罚大导数: λ > 0是一个正则化参数。...该模型的另一个特点是:它可能更擅长处理丢失的数据。

90320

固态硬盘掉电怎么恢复数据

闪存的块信息写入到闪存(比如当前写的是哪个闪存块,以及写到该闪存块的哪个位置,哪些闪存块已经写过,哪些闪存块又是无效的,等等); l SSD其它信息写入到闪存。...异常掉电恢复的目的一方面是尽可能恢复用户数据,损失减到最低;另一方面是让SSD经历异常掉电后还能正常工作。 SSD为什么怕异常掉电?它不是用闪存做存储介质吗?它不是数据掉电不丢失吗?没错。...重上电时,主机是再也读不到这些数据。 掉电还会导致RAM中映射表丢失。...以上图为例,SSD起初逻辑地址La 2的数据写在物理地址Pa 2上;后面,用户又改写了那笔数据,SSD写到了物理地址Pa 8上。我们知道,用户最后写入的数据总是最新的。...,这个操作我们称之为做Checkpoint(检查点,但我觉得翻译成“快照”更合适点)。

2.6K30

C语言关键字详解(四)带你全面了解 const 关键字

5、const 修饰函数 1、const 修饰函数参数:表示在其函数内部不能对该参数直接进行修改。...这里我们定义一个变量a,再定义一个指针变量p来存放a的地址,然后p传给test函数,在test函数内部通过指针的方式对a的值进行修改,没有问题,但是当我们在test函数参数前面加上 const 时,...这里和上面修饰参数的道理其实是一样的,我就不再赘述,但是需要注意的一点是,这里我用static来修饰局部变量a,原因是a是一个局部变量,进入test函数该变量被创建,出test函数该变量被销毁,但是我们这里...a的地址返回给调用test的地方,说明我们将来很有可能 会通过a的地址来访问a,所以为了避免后面造成非法访问或者访问数据丢失,我们用static来修饰,延长的生命周期,使a变量在整个程序运行期间都有效...const 修饰函数: const 修饰函数参数,表示在其函数内部不能对该参数直接进行修改。 :const 修饰返回值:表示该函数返回值不能直接被修改。

51600

别再说虚拟 DOM 快了,要被打脸的

虽然我同意虚拟 DOM 为我们提供很多便利,但我将解释为什么我认为根据定义,更快的渲染和更快的更新是不正确的。要付出代价,其利益并不是大多数人想象或至少希望的。 要阅读本文,您需要熟悉DOM。...renderInput("bar"); 好吧,新 renderInput() 功能肯定看起来很酷,但我已经知道这不是好方法。...为什么有些开发人员认为Virtual DOM更快 在虚拟DOM(尤其是React)的早期,传播一个神话,即虚拟 DOM 使 DOM 快速更新。...另一方面,开发人员的时间丢失也是一些实现方面的事情。虚拟 DOM 试图弄清楚需要执行哪些更改的部分是由人类实现的,因此并不总是万无一失。有时你必须介入。在某些情况下,无法进行干预。...数据绑定仍然非常可行,我们已经看到您也可以手动完成所有操作。绝对不是万能的,因此没有必要与虚拟DOM结合。

1.9K30

python拼接sql?duckdb:不允许你用这么low的方式

duckdb 是 python 中高性能分析型数据库,里面有一套很神秘的"关系" 和 表达式函数。今天我们来盘一盘。...事情源自于一位小伙伴,给了我一个使用 duckdb 的例子代码: 为什么执行会报错?...不过,在 duckdb 中,使用 execute 才能使用参数化,并且要额外调用 fetch 相关方法才能得到结果。 但我更喜欢使用 query 方法,那怎么办?...像这里的例子,在 sql 表达中,其实就是定义一个常量。 行1:通过 duckdb.ConstantExpression 内容传进去,就得到一个表达式。 其实,这玩意就是前面说到的参数化的操作。...主要用于用户界面动态构造查询的场景。 那为什么说它是延迟执行? 如果我们上面例子中的每一步都用单独的变量"拿住",但不打印: 不管数据有多少,它们都没有实际执行查询。直到你让某个关系对象输出。

74010

【Rust日报】 2019-05-24:Rust 1.35.0 稳定版发布

「找帮手」Voik: 一個類似Kafka的项目 有人做了一個實際性的project voik 讨论 Read more Rust 1.35.0 稳定版发布 概要: Box系列已经实现...他说的很对,Rust近两年确实是开启一场轰轰烈烈的命令行大替换运动。但是不是悲剧? 按他的说法:Rust产出的这个命令行工具大小基本是4MB以上,性能要59ms,所以,这个太悲剧。...9012年,你的磁盘空间就这么不够用吗,都干啥?运行一次的时间我没测过,但我觉得就算真的是59ms我也是可以接受的,因为在我的反应时间之外,并没有多卡。...你每天列出数百次文件,为什么你要花时间眯着眼睛看黑白文字?...所以,为什么要重写exa?是为了给大家节省时间,提升工作效率啊,同志们! 同样,有很多优秀的Rust重写的命令行工具,比如ripgrep,你怎么不说说它的搜索性能

58530

React组件方法中为什么要绑定this

'ON':'OFF'} ) } } 构造方法中为什么要给所有的实例方法绑定this? 1....ES5的写法中为什么不用bind(this)?...,就需要能够拿到这个组件专属的状态合集(例如在上面的开关组件ToggleButton例子中,的内部状态属性state.isToggleOn的值就标记了这个按钮应该显示ON或者OFF),所以此处强制绑定监听器函数的...} = toggleButton; 上例中解构赋值获取到的handleClick这个方法在执行时就会报错,Class的内部是强制运行在严格模式下的,此处的this在赋值中丢失原有的指向,在运行时指向...另一个存在的限制,是没有绑定this的响应函数在异步运行时可能会出问题,当作为回调函数被传入一个异步执行的方法时,同样会因为丢失this的指向而引发错误。

84630

我发现华点:vue规定用普通函数定义方法,为什么react又要我用箭头函数

在调用时分别打印this,结果如下: 箭头函数中this正确指向组件实例,但普通函数中却指向undefined,为什么?...this的指向也丢失。...这时就出现this指向undefined的情况。 但为什么使用箭头函数,this又可以正确指向组件实例?...我们知道,箭头函数没有自己的this,用到的时候只能根据作用域链去寻找最近的那个。放在这里,也就是构造函数这个作用域中的this——组件实例。...普通函数都有自己的this,所以绑定完后,被调用时都能正确指向组件实例。但箭头函数没有自己的this,便无从谈及修改,只能去找父级作用域中的this。这个父级作用域是谁?是组件实例吗?

75710
领券