灌溉梦想,记录脚步

求职招聘中最受企业欢迎的十大技能

每个有过工作经历的人都知道,能够为雇主提供其急需的技能是获得工作机会的前提,拥有过硬技能的人有更多的工作机会。一个人掌握何种技能取决于他的兴趣、能力和聪明程度,也取决于他所能支配的资源以及制定的
事业目标。但是,由于经济发展前景不确定,掌握对你的事业有所帮助的技能显得尤为重要。以下是美国劳工部公布的最受雇主欢迎的十种技能。

  一、解决问题的能力

  每天,我们都要在生活和工作中解决一些综合性的问题。那些能够发现问题、解决问题并迅速作出有效决断的人行情将持续升温,在商业经营、管理咨询、公共管理、科学、医药和工程领域需求量骤增。

  二、专业技能

  现在,技术已经进入了人类活动的所有领域。工程、通讯、汽车、交通、航空航天领域需要大量能够对电力、电子和机械设备进行安装、调试和修理的专业人员。

  三、沟通能力

  所有的公司都不可避免地面临内部雇员如何相处的问题。一个公司的成功很多时候取决于全体职员能否团结协作。因此,人力资源经理、人事部门官员和管理决策部门必须尽量了解职员的需求并在允许的范围内尽量予以满足。

  四、计算机编程技能

  如果你能够利用计算机编程的方法满足某个公司的特定需要,那么你获得工作的机会将大大增加。因此,你需要掌握C++、Java、HTML、 Visual Basic、Unix和SQL Server等计算机语言。

  五、培训技能

  现代社会一天产生和搜集到的数据比古代社会一年的还要多。因此,能够在教育、社区服务、管理协调和商业方面进行培训的人才的需求量逐年增加。

  六、科学与数学技能

  科学、医学和工程领域每天都在取得伟大的进展。拥有科学和数学头脑的人才的需求量也将骤增,以应对这些领域的挑战。

  七、理财能力

  随着平均寿命的延长,每个人都必须仔细审核自己的投资计划以保证舒适的生活以及退休后的生活来源。投资经纪人、证券交易员、退休规划者、会计等职业的需求量也将继续增加。

  八、信息管理能力

  信息是信息时代经济系统的基础,掌握信息管理能力在绝大多数行业来说都是必须的。系统分析员、信息技术员、数据库管理员以及通信工程师等掌握信息管理能力的人才将会非常吃香。

  九、外语交际能力

  美国需要从别国进口原材料和商品,美国的商品和服务也要出口到全球市场。掌握一门外语将有助于你得到工作的机会。现在热门的外语是俄语、日语、汉语和德语(对于中国人来说,掌握英语显得尤为重要)。

  十、商业管理能力

  在美国,生意就是生意,掌握成功运作一个公司的方法是至关重要的。这方面最核心的技能一方面是人员管理、系统管理、资源管理和融资的能力;另一方面是要了解客户的需要并迅速将这些需要转化为商机。

公司技术管理角度看C++游戏程序员发展

这是我多年来招聘培训游戏程序员的一点想法。一直想汇总一下。主要目的是为了更好的对公司新进C++程序员进行培训,并且建立起游戏程序员培训,发展,成才,成为核心骨干,管理层,期权收益人等一整套体系。因为对于MMO游戏制作来讲,解决好C++技术队伍,是保证合格软件的基础之一。

我在的H3D Studio核心技术人员和游戏制作管理人员全部是SMTH BBS游戏制作版成员。从99年开始截止BEGINER的历任版主都在H3D STUDIO里工作过。在这里我把具体的培训以及技术队伍组建的内容去掉,只和大家聊聊关于游戏程序员切身利益相关的事。

另外这不是居高临下来评判什么事情。我本人也不是多么高级的技术人员或者管理人员。只是坚持做一件事情年头很长教训很多而已。所以有些体验。文中所有评判其他结构或人水平低,并不是说我本人水平有多高。不要误会。

1 ,C++游戏程序员现状

中国C++程序员100%都是自学的。因为中国几乎没有象样的C++培训机构。大家都知道社会培训是赚钱为主要目的。能在那里成才是个大运气。也不象JAVA有SUN公司一手推行。中国大学教育里也根本没有C++教学。关于C/C++基础课的知识,只是让学生入门。但对于实际的C++软件工程应用,大学课本知识实践意义不大。最重要的是,大学里没有合格的C++老师。编程是门技术,叫手艺也行。而大学是搞科研的,多的是科学家,靠出PAPER教科凭职称为生。并不是技术员。没有10万行以上代码经验和成功软件项目经验的人,很难教出中高级C++程序员。

游戏制作业对C++程序员的要求是比较高的。比一般行业软件高很多。因为任何一个MMO都是个中大型软件项目。日使用人次达到几十万上百万,同时使用人数几十万在线的大型网络多人交互软件,集成了超过十几项专业领域编程技术的软件,想不大都不行。

另外,中高级C++程序员能力一般都很强。因为都是自学成才,这需要较高智商,很强的自学能力,解决问题能力,和克服困难的毅力。但是这种人才在游戏行业里人数并不多。抛开凤毛麟角具备整体大型软件架构能力的高级人才不谈。能够承担独立模块开发,具备独立解决问题的能力,写出在空间,性能,可维护性等几个方面达到要求的C++程序员,也是很难找到的。而具备这些能力,同时又具备一些专业领域技术的人(图形引擎,网络引擎,等),更加稀少。

所以,即便是大游戏公司,对于C++游戏程序员的需求,也是永远不能够得到满足。而已经在公司工作的C++程序员,不经过短则3个月,长达1年的锻炼,也无法真正胜任独当一面的C++游戏程序开发工作。

2 ,MMO游戏开发对C++游戏程序员要求

前面提到,所有MMO游戏都是中大型软件。软件占用空间,稳定性,性能,可维护性等各项衡量软件质量的指标,对MMO游戏软件的要求都非常严格。远大于普通行业软件。这种规模和银行系统类似。而客户端和软件逻辑比一般的商业软件又要复杂很多倍。这就要求软件编写人员具备较高的程序编写素质。

游戏软件中,解决好软件工程部分,只是项目的1/3。另外两部分是策划和美术/音频。从经验来看,需求变更对于MMO游戏软件,不是偶然事件,而是一种MMO游戏软件开发的基本属性。游戏软件投入大,周期长,风险高。MMO市场变化也大,交互电子游戏发展迅速。游戏软件必须面对外界变动。又因为开发周期长,所以软件需求变动成为了软件开发的一种基本属性。犹如复杂性是软件工程的一项基本属性一样。

这导致游戏软件的开发充满了不确定性。交互娱乐不同于商业应用。娱乐是属于理性和感性之间的领域。而C++开发面对就是0和1的二元世界逻辑。这两个领域存在着不可调和的矛盾。这种情况,对C++游戏程序员提出了更高的要求。

首先,基本C++知识,C/C++运用技能,必须极其扎实。并不是游戏软件开发用到什么平时书本上很难得到的知识点或者技能点。游戏C++开发的知识体系和技能体系,利用现有C++书籍就可以满足。比如《C++ PAORGRAMMING LANGUAGE》《C++ PRIMER》《EFFECT C++》《MORE EFFECT C++》等。但是在开始游戏编程之前,把这些书本吃透并且实践熟练的人,非常难遇到。当然能够真做到这点的人,已经是个中高级C++程序员了。我曾经遇到过一个,毕业工作不久就去了GOOGLE

其次,对于面向对象的深入理解。是非常重要的。熟练掌握C/C++语法,编程技巧,只是满足了C++游戏程序员一部分要求。而面向对象观念的深刻理解,会为大型C++项目开发带来翻天覆地的变化。 有时候,在一个10人以上并行开发的C++游戏项目中,面向对象方法会成为救命稻草。《设计模式》以及《设计模式解析》相关的书籍,也是必修课。

最后,好技术人员的本质是自大的。这属于正常。但是如果这种习性影响了自身继续提高和团队合作。以及影响了其成为技术管理者和项目技术核心时,那么这种技术人员的自身价值会大打折扣。 如果早日越过自命不凡这一关,扩大眼界,继续在综合素质上提高。在技术管理能力,架构能力上提高,其自身价值才会继续增长。落到实处,就是待遇和身家增长。

由于游戏开发的本质是团队开发。任何时候,只有对一个团队有价值的技术人员,其本身的价值才有可能得以体现。

3 ,成长和技术发展路线

一般技术人员发展有几个阶段

1 ,具备独立开发局部功能的能力

比如为某个UI编写逻辑接口函数。为某个LOGIN对话框编写自绘制控件等。

2 ,具备独立开发和攻关某个功能模块的能力

比如为游戏增加一个小型逻辑功能模块。

3 ,具备独立设计并开发某个系统的能力

比如设计和开发AUTOPATCH 系统

4 ,具备解决技术难题,设计架构的能力

比如开发网络同步仿真系统,开发一个中大型游戏制作工具

5 ,具备整体架构,管理,协调其他人共同开发一个大系统的能力

客户端主程,服务器主程,引擎主程等

6 ,技术director

制定技术发展方向,技术团队建立,技术管理等

在迈向每个阶段的过程中,伴随的都是巨大的工作量和工程压力。有时候是跨越1年的失败等等。在公司项目不成功时转换单位,重新开始,或者继续做为核心团队留在公司继续从新的机会做起,都是好的办法。但关键是吸取经验教训,尽量多学多练。并且结合自身长处发展。当然,游戏制作人员,最好还是依靠一个核心团队。成为核心团队的一员。

能够达到第三档的程序,已经是公司不可缺少的人才了。但往往程序员自身对自己的认识,和公司对其的认识,有时候会有差异。我碰到过一些人,脑子好用,写东西很快。各种技术都有涉猎。但总是不放心让他独立开发设计某个系统。哪怕是相对独立的工具。也会被搞得一塌糊涂。要后面人不停擦屁股。可自己还觉着自己水平很高。这种人浮躁,眼高手低,不愿意细致周全的做好一件完整的事。所以就可以看到他不停的跳来跳去,可在新公司的职位也没有见多么提高。公司非常重视交给一个程序员一件事,他是否能完整,考虑周全的把事情做完。哪怕时间长一点,也不能不做完。这会给工程带来致命的后果。

4 ,发展待遇

从自身经验出发谈一下公司是怎么考虑技术员工待遇的。

前面提到的6档,粗略了划分了待遇水平。其实到了第三档,你的待遇已经是这个行业所决定的了。而不是某个公司决定的。因为游戏业大量缺乏这样的C++程序员。如果具备这个水平,在几个大城市游戏公司找到工作并不难。大公司提升慢,还有我这种不到百人规模的公司要。所以行业价格才是公司要考虑的。如果给少了,软件项目的C++程序员流失会带来较大影响。但给的多,其实是C++程序员自己的价值增长瓶颈。如果几年下来一直以为自己水平就该拿这么高,结果到了一家整体技术水平比较高的企业,就会彻底傻眼。这个时候再放低心态去重新开始,对技术员来讲就是件很艰难的事了。

在目前游戏行业技术水平普遍较低的情况下,哄抬程序员工资水平对程序员自身好处也不会很大。就算一个新手本来拿几千的水平,给他1万。他根本就不会知道自己到底有多少水。一年下来也就多拿了3-4万人民币。可耽误的是学习,影响了心态。而那些心态好,知道努力方向的技术人员,干个3-5年后如果有拿期权和股权的机会,比那些一开始虚高的人,身家就不知道高多少倍了。

下面再谈谈我个人在招聘C++程序的体会。

1 做为C++程序员,成长周期比较长。如果是新手(代码量少于2万,没有做过大型项目的),会考察3点。是否踏实肯钻研,有无责任心,以及是否够聪明。如今,满足这三点的人其实不多。

责任心是人品,决定了是否对公司有贡献。这是最重要的。有些人其实很自私。这种人对公司贡献是负数。而且到头来,自身价值也很难起来。因为技术是要靠游戏的商业成功体现价值的。要取得商业成功,就需要一个团队为一件事付出。是否踏实决定了能学会多少技术知识。关于智商,我是最近2年才意识到人的智商确实有很大差别。干程序这行,智商必须越高越好。否则前途不大。

2 如果是有过2-3年C++程序经验的人,应考察的是人品,是否自大,是否有合作意识,是否跳槽频繁。

首先还是责任心。太自私,太为自己着想,时刻把自己利益看成最重要的人,到哪里都不会受欢迎。无论他技术有多好。

然后考察的是是否自大。人最容易自大的时候,往往是对一门技术已经入门,取得一定的小成就。但是眼界还没有开阔,没有领略到这个领域真正深入的技术知识。周围缺少好技术的人。这个时候,技术人员都容易自大。适度的自信和自大是允许的。但是目空一切就完蛋了,说明这个技术人员的提升空间很小。

合作意识是游戏开发的关键。包括交流能力,思考和解决问题的思维方式。一个喜欢独来独往的技术人员,在游戏团队里是个很可怕的事情。因为游戏软件不是一个人能够完成的事情。由于逻辑复杂,需要各种专业技术领域知识,需求变动频繁。每一步都需要团队通力配合。缺乏这种意识,或者对团队开发不适应有抵触的技术人员,在游戏开发领域存活的希望不大。

做为一个C++程序员,跳槽频繁的履历是很致命的。做C++时间长的人都知道。进入一个庞大的C++软件工程本身就需要不少时间。经过培训,项目熟悉,在为项目做贡献,这个时间短不了。如果一个人经常跳槽,说明他一直没有踏实在一个项目里深入做过核心的东西。或者做失败一个马上跑掉。这种人公司不敢要。

3 对于有专项技能的程序员,比如图形程序员。C++只要入门有培训空间即可。但对专业要求比较高。应该是已经在某个技术领域钻研比较深。 当然最后在公司还是得成为使用C++熟练的高级程序员。因为任何专业领域的技术如果要应用到工程中,还必须用C++做工具。

4 好的C++游戏程序员,其实不容易找。如果他干得好,早就成为项目核心成员。如果项目不错,自身待遇也会很好很稳定。不需要通过一般应聘渠道应聘。不是被拉到公司做核心技术拿期权,就是自己创业。

这里我打个比方。网易有个云风。大家都知道他是大话西游2的客户端主程。他是中国第一个做开源C++游戏引擎的人。开放了一整套C++游戏引擎代码。这是他大学时做的。毕业后去网易。有了平台,做成了中国历史上最成功的MMO之一。做为游戏技术人员,他的价值可以说已经是很高的了。到底有多高,我们都不好瞎说什么具体数字。但可以这么刨析一下。

一个经验丰富的C/C++程序员。有过中国自主研发在线过百万游戏的成功项目经验。目前有网易出钱让其独立领导队伍搞引擎和游戏产品已经快3年。这样的一个履历,经验,本身就价值很高。他在任何公司都可以找到年薪几十万的工作。如果他具备管理才能。哪怕就是项目管理,或者技术管理能力。对于一个上市公司,他能做出的贡献,应该用百万/年量级来衡量。如果他能找到一个商业人士,负责舵手,并且自己具备一定商业能力,独立创业。吸引的天使风险投资也得几千万(否则做不了事,当然)。如果产品能做成,身家到达几千万是很自然的事。

我相信中国游戏程序员水平,运气,发展空间比他高的人不多。那么我们可以拿他做个标杆。

我知道很多人不服他。不过这里说的问题并不是关于他本人的。也不需要对他本人做什么服不服的评判。做为一个社会的人,不是靠能写多少行代码,代码多么优雅水平多么高来衡量身家的。从这点说,技术没有转化为成功商业产品之前,它的价值为0。做为技术人员,社会衡量他价值的标准,并不是要去阅读代码是否质量优越速度飞快。而是看他能为一个成功商业产品或者公司发展做出多少贡献。这个道理,几年前我还不太明白。而且我做为一个技术人员,相信多数技术员同胞们都不太可能从根儿上理解和认同这个看法。这里不是评判水平,而是评判价值。你的价值代表了你能够拿到的待遇。这个不是某个老总说了算,某个公司说了算,而是取决于人均GDP和当前行业发展水平,行业销售额的。我想这个道理也适用于所有游戏制作相关人员。搞制作的都是技术人员。

关于Java初学者需要了解的几个基础问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。

问题一:我声明了什么!

String s = "Hello world!";

许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。

这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:

String string = s;

我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。

问题二:"=="和equals方法究竟有什么区别?

==操作符专门用来比较变量的值是否相等。比较好理解的一点是:

int a=10;
int b=10;

则a==b将是true。

但不好理解的地方是:

String a=new String("foo");
String b=new String("foo");

则a==b将返回false。

根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。

对象内容的比较,正是equals方法做的事。

看一下Object对象的equals方法是如何实现的:

boolean equals(Object o){
return this==o;
}

Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。

看一下一个极端的类:

Class Monster{
private String content;

boolean equals(Object another){ return true;}
}

我覆盖了equals方法。这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。

所以当你是用equals方法判断对象的内容是否相等,请不要想当然。因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。

问题三:String到底变了没有?

没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码:

String s = "Hello";
s = s + " world!";

s所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中,s原先指向一个String对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。

同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:

public class Demo {
private String s;

public Demo {
s = "Initial Value";
}

}

而非

s = new String("Initial Value");

后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。
上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。

至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即StringBuffer。

在Linux系统下使用wine运行迅雷5的方法

一、下载ies4linux

去 http://www.tatanka.com.br/ies4linux/page/Installation 下载ies4linux的文件包(目前版本为2.99),然后解压缩。注意:这个网站被大陆和谐了,需要跳墙。至于怎么跳,诸位就各显神通了:-)

一些发行版的软件源里也会有ies4linux的包,比如Ubuntu、Arch。这时就只要apt-get或者pacman一下就行了。实在没有就baidu、google,肯定能下载到。

二、安装IE6

运行软件包里的安装脚本:

./ies4linux

或者使用不带GUI的命令行版(推荐,GUI的安装期间容易崩溃):

./ies4linux –no-gui

程序会自动去M$的网站下载IE6的安装包,以及Flash插件,并且完成安装。

三、拷贝所需的dll文件

将Windows里的msvcp60.dll(如果用的是2.0版的ies4linux,还需要mfc42.dll)拷贝到~/.ies4linux/ie6/drive_c/windows/system32下。两个dll文件也可以在网上搜到。

四、安装迅雷5

在控制台下执行ie6,出现IE6的窗口。在地址栏输入www.xunlei.com,进入迅雷官方网站。右上角部分会有迅雷5的下载链接,直接点击,选择“Open”。

下载完成后,会执行迅雷5的安装程序,一路“下一步”即可。安装的最后阶段会报错,直接忽略,文件拷贝进度条走到底就行了,这时可以强制关闭安装程序。

去下载atl71.dll的压缩包,里面有ANSI和UNICODE版。将ANSI版的解压缩出来,覆盖迅雷5里的那个同名文件,一般位于 ~/.ies4linux/ie6/drive_c/Program Files/Thunder Network/Thunder/Program下。

五、运行迅雷5

方法1.执行下面指令:

export WINEPREFIX="$HOME/.ies4linux/ie6"

wine "~/.ies4linux/ie6/drive_c/Program Files/Thunder Network/Thunder/Thunder.exe"

方法2.控制台下执行ie6,打开IE浏览器,然后使用菜单栏里的"Open…"选项,文件类型菜单里选择"All files"后找到Thunder.exe打开,IE就会帮你执行迅雷5。此方法的缺点是必须同时打开一个IE6浏览器。

六、注意事项

1、最可能出现的问题就是乱码,如果你没有对wine进行任何配置的话。wine的中文支持已经超出了本文的范围,可以另行找资料解决。

2、我的wine版本为0.9.60,不做任何下载的情况下Thunder5.exe的CPU占用率为20%,大流量下载时可能会飙升到100%。

3、这里使用的是官方原版迅雷5。Ayu改版之类的迅雷未做测试,估计也是可以使用的。但是注意,一定要用IE执行安装文件,或者用方法1里的方式运行安装程序。

Ubuntu 8.04下安装配置Tomcat5.5经验分享

要用JSP做网站,以Tomcat作为服务器是个很不错的选择。这里将我自己安装Tomcat的经验与大家分享一下,希望给大家一些参考。

既然是Ubuntu,那就要利用好“新立得软件包管理器”了。

1.Tomcat需要jdk的支持,所以先说一下jdk的安装,已经安装好了jdk的可以直接看第2条。

1.1安装jdk

在新立得中搜索“sun-java”,安装最新的jdk,比如“sun-java6-jdk”,然后点击应用就自动安装完成了。

1.2配置jdk环境变量

安装是自动的,但是配置需要自己动手了。

1.2.1修改用户环境变量

$ vi /home/fancy(你的用户名)/.bashrc

在 .bashrc文件中加入:

export JAVA_HOME="/usr/lib/jvm/java-6-sun"

export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

export PATH="$PATH:$JAVA_HOME/bin"

1.2.2修改所有用户的环境变量

$sudo vi /etc/profile

在该文件中加入:

export JAVA_HOME="/usr/lib/jvm/java-6-sun"

export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

export PATH="$PATH:$JAVA_HOME/bin"

2.Tomcat安装和配置,这里是关键了

2.1通过新立得安装Tomcat

这个就不多说了,搜索"tomcat"选定相应软件包然后应用就是了。

2.2Tomcat的配置

这是重点中的重点。

$sudo vi /etc/profile

加入:

export CATALINA_HOME="/usr/share/tomcat5.5"

注意:

a.网上有些地方说是设置TOMCAT_HOME,这是不对的;

b.网上还有说需要修改conf/server.xml与web.xml,在ubuntu中利用新立得安装时这都是不需要的(当然,以后需要的时候可以改,但在第一次安装时不是必须的)。

OK,配置完成。重启!重启计算机后,/etc/profile的改变才会生效。

3.启动Tomcat服务

3.1进入/usr/share/tomcat5.5/bin,可以看见里面有几个bash脚本,使用

$./startup.sh

就可以开启服务了。

注意,这里的tomcat不需要再安装apache了,可以直接作为web服务器来使用。

运行./startup.sh的结果应该是:

Using CATALINA_BASE: /usr/share/tomcat5.5

Using CATALINA_HOME: /usr/share/tomcat5.5

Using CATALINA_TMPDIR: /usr/share/tomcat5.5/temp

Using JRE_HOME: /usr/lib/jvm/java-6-sun

3.2运行./startup.sh时可能你会出现如下问题:

touch: cannot touch `/usr/share/tomcat5.5/logs/catalina.out': Permission denied ./catalina.sh: 323: cannot create /usr/share/tomcat5.5/logs/catalina.out

原因是安装后logs这个目录的权限不够,可以这样来更改一下:

$ sudo chmod 766 ./logs -R

4.检测服务是否成功开启

打开你的浏览器,输入:http://localhost:8180。

Tomcat的端口默认是8180,你可以将conf/server.xml里面的

修改为

这样以后就可以直接访问http://localhost了。

服务正常开启的话会看到Tomcat的导航首页。

5.关闭服务

运行bin/下的shutdown.sh就可以了。

$./shutdown.sh

正常会出现如下结果:

Using CATALINA_BASE: /usr/share/tomcat5.5

Using CATALINA_HOME: /usr/share/tomcat5.5

Using CATALINA_TMPDIR: /usr/share/tomcat5.5/temp

Using JRE_HOME: /usr/lib/jvm/java-6-sun

3G催生未来三年五百亿元应用软件市场

3G是中国未来通信建设的重点。随着3G发展趋势逐渐明朗化,为了有效地对3G网络进行支撑和管理,针对3G业务的IT系统建设也逐渐成为运营商信息化的重点建设项目。BSS、OSS和MSS将成为这次建设的主要方向,今后相当长的一段时间内,计费账务系统、经营分析与决策系统、网络资源管理系统、客户关系管理系统等将成为国内电信运营商建设或规划的重点。根据计世资讯调查显示,2007~2011年,在3G建设全面展开后,电信应用软件市场的市场规模累积将达到将近500亿元的市场份额。

3G业务对于电信应用系统的性能提出了更高的要求,对于系统要求提高的同时,也对市场竞争格局起到了一定的净化作用。从目前市场格局来看,电信应用软件市场的市场集中度逐步提高,一些实力强劲的企业逐步通过兼并和扩大业务范围获得了更多的市场份额,而一些实力较弱的企业逐渐开始淡出市场。从3G业务的需求来看,电信应用软件市场在面临新一轮增长的同时,也将重新面临一次洗牌。从计世资讯《2007年电信应用软件市场排名》来看,排名前十位的企业市场尚未占据30%的市场份额,市场集中度相比于2006年略有上升,随着电信运营商需求的逐渐提高,市场集中度将继续提升。

从计世资讯相关报告来看,2008年电信应用软件市场将出现以下特点:

一、市场集中度将进一步增强

从2007年市场排名前十位的企业来看,其所占市场份额总计比2006年增长了2%,市场集中度略有增强。一些龙头企业开始一系列的兼并动作来增加市场份额,是市场集中度增高的主要原因。2008年,随着3G建设的全面启动,市场前十位的企业将有希望占据市场30%~40%的份额,市场集中度将进一步加强。

二、技术核心竞争力开始体现

随着电信运营商对于系统性能需求的逐步提高,以及硬件产品价格的下调,电信运营商在电信应用软件上的投入占电信应用系统总投入的比例也逐步提升。技术核心竞争力在竞争中也越发体现出其重要性。从2007年的市场来看,亚信、联创、亿阳信通与联信永益等企业的高速增长与其出色的研发团队有密不可分的关系。2008年,电信应用软件在整体投入中的重要性将进一步增强,研发能力出色的企业将有可能获得更大的市场份额。

三、市场开始考验企业综合竞争力

如果说在2007年以前,电信应用软件市场考察的更多是企业业务扩展能力的话,2007年可以说是电信应用软件的一个分水岭。在3G建设中,产品研发能力、企业的产品线以及项目执行能力等几项指标在市场的竞争中也将占据主要的位置。研发出满足客户需求的产品、提供全套的产品服务和快速可靠的完成项目,将使企业在市场竞争中占据更多的市场份额。

保护IIS的小 技巧

通常地,大多数Web站点的设计目标都是:以最易接受的方式,为访问者提供即时的信息访问。在过去的几年中,越来越多的黑客、病毒和蠕虫带来的安全问题严重影响了网站的可访问性,尽管Apache服务器也常常是攻击者的目标,然而微软的Internet信息服务(IIS) Web服务器才是真正意义上的众矢之地。

高级教育机构往往无法在构建充满活力、界面友好的网站还是构建高安全性的网站之间找到平衡点。另外,它们现在必须致力于提高网站安全性以面对缩减中的技术预算 (其实许多它们的私有部门也面临着相似的局面)。

正因为如此,我在这里将为预算而头疼的大学IT经理们提供一些技巧,以帮助他们保护他们的IIS服务器。虽然主要是面对大学里的IT专业人员的,但是这些技巧也基本上适用于希望通过少量的财政预算来提高安全性的IIS管理人员。实际上,这里面的一些技巧对拥有强大预算的IIS管理人员也是非常有用的。

首先,开发一套安全策略

保护Web服务器的第一步是确保网络管理员清楚安全策略中的每一项制度。如果公司高层没有把服务器的安全看作是必须被保护的资产,那么保护工作是完全没有意义的。这项工作需要长期的努力。如果预算不支持或者它不是长期IT战略的一部分,那么花费大量时间保护服务器安全的管理员将得不到管理层方面的重要支持。

网络管理员为各方面资源建立安全性的直接结果是什么呢?一些特别喜欢冒险的用户将会被关在门外。那些用户随后会抱怨公司的管理层,管理层人员又会去质问网络管理员究竟发生了什么。那么,网络管理员没办法建立支持他们安全工作的文档,因此,冲突发生了。

通过标注Web服务器安全级别以及可用性的安全策略,网络管理员将能够从容地在不同的操作系统上部署各种软件工具。

IIS安全技巧

微软的产品一向是众矢之的,因此IIS服务器特别容易成为攻击者的靶子。搞清楚了这一点后,网络管理员必须准备执行大量的安全措施。我将要为你们提供的是一个清单,服务器操作员也许会发现这是非常有用的。

1. 保持Windows升级:

你必须在第一时间及时地更新所有的升级,并为系统打好一切补丁。考虑将所有的更新下载到你网络上的一个专用的服务器上,并在该机器上以Web的形式将文件发布出来。通过这些工作,你可以防止你的Web服务器接受直接的Internet访问。

2. 使用IIS防范工具:

这个工具有许多实用的优点,然而,请慎重的使用这个工具。如果你的Web服务器和其他服务器相互作用,请首先测试一下防范工具,以确定它已经被正确的配置,保证其不会影响Web服务器与其他服务器之间的通讯。

3. 移除缺省的Web站点:

很多攻击者瞄准inetpub这个文件夹,并在里面放置一些偷袭工具,从而造成服务器的瘫痪。防止这种攻击最简单的方法就是在IIS里将缺省的站点禁用。然后,因为网虫们都是通过IP地址访问你的网站的 (他们一天可能要访问成千上万个IP地址),他们的请求可能遇到麻烦。将你真实的Web站点指向一个背部分区的文件夹,且必须包含安全的NTFS权限 (将在后面NTFS的部分详细阐述)。

4. 如果你并不需要FTP和SMTP服务,请卸载它们:

进入计算机的最简单途径就是通过FTP访问。FTP本身就是被设计满足简单读/写访问的,如果你执行身份认证,你会发现你的用户名和密码都是通过明文的形式在网络上传播的。SMTP是另一种允许到文件夹的写权限的服务。通过禁用这两项服务,你能避免更多的黑客攻击。

5. 有规则地检查你的管理员组和服务:

有一天我进入我们的教室,发现在管理员组里多了一个用户。这意味着这时某个人已经成功地进入了你的系统,他或她可能冷不丁地将炸弹扔到你的系统里,这将会突然摧毁你的整个系统,或者占用大量的带宽以便黑客使用。黑客同样趋向于留下一个帮助服务,一旦这发生了,采取任何措施可能都太晚了,你只能重新格式化你的磁盘,从备份服务器恢复你每天备份的文件。因此,检查IIS服务器上的服务列表并保持尽量少的服务必须成为你每天的任务。你应该记住哪个服务应该存在,哪个服务不应该存在。Windows 2000 Resource Kit带给我们一个有用的程序,叫作tlist.exe,它能列出每种情况运行在svchost 之下的服务。运行这个程序可以寻找到一些你想要知道的隐藏服务。给你一个提示:任何含有daemon几个字的服务可能不是Windows本身包含的服务,都不应该存在于IIS服务器上。想要得到Windows服务的列表并知道它们各自有什么作用,请点击这里。

6. 严格控制服务器的写访问权限:

这听起来很容易,然而,在大学校园里,一个Web服务器实际上是有很多"作者"的。教职人员都希望让他们的课堂信息能被远程学生访问。职员们则希望与其他的职员共享他们的工作信息。服务器上的文件夹可能出现极其危险的访问权限。将这些信息共享或是传播出去的一个途径是安装第2个服务器以提供专门的共享和存储目的,然后配置你的Web服务器来指向共享服务器。这个步骤能让网络管理员将Web服务器本身的写权限仅仅限制给管理员组。

7. 设置复杂的密码:

我最近进入到教室,从事件察看器里发现了很多可能的黑客。他或她进入了实验室的域结构足够深,以至于能够对任何用户运行密码破解工具。如果有用户使用弱密码 (例如"password"或是 changeme"或者任何字典单词),那么黑客能快速并简单的入侵这些用户的账号。

8. 减少/排除Web服务器上的共享:

如果网络管理员是唯一拥有Web服务器写权限的人,就没有理由让任何共享存在。共享是对黑客最大的诱惑。此外,通过运行一个简单的循环批处理文件,黑客能够察看一个IP地址列表,利用命令寻找Everyone/完全控制权限的共享。

9. 禁用TCP/IP协议中的NetBIOS:

这是残忍的。很多用户希望通过UNC路径名访问Web服务器。随着NETBIOS被禁用,他们便不能这么做了。另一方面,随着NETBIOS被禁用,黑客就不能看到你局域网上的资源了。这是一把双刃剑,如果网络管理员部署了这个工具,下一步便是如何教育Web用户如何在NETBIOS失效的情况下发布信息。

10. 使用TCP端口阻塞:

这是另一个残忍的工具。如果你熟悉每个通过合法原因访问你服务器的TCP端口,那么你可以进入你网络接口卡的属性选项卡,选择绑定的TCP/IP协议,阻塞所有你不需要的端口。你必须小心的使用这一工具,因为你并不希望将自己锁在Web服务器之外,特别是在当你需要远程登陆服务器的情况下。要得到TCP端口的详细细节,点击这里。

11. 仔细检查*.bat和*.exe 文件:

每周搜索一次*.bat和*.exe文件,检查服务器上是否存在黑客最喜欢,而对你来说将是一场恶梦的可执行文件。在这些破坏性的文件中,也许有一些是*.reg文件。如果你右击并选择编辑,你可以发现黑客已经制造并能让他们能进入你系统的注册表文件。你可以删除这些没任何意义但却会给入侵者带来便利的主键。

12. 管理IIS目录安全:

IIS目录安全允许你拒绝特定的IP地址、子网甚至是域名。作为选择,我选择了一个被称作WhosOn的软件,它让我能够了解哪些IP地址正在试图访问服务器上的特定文件。WhosOn列出了一系列的异常。如果你发现一个家伙正在试图访问你的cmd.exe,你可以选择拒绝这个用户访问Web服务器。当然,在一个繁忙的Web站点,这可能需要一个全职的员工!然而,在内部网,这真的是一个非常有用的工具。你可以对所有局域网内部用户提供资源,也可以对特定的用户提供。

13. 使用NTFS安全:

缺省地,你的NTFS驱动器使用的是EVERYONE/完全控制权限,除非你手工关掉它们。关键是不要把自己锁定在外,不同的人需要不同的权限,管理员需要完全控制,后台管理账户也需要完全控制,系统和服务各自需要一种级别的访问权限,取决于不同的文件。最重要的文件夹是System32,这个文件夹的访问权限越小越好。在Web服务器上使用NTFS权限能帮助你保护重要的文件和应用程序。

14.管理用户账户:

如果你已经安装IIS,你可能产生了一个TSInternetUser账户。除非你真正需要这个账户,否则你应该禁用它。这个用户很容易被渗透,是黑客们的显著目标。为了帮助管理用户账户,确定你的本地安全策略没有问题。IUSR用户的权限也应该尽可能的小。

15. 审计你的Web服务器:

审计对你计算机的性能有着较大的影响,因此如果你不经常察看的话,还是不要做审计了。如果你真的能用到它,请审计系统事件并在你需要的时候加入审计工具。如果你正在使用前面提到的WhosOn工具,审计就不那么重要了。缺省地,IIS总是纪录访问, WhosOn 会将这些纪录放置在一个非常容易易读的数据库中,你可以通过Access或是 Excel打开它。如果你经常察看异常数据库,你能在任何时候找到服务器的脆弱点。

总结

上述所有IIS技巧和工具(除了WhosOn以外)都是Windows自带的。不要忘记在测试你网站可达性之前一个一个的使用这些技巧和工具。如果它们一起被部署,结果可能让你损失惨重,你可能需要重启,从而遗失访问。

最后的技巧: 登陆你的Web服务器并在命令行下运行netstat -an。观察有多少IP地址正尝试和你的端口建立连接,然后你将有一大堆的调查和研究要做了。