2020年5月26日

软件需求膨胀系数

摘要: 泡水膨胀球 这是一种小玩具,干燥时拿在手里,小巧紧致。 泡在水里,一段时间之后,浑圆饱满,一只手都未必能捧的住。 放在干燥通风的地方晾晒,一段时间过后,又可以恢复原本的大小。 软件需求 软件需求与泡水膨胀球也有类似之处。 一开始时看似简单明了且完备正交,做起来发现越做越大,越做越多。 原本一只手能抓 阅读全文

posted @ 2020-05-26 11:35 崔鹏飞 阅读(349) 评论(0) 推荐(0) 编辑

2015年4月5日

职业女性确实处于劣势吗?记一次不甚严谨的考据 -- 向胡适之先生的遥远致敬

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/源起前两天,在一个武汉本地程序员聚集的技术社区微信群里某位群友发了两张图片:这是某个IT公司的招聘宣传,为程序员提供的鼓励师。(由于图片出现在愚人节期间,不确定该公司是真的有这样的人员配备,还是恶作剧的,此处暂且存疑)马上群里就有一位... 阅读全文

posted @ 2015-04-05 12:44 崔鹏飞 阅读(1094) 评论(2) 推荐(0) 编辑

2014年12月27日

15篇干货博客 38本书 4门公开课 减掉20斤体重 我的2014总结

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/2014年即将结束,需要做一些总结。既然总结是写在博客上的,第一项就先说博客吧。博客2014年写了18篇博客,其中15篇和Scala有关,自认为都是有且仅有干货的。对此,我比较满意。不过这个数字存在欺骗性,15篇Scala的博客,其中... 阅读全文

posted @ 2014-12-27 22:29 崔鹏飞 阅读(417) 评论(0) 推荐(0) 编辑

2014年11月9日

Spark RDD的fold和aggregate为什么是两个API?为什么不是一个foldLeft?

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/10/31/spark-fold-aggregate-why-not-foldleft/大家都知道Scala标准库的List有一个用来做聚合操作的foldLeft方法。比如我定义一个公司类:1case class ... 阅读全文

posted @ 2014-11-09 13:42 崔鹏飞 阅读(1093) 评论(0) 推荐(1) 编辑

2014年10月26日

Scala中Stream的应用场景及其实现原理

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/10/23/scala-stream-application-scenario-and-how-its-implemented/假设一个场景需要在50个随机数中找到前两个可以被3整除的数字。听起来很简单,我们可以这... 阅读全文

posted @ 2014-10-26 11:03 崔鹏飞 阅读(1229) 评论(0) 推荐(0) 编辑

2014年8月30日

Desugar Scala(17) -- Option和for,以及脑子里发生的事情

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/08/30/options-for/Scala里的for关键字是个很有趣的东西。可以用来把多层嵌套for循环写成一层。比如这样:1for(i calculateTotalWithFor() { return ... 阅读全文

posted @ 2014-08-30 23:40 崔鹏飞 阅读(680) 评论(0) 推荐(0) 编辑

2014年6月26日

Scala + Play + Sbt + Protractor = One Build

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/我所在的项目的技术栈选用的是Play framework做后端API,前端用Angular JS。因为用了Scala和Play,构建工具很自然用的就是sbt。而由于前端用了Angular,所以functional test就选用了和A... 阅读全文

posted @ 2014-06-26 09:25 崔鹏飞 阅读(1220) 评论(2) 推荐(1) 编辑

2014年6月23日

Desugar Scala(16) -- Lower Bound

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/Lower bound,不知道这个词的确切中文翻译是怎样的。我们直接看例子吧。123class Pair[T](val first: T, val second: T) { def replaceFirst[R >: T](newF... 阅读全文

posted @ 2014-06-23 13:08 崔鹏飞 阅读(667) 评论(0) 推荐(0) 编辑

2014年6月22日

Desugar Scala(15) -- unapply和unapplySeq方法

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/实在想不到什么动词可以当做脱衣服来讲了,所以从现在开始这系列博文就叫做Desugar Scala了。除非哪天才思泉涌,又想到了新词:)开始正文。名字叫做unapply和unapplySeq的方法在Scala里也是有特殊含义的。我们前面... 阅读全文

posted @ 2014-06-22 19:30 崔鹏飞 阅读(1611) 评论(0) 推荐(0) 编辑

2014年6月21日

抹掉Scala的糖衣(14) -- Update Method

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/在Scala中,名字叫做update的方法是有特殊作用的。比如:123val scores = new scala.collection.mutable.HashMap[String, Int]scores("Bob") = 100v... 阅读全文

posted @ 2014-06-21 18:53 崔鹏飞 阅读(1331) 评论(0) 推荐(0) 编辑

除去Scala的糖衣(13) -- Default Parameter Value

摘要: 欢迎关注我的新博客地址:http://cuipengfei.me/好久没有写博客了,上一次更新竟然是一月份。说工作忙都是借口,咋有空看美剧呢。这半年荒废掉博客说到底就是懒,惯性的懒惰。写博客这事儿,一丢掉就很久捡不起来。闲话到此为止,下面进入正题。Default parameter value,默认... 阅读全文

posted @ 2014-06-21 11:03 崔鹏飞 阅读(769) 评论(0) 推荐(0) 编辑

2013年12月31日

去掉Scala的糖衣(4) -- Type Aliase

摘要: 我的新博客地址:http://cuipengfei.me/blog/2013/12/23/desugar-scala-4/Scala中有一个type关键字,用来给类型或者是操作起别名,用起来很是方便。比如这样:1type People = List[Person]这样就是给List[Person](方括号是Scala的类型参数的写法)声明了一个别名,叫做People。接下来就可以这样使用它:123 def teenagers(people: People): People = { people.filter(person => person.age teenagers(List pe.. 阅读全文

posted @ 2013-12-31 20:52 崔鹏飞 阅读(1199) 评论(0) 推荐(1) 编辑

2013年12月21日

Scala中的语言特性是如何实现的(3) -- Trait

摘要: 我的新博客地址:http://cuipengfei.me/blog/2013/10/13/scala-trait/我在Coursera上跟了一门叫做Functional Programming Principles in Scala的课程,是由Scala的作者Martin Odersky讲授的。其中第三周的作业中使用到了Scala的trait这个语言特性。我以前熟知的语言都没有类似的特性(Ruby的mixin和Scala的trait很像,但是Ruby我不熟),所以这周的博客就分析一下这个语言特性是如何实现的。trait在讲trait的实现机制之前,先看一个使用trait的例子。 假设我们有以下 阅读全文

posted @ 2013-12-21 13:06 崔鹏飞 阅读(852) 评论(1) 推荐(0) 编辑

2013年6月23日

为什么必须是final的呢?

摘要: 一个谜团如果你用过类似guava这种“伪函数式编程”风格的library的话,那下面这种风格的代码对你来说应该不陌生:123456789public void tryUsingGuava() { final int expectedLength = 4; Iterables.filter(Lists.newArrayList("123", "1234"), new Predicate() { @Override public boolean apply(String str) { return str.length() == exp... 阅读全文

posted @ 2013-06-23 00:53 崔鹏飞 阅读(1823) 评论(2) 推荐(2) 编辑

2013年5月19日

Scala中的语言特性是如何实现的(2)

摘要: 上篇博文的末尾留了三个问题,现在自问自答一下。在Scala中被声明为val的v4为什么在反编译的Java中不是final的呢?在方法中声明局部变量时,如果用Scala的val关键字(或者是Java中的final)来修饰变量,则代表着此变量在赋过初始值之后不可以再被重新赋值。这个val或者final只是给编译器用的,编译器如果发现你给此变量重新赋值会抛出错误。而bytecode不具备表达一个局部变量是immutable的能力,也就是说对于JVM来说,不存在不可变的局部变量这个概念。所以v4在反编译之后,就和普通的局部变量无异了。在Scala中被声明为val的v2为什么在反编译的C#中不是read 阅读全文

posted @ 2013-05-19 15:12 崔鹏飞 阅读(1099) 评论(8) 推荐(1) 编辑

导航