ACM 题目解答:统计方案

Description
在一无限大的二维平面中,我们做如下假设:
1、每次只能移动一格;
2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、走过的格子立即塌陷无法再走第二次。
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
Input
首先给出一个正整数C,表示有C组测试数据。
接下来的C行,每行包含一个整数n(n< =20),表示要走n步。 Output 请编程输出走n步的不同方案总数; 每组的输出占一行。 阅读全文 “ACM 题目解答:统计方案” »

ACM 题目解答:寄居蟹与海葵

Description
寄居蟹与海葵是一对合作互助的共栖伙伴。海葵是寄居蟹最称职的门卫。它用有毒的触角去蜇那些敢来靠近它们的所有动物,保护寄居蟹。而寄居蟹则背着行动困难的海葵,四出觅食,有福同享。
但并不是所有寄居蟹和海葵都可以做搭档的。那就要看海葵的身体是不是符合寄居蟹的螺壳。
海葵的身体是有褶皱的,而寄居蟹的螺壳同样凹凸不平,我们可以用一个大写字母组成的字符串来表示它们的高低程度,其中A代表0,B代表1,依次类推。我们称两者相加等于25的就算是吻合,比如A和Z相吻合,B与Y吻合,依次类推。
只要海葵身体的部分序列与寄居蟹外壳的序列相吻合,就称他们可以一起生活。
阅读全文 “ACM 题目解答:寄居蟹与海葵” »

ACM 题目解答:FILE MAPPING

Description

It is often helpful for computer users to see a visual representation of the file structure on their computers. The “explorer” in Microsoft Windows is an example of such a system. Before the days of graphical user interfaces, however, such visual representations were not possible. The best that could be done was to show a static “map”of directories and files, using indentation as a guide to directory contents. For example:

ROOT
|	DIR1
|       File1
|	File2
|	File3
|	DIR2
|	DIR3
|	File1
File1
File2

This shows that the root directory contains two files and three subdirectories. The first subdirectory contains 3 files, the second is empty and the third contains one file.
阅读全文 “ACM 题目解答:FILE MAPPING” »

DigitalOcean 网速测试

AWS 一年免费的 micro instance 就快要到期了, 但是国内访问 AWS 的速度太慢了,所以不想继续使用 AWS。打算换一个 VPS。

在 Twitter 上看见 Anthony 在派发代金券,于是要了一张。

Digital Ocean 提供纽约、新加坡、荷兰三个地区的主机。
我依次在三个地区建一个主机,分别测试从国内访问它们的速度,并与 AWS 的悉尼主机进行比较。
阅读全文 “DigitalOcean 网速测试” »

Effective Java: 使用静态工厂方法

这是 Effective Java 的第一节的标题。本文更多的是摘译该节的内容。

什么是静态工厂方法(static factory methods)

static factory methods 翻译过来就是静态工厂方法。它并不是 GOF 提的设计模式中的一个设计模式。
我们看下面的例子(摘自JDK 1.7)。

public final class Boolean implements java.io.Serializable,
        Comparable<boolean> {

    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);
        
    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
}</boolean>

我们要获取一个 Boolean 的一个对象,可以使用构造函数 new Boolean(true) 也可以使用里面的静态方法 Boolean.valueOf(true),后者便是静态工厂方法。
阅读全文 “Effective Java: 使用静态工厂方法” »

Linux Ext4 文件系统对 MySQL 性能的影响

最近要做一个 MySQL 数据库迁移,就是将一个 MySQL 中的数据迁移到另外一个 MySQL 数据库中。我们碰到了一个 Ext4 文件系统 barrier 的问题。Linux Ext4 文件系统默认开启了 barrier,我们可以在 man mount 里看到下面的这段话

The ext4 filesystem enables write barriers by default.

默认开启的 barrier=1 会极大的影响 MySQL 的性能,约三倍左右。
我做了一个实验测试 barrier=1 对 MySQL 性能的影响。
阅读全文 “Linux Ext4 文件系统对 MySQL 性能的影响” »

可扩展的中小型推介系统实践

本文的目的是描述如何使用 Mahout 开发/部署一个可扩展的中小型推介系统

我会一步一步的描述如何用 Mahout 搭建一个这样的推介系统。本文假设读者对 Mahout 有所了解,熟悉 Mahout 中的协同过滤(Collaborative Filtering)推介算法。本文不会描述 CF 相关的具体算法。

场景描述

这是最近在做的一个推介系统的实际场景。垂直领域的视频播放网站,用户访问我们的网站观看视频,我们根据用户的观看记录向用户推介其可能感兴趣的视频。

  1. 视频数量:几千或几万
  2. 用户数量:几十万
  3. 用户每播放完一个视频后,在视频播放页面显示用户可能喜欢的其他视频
  4. 所有的播放请求中,20% 是登陆用户,80% 为未登陆的匿名用户(由于版权的原因,有些视频必须登陆付费之后才能观看,所以登陆用户的比例很高)

阅读全文 “可扩展的中小型推介系统实践” »

Ubuntu 安装备忘录

新年回来开工第一天就遇到电脑故障,使用有线网络上网的时候,丢包率达到 80%,严重影响到上网速度。最后弄啊弄居然把 Ubuntu 桌面给弄坏了。纠结的,既然无法启动了,那就使用杀手锏了:重装 ^_^
这里记录安装的整个过程,以后就不用到处 google 找教程了。

硬盘安装 Ubuntu
  1. 下载最新的 Ubuntu iso 镜像,放在一个空余的分区。(我用的是 NTFS 的分区,未试验是否可以使用 Ext4)
  2. 重启系统,进入 Grub2 引导界面,按 C 进入手动引导界面
  3. 输入下面的命令
    insmod loopback
    loopback loop (hd1,msdos5)/ubuntu.iso
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu.iso 
    initrd (loop)/casper/initrd.lz
    boot
  4. 引导 ISO 镜像之后,按照提示安装 Ubuntu

阅读全文 “Ubuntu 安装备忘录” »