// 上一篇:控制结构(10)指令序列(opcode) [注释]: 这个笔记系列需要告一个段落了,收尾部分整理下几个时髦(The New Old Things)结构. 后面打算开一个算法方面的,重新学习下算法方面的知识. 前面的文章里,在所有异步的地方都只假设通过callback的方式实现,而不用其他新的原子结构.实际上,如果我们进一步要求: 不使用return函数返回 一个函数执行的最后一步要么退出,要么调用其他函数来传递结果. 那么,这样的一个函数在最后一个动作之后是不需要保存Stack的.…
每次把新博客的链接分享到技术群里,我常常会附带一句:蚂蚁搬家.事实上也确实如此,坚持1篇1篇的把自己做过.思考过.阅读过.使用过的技术和教育相关的知识.方法.随笔.索引记录下来,并持续去改进它们,希望自己能有持续的学习成长,也希望对读者提供有效帮助.更重要的是,在博客上,逐渐获得了与许多老师.技术朋友.学生的交流,弥足珍贵.做一个索引,方便自己也方便需要的读者查阅.每篇博客,我都会尽可能去持续更新,流水不腐.户枢不蠹,这也是我喜欢在博客上持续记录的原因之一. 0x01 工具/技术 工具 工具(1…
Continuation Pass Style在函数式编程(FP)中有一种被称为Continuation Passing Style(CPS)的风格.在这种风格的背后所蕴含的思想就是将处理中可变的一部分抽象为一个function,并将其作为一个参数传入.这是高度抽象的方法,所带来的表达的威力也是无与伦比的.下面举一个例子,实现CPS描述的fold函数.在此之前需要简单介绍一下fold概念,在FP中这是一个非常有效的处理list的工具.一般它的signature是fold(f,initial,li…
递归: 就是函数调用自己. func() { foo(); func(); bar(); } 尾调用:就是在函数的最后,调用函数(包括自己). foo(){ return bar(); } 尾递归:就是在函数的最后,调用自身. func() { foo(); return func(); } 尾递归是递归的优化,优化的目的是栈深度=1,永不StackOverflow.所有的递归都能转成尾递归.简单的场景,比如计算阶乘N!和Fibonacci数列,可以用parameter代替临时变量,实现尾递归.…
CPS (Continuation Passing Style) CPS(延续传递风格)是指函数不把处理结果作为返回值返回而是把处理结果传递给下一个函数的编码风格. 与此相对,函数把处理结果作为返回值返回的编码风格被称为直接编码风格. add :: Int -> Int -> Int add x y = x + y square :: Int -> Int square x = x * x pythagoras :: Int -> Int -> Int pythagoras…
##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好.自信.谦虚.善于沟通.表达. ü  喜欢追究原理 5.2 面试内容 1.2.1简历上的项目 ü  介绍下你的项目吧? 1)        第一步:介绍你项目是干嘛的 2)        第二步:介绍下你负责的是哪块 3)        第三步:介绍下里面都有什么功能,你是怎么实现的,怎么分层的? 1…
JavaScript内存优化 相对C/C++ 而言,我们所用的JavaScript 在内存这一方面的处理已经让我们在开发中更注重业务逻辑的编写.但是随着业务的不断复杂化,单页面应用.移动HTML5 应用和Node.js 程序等等的发展,JavaScript 中的内存问题所导致的卡顿.内存溢出等现象也变得不再陌生. 1. 语言层面的内存管理 1.1 作用域 作用域(scope)是JavaScript 编程中一个非常重要的运行机制,在同步JavaScript 编程中它并不能充分引起初学者的注意,但在…
首先,为什么要使用Deferred? 先来看一段AJAX的代码: var data; $.get('api/data', function(resp) { data = resp.data; }); doSomethingFancyWithData(data); 这段代码极容易出问题,请求时间多长或者超时,将会导致我们获取不到data.只有把请求设置为同步我们才能够等待获取到data,才执行我们的函数.但是这会带来阻塞,导致用户界面一直被冻结,对用户体验有很严重的影响.所以我们需要使用异步编程,…
原文地址http://fsharpforfunandprofit.com/posts/computation-expressions-continuations/ 上一篇中我们看到复杂代码是如何通过使用computation expressions得到简化. 使用computation expression前的代码 let log p = printfn "expression is %A" p let loggedWorkflow = log x log y let z = x +…
以前写过一些对 Go 语言的负面评价.现在看来,虽然那些评价大部分属实,然而却由于言辞激烈,没有点明具体问题,难以让某些人信服.在经过几个月实际使用 Go 来构造网站之后,我觉得现在是时候对它作一些更加“客观”的评价了. 定位和优点 Go 比起 C 和 C++ 确实有它的优点,这是很显然的事情.它比起 Java 也有少数优点,然而相对而言更多是不足之处.所以我对 Go 的偏好在比 Java 稍低一点的位置. Go 语言比起 C,C++ 的强项,当然是它的简单性和垃圾回收.由于 C 和 C++ 的…