浅谈中国程序员为什么要跳槽?

    一些人总是发出一些错误的声音,形成了劣胜优汰可怕的现象。他们在误导着中国,把我们的后继军训练成软件蓝领,胸无大志,目光短浅,稍有点成绩就自满就自高自大的人,浑不知天外有天,外国正在虎视眈眈盯着中国的庞大市场。       由于软件蓝领的呼声人...
继续阅读 »
tc1.jpg

    一些人总是发出一些错误的声音,形成了劣胜优汰可怕的现象。他们在误导着中国,把我们的后继军训练成软件蓝领,胸无大志,目光短浅,稍有点成绩就自满就自高自大的人,浑不知天外有天,外国正在虎视眈眈盯着中国的庞大市场。
 
    由于软件蓝领的呼声人们不再致力于培养大批的高精尖人才,掌握国际尖端技术的人。而是花费心思培训一群猪出来给外国人利用。把自己的命运交给了外国人手里。结果,在最容易的管理软件领域也输给外国人,外国人派几个人过来,利用中国的劳动力,开发出软件,再卖给中国。大量的利润到了外国人手里。而我们的中的一些人还在沾沾自喜:外国人给的工资高;外国的软件好。
 
    低品质产品是没人要的。软件蓝领也不例外。
 
    他们不知道中国制造一个优秀程序员的难度,还在患红眼病。程序员制造,你可算过成为一个程序的高昂代价?没日没夜地工作,没有女朋友,运维也是如此,感情是一片沙漠,没有钱打工者的命运是悲惨的。
 
    真想知道究竟是哪个公司的程序员为了五十块钱跳槽,是哪个公司说需要软件蓝领。
 
    他们把不思进取比喻为工作稳定。
 
    国外可以在一个单位效力几十年。在国内不行。为什么?没有培训,没有上升机会。你被压榨完后就被扔掉。哪个有志向的人甘于这样的命运?
 
    中国的程序员是世界上最好的程序员。他们不计报酬,没日没夜地工作。没有女朋友,没有节假日,可能几年后他们一无所有但他们仍在加班...


一、程序员为什么要跳槽?


    有两个报道:
             1、“程序员为了五十块钱就跳槽”“万元月薪请不动程序员”“20%的程序员跳槽后都去了外企”
             2、印度的程序员比中国稳定。
    另有两个报道:
             1、本科生去美国工作两年后即可年薪10万美元。当然,他们是加薪很快。
             2、国外的企业都有培训。很吸引人。许多人是冲着培训去的。
    国外可以在一个单位效力几十年。在国内不行。为什么?没有培训,没有上升机会。你被压榨完后就被扔掉。哪个有志向的人甘于这样的命运?
 
    中国的程序员是世界上最好的程序员。他们不计报酬,没日没夜地工作。没有女朋友,没有节假日,可能几年后他们一无所有。他们仍在加班。
 
    有培训,就意味着你不会永远拿着现在的薪水。意味着你在不断进取,不断进步,能力越来越强,你就可以担当越来越重的工作,就可涨工资。给人看到未来。即使你对现在的薪水待遇不满意,你通过自身的辛勤不懈的努力和奋斗,就可达到你要的待遇。你不用嫉妒别人。只要你努力就可达到他甚至超过他。
  
    没培训,意味着不思进取,思想僵化,要被淘汰。没有希望,看不到未来。你注定被淘汰。别人通过拼捕获得的成功你就要嫉妒。因为你永远达不到那个高度。只有暗算他,把他拉下来,你才能达到心理的平衡。
 
    去外企,你可以看到一个光明的前途,你可以不断进步。路越走越宽。你在那个企业工作一段时间后,学到了很多东西。出来后你就是另外一个人。我曾经想去一个企业,不是因为他的工资高,而是他那里有培训,甚至送到国外培训,从他那里出来后可以当总经理。
 
    在国内,你的路会越走越窄,最终无路可走。因为你没有学习,落后于时代,再找到新工作都很难。
 
    国内公司只会大呼疾呼人才难留。他们没想过,他们是如何对待人才的,他们只会残酷剥削,搞政治斗争,整人。
 
    国内公司不去学习别人的先进的管理方法,反倒怨来怨去,浑不去找自己自身的原因。
1、为什么要跳来跳去?     
    因为在本公司内没有上升机会。  
    
    中国程序员是艰苦的,也是聪明的。他们利用一切时间进行学习。就拿我来说,军训完毕后,离计算机机房下班只有十五分钟时间了。一口飞跑到机房,只有十分钟可以学习电脑。就这十分钟,也要利用上。
 
    当他们发现本公司没有培训机会,没有学习机会,可这一切又怎能挡得住前进的脚步?国内公司管理一般是很差的,员工没有成长机会和发展空间。唯一的办法就是跳槽。某人戏称,每跳一次,工资就要加一倍。就拿我来说,每跳一次工资也确实是加一倍。拼命学习获得了知识的高增长,个人的高速进步,这没错。而雇主能看上我,也确实是自己能力已经达到这个水平。但越来最后每跳一次的时间越长。也许是因为进步速度慢了吧。后来又有些后悔,跳来跳去没有根,人到了一定程度就要扎下根来,把一项技术搞透,就需要长时间的积累,反而又踏实下来了。

    所以说,那些不断跳来跳去的程序员,其实是仍在初级阶段,到了中级阶段基本就稳定下来了,在某一个细分方向上获得突破。但我建议是,如果不能达到工资翻一倍的水平,或者目标公司没有特别之处,最好不要跳。否则每跳一次,原来积累的人际关系就会丢掉,而技术又没有长足的进步,如此跳来跳去,只会毁了自己,更可能越跳工资越低。到了一定层次后就不能再满足于一些小钱,而是要做事业了。衡量的目标,不是当前多少钱,而是以后会有多少钱。

    一般来说,国内公司也没培训,初级阶段获得迅速成长的惟一途径是自我学习跳槽。中级阶段要稳定下来。因为你这时已经到了“高原阶段”,工资也到了高原,精力也没以前充沛,不能再没日没夜加班加点了,也很难再获得突破,要想技术飞速进步只能去国外了。或者自己苦心钻研。现在许许多多的程序员通过自己的努力都到了此阶段。

2、为什么要跳到外企?

    外企有信用。让人放心。有培训,有高薪,老板把你当人看,剥削较轻,不像国内企业那样敲骨吸髓。可以找到女朋友。一般可以找到大施身手的空间。但有随时被裁危险。但一般是做得非常开心、顺心。

    老板说给你多少钱一般不用担心他会找理由克扣。这样你就可以尽可以放心地大施手脚。

下面列举几个事实,说明为什么要跳到外企:

1、广州X创软件,在广州体育西路。

    其老板以前是搞外贸的,发了财。我拿自己的全部代码(我拥有版权的软件),他卖。他老板说,你只能给我打工。你自己去运作,赚了钱,你这个软件开发者和版权拥有者只能拿到40%以下,而且你来到公司三个月后,代码的版权要归公司。

    我起身走了。如果我能出国的话,我一辈子都不愿意再回来。

2、广州市X聪软件

    我去之前谈好,我不要工资,我自己独立运作市场和软件开发,他公司只提供一个营业执照,赚钱分给他一半。辛苦了一个月,击败了众多对手后,一个十万元的项目总算有要签合同了。那个老板说,公司调整。你划到市场部。项目的10%拿到市场部,你再从市场部分得点数。(到我手里只有不到5%)。从下个月起,每个月1000块钱工资。你说话不算数,出尔反尔,没信用。我抗议。抗议无效。算工资的话,也行,那你把上个月的1000块钱工资算给我才行。不,上个月没工资。只能从下个月开始算工资。那我走,你把项目的15%提成算给我,这是你定的规定。没有15%,你只能拿5%。如果你现在走,那5%也拿不到。

    跟这样的公司混,你有未来吗?我能拼命给他干吗?

    我拿起背包头也不回地走了。一分钱也没拿到。找到的新工作是,一个月一万。打工。

    我想把项目带走。但客户怕得不到保障。因为我没有公司。最后仍是把项目给了那个进销存公司。

3、X苑集团。港资

    我对晶苑集团怀着深深的尊敬,并祝晶苑集团南中国电脑部叶富华先生马到成功,新春愉快。

    我印象最深的就是外企的信用。

    面试时,接待小姐端来一杯茶水。我很感激他们对我这样一个普通程序员的重视。(我去国内公司面试没有一家给我端水的。他们让你先做一份考题。做完了你回去等通知。后来我有经验了,去之前先问问怎样面试,只要是做题,见不着考官的,一概不去。再后来发展到只要是国内企业的,一概不去。)我的工资是上一份工作的将近二倍。

    欣喜若狂。公司有买被子津贴(公司给你买被子)、吃饭补助、住宿补助、加班费(1.5元/小时)。有加班费好啊。拼命加班吧。

    每天工作十八个小时到二十个小时。在四个月零十天的工作中,我只休息了一天。其他时间时间每天都像玩命似地。。。没有人逼我们,是我们自愿的。

    公司从香港总部派人到大陆对我们进行培训。支出专门的图书经费让我们建立电脑图书馆。请来专门的电脑教师,列出培训大纲,每天对我们进行程序培训。

4、香港X新丰软件公司。位于广州天河软件园。

    我做了四天,什么成绩都没做出来。但公司照给工资不误。午餐费、住宿费、交通费、保险费都给了我。很有信用。这样的公司,员工不会说它的坏话。只会尊敬、热爱和拥戴这个企业。

    老板很好。我们只要使他的资本达到20%的利润率就行了。

5、X元鞋业。台资。

    月薪8000请了个程序员(这个程序员不是我,我没有那么菜)。不知什么原因,反正做了两个月什么也没做出来。公司虽然大呼上当:-),但仍然是客客气气地付了一万六给他。这份胸襟,试问哪个国内企业能做得到?

结论

    国外企业已经完成原始积累,所以剥削相对轻很多,给员工的空间也较大。国内的企业还正在进行原始积累,进行疯狂压榨。正如资本论所说,只给你基本的生活费,其他的全部被老板拿走。“每一个毛孔都滴着血和肮脏的东西”。那两个国内公司,也滴尽了无数程序员的血泪。

    不说了。空喊口号没用。还是克隆微软,克隆人家的管理方式来得实在。把我们玩弄于股掌之上,说给我们加薪加薪再加薪全部算下来我拼命赚钱的95%都被你拿走多一分都不给我,说给我股票给我们期权可没一样能兑现,你说给我们多少工资我时刻都要提防你克扣工钱。你太贪婪,恨不得把全部拿过去,全部占为己有,不给我们留下一点活路。

    你喊多少口号都没用。我幸而生在这个加入WTO的社会,要在以前,我早被你整死了。我入外企我光荣。我逃脱魔掌我光荣。“士为知己者死”,你不要怪我们去外企。不能因为你生在中国我们就活该被你整死。你是土老财,我们是被解放军解放的翻身作主的奴隶。


二、程序员工资太高?


    你们在花前月下亲那柔嫩的红唇的时候,我们在做什么?你们在剥开女孩子衣服共度良宵的时候,我们在做什么?你们在唱歌跳舞纵情享乐的时候,我们在做什么?你们在争风吃醋大打出手的时候,我们在做什么?你们在给校长送礼的时候,我们在做什么?你们在喝酒猜拳的时候,我们在做什么?

    我们在写程序。

    如果你把我们的工资和那些好吃懒做在学校泡妞打架毕业后贪污受贿疯狂压榨人民血汗黑心黑手拿黑钱的人进行比较,我只能告诉你,你错了。

    你付出了什么,我们付出了什么?

    如果因为你的工资只有八百元,看见别人的工资超过你就生气,就要求别人的工资也要向八百元看齐,我只能说,你犯了红眼病了。中国人的劣根就是,不患穷患不均。外国人看到谁有钱就说,啊,我要超过他。中国人说,他妈的,我恨不得把他杀掉!大家都穷,我没意见,如果有谁冒尖我就想把他给拔掉。只想问一句,别人辛苦工作的时候,你干什么去了?

    我要说,当一个人,倾毕生精力和心血,把所有东西都倾注于一件事情时,他获得的只是普通人的十倍工资,这太低了。

    只拿着几千块钱工资,太少了。拿这点工资想去买一个人的青春和爱恋,这个人太不值得了。

    做生意的,当官的,欺压老百姓的,作威作福的,贪污受贿的。

    他们不用担心失业,不用担心技术过时,不用担心众多的竞争者。他们不用担心房子,不用担心车子。谁都知道他们一个月不会只有几千块钱那么简单。打工,写程序,是不能同他们比的。一个拥用着程序员的聪明和智慧的人去做那些事情,收入肯定比当程序员强算了,不比了。比起来心痛。

    这两个是纵向比较。同地区不同工种这间比较。按劳取酬,多劳多得,我们的所得与所付出的,仍然是不成比例。

    再横向比较。同一个劳动力在不同劳动市场上价格的比较,同一工种在不同地区的工资进行比较。

    程序员的工资,不是太高,而是太低了。

    一个本科生,出国工作两年后就可年薪十万,美元。而我们在为我们伟大的社会主义国家作贡献,只拿着5%的工资。(国外100万,国内才5万)

    一个同事到了国外,月薪5000美元,而他在国内才4000人民币。相差十倍。

    一个人,排除掉感情因素,他的东西当然是卖给出价高的那个人。这还用问吗?

    正如大批的留学生回来。不是我爱国,而是国内的空白多,机会多,发展空间大,所以我们大批地回来。

    时代在呼唤,人才的价值在回归,知识的价值在回归。


三、中国需要大量软件蓝领?


    我们已经输给了外国,还要在新一轮的竞争中自甘堕落?

    谁要软件蓝领?

    一记者去人才市场向各招聘单位问其需不需要软件蓝领.招聘单位都不明白软件蓝领是什么意思.待记者说明软件蓝领的意思后,各公司都说我们不要。基层人才从来都不缺乏。

    一方面是报纸大声呼吁软件蓝领要尽快制造出来,”我们要有大量的低成本的代码工人”,另一方面,企业不要这方面的人才.怪事。是谁大声疾呼需要软件蓝领的?他不知道各大公司都在裁员吗?

    面对生产力越来越高的生产工具(软件开发工具),软件蓝领淘汰势在必行。那些学习太慢的白领都会被淘汰掉,更遑论蓝领了。软件蓝领,还没培训出来就已面临灭顶之灾。

    软件工厂是不错,但软件工厂的核心不是吞下大量的软件蓝领和人海战术,而是对现有资源的整合和利用,降低现有的生产成本和交易成本。一味嚷嚷要求软件蓝领的企业,只是那些由于管理不善快要被市场淘汰的企业,这样的险恶用心有两个:一是最好不要钱的软件奴隶供驱使,二是将那些正在会成长起来的优秀的人才扼杀在摇篮中,他们成长不起来,就减少了竞争对手。而且由于对他们进行的愚化教育,要他们立志成为软件蓝领。没有了胸怀大志,中国的软件产业才真正危险。

    可喜的是,市场将用残酷的市场法则对那些人和那些所谓的软件蓝领进行残酷地淘汰。只有那些真正有领导眼光的魄力的“软件工厂”才会真正建立起来。微软才是软件工厂,他将几十几百人几千人几万人的力量集中在一起,生产出产品,在全世界销售。我们某些“软件工厂”不过是玩概念罢了。玩吧,玩吧,终有死的一天。你会死的很难看。

    可喜的是,软件蓝领喊了很久也没见哪个企业招一个,更多的是裁员。

    事实证明了蓝领的不适应性。机器排挤人,程序员中也在排挤之列。由于高生产力的开发工具的越来越多的使用,软件开发成本的大幅下降,软件开发越来越自动化,越来越多的人被机器排挤掉。许多由人去完成的事情,现在由机器做的很好,许多程序员被裁下来。(资深程序员应该有这种体会)。

    现在所谓的“软件工厂”,最大的危害在于他由于在学生中传播,使许多学生胸无大志,挣两钱就满足,把许多优秀人才扼杀在摇蓝中。

    我们需要的是,天才的政治家,整合起一盘散沙的中国,天才的军事家,抵抗外强的侵略。

    附:有人由“深圳快找不到蓝领了”而觉得“软件业也快找不到蓝领了”。

    深圳快找不到蓝领了。

    不错。

    他们要找的是什么样的蓝领?是以前概念中的只读完小学二年级,穿着蓝色工装,满身油污,手拿老虎钳的蓝领吗?

    不。

    他们要精通计算机技术,要精通图纸,要精通制造工艺,要精通机电技术,还要懂英文。这样才能读懂英文说明书,才能看懂图纸,才能编制数控机床所用的计算机程序,才能控制数控机床。而且这些最先进的数控机床使用了目前世界上最先进的技术,因此这个“蓝领”如果几年不跟踪技术趋势他就会发现他不再会使用这些代表着最先进生产力的机器,就会被淘汰掉。

    这样的蓝领是一般的所谓的白领能比得上的吗?三个白领也比不上这样一个“蓝领”呀。随随便便大喊一声“我们找不到这样的蓝领”,实在是有失偏颇。有没有想过,在这样一个使用着高技术,掌握着自动化工具蓝领的背后,是多少低技术蓝领的失业?生产制造这样一个蓝领,需要多少金钱和时间?这样的蓝领实在是造价不菲。所以在国外,总工和总经理是一级的,总工的待遇有时比总经理还高。而在国内人多粥少人治环境中,技术人才实在得不到重视。


四、软件工厂


    其实,我们真正想要的,不是软件蓝领,而是软件工厂。而且这样的工厂最多只要两个。

    当软件生产的管理水平到了一定高度,自会以工厂的形式运作,以大幅降低生产成本。

    软件工厂是用来做什么的?

           1、生产什么?哪里这么多的订单来维持工厂的运转?
           2、软件的零边际成本(即可复制多份而成本几乎为零)。一份软件只需要一份就够的情况下,多个工厂是不是重复开发,浪费资源?这样竞争的结果,顶好是全世界就一家工厂归好,交易成本减少到最小。

    中国大规模的重复开发,低水平的重复开发。如果大家团结在一起,组成个工厂,严密组织,分工协作,既提高了生产率,也降低了浪费。

    工厂的设立是为了降低交易成本。

    软件工业也有生产成本逐渐下降的趋势。只有大规模地群体协作,用工厂这种组织方式能有效地提高生产力,降低交易成本。

    工厂的核心不是软件蓝领,而是组织和协作。集中所有人的智慧去做一件事情。大规模地降低生产成本。

    中国目前虽然需要软件,但还缺少强有力的组织。可以说,还没发展到工厂的程度。

    所以我们曾经有个把中国所有程序员组织起来,像一个大型的软件公司那样运作,做成虚拟软件工厂的想法。但还没做完。

    中国的IT确像有些人说的那样,中间人才大量,高精尖人才严重不足。在我看来,基层员工从来就不缺少,由于外国对我们进行技术封锁,所以我们在向前进军的路上很难突破。但我们中间人才正在夜以继日地,在管理和技术领域进行拼搏,向高精尖人才进军。但只要有一个能突围,一定会有大批人相继突围。我们在等待着群体突破的那一天。那一天,从中间领域“制造”出来的大批高精尖人才在国际软件工业叱咤风云,领袖群雄。


五、“淘尽黄沙始见金”,要是再有员工因为工资而“叛逃”的话,不如说一句:由他去吧!


    很潇洒。很气派。道理也很对。只是口气有点自大,有点不自量力,而且也写错了。

    我记得原文是"千淘万漉虽辛苦,吹尽狂沙始见金。”,出自于《菜根谭》。刘兴波这位仁兄居然用"淘"尽狂沙始见金”,可见是一位炒股高手。妙,妙!只可惜恐怕是人云亦云,如果所猜不错的话,这位仁兄在专家的指示下应该赔了不少

    只是,在人才界,这个恐怕还要改。去的是谁?留下的是什么?

    很不幸,去的都是顶尖高手和优秀员工,留下来的只是找不到工作的人。在这个人满为患,就业困难的社会,只有那个顶尖高手和高素质的人,才能自由选择工作单位,才能来去自如,才能到外企工作。留下来的,不是不想走,而是怕找不到新工作。只有那些有本事的人才能“你不把老子当人,老子自会找到把我当人的地方” 


六、结言


    社会本来就没有绝对的公平,每个人要学会在社会生存。但是你可以有自己的思维和自己的想法,你可以不适应社会,让社会适应你,也可以不接受不公平,选择正义凛然,这些都没有人会阻挡你,因为你可以选择为自己活,不要去在意别人的眼光,可以选择一种自己喜欢的生活状态和环境。跳槽也是一样,你就是在不断的选择,本身并没有错,因为你只是选择一种自己喜欢的工作方式和环境。
转载原文地址 收起阅读 »

Mysql安装:/bin/rm: cannot remove `libtoolt': No such file or directory

我是centos系统,是通过下面的方法解决的 编译MySQL的过程中提示: /bin/rm: cannot remove `libtoolt': No such file or directory 解决: 1、确认libtool是否已经安装,如果没有安装的话,...
继续阅读 »
我是centos系统,是通过下面的方法解决的
编译MySQL的过程中提示:
/bin/rm: cannot remove `libtoolt': No such file or directory
解决:
1、确认libtool是否已经安装,如果没有安装的话,则先安装libtool
# yum -y install libtool
2、分别执行以下三条命令:
# autoreconf --force --install
# libtoolize --automake --force
# automake --force --add-missing
再重新编译安装,问题解决!
在网上也看到有别的办法,但是我没有测试过,例如:
这时直接打开 configure,把 $RM “$cfgfile” 那行删除掉,重新再运行 ./configure 就可以了。 收起阅读 »

金保工程 ITSM和ITIL培训视频

    这次给大家分享的学习资料视频是金保工程IT服务管理 ITSM和ITIL培训 基础加案例视频、教程,是由中国IT治理研究中心李长征研究员,针对“ITSM与ITIL的理论知识”进行了系统、丰富、详尽的讲解分析。废话不多说了,喜欢的同学拿走,本社...
继续阅读 »
itil.png

    这次给大家分享的学习资料视频是金保工程IT服务管理 ITSM和ITIL培训 基础加案例视频、教程,是由中国IT治理研究中心李长征研究员,针对“ITSM与ITIL的理论知识”进行了系统、丰富、详尽的讲解分析。废话不多说了,喜欢的同学拿走,本社区致力开源、分享。希望你推荐给你的朋友来社区分享!
 
   视频下载地址:http://pan.baidu.com/s/1pJHxuob

   开源技术社区QQ群号:372476089  欢迎加入互相学习
   扫码关注微信号: 
opsk.jpg
收起阅读 »

云智慧(北京)招聘信息

  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧! 我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:    Java架构师: 岗位职责: 1.负责相关产品系统架构...
继续阅读 »
  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧!
我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:
  
 Java架构师:
岗位职责:
1.负责相关产品系统架构设计、改进与优化,解决开发中主要的技术难点;
2.负责系统框架和核心功能模块的代码开发及后期优化;
3.制定设计规范和开发规范;
4.负责对技术团队的培训及指导,定期介绍新技术促进团队技术提高;
5.协助QA测试、协助运维人员进行后续部署等。

任职要求:
1.至少5年以上开发经验,3年以上架构师经验;
2.精通数据结构,熟悉并掌握各种常见算法;
3.熟悉Linux操作系统及基于Linux平台和Java容器的负载均衡方案,熟悉数据共享、同步等的实现方案者更佳;
4.有以下经验者优先考虑:分布式队列、分布式任务分发框架、全文检索及分词技术、海量数据存储与分布式存储技术
职业诱惑:15k-25k 期权、年终奖、五险一金、商业险、租房补贴
 高级PHP工程师:
岗位职责:
1.参与公司产品网站、服务和服务器监控产品开发;
2.参与架构和功能设计;
3.少量客户技术问题支持工作。

任职要求:
1.计算机及相关专业;
2.3年以上PHP开发经验;
3.精通PHP,熟悉常见的PHP开发框架和技术,了解Python和Java者尤佳;
4.精通Mysql,对于Memcached, Redis等常见的NoSQL数据存储比较熟悉;
5.熟悉HTML、JS、JQuery、AJAX、CSS等前端技术;
6.熟悉Linux和常见Linux命令。
职业诱惑:15k-30k 年终奖、五险一金、商业保险、期权
Android工程师:
  岗位职责:
  1.负责公司产品相关Android端产品功能设计、开发和实现。

  任职要求:
  1.熟练掌握Java移动端应用开发;
  2.有2-3年Android原生开发经验;
  3.熟悉网络编程,理解http协议及scoket通信等网络编程技术;
  4.开发过图表及报表应用者优先;
  5.开发过消息推送应用者优先;
  6.有修改过Android系统源代码经验者优先;
  7.具有良好的沟通能力和团队合作精神。
职业诱惑:9k-18k 年终奖+五险一金+商业保险+期权
对职位感兴趣的同学,可以加QQ:986978241  给予内推机会!
收起阅读 »

浅谈docker文件系统分层与隔离

        Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解       Docker 使用的支持的文件系统有以下几种: a...
继续阅读 »
df1.png
   
    Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解
 
    Docker 使用的支持的文件系统有以下几种: aufs、devicemapper、btrfs  Vfs 我们先来介绍一下aufs


一、  Aufs(advanced multi layered unification filesystem)


    Aufs直译过来就是高级分层统一文件系统。做为一种Union FS 它支持将不同的目录挂载到同一个虚拟文件系统下. 这个怎么理解呢。通过一条命令我们来看一下吧。
mount -t aufs -o br=/tmp/dir1=ro:/tmp/dir2=rw none /tmp/newfs

    []-o 指定mount传递给文件系统的参数[/][]br 指定需要挂载的文件夹,这里包括dir1和dir2[/][]ro/rw 指定文件的权限只读和可读写[/][]none 这里没有设备,用none表示[/]

    这个结果是什么样子的呢。 就是把/tmp/dir1 t和/tmp/dir2  合并之后挂载到/tmp/newfs ,如果这时在/tmp/dir1 下创建一个文件a  /tmp/dir2下创建一个文件b 则  在/tmp/newfs 会看到a,b 这两个文件,并且a 是只读的, 如果有相同的文件则以先挂载的为准,后面挂载的操作会被忽略掉
 
   通过对Aufs的理解,大家可以想像一下docker所谓的“layer”的概念。还是实际的例子说明一下。

    一个镜像通过docker save  保存之后 会被打成一个tar 包,我们来看下这个tar包里都有些什么?
docker save cloud_jiankongbao:01.tar cloud_jiankongbao:01
    通过上面的语句我们把镜像保存出下来。可以看到,保存下来的是tar 包。 不是.iso文件^_^,镜像解压之后是什么呢?
ls . 
a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329
d9bde94c518a16a886514758b6b4431200145ecd58e30c5633ac3c0256544d77
f1b10cd842498c23d206ee0cbeaa9de8d2ae09ff3c7af2723a9e337a6965d639
fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f
repositories
    出现了四个目录文件,再通过
docker images --tree
└─f1b10cd84249 Virtual Size: 0 B
└─fb9cc58bde0c Virtual Size: 203.1 MB
└─a005304e4e74 Virtual Size: 203.1 MB
└─d9bde94c518a Virtual Size: 1.957 GB Tags: cloud_jiankongbao:01
    大家可以看到,4个目录其实分别是4个ID(注每次使用docker commit 提供对docker的修改之后就会产生一个新的id,就是通过这个ID可以实现对镜像的回滚)。每个目录下有json  layer.tar  VERSION 这三个文件。我们再看一下layer.tar 
cd fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f;tar -xf layer.tar;ls

ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/
bin etc json lib lost+found mnt proc sbin srv tmp var
dev home layer.tar lib64 media opt root selinux sys usr VERSION
    这里存放的系统文件。

    我们再看一下镜像的4个不同ID的系统。

    f1b10cd84249 这个镜像是初始镜像,大小为0, fb9cc58bde0c 这个镜像是在f1b10cd84249基础上创建新的镜像,a005304e4e74是以fb9cc58bde0c为基础创建新的镜像。是树状继承的关系。我们再看下bin目录下的文件
ls a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329/bin/
gtar tar
ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/bin/
arch cpio egrep gunzip logger mountpoint raw sleep true
awk cut env gzip login mv readlink sort umount
basename date ex hostname ls netstat rm stty uname
bash dd false ipcalc lsblk nice rmdir su unlink
cat df fgrep iptables-xml mkdir nisdomainname rpm sync usleep
chgrp dmesg find iptables-xml-1.4.7 mknod ping rvi taskset vi
chmod dnsdomainname findmnt kill mktemp ping6 rview touch view
chown domainname gawk link more ps sed tracepath ypdomainname
cp echo grep ln mount pwd sh tracepath6 zcat
    a005304e4e74 只有两个文件 fb9cc58bde0c包括了大部分bin下的文件,这就是Aufs,理解起来感觉有点像增量备份。


二、简单的说一下devicemapper 


    devicemapper是利用了Snapshot 和Thinly-Provisioned Snapshot两种原理。将多个快照挂在同一个卷下从而实现文件系统的分层。不过使用devicemapper 的话一个container的大小最大只能是10G。
 
    在启动docker daemon时用参数-s 指定:  docker -d -s devicemapper
 
    关于隔离是怎么实现的呢,当容器基于镜像启动之后,每个容器都会获得自己的写读可写的文件系统层。原镜像的那部分文件系统是只读的,从而实现每个容器的在文件系统上的离隔。
 
   平时大家都在说dokcer 是弱隔离的,为什么呢?因为他没有隔离的很彻底,比如内核,内核是跟大家共用的,跟宿主机共用同一个内核,SELinux、 Cgroups以及/sys、/proc/sys、/dev/sd*等目录下的资源是与宿主机共用的。

   如果要隔离的彻底那就是VM了,而且如果dockers要想实现这些隔离就必然要牺牲一下现在轻量级的特性。那还不如直接用虚拟机好了!
文章转载出处 收起阅读 »

Ucloud DevOps Workshop互联网企业的运维进化论嘉宾资料分享

肖力 西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著有《深度实践KVM》一书,预计9月份出版。 王津银(老王...
继续阅读 »


肖力


up1.jpg
西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著有《深度实践KVM》一书,预计9月份出版。


王津银(老王)


up2.jpg
UC IT运维经理 嘉宾介绍:老王,先后在腾讯、YY、UC(1年多)从事各种业务、各种架构服务的运维工作。目前通过公众号【互联网运维杂谈】来分享自己的运维历程,倡导价值化运维理念。


崔玉明


up3.jpg
腾讯 数据库工程师/管理员 嘉宾介绍:腾讯游戏DBA TEAMLeader。从事技术运营工作13年,2007年加入腾讯公司互动娱乐运营部从事DBA岗位工作,现任DBA组及SA组负责人。在腾讯前6年,带领团队负责腾讯海量游戏Mysql及云存储的运维从0到1,从1到云的服务化平台建设。最近一年多主要精力在参与互娱成本优化以及系统运维工作。
介绍的技术点:
    []肖力:虚拟化项目运维实践[/][]老王:我的互联网运维理论与实践[/][]崔玉明:仓管员发展自白[/]

三位嘉宾的PPT下载地址:http://pan.baidu.com/s/1wPakY
 
开源技术社区QQ群号:372476089  欢迎加入互相学习
扫码关注微信号:
opsk.jpg
收起阅读 »

兄弟连Linux基础教学视频

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完...
继续阅读 »
linuxjc.png

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完本视频后,你可以接着学习我之前分享的老男孩中高级Linux学习视频,老男孩中高级学习视频下载地址请看:http://openskill.cn/article/76
 
   本次分享的兄弟连Linux基础学习视频下载地址:http://pan.baidu.com/s/1c02k6wo
 
   开源技术社区QQ群号:372476089  欢迎加入互相学习
   扫码关注微信号:
opsk.jpg

  收起阅读 »

Docker主机间怎么共享数据卷

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。      尽管容器之间共享同一台主机上的数据变得更为简便,跨主机间...
继续阅读 »
dk1.png

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。
     尽管容器之间共享同一台主机上的数据变得更为简便,跨主机间共享Docker数据卷比较棘手。数据容器是解决这个问题的一个方法,但如果数据经常变化或特别大,这样做会变得笨拙。
     我们要考察两个解决这个问题的方法。第一个是一个轻量级的分布式解决方案使用BitTorrent协议,仅仅需要安装Docker。 第二是使用NFS,并引入基础设施的容器的概念的更复杂的解决方案。


方法一:分布式数据卷BitTorrent的同步


     当Docker在一个组中实验,希望在组内共享大量数据,但是可能共享服务器没有足够的能力分配资源。懒惰的解决方案是在你需要他们的时候复制其他团队成员的最新文件,这将对一个更大的组失去控制。
     对此的解决方案是使用一个分散的工具共享文件–没有专门的资源要求。
问题:
     你想在互联网上共享跨主机的卷
解决方法:
     使用BitTorrent同步image共享卷
讨论:
    下面说明图显示了我们的目标,结束与设置:
dk2.png
   
     A - 该BTSync服务器是一个拥有我们将要共享的/data数据卷Docker容器
B - 在同一主机上设置一个容器从BTSync服务器上挂载数据卷
C - 在一个单独的网络中的其他主机,在BTSync服务器生成一个密钥,客户端可以通过引用BitTorrent协议来访问共享数据。
D - 在另外一台主机上的BTSync客户端,从第一主机BTSync服务器挂载数据同步更新/data数据。
E - 容器从BTSync客户端挂载数据卷
     最终的结果是卷/data-即方便地同步在互联网上,而不需要任何复杂的设置。
     在您的主服务器上运行这些命令来设置第一台主机上的容器:
[host1]$ [#A]docker run -d -p 8888:8888 -p 55555:55555 --name btsync ctlc/btsync
$ [#B]docker logs btsync
Starting btsync with secret: [#C]ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 By using this application, you agree to our Privacy Policy and Terms. http://www.bittorrent.com/legal/privacy http://www.bittorrent.com/legal/terms-of-use
total physical memory 536870912 max disk cache 2097152 Using IP address 172.17.4.121
[host1]$ [#D]docker run -i -t --volumes-from btsync ubuntu /bin/bash
$ touch /data/shared_from_server_one [#E] $ ls /data shared_from_server_one
     A -运行发表CTLC / btsync image btsync守护程序容器调用并打开所需的端口
     B -获取 btsync容器的输出,所以我们可以记下key
     C -记下key-不同的运行产生有所不同
     D-启动一个交互式的容器从btsync服务器的卷
     E-添加文件到/data
     在第二个服务器上打开一个终端,运行以下命令来设置数据同步
[host2]$ docker run -d
--name btsync-client -p 8888:8888 -p
55555:55555 ctlc/btsync ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 [#A]
[host2]$ docker run -i -t --volumes-from btsync-client ubuntu bash [#B] $ ls /data shared_from_server_one [#C] $ touch /data/shared_from_server_two [#D] $ ls /data
shared_from_server_one shared_from_server_two
     A -启动 btsync客户端容器与host1上的守护程序运行生成的密钥守护进程
     B -启动安装卷从我们的客户守护进程的互动容器
     C - host1上创建的文件已被转移到主机2
     D -创建 host2上的第二个文件
     回到主机1的运行容器,我们应该看到的文件,就像第一次是在主机之间进行同步:
$ ls /data
shared_from_server_one shared_from_server_two
      注:文件同步是没有时间保证,所以你可能要等待同步数据。这是特别真实的更大的文件。

      警告:由于数据被发送到互联网和处理的协议,你没有控制,不要依赖于此,如果你有任何有意义的安全性,可扩展性或性能约束。


方法二:通过NFS共享数据


      在一些大公司极有可能已经在使用NFS,NFS是一种行之有效的选项作为文件中心服务。Docker想要工作,它能够访问这些共享文件通常是很重要的!
      然而,Docker不支持NFS开箱即用和每个集装箱上安装NFS客户端,以便能够挂载远程文件夹不被认为是最佳时实践。相反,建议的方法是有一个容器用作从NFS翻译为Docker更友好的概念–卷!
问题:
      你要无缝访问远程文件系统通过NFS
解决方法:
      使用基础设施的数据容器代理访问
讨论
      这种技术建立在数据容器技术之上。
下图给出了这个抽象的概念:
dk3.png

      NFS服务器暴露内部目录的文件夹/出口,这是安装在主机绑定。Docker主机再将这个文件夹使用NFS协议mount到/mnt文件夹。然后,一个所谓的基础设施容器被创建,它结合了安装文件夹。
     这似乎有点过度设计乍一看,但好处是,它提供了一个间接层就Docker容器而言:他们需要做的是安装卷从预先约定的基础设施的容器,谁是负责基础设施可以担心的内部管道,可用性,网络等。
     彻底处理NFS是超出了本书的范围。然而,我们去通过一台主机上建立这样一个共享的步骤(即NFS服务器的元素在同一主机作为Docker容器)。这已经在Ubuntu 14.04测试。
     想象一下,你想分享你的主机/opt/test/db,其中包含的文件mybigdb.db。
     使用root,安装NFS服务器创建/export目录,并开放权限:
apt-get install nfs-kernel-server mkdir /export chmod 777 /export
     现在挂载db目录/opt/test/db到/export
$ mount --bind /opt/test/db /export
     现在你应该可以看到 /opt/test/db中的挂载的内容
     现在加入这一行到您的etc/exports文件中
/export       [#A]127.0.0.1([#B]ro,fsid=0,insecure,no_subtree_check,async)
      A -对于这个概念证明的例子中我们对127.0.0.1,这违背了对象有点安装在本地。 在真实的场景中,你会锁定下来的一类IP地址,如192.168.1.0/24的。 如果你真的很喜欢玩火,你可以打开它的世界,而不是127.0.0.1!
     B -为安全起见,我们安装件只读这里,*但是你可以用RW更换RO安装读写。 请记住,如果你这样做,那么你就需要异步标志出现后添加no_root_squash会标志 - 但考虑安全性在此之前沙坑外面去!
挂载NFS上的目录/ mnt目录,出口,我们在指定的文件系统的/ etc / exports的上面,然后重新启动NFS服务,拿起变化: 
$ mount -t nfs 127.0.0.1:/export /mnt
$ exportfs -a
$ service nfs-kernel-server restart
     现在您已经准备好运行基础设施的容器:
$ docker run -ti --name nfs_client --privileged -v /mnt:/mnt busybox /bin/true
      TODO:检查一个以上要求
      现在,我们可以运行 - 没有特权,或底层实现知识 - 目录,我们希望访问:
$ docker run -ti --volumes-from nfs_client debian /bin/bash root@079d70f79d84:/# ls /mnt myb root@079d70f79d84:/# cd /mnt root@079d70f79d84:/mnt# touch asd touch: cannot touch `asd': Read-only file system
     提示:如果你有很多这些容器来管理使用的运营效率的命名约定,你可以通过命名约定管理操作更容易,例如——名为nfs_client_opt_database_live容器暴露/opt/database/live路径。
这种模式的一个共享资源,在多个容器中使用的其他人使用的共享资源,是一个强大的,可以使开发工作流程更简单。
原文地址 收起阅读 »

老男孩中高级Linux学习视频

    这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!    视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh   开源技术社区Q...
继续阅读 »
linuxs.jpg
  
 这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!
   视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh
 
开源技术社区QQ群号:372476089  欢迎加入
扫码关注微信号:
weixin.jpg

  收起阅读 »

Python异常处理的三种常用方法

如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:try: 语句1 语句2 . . 语句N except .........: do something .....
继续阅读 »
如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something .......
但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,那么"except ......"这句应怎样写?
总结了一下3个方法:


方法一:捕获所有异常


try:  
a=b
b=c
except Exception,e:
print Exception,":",e



方法二:采用traceback模块查看异常


#引入python中的traceback模块,跟踪错误
import traceback
try:
a=b
b=c
except:
traceback.print_exc()


方法三:采用sys模块回溯最后的异常


#引入sys模块
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]
但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:
把traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中
import traceback
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close()

收起阅读 »