靠谱的程序员太少了

阅读更多关于《靠谱的程序员太少了》

 

最近几个月,面试了不少的程序员,更好听的名字叫做软件工程师,甚至高级软件工程师。

我一般会针对面试者的特长,问一些相关的问题。有说擅长算法的,图像处理的,图形学的,数学的,C++的,Java,Perl 的,Shell 的,Linux内核的……

到目前为止,面试的人不算太多,但少说也过100了,基本上,语言方面和其它特长兼有的,一个也还没碰到过。

靠谱的C++程序员,所谓的靠谱,其实也就是:

  1. 了解 STL 的常用组件,能正确使用 STL
  2. 知道 type_traits ,以及如何使用 type_traits
  3. 对虚函数、重载、虚表有一定了解
  4. 能正确认识C++的异常
  5. 了解 Pure C 和 C++ 的 C 子集中比较常见的、明显的区别

基本上,就这 5 点,能有两点比较突出的,也就那么两三个人,而这两三个人里面,C++差不多就是他们唯一的特长了。

 

Java 上,我问的问题比较少,远不如 C++ 多,并且更简单,也就是:

  1. int/long 的二进制位数,jvm 是否在不同平台 int/long 的二进制位数是否相同
  2. 对于 StringBuilder,每次追加一个字符,当其长度长到 n 时,时间复杂度是多少
  3. 能否把一个 String 对象,添加到一个 List<Integer> 中
  4. Comparable 和 Comparator 有何区别,如何把非 Comparable 的对象作为 TreeMap 的 Key
  5. GC 的基本原理(大部分人的回答是调节 gc 参数)

目前还没碰到一个人能回答第 4 个问题!呜呼!

 

算法+Coding:

  1. 90%以上的人不知道 make_heap 的时间复杂度,知道的人,也都是背的答案。
  2. 完全无 bug 的 binary_search ,只有 3% 。
  3. std::lower_bound 类似功能的函数,目前还没一个人写得出来。
  4. 从一组 IP range –> value 的数据中查找单个 IP,允许使用 C++ stl 或 java 基础类,还没一个能给出解决办法。
  5. QuickSort 的最好情况,和 MergeSort 的最好情况,哪个的 KeyCompare 次数更少,目前只有一个人答出。

如果在这些之外,还熟悉 perl, bash, python 等脚本语言的,更是凤毛麟角。

 

要知道,这些职位可都是年薪20w以上的!

欢迎同道之士加盟,可以站内联系我,有内部推荐机会。

是个软件都想强奸用户

阅读更多关于《是个软件都想强奸用户》

Windows 7 资源管理器反应超慢已经很久了,刚刚这个问题被我彻底解决。使用 Autoruns 查看 Explorer 页,删掉所有可疑的王八蛋继续阅读

解决amule脱机下载问题

阅读更多关于《解决amule脱机下载问题》

新买的廉价路由器,可以脱机下载,但只内置了bt,没有内置amule。先自己装了amule,router上的falsh太小,装不下那么多软件,就装到移动硬盘上,格式化成ext3。 继续阅读

read/write&mmap&aio

阅读更多关于《read/write&mmap&aio》

read/ReadFile 系统调用默认有预读
write/WriteFile 默认是异步写
mmap 使用缺页中断,实现预读/异步写比较困难
aio 对磁盘调度做特殊优化,在随机访问较多时,理论上性能最好(如果操作系统真正实现了aio) 继续阅读

这样反贪如何?

阅读更多关于《这样反贪如何?》

类似于囚徒困境,立这样一条法律:行贿者保留自己向受贿者行贿的证据,事后告发该受贿者;对于该告发行为,法律严惩该受贿者,而该行贿者不受任何处罚继续阅读

简单的代码生成器创建领域语言

阅读更多关于《简单的代码生成器创建领域语言》

有一类问题,代码模板相同,但有少部分地方不同,一般可以写一个复杂的程序,使用不同的选项,完成不同的任务。或者,把公共的部分抽象成一个代码库,然后在不同程序中引用。但是,如果公共的部分很少,并且比较“专用”,或者因为其它原因,比较难以部署。怎么办?

实际上,有另一种完全不同的编程模式来实现:代码生成器。unix世界中最知名的代码生成器莫过于lex和yacc了。但是,不比每个代码生成器都那么复杂,比如这个代码生成器就非常简单,它只是简单地转换行记录:

 

可以象awk一样写程序:

 

我当初写这个生成器的原因是发现非常简单的 awk 程序也比 C 慢 40 倍,以为这是本质上的性能差距,后来才发现不是

 

对这个简单的程序,使用awk更方便更安全,也不比C慢,但是一旦碰到其它类似问题而 awk 解决不了,这种模式就可以派上用场了。

LC_ALL=en_US.UTF-8 让 awk 慢了 40 倍!

阅读更多关于《LC_ALL=en_US.UTF-8 让 awk 慢了 40 倍!》

  无意中发现,在一台服务器上,非常简单的awk程序,比C的等价物要慢40倍,感觉有点不太正常,还以为的确是awk太慢。不得其解,到另一台服务上试了一下,相同的 awk 程序,相同的测试数据,这台服务器的速度与C相当,也就是说,同样是awk,两台机器速度差了 40倍,而两台机器配置基本相当。非常困惑,找了两小时的原因,终于发现gawk手册里面有一段话:

For other single-character record separators, using ‘LC_ALL=C’will give you much better performance when reading records. Otherwise,gawk has to make
several function calls, per inputcharacter to find the record terminator.

再看两台机器的 locale,结果发现,慢的机器上:

[root@slow-server]# locale
LANG=en_US.UTF-8
LC_XXXX=en_US.UTF-8


LC_ALL=en_US.UTF-8

快的机器上:

[root@fast-server]# locale
LANG=en_US
LC_XXXX=en_US


LC_ALL=   <空>

马上试验,将slow-server的locale改掉:

export LC_ALL=C

速度马上快了40倍,与fast-server相当。

 

这应该是awk实现上的一个缺陷,即便是对utf8,也不应该慢这么多,如果缓冲合适,最多慢2~3倍就可以了,为什么非要gawk has to make several function calls,
per inputcharacter

地下军工厂大造“山寨”武器

阅读更多关于《地下军工厂大造“山寨”武器》

很多所谓互联网高科技,与这山寨军工厂有何异?

 

本报特约记者 章鲁生 《 青年参考 》( 2011年05月20日   21 版)

一家地下军工厂

一名反对派人员身背改造后的AK-47冲锋枪,在米苏拉塔市街头巡逻。

利比亚反对派和政府军的武装冲突已持续了两个多月,据美国《纽约时报》报道,反对派武装的武器装备可谓五花八门,拆卸下来的机载机关枪、世界大战时期的“古董枪”甚至牛排刀等,均被派上用场。但即使如此,武器依然短缺。

为了让更多的志愿者拥有武器,在反对派武装控制的利比亚西部城市米苏拉塔,一些地下军工厂(或许叫“地下作坊”更合适)开足马力,因陋就简地为反对派制造各种“山寨”武器。

“古董枪”没子弹,不如一块石头

迄今为止,利比亚政府军已围攻西部城市米苏拉塔长达8个星期。对反对派来说,米苏拉塔具有重大的战略意义——这是他们在利比亚西部占领的惟一一座城市。为了保住这块根据地,反对派动用了一切可以动用的“资源”。单从装备上讲,在米苏拉塔街头见到的武器,足以让人眼花缭乱。

最显眼的当属PKT机关枪。这种安装在苏联坦克上的重型机关枪没有枪托,没有准星,也没有手动扳机,全靠坦克车内的人遥控操纵。米苏拉塔的反对派成员只好扛着这种笨重的机关枪。

还有意大利的卡尔卡诺卡宾枪,这种枪或许是两次世界大战期间意大利对利比亚实行殖民统治时期留下的老古董,由于太过老旧,甚至没有配套的子弹可供使用。即使如此,《纽约时报》的记者奇弗斯仍在米苏拉塔街头见到4个反对派成员端着这种枪。

反对派手中的“古董枪”还有法国军队几十年前装备的MAT-49冲锋枪。和卡尔卡诺卡宾枪的情况一样,这种枪也没有配套的子弹。记者奇弗斯因此戏称,拿着一把MAT-49,还不如拿一块石头。

武器杂乱、“古董枪”多的现象,说明反对派武装武器匮乏。

31岁的菲克里·伊塔尤里曾在一辆配备了机关枪的卡车上战斗,后来机关枪和卡车一起被炸毁,他的武器只剩下一把很大的牛排刀,但伊塔尤里信心十足。“好在我还有这个……”他挥舞着那把有锯齿状刀锋的牛排刀,“我想用这把刀扎进卡扎菲的心脏!”

反对派表示,很多人志愿加入他们的组织,但枪支短缺影响了战斗力。

也有一些志愿者带着武器加入。在利比亚东部,一些志愿者花至少2000美元购买AK-47冲锋枪。这些人因此受到关注——等他们在战斗中倒下,就去捡他们的枪。

开足马力制造“山寨”武器

因为武器短缺,政府军围城后不久,米苏拉塔一些由反对派控制的地下工厂便开足马力,因陋就简地制造各种“山寨”武器。

米苏拉塔前线最常见的是加装了钢板装甲、车后载着机关枪的四门民用卡车。这些枪——如前文提到的PKT机关枪——多为冷战时期生产,本来安装在飞机或坦克上,现在反对派把它们安装在民用卡车上。很显然,这些因地制宜的武器都是地下工厂的“作品”。

为防止政府军的奸细搞破坏,反对派把这些地下工厂视为机密,甚少向外界透露。记者奇弗斯软磨硬泡了3天,才于5月2日获准到其中的两家工厂采访,条件是不得向外透露它们的具体地点,也不准拍工厂门口的照片,以免政府军“按图索骥”。

在奇弗斯看来,地下工厂制造的一些“山寨”武器很耗资源,但实用价值“存在疑问”。不过反对派对此不以为然,在他们看来,“只要能把卡扎菲的军队击退,任何花费都是值得的”。

总体来说,地下工厂加强了反对派的力量。此前,一些加入反对派武装的人只能拿着刀甚至石块走上前线,现在他们可以在后方的工厂里挥舞着榔头、举着电焊枪、操纵着车床,让更多反对派战士拥有“货真价实”的武器。

“如果我们一开始就有足够的武器,我也不会在这里了,我会和两个儿子一起在前线战斗,把卡扎菲的人赶跑。”在奇弗斯采访的一家地下工厂里,电焊工艾哈姆德·舍基说。

说话间,外面有炮声传来,震耳欲聋,但艾哈姆德仍动作熟练地把一块装甲钢板焊在一辆卡车上,仿佛没有听到爆炸声。

根本没工夫统计产量

记者奇弗斯看到,艾哈姆德身边堆放着他当天要完成的任务:4辆民用皮卡、产自不同国家的机关枪,还有一堆钢板。他得把这些机关枪安装到皮卡上,并把钢板在车上加固。机关枪太大太长?没关系,用钢锯锯掉多余的部分即可。

在工厂的另一个角落,30岁的奥马尔·艾尔·萨基尔正对着一挺.50口径(12.7毫米)的机关枪发呆,因为这挺机关枪没有扳机。

枪身上的标志显示,这是一挺比利时生产的M3M机载重型机关枪,但萨基尔并不清楚这些。沉思了一会儿,萨基尔终于想出该在哪里给这挺机关枪安装扳机。他制造出一个粗糙的扳机装了上去,一挺机关枪就这样“复活”了。它将被固定在皮卡上,成为夺命利器。

在这家工厂里,除了艾哈姆德和萨基尔,还有两组工人。一组正在锻造武器的旋转座,另一组在把钢板焊到皮卡上。工人们说,在天黑之前,这些皮卡将摇身变为他们的“装甲车队”。

这些即将变身为“装甲车”的皮卡,通常被从头到尾漆成黑色,车尾灯和方向灯也被摘掉。这样一来,政府军很难发现它们的行踪。

当被问及生产了多少辆此类“装甲车”时,这家工厂的车间主管巴希尔·扎尔加尼表示,“不太清楚”。

“太忙了,我们根本没工夫统计产量。”扎尔加尼说。

记者奇弗斯根据在米苏拉塔街头以及前线的所见所闻,认为此类“山寨装甲车”的数量“至少有100辆,很可能在200辆以上”。

生产军火的工人“自学成才”

“山寨装甲车”是反对派地下工厂的“主打产品”之一。奇弗斯曾在利比亚首都的黎波里街道上看到一种被称为“henzab”的武器,也出自反对派的地下军工厂。“henzab”是当地人的俗称,指的是一种铁器。这种铁家伙的大小跟一个棒球差不多,有五六厘米长的刺,若不小心踩上去,鞋底将被轻松刺穿。

与政府军在的黎波里激战时,反对派武装在政府军必经的道路上放了很多“henzab”,迫使他们缩在包围圈里被动挨打,许多政府军士兵被这种铁家伙扎伤了脚,政府军许多车辆的轮胎也被扎破。

在另一家地下工厂里,奇弗斯看到一名工人正在往RPG-7单兵火箭筒的火箭弹里装填炸药。RPG-7是利比亚反对派武装主要的“重武器”之一,能穿透坦克装甲。为了打击躲在建筑物中的政府军,反对派军械师阿里·拉马丹·埃尔加拉贝对这种武器进行了改造。他在火箭弹上加装了较厚的铝套筒,火箭弹击中混凝土墙壁爆炸后,会产生很多碎片,从而杀伤建筑物中的政府军。

“这种火箭弹,我每天能生产30到40枚。”埃尔加拉贝告诉奇弗斯。

和这家工厂的其他工人一样,埃尔加拉贝之前并无生产军火的任何经验,属于“自学成才”。

埃尔加拉贝改造的这种火箭弹,装填的炸药大部分来自军火零售商。为了获取更多炸药,他把缴获的一些炸弹拆开,取出炸药,装填到RPG-7的火箭弹中。让奇弗斯心悸的是,埃尔加拉贝用一个金属工具,而非木勺或木片,从炸弹中舀出炸药。试想一下,如果金属工具与炸弹壳摩擦产生火花……

反对派呼吁北约提供武器援助

美国有武器专家认为,增加弹体的长度与重量将降低RPG-7火箭弹攻击的准确性,尤其是在没有光学瞄准镜的情况下。

记者奇弗斯把这种改造后的弹体照片发给美国一名武器专家,专家看后回信说:“虽然(加装厚铝套筒的想法)很有创新精神,但我认为这样会使火箭弹前部变重,在飞行过程中急速下坠,无法击中目标。”看到工人用金属工具舀出炸药的照片后,这位武器专家告诫奇弗斯:“任何参观者都要避开这种场面。”

这些地下工厂的工人清楚,在不具备任何武器知识的情况下做这些事情是很危险的,但他们“别无选择”,因为每天都会有大量信息从前线传来,要求他们改进某些武器,“时间不等人”。

工人们表示,在“边摸索边实践”的过程中,他们学到了不少武器知识,“每周都有提高”。

一家地下工厂的车间主管巴希尔·扎尔加尼说:“每个人晚上回家都会苦苦思索,怎样才能做得更好?我们必须既快又好地完成工作,因为我们的城市正在遭受攻击,没有太多时间让我们慢慢研究。”

不过,即使开足马力,这些地下工厂的军火产量也无法满足巨大的战场消耗。5月9日,反对派呼吁北约尽快提供先进武器,以扭转不利局面。

5月11日,反对派控制了米苏拉塔的机场,美国国防部援助反对派的首批物资于当日“空降”,包括1万份即食口粮、医疗器械、帐篷、制服、靴子和防弹衣,但没有美制军火。看来,反对派的地下工厂还得努力提高产量。

世界上应用最广泛的虚拟机是啥?

阅读更多关于《世界上应用最广泛的虚拟机是啥?》

别说是JavaVM!

正确答案:x86vm

x86本身是一个硬件vm,它的指令系统是一个vm指令系统,通过翻译层后,才交给下面的risk内核。

 

fuck淘宝,fuck原叶绿茶

阅读更多关于《fuck淘宝,fuck原叶绿茶》

昨天,渴了,买了瓶原叶绿茶,准备扣上盖子扔瓶子时,发现上面说:

N2KOKC5ND9L 十元淘宝券 兑奖09/11/30止口

跑到淘宝上看,找不着哪兑奖,后来终于发现:

http://pro.taobao.com/yuanye/yuanye_index.htm

输入号码,点击“适用10元抵价券商品区”结果是一大堆给我都不要的东西。

    我不殚以最坏的恶意来揣摩这些fuckee,可是,这些fuckee却如此侮辱我的智商。而且还是如此公开、如此明目张胆的侮辱。

    侮辱了大家的智商,还要浪费大家的时间,浪费大家的精力。如果买了它的东西,在你被侮辱的同时,人家还说:傻逼真乖,把钱给爷!