Browsed by
分类: 杂项资源

给程序员新手的一些建议

给程序员新手的一些建议

前段时间因为实习生计划花了很多时间做了实习生招聘的工作,产生的一些想法,写在这里。

这次招聘过程中,我发现我们在校的学生有下面的这些特点:

1)NB的项目。当说到自己做过的项目时, 我发现他们做的事都是很NB。要么是研究Linux的底层内核,要么是图像识别处理,要么是推荐算法,要么做高性能计算,要么做数据挖掘,要么是移动方面的协议,还有一些很高深的课题我听不太懂的项目。这让我想起当年我在学校里的实习,对比起我用Java Applet 和 HTML做操作系统的教学课件,或是在公司里用Delphi/PowerBuilder做的那些MIS系统。让我觉得有些汗颜。

2)OK的解决问题能力。当问到算法题时,我发现他们的问题解决能力还OK。我一般问1到2个中低难度的算法题和1个基本的面向对象设计的题,都不难。我相信只要在学校里好好学习的人都应该答得出来。无非就是一些基本的算法和基本数据结构操作的问题,和比较基础的面向对象设计的题,说白了就是作业题。可惜的是,只有5%不到的同学能够在不给提示的情况下答出来,70%的人可以在给一定的提示下答出来,15%左右的同学需要提示到几乎给出答案才能答出来,还有10%的同学怎么给提示都答不出来。

3)WTF的编码能力。老实说,对于解算法题,我还是比较可以接受的,因为80%左右的同学在给予提示后都能描述出解题的算法,于是,我让他们把这个算法用他们最熟悉的语言写出来。但结果让我出乎意料,一段在解法很清楚的情况下只需要不到30行代码的小算法题,只有一个人能在10分钟几写完,其它的人基本所有的需要30分钟左右(甚至40分钟),有2、3个人居然写不出来。有一个比较极端的case是——有个同学花了十分钟都写不出从一个整型数组中找到最小的正数的代码。这个事让我觉得很惊讶,难道大家在做项目的时候不编程吗?

对于这种情况,我想给大家以下后一些建议:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (64 人打了分,平均分: 4.44 )
Loading...
Quora使用到的技术

Quora使用到的技术

以前向大家介绍过Stack Exchange的系统架构Facebook的系统架构,今天和大家说说Quora的。本文主要参考了Phil Whelan的这篇文章《Quora’s Technology Examined》。关于Quora是个什么网站我就不多说了,国内对他的C2C网站叫“知乎”。呵呵。我们还是来看看Quora的技术吧。

Search-Box

Quora只能搜索问题,主题标签,用户名,和主题标题。没有全文搜索,所以,你无法搜索问题和答案的内容。而搜索中使用前缀搜索方式,比如你输入mi,则Microsoft会马上出来。其搜索还会有一些非常简单的模糊匹配的算法。另外,如果有重复的问题,其中一个问题会自动跳转到另一个问题,但是在搜索中还是会出现。搜索中没有拼写检查。

一开始,他们使用的是一个开源的搜索服务器,叫Sphinx。其支持上述的那些功能。现在他们不用这个技术了,因为受到了一些限制。他们做了一个比较新的解决方案,这个算法由Python实现。

参看What libraries does Quora use for search?

实时查询

Quora的查询是非常高速的,其查询请求是通过AJAX的GET请求发送的,结果返回用的是JSON数据格式,但他们解析JSON是在服务器端,而不是通过浏览器的javascript。这么做的原因可能是他们想高亮搜索关键词,似乎使用Client端的Javascript非常不好做。

Quora的即时搜索好像比较暴力,如果你输入Microsoft(一共9个字符),你会看到其会像后端发送9次查询——每按一个键一次,无论你敲这个单词的速底有多快,每输入一个字符都会发一个请求给后台。对于这样的看上去没有效率的对后台的请求,后台的服务器端会来控制相关的前台请求,所以,就算是前台这样做,也不会增加服务器端的负载,因为后台会做相关的处理。

Quora的搜索使用HTTP长连接,当你开始敲查询的时候,连接就建立了,这个连接会持续在那里,你下次搜索的时候会继续使用这个连接,除非你60秒没有动作了。

参看Is Quora going to implement full-text search?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 4.08 )
Loading...
排序算法 Sleep Sort

排序算法 Sleep Sort

排序算法好像是程序员学习编程最多的算法,也可能是算法研究者们最喜欢研究的算法了。排序有很多很多的算法,比如,冒泡,插入,选择,堆,快速,归并等等(你可以看看本站以前的那些文章:可视化的排序排序算法比较显示排序过程的python)这里向大家介绍一个“巨NB”的排序算法——Sleep Sort。

闲言少说,请看下面的代码(用Shell脚本写的)

#!/bin/bash
function f() {
    sleep "$1"
    echo "$1"
}
while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait

用法如下:

./sleepsort.bash 5 3 6 3 6 3 1 4 7

相信你可以会去试一下这个脚本,也相你你试完后你一定会说——“我擦,真TMD排序了!”,我还是不要解释这段代码了,过多的解释会不如代码那么直接,而且解释会影响你对这个排序算法的NB性。只想说——这是正二八经的多线程、多进程排序啊。我们的Bogo排序也黯然失色啊。

下面我们需要对这个算法做一些分析——

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (23 人打了分,平均分: 4.00 )
Loading...
一个空格引发的惨剧

一个空格引发的惨剧

你是否相信如果你的程序里没有检查一个变量会导致怎么系统瘫痪?无论你相不相信,这是我一个亲身经历过的案例,你可以在本站的程序员那些悲催的事儿中找到很多这样的事。这样的事昨天在发生,今天同样在发生。Unix40多年了,在这40年里,程序员发生过各种各样的的惨剧,但是大多数的事情一而再再而三的重演。

今天的你,可能在开发者各种各样NB的系统,你会相信你的一个空格也能导致系统瘫痪吗?也许你可能很难相信这个事。不过,再下面这个事将告诉你这个血淋淋的事实 —— 一个空格产生的bug可以让你的系统瘫痪。

bumblebee是一个开源项目,这个名字也就是变形金刚里的大黄蜂,这个项目是这样介绍自己的——

bumblebee is Optimus support for Linux, with real offloading, and not switchable graphics.. More important.. it works on Optimus Laptops without a graphical multiplexer..

Optimus 是NVIDIA的“优驰”技术,其可以将您的笔记本电脑PC提升到绝佳状态,提供出色的图形性能,并在需要时延长电池续航时间。这个项目是把这个技术移到Linux上来。

这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目,这个bug的fix如下:

@@ -348,7 +348,7 @@ case "$DISTRO" in
-  rm -rf /usr /lib/nvidia-current/xorg/xorg
+  rm -rf /usr/lib/nvidia-current/xorg/xorg

看明白了吗?空格。这个空格会导致什么样的问题呢?呵呵。你有没有感到菊花一紧?这个bug绝对的霸气外露!真是验证了“如何写出无法维护代码”的那句话——“测试你的程序是一种懦夫的行为”。

不过,最精彩还不是这个bug,而是全世界程序员的对这个bug 的 code review comments,真的相当的欢乐。请强势围望!

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (28 人打了分,平均分: 3.89 )
Loading...
“另类” 设计模式

“另类” 设计模式

下面这篇文章来自这里:http://www.lsd.ic.unicamp.br/~oliva/fun/prog/resign-patterns,这篇文章有点意思了,山寨了我们著名的Design Pattern。这篇文章并不是很容易翻译,也许我翻译的不好,大家多指正。另外,这篇文章将失去原有的趣味在于其使用了经典设计模式的单词很相似的单词,一走眼你还以为是正二八经的设计模式。呵呵。所以,我在下文中,我会保留原有的英文单词,并把真正的23个经典设计模式的英文名放在旁边(灰色)。这篇文章和之前的如何写出无法维护的代码有异曲同工,个人感觉都是比较欢乐的。

 

辞职模式
Resign Patterns
Design Patterns

不合式的非面向项目软件开发病症
Ailments of Unsuitable Project-Disoriented Software
Elements of Reusable Object-Oriented Software
作者Michael Duell

概要

任何一个熟悉那本由四个人写的经典的设计模式书的朋友,应该知道那本书里的模式都是非常优雅和划时代的。然而,不幸的是,从那些老代码中无法提练出这些模式,因为,在出现这些模式前,大家都不会使用模式。因此,这项工作是从大量的代码中提练出一个模式的目录。这些模式都有充足和永恒的示例。希望你能享受阅读这些模式,但千万不要模仿并使用他们!

1. Cremational Patterns 火葬模式 | Creational patterns 创建模式

下面是五个 cremational patterns.
1.1 Abject Poverty  一贫如洗 | Abstract Factory 抽象工厂

Abject Poverty 模式能让你的软件相当难测试和维护, 并且需要巨大的财政支出,预算已经完全赤字。

1.2 Blinder 眼罩模式 | Builder 建造模式

Blinder 模式是一个应急有效的解决方案,其不需要考虑需求在未来的变化。目前,我们还不太清楚我们为什么叫Blinder模式,一种说法是他们会在写代码的时候被设计人员戴上眼罩,另一种说法是他们希望在维护代码的时候挖出双眼。

1.3 Fallacy Method 错误方法 | Factory method 工厂方法

Fallacy方法主要是在于处理一些不明显的案例。代码逻辑看上去是正确的,当只要某想要去测试一下,或是某个不明显的案例发生了,那些代码中的错误也就出现了。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (19 人打了分,平均分: 3.84 )
Loading...
开源中最好的Web开发的资源

开源中最好的Web开发的资源

文章来源:Best “must know” open sources to build the new Web。个人感觉这个收集贴收集成相当的全。

学习HTML 5编程和设计

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (36 人打了分,平均分: 4.22 )
Loading...
Python 和 PyGame 的一些示例

Python 和 PyGame 的一些示例

看到一个网页收集了很多使用Python和PyGame写游戏的示例,分享给大家。(注:我不知道用Python/PyGame写游戏其性能会怎么样,但是一些小游戏应该是没有问题的)

这个网页同时给了一本介绍Python和PyGame的电子书(PDF),下面的这些例子就是这本书的示例。所有的这些示例可以打包下载

基础 Python 示例

Pygame 图形示例

pygame_base_template.py – 开启一个黑的 pygame 窗口。当你要写一个新的代码时,你可以使用这个示例的代码初始化你的程序。
simple_graphics_demo.py – 作图,画一些简单的图形。 simple_graphics_demo_thumb.png

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 2.90 )
Loading...
可视化的数据结构和算法

可视化的数据结构和算法

还记得之前发布过的那个关于可视化排序的文章吗?在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页,网址在这里,大家可以看看。我把这个页面的目录列在下面并翻译了一下,大家可以直接点击了。

不知道国内的教育有没有相关的教学课件,至少在我大学的时候是没有的。

基础

索引

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (25 人打了分,平均分: 4.36 )
Loading...
狗日的开源软件许可证

狗日的开源软件许可证

你知道这个世上有多少种开源软件的许可证吗?GPL,BSD,MIT,Apache?GNU上有个网页,上面记录了几乎所有的开源软件的许可证,真TMD的多,有开源的,有商用的,有软件的,有文档的,多得你都不想看了,天杀的,程序员们还真能鼓捣啊。不过,主流的也就几种——GPLBSDMITMozillaApache等等。

那么,你知道怎么区别他们吧?怎么选择他们吗?这里有一张比较复杂的图,在调侃这些纷繁的许可证(我不翻译了,这个图属于是发泄不满)

下面是另一个图,这个图来自这里,这个图并不恶搞,但其非常简单地说明了如何选择一个开源的许可证:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (16 人打了分,平均分: 3.94 )
Loading...
Facebook 的系统架构

Facebook 的系统架构

来源http://www.quora.com/What-is-Facebooks-architecture (由Micha?l Figuière回答)

根据我现有的阅读和谈话,我所理解的今天Facebook的架构如下:

  • Web 前端是由 PHP 写的。Facebook 的 HipHop [1] 会把PHP转成 C++ 并用 g++编译,这样就可以为模板和Web逻贺业务层提供高的性能。
  • 业务逻辑以Service的形式存在,其使用Thrift [2]。这些Service根据需求的不同由PHP,C++或Java实现(也可以用到了其它的一些语言……)
  • 用Java写的Services没有用到任何一个企业级的应用服务器,但用到了Facebook自己的定制的应用服务器。看上去好像是重新发明轮子,但是这些Services只被暴露给Thrift使用(绝大所数是这样),Tomcat太重量级了,即使是Jetty也可能太过了点,其附加值对Facebook所需要的没有意义。
  • 持久化由MySQL, Memcached [3], Facebook 的 Cassandra [4], Hadoop 的 HBase [5] 完成。Memcached 使用了MySQL的内存Cache。Facebook 工程师承认他们的Cassandra 使用正在减少,因为他们更喜欢HBase,因为它的更简单的一致性模型,以到其MapReduce能力。
  • 离线处理使用Hadoop 和 Hive。
  • 日志,点击,feeds数据使用Scribe [6],把其聚合并存在 HDFS,其使用Scribe-HDFS [7],因而允许使用MapReduce进行扩展分析。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.00 )
Loading...