算法题不是检验程序员的唯一标准

这段时间很多公司的面试都在拉开帷幕。前几天我的一位好朋友应聘一家被誉为 “工程师天堂” 的互联网公司,第一轮面试就悲剧了。原因可能是在一道关于树的算法题上耗了一个小时。我觉得凭一道算法题断定一个人的能力过于僵化了。当然,这样的公司可能应聘的人太多,没时间仔细考察每个应聘者。

IMG_20130928_201318

今晚同学带我去清华玩,顺路逛了清华科技园,也算我进过这家令无数程序猿向往的公司大门了。回来的路上,我就在思考纯算法题面试可能的弊端。在 coolshell 上看到了跟我观点类似的文章《为什么我反对纯算法面试题》《我是怎么招聘程序员的》《再谈“我是怎么招聘程序员的”》,于是鼓足勇气把自己 simple & naive 的观点拿出来与诸君分享。欢迎各种形式的拍砖。
继续阅读“算法题不是检验程序员的唯一标准”

《七周七数据库》读书报告

刚补考完数据库课程。把读书报告贴出来分享一下(顺便求过~)。

《七周七数据库》(Seven Databases in Seven Weeks)出版于2012年,介绍了时下最热门的7种开源数据库,包括关系数据库(PostgreSQL)、key-value数据库(Riak、Redis)、列式数据库(HBase)、面向文档的数据库(MongoDB、CouchDB)、图数据库(Neo4j)。除了PostgreSQL以外,其他6种数据库可以统称为NoSQL,即它们不使用关系模型,也不把SQL作为查询语言。

这本书模仿了《七周七语言》的体例,每种数据库一章,划分为三节,名为第一天、第二天、第三天。不同于数据库的官方文档,本书不是简单介绍每种技术,而是探讨了每种技术的核心基本概念,使读者了解每种数据库的优缺点,在何种需求下应该使用何种数据库。
继续阅读“《七周七数据库》读书报告”

一个斜杠引发的血案

注:不了解 mirrors 的朋友,请先看《科大开源软件镜像是怎样炼成的》。

祸起 iSCSI

故事要从2013年6月26日讲起。mirrors 有一个网线直连的磁盘阵列,使用 iscsi 协议,上面有一个XFS文件系统。6月26日下午14时许,stephen 在邮件列表里报告 mirrors 挂了。根据 syslog,6月26日13:58,iscsi 连接超时,导致 sdg 访问失败,大量I/O操作被卡住,导致 nginx 被卡住,mirrors HTTP 无法连接。几分钟后,I/O超时,nginx 恢复正常,但磁盘阵列上的源无法使用了。

继续阅读“一个斜杠引发的血案”

我在 LUG 这一年

今天光宇说要去年的工作总结,于是就有了这篇文章。LUG 的主要工作分为活动和网络服务两方面。

活动

我们回顾一下这一年来发生的事情(http://lug.ustc.edu.cn/wiki/lug/events

招新

跟其他社团一起,在开学的第二周,在东活和西活摆摊。偷来的经验是:可以做一些展板和易拉宝,增加出镜率。

招新虽然站着挺辛苦,但跟来自各种院系的同学们聊天挺好玩的,发传单也可以品尝一下经常被拒的滋味。八卦一下,LUG 现任会长的妹子就是那时找到的~

继续阅读“我在 LUG 这一年”

从IP网络到内容网络

IP 足够了吗?

从初中的计算机课开始,我们就在学习计算机网络所谓的 “OSI七层模型”,记得当年死记硬背了一大堆概念。那些烂课本毁了多少计算机天才,其实这个模型并不难理解:(学过计算机网络的请自行跳过)

  1. 物理层:就是信号传输的媒介,光纤、双绞线(我们常用的网线)、空气(wifi)……每种介质都需要自己的编码和调制方式,才能把数据变成电磁波送出去。
  2. 数据链路层:拿开会打个比方。说话可能不小心说错或者听错,需要有纠错、让对方重说的机制(校验和、重传);几个人都想发言,需要有一种方式进行仲裁,谁先说谁后说(信道分配、载波监听);一个人发言前后需要示意,以便让别人知道他说完了(成帧)。
  3. 网络层:这是计算机网络初期争议最大的地方。电信行业的传统巨头认为,应该像打电话一样在两端点间的路径上预留出一部分带宽,建立起通信双方的 “虚电路”。而当时正处于冷战时期,美国国防部要求建立起的网络在中间几条线路遭到毁灭性打击时,通信仍然不能中断。于是,最终采用了 “分组交换” 方案,把数据分成若干小块分别封装和投递。就像寄信一样,要投递到远方的机器,就要在信封上写明地址,而且地址要使得邮递员看到它就知道该走哪条路送给下级邮局(比如用身份证号作为地址就是个很糟的主意)。IP 协议是网络层协议的事实标准,大家应该都知道 IP 地址。
  4. 传输层:计算机网络早期最重要的应用就是在两台计算机间建立“连接”:远程登录、远程打印、远程访问文件……传输层就是在网络层数据包的基础上,抽象出连接的概念。这里的“连接”跟“虚电路”的主要区别是“虚电路”要预留一定的带宽,而“连接”是尽力而为投递的,不对带宽作任何保证。由于互联网上的流量多是突发(burst)的,分组交换比虚电路提高了资源利用率。事实上,历史往往是轮回的,如今在数据中心里,由于流量可预测且可控,又正在回到中心控制的预留带宽方案。
  5. 应用层:这就不用多说了,Web 基于的 HTTP、FTP、BitTorrent 都是应用层协议。

ccn-0
继续阅读“从IP网络到内容网络”

科大开源软件镜像是怎样炼成的

Update (2014-09-29): 由于 mirrors 配置文件里有一些不适合公开的内容,现在配置文件不再公开,本文中的一些链接变成了死链,非常抱歉。

由于科大开源软件镜像(mirrors.ustc.edu.cn)发生磁盘故障,stephen、tux 和我 (boj) 都不在学校,加上7月 mirrors 出故障之后就一直没恢复彻底,是时候推倒重来了。这次 mirrors 重建要完全由在校的同学们完成,这也是锻炼技术的一个机会。这里,我来简要解释开源软件镜像包括哪些部分,应该如何搭建。由于 sourceforge 还在等着我们同步,希望能在三天内恢复基本服务,一周内重建好包括同步在内的整个系统。

WTF?

所谓开源软件镜像,就是从官方站点同步一些 GNU/Linux 发行版和知名开源软件的软件仓库。用户通过修改配置文件,就近使用软件仓库镜像,以加快下载速度,减轻官方站点的负载。

继续阅读“科大开源软件镜像是怎样炼成的”