2013年12月 ’ 的文章存档

作为程序员必须知道的编程语言编年史

我们都知道,编程语言是一组用来定义计算机程序的语法规则。它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是设计程序语言的初衷不同,对语言学习曲线的追求不同,不同程序之间的运行成本差异等。

下面这张图片描绘了整个编程语言的历史。包括各种编程语言的发明人,编程语言的特点和适用领域,被什么网站或公司使用等(点击图片查看完整高清图)。

阅读全文

Docker 和一个正常的虚拟机有何区别?

问:

我多次重读Docker.io文档,希望搞明白Docker.io和一个完全的虚拟机的区别。Docker是如何做到提供一个完整的文件系统,独立的网络环境等等这些功能,同时还没有如此庞大?

为什么部署软件在一个docker镜像(image)比部署在一致的生产环境上要容易?
阅读全文

如何招聘一个能干活的程序员

(一)

关于一个程序员该具备怎样的能力,有篇帖子里面一共讲了7点。这7点本身没错,放之四海而皆准。但是对于程序员这一个特定的群体,似乎又显得过于宽泛。有一些比如善于沟通这样的能力更多是靠环境激发出来的。如果不幸混进一个国企,那其实锻炼更多的还是和领导套近乎和推卸责任的能力… 所以我认为,一个优秀的程序员有两个最核心的能力是不可代替的:解决问题的能力与学习能力。

先来说说这个“解决问题”的能力。这个能力是相当宽泛的:debug是解决问题;设计某种架构是解决问题;提高用户体验是解决问题;根据需求给出整体的解决方案同样是解决问题。概括起来就是本文表退中的“能干活”,或者说就是“getting things done”。解决一个问题实际上分两方面:其一需要有足够的技术能力找到解决方案;其二需要对业务有充分的了解,明白到底该怎么做才能达到用户的预期。结合实际来说,做一个游戏不仅要完成策划提出的功能需求,还要考虑做出来的功能操作上是否便利,是否符合玩家的习惯和心理预期,是否可能引起玩家的误解和不满等等… 在技术熟练的情况下,绝大部分的功能要实现起来并不需要花很大的精力在技术上,而是需要把精力投入到用户体验上面,对每一个细节都斤斤计较,这样才能做出精品。这和技术实力并没有太大的关系,很多时候关键看执行者的耐心、细致,甚至是品位。在对大部分游戏系统有充分了解的前提下,只需要策划给一个大致的思路,略加点拨就可以做出符合预期的实现,这才是一个合格的游戏程序员应有的素质,吃过了五星级料理,虽然未必能总结出什么理论,但直觉会让你明白什么是一定会被策划打回来的狗屎,所以这就是我会去花时间玩大量不同类型游戏的主要原因(终于成功为自己玩游戏找到借口,噢耶~)。
阅读全文

30分钟了解C++11新特性

本文将对C++11的以上新特性进行简单的讲解,以便大家能够快速了解到C++11对C++的易用性方面祈祷的巨大作用。

  • 什么是C++11
  • 新的关键字
  • auto
  • decltype
  • nullptr
  • 序列for循环
  • Lambda表达式
  • 变长参数的模板
  • 更加优雅的初始化方法
  • 然后呢…

阅读全文

EXT文件系统误删除数据恢复指南

我们在管理数据库和系统的时候,经常需要做rm 删除文件的操作。由于Linux是没有回收站的,rm删除了文件或者目录以后,数据是无法从Windows所谓的回收站中找到并恢复的。这样的话,数据被误删除了以后,想要恢复我们一般需要从备份中,或者找数据恢复公司来恢复数据。但是,在某些比较特殊的情况下,使用了以下方法,我们还是可以找回部分数据的。

这里我们主要介绍两种数据恢复的方法。第一种是针对文件在文件系统中已经被删除了,但是,打开这个文件的进程还存在。第二种针对文件在文件系统中已经被删除了,目前也没有任何进程打开着这个文件,但是文件在删除以后没有其他对文件系统的变更操作。
阅读全文

图片原理与优化

前言:该文收集了前辈们的一些关于图片优化的技巧,在此收拢到一起,对于各个方法的优化原理做了一些研究,希望能给大家对于图片优化这一块起到抛砖引玉的作用。

提到图片,我们不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成一副图片。当放大位图时,可以看见赖以构成整个图像的无数单个方块。

常见的格式中JPG、PNG、GIF亦属于位图,所以它们的数据结构大致相同,只是每一种图片格式都有不同的压缩算法,不同的扫描方式,但是优化的方法都有一个共同点,都是围绕着每个像素颜色值来下手,具体如何进行优化呢?
下面来给大家介绍一下图片的一些基本原理和优化的方法:
阅读全文

程序员最艰巨的十大任务

程序员最艰巨的任务跟编写代码没有多少关系。编码是逻辑思路的一种实践,这跟程序员日常工作中的其它任务比起来相对简单。如果你认为自己还是一个水平一般的程序员,在你真正的能进入到高手行列前,请确保你已经克服了下列晋级的障碍。
阅读全文

基于OpenDayLight的SDN网络转发机制研究

Forwarding Mechanism Researching Based on OpenDayLight SDN Network

胡晓宇

中国电信上海公司网络操作维护中心

   SDN无疑是当前网络业界最热门的研究课题之一,SDN体现了控制和转发相分离的原则,为网络和业务的创新带来了蓬勃的生机和活力。本文通过构建OpenDayLight控制器与Mininet交换模拟器相结合的测试环境,研究了SDN环境下二/三层网络交换的转发机制和特性,并对SDN在网络中的应用提出了设想。
阅读全文

Travis CI: 最小的分布式系统

Travis CI 一开始仅仅是个想法,在当时甚至还有些理想化。在这个项目启动之前,开源社区还没有一个可用的持续集成系统。

随着作为开源协作平台的Github越来越被人认可,Github也非常需要可以持续对贡献代码进行测试的服务,来保证一个开源项目始终处于稳定健康的状态。

Travis CI开始于2011年初,而且很快得到了一些试用客户。到了2011年夏天,我们每天进行700次构建。所有这些构建都是在一台构建服务器上进行的。Travis CI跟Github完美集成,目前Github还是Travis CI的主要平台。

Travis CI在持续集成领域并没有惊天动地的大动作,但它的确重新定义了一些原有的概念,并增加了一些新的想法。其中一个就是你可以在你的测试运行过程中,接近实时的看这个项目的构建日志流。

阅读全文

Linux下高并发socket最大连接数所受的各种限制

1、修改用户进程可打开文件数限制
在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:

[speng@as4 ~]$ ulimit -n
1024

这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听 socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。
阅读全文