站内搜索

本次搜索找到结果 14 条

原文:http://www.zcfy.cc/article/1711

在 2001 到 2003 年间,Judith Miller 在纽约时报上发表了一批文章,宣称伊拉克有能力和野心生产大规模杀伤性武器。这是假新闻。

回顾当年,我们无法确定 Miller 写的这些故事在美国 2013 年做出发动伊拉克战争的决定中扮演了怎样的角色;与 Miller 相同来源的消息与小布什政府的对外政策团队有很大关联。但是,纽约时报仍然起到了为这一政策背书的作用,尤其是对民主党人,本来他们应该会更坚定地反对小布什的政策。毕竟,纽约时报可不是一些无人问津的地方小报,它是整个美国影响力最大的报刊,它一般被认为具有左倾倾向。Miller 的故事某种程度上吻合报纸的政治倾向。

我们可以把 Miller 的错误和最近关于 Facebook 的假新闻问题联系起来看;Facebook 用自己的故事告诫我们“假新闻是坏的”。然而,我持有不同的观点:新闻假不假没那么重要,由谁来决定什么是新闻才是第一重要的

这是今天早晨来公司无意中听到的题目,据说是某部门 C++ 工程师的面试题。作为爱思考的小前端,听到了也不免会想如果是自己遇到这样一道面试题该怎样做。

这周尝试用树莓派驱动了 LY-LED16x16B V2.1 点阵屏。之所以选用这一款是因为它是 16 X 16 点阵(实际上是 4 块 8 X 8 LED 拼起来的,只不过已经集成好了)。LY-LED16x16B V2.1 本身是用于单片机的,官方提供了 51 单片机和 Arduino 下的测试程序。不过,我们有强大的树莓派,既然单片机能驱动,树莓派应该也不是问题。

原文:http://www.zcfy.cc/article/473

生成器(generator)函数是 ES6 的新特性。为了更加深入研究它,我决定写一个斐波那契数列的生成器函数。

以下是我所学到的。

采用新特性

有时候,当一个新的语言特性出现,我就毫不犹豫地开始全面使用它。在 ES6 的一些新特性上就是这种情况。我将最喜欢的 ES6 特性列在一个清单里,我把它们称为 the ROAD MAP

  • R Rest 和 Spread
  • O 对象字面量简写 (Object Literal Shortcuts)
  • A 箭头函数 (Arrow Functions)
  • D 解构和默认参数 (Destructuring & Default Parameters)
  • M 模块 (Modules)
  • AP 异步编程 (Asynchronous Programming: promises & generators)

当我列出这个清单的时候,我原以为这些是我最常使用的 ES6 特性。最初,我对能使用生成器感到非常兴奋,但是现在,当我已经使用过它们一段时间之后,在我真实的应用代码中并没有找到许多使用生成器的好的应用场景。而对大多数我可能要使用生成器的场景,我使用 RxJS 替代,因为它有更丰富的 API。

这并不意味着生成器就没有多少好的应用场景。我对自己说,在我真正为它们疯狂之前,我还得等待更好的 JS 引擎支持,但也可能是我根本就没有用生成器的思维来思考,所以才用不好它。最好的解决办法是去积累更多关于生成器的实践。

当我一听说生成器的时候,一个用处马上出现在我的脑海里,那就是我们可以使用它来从任意一个无穷级数里得到值。这可能有许多应用场景,例如图形的生成算法、电脑游戏等级、音乐序列,等等……

斐波那契数列是什么?

斐波那契数列是一个简单的、形式规范的例子,大多数读者可能已经对它比较熟悉。以下是它的基本概念:

今天是部门活动,去了石林峡,爬山累成狗。不过,在这么好的天气里,外出走走实在是一件有益身心健康的事情。爬山回来之后,身体虽疲惫,思路竟格外敏捷,正好将这篇文章一气呵成。

自然数拆分(Integer Break

给定一个自然数 n (n ≥ 2),将它拆分成不少于两个自然数之和,对这些拆分后的自然数求积,要求算出最大的乘积。

例如:

  • n = 2,得到 1(2 = 1 + 1)
  • n = 10,得到 36(10 = 3 + 3 + 4)

解题思路

这道题,咋一看之下,比前两期的题目似乎要难一些。因为对于一个较大的自然数,存在很多种拆分方法,怎么找到乘积最大的拆分方法呢?

这是 leetcode.com 的第二篇。与上一篇一样,我们讨论一道相对简单的问题,因为学习总讲究循序渐进。而且,就算是简单的问题,追求算法的极致的话,其中也是有大学问的。

“4”的整数次幂

给定一个32位有符号整数(32 bit signed integer),写一个函数,检查这个整数是否是“4”的N次幂,这里的N是非负整数。

例如:

  • 给定 num = 16,返回 true,因为 16 = 42
  • 给定 num = 5,返回 flase

附加条件: 你能够不用循环和递归吗?

小胡子哥 @Barret李靖 给我推荐了一个写算法刷题的地方 leetcode.com,没有 ACM 那么难,但题目很有趣。而且据说这些题目都来源于一些公司的面试题。好吧,解解别人公司的面试题其实很好玩,既能整理思路锻炼能力,又不用担心漏题 ╮(╯▽╰)╭。

长话短说,让我们来看一道题

统计“1”的个数

给定一个非负整数 num,对于任意 i,0 ≤ i ≤ num,计算 i 的值对应的二进制数中 “1” 的个数,将这些结果返回为一个数组。

例如:

当 num = 5 时,返回值为 [0,1,1,2,1,2]。

/**
 * @param {number} num
 * @return {number[]}
 */
var countBits = function(num) {
    //在此处实现代码
};

前端工程师是做什么的?

前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。从狭义上讲,前端工程师使用 HTML、CSS、JavaScript 等专业技能和工具将产品UI设计稿实现成网站产品,涵盖用户PC端、移动端网页,处理视觉和交互问题。从广义上来讲,所有用户终端产品与视觉和交互有关的部分,都是前端工程师的专业领域。

Array.prototype.sort 方法被许多 JavaScript 程序员误用来随机排列数组。最近做的前端星计划挑战项目中,一道实现 blackjack 游戏的问题,就发现很多同学使用了 Array.prototype.sort 来洗牌。就连最近一期 JavaScript Weekly上推荐的一篇文章也犯了同样的错误。

洗牌

以下就是常见的完全错误的随机排列算法:

function shuffle(arr){
    return arr.sort(function(){
        return Math.random() - 0.5;
    });
}

以上代码看似巧妙利用了 Array.prototype.sort 实现随机,但是,却有非常严重的问题,甚至是完全错误。

说明:之前关于算法复杂度的描述部分不严谨,引起某些同学的疑义,在这里特别声明了算法仅考虑循环次数,并不包括String的concat操作,由于v8引擎对字符串concat的时间复杂度接近于常量(测试代码),因此循环次数对算法效率的影响比较大,后面的benchmark测试也可以说明问题。最后,算法时间复杂度减小,并不一定快,不一样的指令耗费的时间不一样,所以实际工程中还需要以实际测试为准。特别感谢:@flowmemoString.prototype.repeat在V8和Chakra中的实现 —— 月影 2016-03-29

最近NPM社区出了一件大事,一个开发者对NPM公司不满,unpublish了自己的所有模块。其中包括被广泛使用的left-pad,导致Babel、ReactNative、Ember等大量工具构建失败。

这件事件本身不是我们这篇文章要讨论的主要内容,关注事件的同学可以移步知乎参与相关讨论。

本文讨论的内容是关于 left-pad 这个函数的实现。