IT男的上海10年及N次面试(转载)

为什么写这个东西?

可能年过30,从生理角度人就开始慢慢衰老,当看到一个个年轻人正在经历我当年经历过的那些事情,痛苦于同样的痛苦,迷茫于类似的迷茫,就想说些事情,算是给自己过去的一个总结,同时也希望自己能借此抛去以前的包袱。继续往前走的时候能轻装上阵。

从哪里开始呢?先总结下论坛里常见的问题。

我这么累,希望在哪里?

技术人员有哪些发展方向,每个方向的前景和钱景如何?

怎么才能进外企?

怎样才能得到晋升?需要什么样的能力?

如何写简历?

如何面试?

跳槽的注意事项以及如何寻找把握机会

etc

我远非成功人士,也非技术大牛,只是因为和猎头交流的过程中,痛感中国职场年轻人对职业规划的缺乏甚至麻木,甚至演变成一种普遍的抱怨,而这种心态除了恶心自己、弄坏别人的心情外,对改变自身处境毫无帮助。

 

于是,这,就当作一个走过很多弯路的人的教训和经验分享吧。

 

———————–华丽的分割线——————————–

 

时间:2001年3月

地点:上海

人物:我,男,22岁,不高不帅

求职意向:IT?软件开发

人物背景:内地非重点院校,机械专业

天气:比较燥热

心情:激动

求职:成功

职业规划:失败

话说当年,因为看了一部“将爱情进行到底”,就莫名喜欢上了上海。因为看了部台湾人写的宝蓝C++和微软VC++争霸记,就不知天高地厚的想投入IT业。

于是放弃了学校的招聘会,一番寻寻觅觅,网上的技术论坛四处留求职帖子(当时51Job啥的还刚起步),终于看到有人留言要人,QQ沟通后,约定时间去上海面试。当时的小算盘是,如果这个公司不行,就继续在上海参加招聘会。

于是,一个燥热的下午,我来到了上海,将行李放在老乡宿舍后,就给那个人打了个电话。对方很热情的福建口音,听说我到了,跟我说:“你在复旦门口等我,我马上驱车过来”。

当时心情那个激动啊,心目中这个公司的形象顿时高大起来。NND,我这样个小兵,人家经理都要开车过来接我,如果成了的话,以后一定要好好干。

在复旦门后晒了半个小时的太阳,坐等右等,奔驰,宝马跑过去不少,帕萨特进进出出,可面对我火辣辣的目光,就没一辆车停下来。

终于,我接到了电话:“你在哪儿啊?”。我四处回头,复旦门口没有停车嘛。“我穿白色衬衣”,那人接着说道。我又一看,另一头是有个穿白衬衣的老兄,不过旁边停的不是四个轮的汽车,是个破旧的自行车。

暗号对上了,就坐上了他的自行车,骑向一个偏僻的方向。

后来才知道,这个老兄普通话不太好,把“骑车”说成了“驱车”。

自行车左拐右拐,来到了一个很偏僻的,有点像快递仓库的地方。周围都是2层楼的平房,似乎都是些小工厂小作坊。具体的路名我已经忘记了,应该是复旦后面一个偏僻的小马路。

当时心里有些打鼓,不过既然来了,也就试一次吧。当时胆子比较大,也没听到过劫钱劫色的事情,现在估计就要犹豫了。

上了二楼,两个房间,都是毛坯房唰了下粉的那种。外间3个人在写程序,进来的时候只是看了我一眼。里间类似小办公室,也是2个人,条件稍微好点,至少有个饮水机。

于是面试正式开始,看上去一个负责技术的人递给我一份卷子,开始做题。

题目的具体内容都忘记了,模糊的印象是VC编程内容,难度应该不大。

做完后,在外面无聊的坐了几分钟,几个人在里面讨论。心里忐忑,第一次有将命运交给别人决定的感觉。

过了没多久,门开了,让我进去,里面3个人,暂时编号A,B,C吧。

A:就是接我的自行车男,后来知道他就是所谓的经理。

B:高个,看上去比较严肃。后来知道是负责一般管理的。

C:不高,比较瘦。也是后来知道是技术核心。

当我正式进去后,B和C慢慢的有了些暗地里的冲突,最终导致了C的离职。

现在看来,不同的性格,决定了不同的人生走向。这些人,包括外面的两个程序员,我后来还一直保持着联系。现在回想起来,总是感慨万分。

回到面试的问题。很简单,主要是问我做过哪些项目,会哪些开发工具。

可能他们要求也不高的原因,大概聊了下后,当场决定要了我,每月工资1.8K,试用期1.2K,没有奖金,没有4金。我也很爽快的答应了,因为当时连续的求职受挫也非常大的打击了我的自信心。

现在可以介绍下这个公司的基本情况,A其实是复旦的一个在读博士,嘴巴非常厉害,最擅长的是吃饭的时候讲各种黄色笑话,自己还面不改色。

当时国内某个行业刚刚起步,没啥软件能用。A就拉了一个香港贸易公司的老板(不知道他们是咋认识的),投了点钱,招了几个人,租了个小办公室,做开发。B,C,还有另外两个程序员,就是全部的人马。

因为A的嘴巴太厉害,把当时涉世不深的我讲得心潮澎湃,似乎上市的日期指日可待。于是晕晕乎乎的我就把自己宝贵的第一次就这么便宜的卖了。

 

虽然现在看来,当时这次的面试问题不值一提,自己的表现也毫无出彩的地方。和其他去华为的同学比,这个薪水待遇也是惨不忍睹,不过好歹这是我第一份工作,还是勉强总结下“成功经验”吧。

1.?定位准确,好公司俺进不去,就先求个能生存的工作吧,其它就顾不上了。

2.?在1能达到的前提下,尽量找成长性强的公司。这个公司绝对符合,虽然当时只是个沾满口水的泡泡,而且泡泡1年多的时间就破了。

3.?我的基本表达能力还可以,回答问题的时候,能够1,2,3,4的一条条讲清楚。当时面试了其它几个公司,对我这点的评价都还可以。

失败的地方,

1.?穷,真的穷。后来上班的时候,全部月光,第一年过年回家还是找同学借了500块,不然路费都没有。

2.?不稳定。小公司的通病。和上面的第二点很难平衡。这个只能看运气了。

3.?因为不稳定,太小,所以机会真的很有限。夹在B和C的明争暗斗中,真的很受伤啊。

面试结束,我走出那栋小楼。太阳还是那么耀眼,路上几辆卡车跑过,卷起一股混杂着霉味的尘土。尽管如此,我还是深深的吸了一口气,上海,我胡汉三来了。

在正式开始介绍我的小公司打工生涯之前,还是简单介绍下我当时参加的几个面试吧。

1.?台湾鼎新,似乎是在上海参加招聘会投的简历。做ERP的,不过我是一窍不通。面试地点是在衡山路那里,一个很雅静的小楼,上百个人一起做题。题目分2部分,第一部分是各种逻辑推理,思维训练,第二部分是ERP的基础知识。前者我自我感觉做的很好,后者做的狗屁不通。所以也没报啥希望。只是后来在回学校的火车上,接到他们的电话,说让我过段时间再去面试。可惜当时来趟上海代价太大了,我就直接放弃了。

2.?一个电子类的公司,去了后才知道要招销售。地点在复兴中路那里,也是个小洋楼。可惜基本工资只有800,不保吃住,俺咋活啊。

3.?一个做呼叫中心的小公司,跟老板相谈甚欢,也说要我,工资1.5K。就是这个老板说我逻辑清楚的。他让我回到学校后考虑一下,如果要去的话,给他个电话。可惜俺回学校就忙着最后半年的happy了,直到有一天接到个陌生人的电话,说是某某某,问我考虑的怎样了,我才想起这个事情。这也是我学到的做人的第一课,要守信用,讲礼貌。这里向这个老板说声迟到的对不起,相信你的公司也已经发展壮大了,祝福你。

还有一些就不说了。

看到这里,大家是不是觉得挺好笑,我开始口口声声讲的职业规划呢?

这里不得不说下不好意思了,初次求职这嘎达事情,就像女人的第一次,总是那么误打误撞,当然更少不了必要的花言巧语,以及无限憧憬,往往是还没搞清楚自己爱的是谁,就已经给出去了。等发现真爱的时候,才真正发现第一次的宝贵,可惜往往已经是无法改变了,只留下满心的痛楚。

不过也不要太灰心,只要没有娃儿,一般还是可以争取下的。工作也是如此,第一份工作往往是误打误撞,就像我一样,混个温饱而已。没关系,慢慢来吧。

工作搞定,开始happy。

3月到6月底,几个月最放纵最快乐的时光就这样开始了。

大家应该都有过那样的经历,三天两头喝酒,对MM吹口哨,整天踢球,学校里谁都不怕,底气都特别足,老子都大四了,谁怕谁啊。

甚至有一次,我回寝室的时候发现一个人都没有,问别人才知道那些兄弟都因为踢球打架被抓到派出所了,赶快飞奔过去救人。

呵呵,这些兄弟现在都混得不错。当年打架最凶的那个,后来去做军火生意了,亚非拉都是他的世界,最近电视里利比亚动乱,还能时不时的看到他们的产品。学历最高的已经博士后了,虽然当年成绩真的很一般。至于那个长得最娃娃脸的,后来参军了,前两年就已经官拜营职,记得前几年台湾公投闹得最凶的时候,去找他玩,他正一脸凶相的对一帮新兵蛋子训话,“同志们,打过去,XYX是我的,谁都不许跟我抢!”?(XYX是当年台湾很红的一个女明星,也是我们寝室YY的对象),这也算假公济私吧。

但这也是个伤感的季节。有和MM分手的,弄得租的房子一地TT的。更多的人,是把自己一辈子的泪都洒在了站台上。以至于最后几天的时候,都开始逃避送人,因为实在无法忍受火车开动那刹那胸口被猛击,眼泪无法控制的感觉。

直到6月30号的那天,我一个人收拾好行李,没有通知一个同班同学,就叫上一个比我高一届的哥们(这兄弟也是一个猛将,前两年去驰骋埃及,开拓电讯市场去了,有空也讲讲他的故事),两个人坐上公交,平静的看着这个我生活了4年却并不那么熟悉的城市,心里默默的说着再见:别了,我的激情燃烧的岁月,别了,这个记载我很多第一次的美丽校园,充满生活情趣的城市。

在上海其实我并不孤单,因为当时全班1/3的同学都签了上海的单位。不过他们都是找的国企,一般差不多8,9月才去报到,而且行李可以从学校直接打包邮到单位。而我因为找的是私企,一毕业就直接过去了,所以30号那天,没有一个同行的人。

但当我到上海的时候,一个人已经在站台上等我了,他就是葛君,一个比我高一届,其它院系的同学。他当时签约了上海的一个设计院,也正处于迷茫的时期,白天在单位打游戏,晚上在宿舍上网泡MM。当然,人家后来就做的很成功了,很好的单位,也有自己的公司。我们一直到现在,都还保持着非常好的合作关系,以后应该有机会再讲到他。

 

讲到第一份工作,自然要给应届毕业生一点建议。

其实这不是我的初衷,写这篇文章的主要目的,是给那些工作了3,5年,正进入迷茫期或已经进入迷茫期的人看的。

至于应届毕业生,我想,你们需要的是一点信心,一点鼓励。

不是所有的人都是名牌大学毕业的,俺也一样。文凭很重要,但也仅仅是找第一份工作的时候重要。

我周围有太多一般学校,甚至专科毕业的,现在混得非常好的例子。当然,他们身上都有些良好的品质,我以后会慢慢提到。

所以,给你们的建议是,注意思考,不断的思考,要不断盯着更高的目标。踏错第一步并不可怕,年轻,有资本浪费一点时间。怕的是一直走错路,而自己还不知不觉,一直等到30岁了快无路可走了才思考这些问题,那就很难再纠正了。

引用?24?楼?focus?的回复:

马克一个。

故事有点太长。

能否只捡重要的事件说?

不是针对你,只是恰好碰到了,而且来得这么早,所以感叹一下。

你这个请求,其实是个典型的IT式含糊请求。

哪些事情是你所谓的“重要的事件”??比如LS的兄弟,就觉得泡MM的事情比较重要。你这种提问方式,会让人觉得无法回答。

别小看提问。提问是一种最基本的沟通技巧。

提出的问题以及提出的方式,是可以看出一个人的思维方式、逻辑思维能力等很多东西的。从你的提问,我没看到这方面的能力。这也是很多IT人的能力欠缺点,写程序很有逻辑,但与人沟通时,却无法抓住重点,表达及提问毫无逻辑。

大家接下来还是可以尽情提问的,我只是以这个例子为引子,告诉大家如何从一个比较高的层次看待问题。至于沟通技能的问题,以后会慢慢讲到。

第一次跳槽发生在2002年3月。

 

先废话感叹一句,三月,真是个跳槽的黄金季节,至少对我而言是的。这个时间点,奖金该拿的也拿到手了。再加上被那春暖花开的气息一熏,有想法的人都开始蠢蠢欲动了。

于是,2002年3月,我跳了,2006年三月,我又跳了,2009年3月,俺再次跳了。甚至2002年和2009年到新公司报道的时间都是同一天,真是巧啊。

 

回到2002年2月。

上海的朋友应该都知道什么是石库门。

现在的新天地,还有什么什么里,都已经变成了高档消费情趣生活的代名词,可是2002年的那个春节,我却实实在在的没有感受到那种浪漫,虽然我住的石库门从外面看上去也是充满了海派风情。

 

那个春节,对我是格外艰难的1年。第一份工作转正后只有1.8K,每个月房租450,加上电话费,通信费,交通费,伙食费,每个月都入不敷出。当我交了下一季度的房租后,甚至春节回老家的钱都不够,只好厚着脸皮找当时在站台上欢迎我来上海的葛君借了800。。

 

往事不堪回首啊。

 

当时住的地方最近的地铁就是二号线南京东路站,每次出站,当和一个个兴高采烈的游客擦肩而过,花花绿绿的霓虹灯透过眼镜镜片闪烁时,我总有种不真实的感觉,我在哪里,这里是不是属于我。。

不过我没有太多时间考虑,咕咕叫的肚子总会很快把我拉回现实。

 

现实的上海是南京路旁边低矮的老房子,总是因为被遮挡而若隐若现的路灯。这种转变往往就发生在你从南京路往旁边小巷拐个弯的瞬间。

现在回想起来,我反而觉得这幕蛮温馨的,冬天的夜晚,走在几十年没什么变化的小巷子里,周围小店昏黄的灯光,偶尔飘出电视里不知名电视剧的对白,以及锅铲碰撞的声音。在寒冷中愈发觉得“小窝”的温馨。

 

春节前后1个月,我总共吃了2个月的蛋炒饭。当时的GF,现在的LP,每天打电话给我,问我吃的什么,从周1到周5,有3天的时间我的答案都是标准的蛋炒饭,我告诉她蛋炒饭是我的最爱,特别是在寒冷的冬天夜晚,蛋炒饭特别香。于是在我春节后回上海的第一天,GL说给我惊喜,当她端出一碗热腾腾的蛋炒饭时,我的眼睛一下子就湿了,只有我知道,这份眼泪,不仅仅是因为感动。

这种对归属感的思考困扰了我很久。

 

当时一个高年级的师兄告诉我,同样是2002年的冬天,他春节后回到上海。天很黑,从火车站出来,坐上轻轨三号线后,随着轻轨在一栋栋高楼间穿梭,看着一个个房间温暖的灯光,在那种冬天特有的淡淡抑郁中,他也在问自己,上海到底是不是属于他。当时他是销售,年轻的销售,四处跑单,辛苦只有自己知道。

 

唉,上海啊上海。

 

上周和这个师兄吃饭,当年的小销售,现在已经是一个国内大型企业的华东区销售老大,我故意问起了这个问题,他没有回答,只是看了看坐在旁边的美丽的上海太太,回头对我笑了笑。一切尽在不言中。

 

话说2002年春节我贫困潦倒,一方面是因为当时的收入确实不高,小公司没有任何福利,上班打卡,请假扣钱,春节当然也不用指望任何额外的奖金。另一方面是因为爱情甜蜜的代价,虽然GF没有任何物质要求,但是偶尔吃吃饭,送点花,以我当时的收入,都已经受不了了。

最重要的原因是,我最开始入职时吹给我的泡泡已经破了,香港老板和复旦博士的频频秘密谈话,办公地点的一再变化,让当时毫无政治敏感性的我也搞到了一丝寒意。

于是,我开始在网上找工作了。

先在51job上申请了个账号,然后下班了就去网吧四处搜索,也没有准备任何简历,就是简单的用记事本写了几条工作经验和用过的开发工具。

当时对求职已经有了个大概的方向,所以没有盲目的发简历,可能最多发了5份吧。

而且可能冥冥之中自有安排,有一个日本公司,不知道为什么,没有任何理由,我发简历的时候就觉得这个公司会叫我去面试。后来果真如此,而且我果然成功被录取。

在这个公司里,我认识了一批直到现在还对我的生活发挥影响的朋友。而第一份工作的几个同事,因为各种原因,联系已经慢慢的淡了。

 

 

影响Java EE性能的十大问题(转载)

本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java?EE、中间件和JVM技术。他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java?EE性能问题。

1.缺乏正确的容量规划

容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求。制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中。硬件、中间件、JVM、调整等在项目部署之前就应该准备好。

2.JavaEE中间件环境规范不足

“没有规矩,不成方圆”。第二个比较普遍的原因是Java?EE中间件或者基础架构不规范。在项目初始,新平台上面没有制定合理的规范,导致系统稳定性差。这会增加客户成本,所以花时间去制定合理的Java?EE中间件环境规范是必须的。这项工作应与初始容量规划迭代相结合。

3.Java虚拟机垃圾回收过度

各位对“java.lang.OutOfMemoryError”这个错误信息是不是很熟悉呢?由于JVM的内存空间过度消耗(Java堆、本机堆等)而抛出的异常。

垃圾收集问题并不一定会表现为一个OOM条件,过度的垃圾收集可以理解成是JVM?GC线程在短时间里进行轻微或超量收集集合数据而导致的JVM暂停时间很长和性能下降。可能有以下几个原因:

1.与JVM的负载量和应用程序内存占用量相比,Java堆可能选择的太小。

2.JVM?GC策略使用不合理。

3.应用程序静态或动态内存占用量太大,不适合在32位JVM上使用。

4.JVM?OldGen随着时间推移,泄漏越来越严重,而GC在几个小时或者几天后才发现。

5.JVM?PermGen空间(只有HotSpot?VM)或本机堆随着时间推移会泄露是一个非常普遍的问题;OOM的错误往往是观察一段时间后,应用程序进行动态调动。

6.YoungGen和OldGen的比例空间与你的应用程序不匹配。

7.Java堆在32位的VM上太大,导致本机堆溢出,具体可以表现为OOM试着去链接一个新的Java?EE应用程序、创建一个新的Java线程或者需要计算本地内存分配任务。

建议:

1.观察和深入理解JVM垃圾回收。启动GC,根据健康合理的评估来提供所有的数据。

2.记住,GC方面的相关问题不会在开发中或者功能测试时发现,它需要在多用户高负载的测试环境下发现。

4.与外部系统集成过多或过少

导致Java?EE性能差的第四个原因是高分布式系统,典型案例是电信IT环境。在这个环境中,一个中间件领域(例如,服务总线)很少会做所有的工作,而仅仅是把一些业务“委托”给其他部分,例如产品质量,客户资料和订单管理,到其他Java?EE中间件平台或遗留系统中,如支持各种不同的负载类型和通信协议的大型机。

这样的外部系统调用意味着客户端的Java?EE应用程序触发创建或重用套接字链接从外部系统中读写数据。根据业务流程的实施和实现可以配置成同步调用或异步调用。需要注意的是,响应时间会根据外部系统的稳定状况进行改变,所以通过适当的使用超时来保护Java?EE应用程序和中间件也是非常重要的。

下面这3种情况是经常出现问题和性能降低的地方:

1.同步和相继调用太多的外部系统。

2.在Java?EE客户端应用程序和外部系统之间链接超时,使数据丢失或者值太高导致客户端线程被卡住,从而导致多米拉效应。

3.超时,但程序仍正常执行,可是中间件不处理这种奇怪的路径。

最后,建议多进行负面测试,这意味着需要“人为”创造产生这些问题的条件,用来测试应用程序和中间件之间是如何处理外部系统错误。

5.缺乏适当的数据库SQL调优和容量规划

大家可能会对这一个感到惊奇:数据库问题。大多数Java?EE企业系统是依赖关系型数据库处理复杂的业务流程。一个基础扎实稳固的数据库环境可以确保IT环境有规模的增长,来支持日益不断扩大的业务。

在实际中,与数据库相关的性能问题是很常见的。由于多数数据库事务处理都是由JDBC数据源执行的(包括关系持久化API,例如Hibernate)。而性能问题最初都会表现为线程阻塞。

以下是我在10年的工作中,经常出现的关于数据库方面的问题(以Oracle数据库为例):

1.孤立的,长时间运行的SQL。主要表现为线程阻塞、SQL没有进行优化、缺少索引、非最佳的执行计划、返回大量数据集等等。

2.表或行级数据锁定。当提交一个双阶段事务模型时(例如,臭名昭著的Oracle可疑事务)。Java?EE容器可能会留下一些未处理的事务等待最后的提交或回滚,留下的数据锁能触发性能问题,直到最后的锁被移除。例如中间件断电或者服务器崩溃都可能引起这些情况发生。

3.缺乏合理规范的数据库管理工具。例如Oracle里面的REDO?logs,数据库数据文件等。磁盘空间不足,日志文件不旋转等都会触发较大的性能问题和断电情况。

建议:

1.合理的容量规划,包括负载和性能测试都是必不可少的,优化数据环境和及时发现问题。

2.如果是使用Oracle数据库,确保DBA团队定期审查AWR报告,尤其是在上下关联的事件和根源分析过程中。

3.使用JVM线程存储和AWR报告查明SQL运行缓慢的原因或者使用监控工具来做。

4.加强“操作”方面的数据库环境(磁盘空间、数据文件、重做日志、表空间等)以适当的监视和报警。如果不这么做,会让客户端IT环境出现较多的断电情况和花许多时间进行故障调修。

.特定应用程序性能问题

下面关注的是比较严重的Java?EE应用程序问题。关于特定应用程序性能问题,总结了以下几个点:

1.线程安全的代码问题

2.通信API缺少超时设置

3.I/O、JDBC或者关系型API资源管理问题

4.缺乏适当的数据缓存

5.数据缓存过度

6.过多的日志记录

7.JavaEE中间件调优问题

一般Java?EE中间件都已经够用了,只是缺少必要的优化。大多数Java?EE容器都能有多种方案供你的应用程序和业务进程选择。

如果没有进行适当的调整和实践,那么Java?EE容器可能会处于一种消极的状态。

下图是视图和检查列表示例:

8.主动监控不足

缺乏监控,并不会带来实际性能问题,但它会影响你对Java?EE平台性能和健康状况的了解。最终,这个环境可以达到一个破发点,这可能会暴露出一些缺陷和问题(JVM的内存泄漏,等等)。

以我的经验来看,如果一开始不进行监控,而是运行几个月或者几年后再进行,平台稳定性将大打折扣。

也就是说,改善现有的环境永远都不会晚。下面是一些建议:

1.复查现有Java?EE环境监测能力和找到需改进的地方。

2.监测方案应该尽可能的覆盖整个环境。

3.监控方案应该符合容量规划进程。

9.公共基础设施硬件饱和

这个问题经常在有太多的Java?EE中间件环境随着JVM进程被部署到现有硬件上面时看到。太多的JVM进程对有限的物理CPU核心来说是一个真正的程序性能杀手。另外,随着客户端业务的增长,硬件方面也需要再次考虑。

10.网络延迟

最后一个影响性能问题的是网络,网络问题时不时的都会发生,如路由器、交换机和DNS服务器失败。更常见的是在一个高度分散的IT环境中定期或间歇性延迟。下面图片中的例子是一个位于同一区域的Weblogic集群通信与Oracle数据库服务器之间的延迟。

间歇或定期的延迟会触发一些重要的性能问题,以不同的方式影响Java?EE应用程序。

1.因为大量的fetch迭代(网络传入和传出),涉及大数据集的数据查询问题的应用会非常受网络延迟的影响

2.应用程序在处理外部系统大数据负载(例如XML数据)时也会很受网络延迟的影响,会在发送和接收响应时产生巨大的响应间隔。

3.Java?EE容器复制过程(集群)也会受到影响,并且会让故障转移功能(如多播或单播数据包损失)处于风险中。

JDBC行数据“预取”、XML数据压缩和数据缓存可以减少网络延迟。在设计一个新的网络拓扑时,应该仔细检查这种网络延迟问题。

希望本文能够帮助您理解一些常见的性能问题和压力点,每个IT环境都是独一无二的,所以文中提到的问题不一定会是您遇到的,您可以把您遇到的问题拿出来和大家一起分享一下!

英文来自:Top?10?Causes?of?Java?EE?Enterprise?Performance?Problems

 

每天工作4小时的程序员

每个人都熟悉这种作息规律:早上9点去上班,坐在电脑前面,编一天的程序,下午5点下班回家。如今,非常感谢蒂莫西·费里斯(Timothy?Ferriss)的《每周工作4小时》,我开始重新思考应该如何工作,如何让自己变成更有效率的程序员。

最近,我把我的从周一到周五的作息规律做了一次较大的调整。很长时间以来,我一直像所有其他程序员那样工作、休息。但就在2011年的下半年,我开?始了一项试验,想看看究竟什么样的作息时间能让我更有效率。这项实验目前仍在进行中,我并不是像军人那样严格遵守实验规定——例如,我也想会早20分钟、?或晚20分钟起床——但当前制定的作息规律是这样的:

早上430??7?点:冥想,写作,目标复查,和家人吃早餐

早上4:30起床其实并不是你想象的那么难。每个人的个人情况都多少有些不同,但人的身体基本上需要每天7到9小时的睡眠时间。保证你睡眠充足的一个方法是不用闹钟自然醒。你只需要早点睡觉,你就可以在早上4:30醒来。

起床之后,我会马上喝上16盎司的水——不是咖啡!我很长时间都不喝咖啡了,而且也不太想喝。事实上,不喝咖啡我感觉会更好。然后我会冲个澡;这样会让我感觉一个清爽的一天的开始。

每天早上我都会冥想30分钟。冥想的最佳时间是在日出之前或日出的过程中,也就是西方世界的早6点之前。我不打算解释为什么冥想会对你有好处;网上对此已经有了大量的研究。如果你想找一个关于冥想的书,我推荐《Meditation?for?Dummies》。尽管书名很怪,但它是我读过的最好的一本书。

冥想之后,我会花30-45分钟的时间写博客。我一般会写500到800字。我发现,冥想之后立即动笔,通常会一气呵成,写的很顺利。另外,大脑经?过了一夜的休整,状态非常好,在注意力转移到其它事务之前,把大脑里堆积的东西都倒出来清理一下是很有好处的。关于写作的一个技巧:把这段时间用作对大脑?的初步清理。不要去做研究、编辑等。这些事情放在以后再做。

然后是ToDo?List(待办清单)时间。我会查看邮件,微博,LinkedIn,等等,以及安排下一步要做是任务。说到任务,我遵循GTD做事方法,我用Omnifocus软?件来管理我的生活。我在iPad,iPhone和MacBook?Air(我是苹果的粉丝)都装了它。不错,作为一个待办事宜管理软件,Omnifocus是有点贵了,但因为我的整个生活都和它有关,这个价格也值了。我?通览一下待办清单,想想每个事情上的预期目标——所有的事情,从今天要做的小事情,到长期的目标。清单中的每个条目都设定有一个目标,如果没有目标,我会?删除它。

接着是早餐时间。关于应该什么时候吃早餐、应该吃什么的问题上,已经有大量你可以借鉴的养生指导。我尝试过各种不同的东西。我发现那些富含纤维素,?低碳,高蛋白质的东西最适合我。你试过燕麦片加花生酱吗?好极了!我还喜欢吃一些水果、喝一点茶。还有,我尽量和家人一起吃早餐。有时事情能按照这种愿望?执行,但有时不行。我的目标是今年一年都要按照这个执行下去。

7点到11点:4个小时的编程时间

这是我用来编程的时间。一天4小时也许你会觉得少的可怜,可是我却发现,在这4小时我做的事情能比大多数人一周干的事情都要多。研究显示,具有固定?工作时间表的人比那些随机工作的人更有效率。对于我来说,这个固定时间是早7点到11点,每天。这段时间我要做的事情就是编程,不做其它的。有几个基本的?原则:

首先,关掉所有的通信设施——电话,邮件,聊天工具等。没有让你分心的事。你可以给少数几个人保留一个联系到你的方法,以防有紧急事情发生。那些真?有紧急事情需要找你的人自有办法联系到你,我还没有碰到过这样的事。我甚至还教育我的妻子,她通常习惯对所有的请求都立即给予回应,我告诉她要尊重我这4?个小时的时间。在这段时间里你应该只干一件事。千万不要同时干5、6件事情。

第二,中间不要留下休息时间来查看邮件或上网,或干其它类似的事情。原因是:在一个小时里,我可以开发出x个功能。如果我要是连续工作4小时,我发现我的产量不是4倍,而是8倍或16倍。当你全神贯注的干某项事情时,相信你也经历过这样的体验。这就是我们所说的大脑的Flow(流)状态。在以后的博客里我打算多写一些关于Flow的文章。

那为什么不把这样的制度应用到整个8小时的工作时间里呢?这是因为人的有效率的状态是有限度的。人的大脑跟肌肉一样。你可以在跑步机上持续运动8小?时吗?就像我们的肌肉,大脑需要时不时的休息。这种限度依据个人的不同而各异。通过尝试和根据犯下的错误,我发现我的极限时间是4小时。

还有一点需要提的是,我并没有在11点设了闹钟提示。当我感觉大脑有些疲倦,工作效率开始下降时,我就停止工作。有些天我只工作3小时,有时我会工作5小时;4小时是平均值。

我在家工作是为了避开打搅。如果你需要在办公室里工作,看看管理部门是否允许你把最有效率的这段时间放在家里工作。你上班途中的折腾会把早上做瑜伽?和冥想获得的好处给抵消了。在经过了早高峰的喧闹,还有办公室里的嘈杂,你的神经会变的紧张,冥思带来的效果完全消失。在家工作必定会更有效率的多。

11点到下午1点:健身,午饭,购物

我每天都要健身。John?J.?Ratey的书《Spark:?The?RevolutionaryNew?Science?of?Exercise?and?the?Brain?》?对每天锻炼的好处做了很好的论证,如果你想知道锻炼对大脑功能改进的科学机理,你可以读一下这本书。每天不做相同的运动,甚至不去相同的健身房。我每周在?一个瑜伽馆里做3次瑜伽,在一个spinning馆里上两天的spinning课,在健身房里做两天的举重,在健身房里我有个教练。教练帮助了我很多,有?人这样督促你会使你具有更大的动力。

我喜欢在健身房运动,因为哪里有额外的服务。你可以一下用掉5条毛巾而不担心老婆的抱怨。可以花30分钟冲澡而不用担心门外有人叫喊”你还没完吗?“…在家里你经常会遇到这样的事。

我还养成了一个习惯就是每天购物,通常是在WholeFoods,?一个离我家只有步行距离的超市。为什么每天购物?在很多国家,特别是亚洲,人们每天都去购物,而不是一次买足2个星期的东西储存在家里的冰箱或冷柜里。这?种方式,你只买了你需要的东西,避免了浪费。很多时候你会发现冰箱里有些不知是何物的东西,怀疑放在那里有半年之久了。我午饭在外面吃,Whole?Foods超市里有不错的沙拉自助。因为我喜欢日本食品,有时我会来一点日本寿司或盒饭。

下午1点到6点:学习和交流时间

我尽量会把一些讨论、约会时间凑到一起,这样不必每天都去公司。通常,这些事情包括会议,面试,做报告,指导开发,代码审查等等。这段时间我不做任何的开发,除非有紧急的bug或特殊情况需要处理。

我还用很大比例的一部分时间去学习。我花了很多时间去阅读别人的东西,从书本到博格,大多与编程相关的东西。我每天都要学到新的知识。保持这样的学习劲头的最好的方法是对学到的东西做一些笔记,把相关的知识做写标记。像EverNote这样的软件很适合做这种事情。

同时我会看看市场上有没有其它的产品,最有效率的软件开发者是不用写一行代码就能把问题解决。我不想把别人已经做好的东西再做一遍。所以,在CodePlex,?GitHub?和?Component?Source这些网站上花时间是有好处的。

我从妻子的医院实习的经历中得到了一点启示。新入职的大夫每天早上看病,到了下午,他们会聚到一起讨论遇到的各种病症,讨论他们是如何应诊的。对于?我,我会事后反省一下自己做过的事,我会重新思考一下早上编程遇到的问题,在什么地方遇到了什么bug,或反省做报告时的表现,或如何主持的会议,等等。?我努力从过失中学到教训,避免它们再次出现。

下午6点到晚上8点:家庭时间

我妻子是个医生,工作很忙,但我们尽量一起度过这段时间。我们会一起做饭。然后我会和孩子一起做家庭作业。(一个二年级的学生竟会有这样多的作业,这是另外一个话题,我以后再谈。)

8点到830:反省和给大脑派活

我晚上不做冥思,而是换成坐下来反省一天的生活。如果你花上15分钟做在一个安静的地方反省你的一天,你会吃惊的发现这一天你学到了这样多的东西,获得了这样大的提高。

接下来,我给大脑安排工作。众所周知,当我们睡眠时大脑是在不停工作的。所以,你最好给它安排点工作。对于我,下面这些事情很有效:我把第二天早上要写的东西做了个大纲。就像写便条一样。我发现把它写到纸上比写在电脑里更有效。

或者,我会看一些编程/算法问题。同样,会纸上描述下来或写出框架。让人惊奇的是,很多时候早上起来你会发现已经有了解决方案!像这样的事情我是在?一个整洁的、没有格线的、信封大小的笔记本上写画的。在空白的白纸上写画会让我更有灵感。我在晚8:30到9点间上床睡觉。越早越好。

这就是我一天的作息时间。当然,当我外出旅行时会有些变化;在途中我会花大量的时间来工作。我还没有告诉你们在周末我都干些什么,我会在以后的文章里讲到这些。

我很想听到其他人关于他们的作息时间的故事,以及他们是如何提高工作效率的。

 

降级论

几乎一年没有写博客了,说没时间那是借口,唯一的原因是,年纪越大越发觉自己肤浅。有些想法还没提笔,就发现很幼稚,就不敢发出来贻笑大方了。这次先给大家说个小故事:

从前有三个屌丝,聚在一起做网络,提供免费的网络服务,砸锅卖铁,通宵达旦,除了卖肾啥都做了。3年后终于做到了五百万用户,对于年轻人来说,能把五百万人玩弄于鼓掌之间,已经是很牛逼轰轰的事了,不过用户越多,成本越高,每年服务器、带宽租金、房租水电、广告运营等成本,已经达到了十七八万,屌丝们不得不面对一个终极问题:如何盈利?

屌丝们定了三盘沙县水饺,围着一箱子的冰啤酒开始计算:按照最近一月的登陆情况来看,四百万个账号已经不活跃了,真正有商业价值的只有一百万人,如?果开通xx功能,收点高级会员费,让其中1%的人升级为高级会员,每年付30块钱年费,那么每年收入就是100万x1%x30元=30万元!不错嘛,?扣除十七八万的运营成本,还剩毛利润12万,每个屌丝年底能分到4万大洋,如果按照打工者的算法,这三个人每人月薪3333元,木有奖金,木有津贴、木有任何福利,上班还得带自家的电脑。

尽管如此,屌丝们还是激动得咬了一口水饺:感谢苍天!我们终于要盈利啦!!!那一夜,人们看到三个发疯的屌丝在屋顶翩翩起舞。

韩寒说,中国人民是最有忍耐力的族群,一点好处就感激涕零。他一定不知道,IT创业界里的屌丝,才是这群傻逼中的战斗机。他们可以平静地忍受每年都持续亏钱,而且还能信心十足的对所有人说公司的状态非常好,如果有一天居然收支平衡了,他们会激动的趁夜难眠,比北朝鲜倒掉还开心。

本文开头的三个屌丝,其实是非常幸运的,至少能做到月薪3333元。大部分的屌丝在第一年做到几万用户的时候就会挂掉,原因众多,最主要要的是意志太弱,受不了最初的寂寞;意志稍微坚强点的会在第二年第三年慢慢挂掉,原因主要是资金断裂、团队分裂;能成功熬到第四年还没饿死、还没被口水淹死、还没被肠胃病颈椎病腰肌劳损折磨死的,甚至员工不减反增的,基本上属于神仙级别了。

我为什么要说三个屌丝的故事呢。首先是因为这是身边每天都在发生的故事,其次是因为感到可惜,IT界在我眼里一直是一个无比高级的职业,聚集着全球最聪明、最富有的人类精英。以IT创业界的青年们的智商,他们可以做成任何一件事情,包括改造银行制造汽车发射航天飞机?。结果这帮人却整天在蓬头垢面得为3k的月薪而挣扎,太悲催了。

为什么用悲催这个词??如果一个人生下来就在山沟沟里,一辈子都没机会去见什么好东西,这不叫悲催,这只叫苦难;而如果一个人生出来有一个奇怪的特异功能:皮肤出来的汗水会凝结成昂贵的水晶,本来只靠出汗就能赚钱,结果这傻逼居然觉得出汗这个行为太低级,做手术把自己的汗腺全给切了,而且丝毫没有意识到他做了什么傻事,这才叫真的悲催。

我们IT界中的很多人,生下来就是有这个出汗成水晶的特异功能的,正是因为这种与众不同,这群人能混入牛逼的大学,整天打网游还能写出像样的毕业论文,拿到学位,进外企,考CPA,做咨询、做证券分析,研究高分子材料,做电子商务,做云计算。。。一级一级的上升,直到有一天,发现身边的人里,已经没有一个不是CPA,不是咨询师,不是高级研究员了,身边的人全是业界精英,个个都超级强悍。在这个所谓的高级圈子里,自己并没有任何过人之处,只不过是just?another?analyst而已。在高级圈子里拼的头破血流,最后也只能混到给台湾人整理数据而已。莫然回首,发现当年的血气方刚、年少时的无限梦想,进化成了一身肥胖的赘肉。这个时候,有个旁观者说:“升级到头了,该降级了”

当一个社会疯狂鼓吹快节奏的时候,一定需要有人来宣扬慢生活;当全社会跟打了鸡血似的吹捧升级的时候,一定需要有人来说说降级论。

IT青年们喜欢打游戏,喜欢升级。他们的人生也和游戏一样,沉醉于不停的升级中,不仅喜欢升级自己手上的技术,把MySql改成MongoDB,把Apache升级为Nginx,在Mac上装Ubuntu,Ubuntu里再装个虚拟机去跑Mac?OS。。。IT青年们也喜欢升级自己的人生,从程序员升级到项目经理,再升级到技术总监或产品总监,再升级到合伙人。。。

在不断追求升级的过程中,所面临的一个很大事实是:当一个人从A刚升级到A+级的时候,其实这个人的能力层级依然只是A的层级,还未胜任A+的层级,他必须要到A+的后期,才可以胜任A+。就好像一个高中生,高考完之后,虽然理论上已经属于大学生了,但是他的实际能力依然只是高三毕业的水平,除非他全部pass了大一的期末考试。同样的道理,这个世界上有很多人的身份和称谓,都是在描述“未来的自己”,而不是现在的自己。当你从销售员升级为销售经理的时候,你自我感觉很好:“我现在是销售经理了”,但是这个时候,你并未通过公司对你作为销售经理这一年的工作成果的考核,你只是一个“未来可能是合格的销售经理”的前身。如果年终考核你失败了,那么这一年最准确的描述是:一个销售员,占了整整一年销售经理的位子,最后失败了。而且这一年一定会过的很累,因为通过考核的其他销售经理,才是真正胜任这个层级的人,跟一帮真正属于这个圈子的人厮杀,就好像拳击馆里当陪练的小角色,去和泰森比了一年的武,怎么可能不累呢?

当我07年进入互联网行业的时候,就是那个拳击馆里陪练的小角色,我被迫去跟全国各地的泰森比拼,结果累的半死。后来我开始反思最初的目标,为什么要在自己身上挂一个“拳击高手”的招牌,被那么多泰森追着打?我把这块招牌卸了,找个完全没练武的人去比拼,不是更容易赢么?于是果断照做,去找了一个没人懂拳击的小乡村,做了纯英文的Tucia.com(需翻墙),只做国外的业务。在那个地方,作为一个知名武馆的拳击小陪练,我成了村子里拳击技术最高超的人,受人仰慕,还开武馆教人拳击,活的非常滋润,而且在教人拳击的过程中,自己的拳术也比以前提高了很多,发展出一套属于自己的拳法,我虽然进不了泰森们的大圈子,但他们也进不了我的小圈子。

关于圈子,有一个很赤裸裸的现实:不会是你进入圈子,只能是圈子进入你。很多人会四处找关系,“帮我介绍给xxx吧,我想进入你们的圈子”,这样的人是永远进不去这个圈子的,因为圈子的天性是,永远追求更高一个层级的人。而我们的大部分人,其实都在以低一级的属性,占着更高一级的位子,徘徊在更高一级的圈子边缘,与更高一级的人竞争,幻想着自己可以升级到那个圈子里去。也许永远进不去,悲催的努力一辈子;也许运气好,某一天真的进入这个圈子了,但那个时候又会有下一个目标,希望进入更高级的圈子,这是一场没有终点的战斗。永远的追求升级,永远的累。

有没有想过降级呢?

如果一个来自微软的高级工程师,辞职去一个养猪场做开放平台经理,那么他的到来不仅会让养猪圈感到无比荣幸,更是意味着,利用他在IT界训练出来的高效工作方式和逻辑思维能力,他可以掀起一场养猪行业的革命,使得20年后才会出现的人性、高效、开放、协作、健康的养殖方式提前到达。在这场革命中,他会活的非常有价值。这种价值,在原先的圈子里,是完全体验不到的,因为他此前的所有工作,只是在满身疮痍的windows系统上不停的打补丁,无论打多少都逃不开产品衰落、被人鄙视的命运。

很多人的命运,都像是上面那个微软工程师。只需要降级,就能创造更大的价值,也能获得更大的满足。那为什么不呢?为什么要死死抱着那个所谓的“高级职业”不放呢?

去年我曾犯贱去趟了移动互联网的浑水,做了个手机app,刚开始的时候感觉很高级,但很快,铺天盖地的竞争对手就出现了,我又发现自己陷入了07年一样的场景:作为一个小小陪练,我他妈的又被一帮泰森们给围住了。当泰森中的战斗机—微信,变得无比牛逼之后,我就知道,战胜这群泰森是绝对不可能的事情了。于是我再次投靠了“降级论”,把自己从牛逼哄哄的移动互联网行业,降级到了一个被人不齿的低级项目:Tucia?Baby

这个项目虽然是传统行业,但是我们基本上是按照互联网产品的思路去做的,除了拍摄需要来店里以外,其他一切,包括营销、预约、客服、后期、选片、取片、客户关系等,所有环节都放在网络上,尤其是微博(@tuciababy官网)。当然,最重要的是,作为一个脑残的果粉,我按照iPhone的做工去要求每一张作品,必须达到我们能力可以做到的最好水准,不计成本的最好水准,才允许送给客户。正式接客不到两个月时间,虽然还远未达到成功,但目前已做到每天都有客户订单,财务上已实现盈利,未来相信一定会比大部分app开发者更光明。(ps:我们没有请公务员吃饭喝酒泡桑拿,也没有塞钱给任何政府机关。当你的产品真的用心做到很好的时候,其实你不需要讨好任何人的。)

这个项目让我沉思了很久:07年我曾把一个纯纯的web2.0网站做到了alexa中国区前1000名(如有质疑,请查询2010年附近的tucia.com排名),结果一路亏损,到最后只剩下一个员工;11年我把那个纯纯的app做到苹果官方推荐免费榜第一位(如有质疑,请看点此看截图),那段时间每天四五千iPhone安装量,结果一路烧钱,到最后濒临关闭;而如今,我只需把自己从纯纯的互联网降级下来,做一些看起来有些“低级”的项目,居然就能立即实现收支平衡。

除此以外,我还发现一个现象,中国消费者在与奸商们的长期斗争中,已经培养出了一种非常苦B的品质:只要不被坑,他就谢天谢地。如果商家严格做到了承诺的每一件事情,客户就会感动的泪如泉涌。如果商家不仅做到了所有承诺的事情,还很贴心的提供了一些额外的服务(比如我们给每位客户赠送非常好吃的樱桃和进口巧克力作为甜点),那么客户就会激动的哭天喊地、奔走相告,推荐给他认识的每一个人。

其实这片肮脏的国土,就是上天赐予IT青年们的最好机会。

在一个不会练武的村子里,只要你会打两拳,你就是拳术最厉害的人;在一个没有服务意识、忽视产品质量的土地上,只要你用心做服务,用最高的标准去要求自己,你就会成为这块土地上最出色的商家;在一个没有现代管理意识,不懂网络、不懂微博、不懂用户体验、不懂口碑传播的粗犷社会里,你只需要把之前花在IT产品上的心思的10%拿过来用,就可以秒杀一切天朝对手。

所以,

IT青年们,当你在为网站的转化率苦苦思索的时候,当你在为app的活跃度辗转反侧的时候,当你在为融资计划苦苦哀求各界大佬引荐的时候,也许犯了一个错误,也许你们的脑子最值得闪光的地方,不是去悲催的IT界当炮灰,而应该是去按摩界、餐饮界、烧烤界、早餐界、理发界、送花界、纺织界、成人用品界、现代化养殖界、有机蔬果界、个人护理界、汽车修理界。。。。与IT界相比,这些行业的确无比低级,他们的老板连qq都会发音成“抠抠”,他们的员工一辈子都没用过Email;跟他们解释什么是SEO,什么是用户体验,什么是数据挖掘,他们会在听你说完之前就开枪自杀掉。正是因为如此,这些行业才是如此的不堪一击。正是因为如此,当智商高达147的IT青年还在为3k薪水拼命、而智商不到50的烧烤店老板正坐在porsche里玩着前面那位青年开发的app的时候,我就忍不住仰望星空。

这些原始而纯粹的行业,正在等待IT精英们的降级,如同蒲公英一般的伞兵,在黑夜里从天而降,长驱直入,用最智慧的产品、最优质的服务拯救这些早就该死的行业,屌丝的生命将会绽放出银色的羽翼,无比丰满,无比性感。

最后注意,请珍惜生命,远离我的微博:@meditic

 

Oracle DBA大牛的自述

大家好,我是落落http://blog.csdn.net/robinson1988/QQ692162374,其实我选择Oracle是一件很神奇的事情,但是现在回想起来又觉得是命中注定。我2006年就读于西南大学软件工程专业,我之所以选择软件工程是因受了电影黑客帝国的影响,依稀还记得某个工程师对着一个黑屏幕,敲击一串代码,然后控制了某个机器,当时觉得好酷。

大一,学校开设VB.NET,全英文授课,还好哥英文很好,当时高中全年级前5名,对于全英文上课自然是无压力,大一上半期结束的时候,我还是会用VB.NET简单的编写一些小程序,比如说复杂功能的计算器之类的。大一下,学校开设了C专业课,因为有了VB.NET的底子,学习C也是相当轻松的,而且当时并没有涉及到一些复杂算法,这样大一我就稀里糊涂的过去了,大一下的暑假,我还勾引了一个安徽妹子,用现在网络流行语,可以说天然呆,自然萌,卡哇伊,她是外国语学院的,哥是计算机学院,简称妓院。至于怎么勾引妹子就不说了,有兴趣私聊我啊。

到了大二,学校开设了C++这门课,他奶奶的,C++是面向对象的,VB.NET,C是面向过程的编程语言,因为一时思想没转换那么快,加上女朋友的关系,没怎么把心思放在学习上,所以C++这门课学得非常差,学了2个月的C++,我就只会写一个类,并且就只会?Hello?World其他的什么继承,封装,多态,乱七八糟的完全是搞不懂,然后我发现,其实我不喜欢写代码。大二上期要结束的时候,系主任上了一门课,课程名字我忘了,系主任在讲课中偶然的提到了?ORACLE这个关键字,我当时就在想,ORACLE不是先知的意思吗?因为黑客帝国里面有个ORACLE(先知),所以我对ORACLE这个单词很有印象,然后系主任就说?ORACLE是数据库,当时我们还没开设数据库这门课程,所以对它还不是很了解,下课之后我就百度了一下ORACLE,结果他妈的,冒出一个广告,考OCM,考过之后年薪30W+,并且也知道了一个职位—DBA,网上都说DBA是越老越吃香,越老工资越高,程序员是吃青春饭,而且程序员最苦逼的是要写代码。当年才07年,30W确实是非常吸引人,于是就全方面的搜索ORACLE,关注ORACLE,加QQ群,上ORACLE论坛,大二上快要结束的时候,我去请教了系主任,问关于ORACLE的事情,系主任回答我,你去考ORACLE认证,考OCP。?请注意,现在别去考什么OCM了,都烂大街了。你想浪费钱随便你。考个OCP还可以的。

大二上期结束的时候,女朋友在学校留校两周,学习选修课,我也自然是留了下来,这期间我每天到图书馆阅读ORACLE书籍,很郁闷,我看了1周ORACLE书,妈的上面讲什么啊,感觉是天书,比C++感觉都难。后来选了一本ORACLE10g宝典,这本书在以windows为基础讲解ORACLE,于是跟着书做实验,安装ORACLE,用SQLPLUS查询?SCOTT.EMP。?这期间因为没有其他课程干扰,还有书中内容比较简单,就很快上手了,回到家之后,依然阅读这本书,整个寒假,我把这本书看完了,当然了,当时只理解了其中20–30%内容。

到了大二下,女朋友与我分手了,让我很郁闷的是她居然被人挖墙脚了,艹,现在想起来老子就郁闷,哥还是处男呢,真是郁闷当时为啥没把她骗到学校的桂园宾馆。失恋让哥意志消沉了一个星期,大二下我们又开设了JAVA,C#,数据结构与算法,以及一大堆的专业课。JAVA,C#这两本课非常坑爹,我根本就不喜欢,学校开了就得上,数据结构与算法更坑爹,太他妈难了。这个时候,我发现班上有个寝室,有个人自学JAVAEE,并且都自己写了个小系统了,有个人一直研究C与算法,自己编了个小病毒,另外一个在学C++,他妈的,这个寝室的人怎么这么厉害,都能写小病毒了,还能写小系统了,事实上也证明,他们确实厉害,大四他们有2个人去阿里巴巴了,有个人去金山了,可能是他们寝室气氛好吧,一个人学往往能带动一堆人学。我们寝室就不一样了,一个人天天下毛片,另外一个人天天玩游戏,还有个人更奇葩,喜欢看小说,神马极品家丁啊,很纯很暧昧啊,艹,而且每天晚上自己偷偷在那里淫笑,我没什么不良嗜好,虽然我也喜欢看毛片,但是就是不知道哪里下载,从来不玩游戏,我觉得玩游戏头痛,我只喜欢看电影。大学的时候,我可以这样说,所有的经典电影我全看过,无论鬼片,禁片,庸俗片,科幻片,动作片啥都看过,基本上唯一爱好就是看电影,学校的BT资源太丰富了,想看什么电影求各种,立马有人发。

因为失恋的关系,加上我跟不上JAVA/C#,加上我确实不喜欢编程,加上那个OCM广告,以及我在大二的寒假我有了点ORACLE基础,我毅然决定选择ORACLE这条道路。这个期间,老师上课讲JAVA,我就学ORACLE,老师讲C#我也学ORACLE,当然了,数据结构与算法还是必须听的,其他无价值的课程我全都没学,只学ORACLE了。这样一直持续到大三下。在08年9月份,考了一个OCA,没看题库,直接过的OCA。本来想考OCP的,但是当时觉得自己是学生,就没考了,当然了也觉得OCP题目太简单了,有个证书顶毛用。大二到大三的一年内,我几乎阅读了市面上能买到的所有ORACLE书籍,图书馆能看到的所有ORACLE书籍,知识面广度已经够了,只是欠缺深度,但是对于一个大学生来说,我需要的是广度,而不是深度。

大三下,上海HP重庆分公司来学校做校园招聘,当时班里成绩排名高的,全没面上,恰好我寝室的面试上了2个,另外还有一部分女生。面试用了5分钟做了个简短的英文对话,然后谈了一下ORACLE的体系结构,看了一下我的OCA证书,从他那微笑的眼神中,我就知道,我通过了面试。恰好班里的有些同学,拿奖学金的,成绩非常突出的反而没面试上,后来才知道,企业要的是有独立思维的人,有能力有魄力的人,成绩好的人恰好他们不愿意招,因为这种人没创造性思维,属于按部就班的,当然了,企业也需要进去之后能真正干活的人,
因为我已经有相当好的ORACLE基础,而企业也缺乏这方面的人才,所以正好就去了。

大四的时候,进入HP实习了1年,最开始在微软产品与ORACLE产品部门,因为是实习生,无法进入真正的项目,我只能作为一个旁观者,在这期间我阅读了大量的ORACLE官方文档,之前学习看的是市面上的书籍,在这之后因为HP是外企的原因,他们提倡看英文文档,全英文环境办公,所以我也开始看ORACLE官方文档,这个期间,我对ORACLE非常多的知识又得以进一步深入,我的技术成长期就是在这段时间内。要想成为ORACLE大牛,你必须阅读ORACLE官方文档!!!而且要彻底的理解。

大四即将毕业的时候,在HP内部我转到了BI/DW部门,这个部门专门做数据挖掘与数据仓库,BI用了Oracle的OBIEE/SAPBO报表,还有一些其他报表技术,这些SQL都是自动生成的,而且很多都是几百行,经常一个报表跑几十分钟甚至几个小时不出结果。在数据仓库方面,有大量的ETL跑得非常慢,经常几个小时甚至1天都跑不完。中国HP内部当时没人解决这些问题,很多人都是工作8年以上,有些还是OCM,都无法解决这些问题。这些问题最终交给了老外,老外也无法彻底解决,而且老外解决一个SQL起码耗时1周。我曾经试图请教当时HP内部的一个DBA,问他如何优化这个SQL,他直接给我说太难了,做不了,不久之后,他跳槽去IBM了。我当时真的很鄙视他。

年轻人总是有着一颗争强好斗的心,因为当时有大量SQL跑得慢,并且全都是数据仓库的超大型SQL,都几百行的,而且很多是工具自动生成的,所以我有了环境学习SQL优化,之前我也是什么ORACLE技术都学,RMAN,BBED,DUMP,DSI….各种INTERNAL文档,但是学了之后发现没多大作用,遇到真正的CASE还是无法处理,所以我毅然决定,我专门研究SQL优化,研究ORACLE性能优化,其他技术我暂时放弃。于是我每天从上班到晚上1点钟,就只研究SQL优化,因为HP可以在家办公,我晚上研究晚了,第二天可以在家上班,这样我起床之后,没洗漱又开始研究SQL优化。我的SQL优化技术,终于从最开始完全找不到如何下手,到我能3天优化一个SQL,到之后1天优化一个,然后几个小时优化一个,到最终几乎能达到看一眼就能知道SQL性能瓶颈出现在哪里。我的SQL优化技术在HP慢慢就出名了,老外也慢慢知道中国有这么一个DBA,比他们本国的DBA优化SQL速度快N倍,这样我在HP毕业半年就破例涨了一次工资,翻了一番,年底又涨了2K,并且获得了60股的股票(当时40美元一股)。毕业第二年(也就是在HP第三年),我又想涨工资,老板给我说,我涨了2次了,而且对于刚毕业的小伙子来说,这个价格在重庆很不错了,他说很多工作几年的都没我工资高,那意思就很明显了,不给我涨呗。搞IT的人要明白一个事情,工资是跳槽跳出来滴。正好北京用友某个技术负责人寻找性能优化工程师,他和我接触了半年,一直邀请我去北京发展,在这之后,我决定离开我的家乡重庆,去北京用友,当时薪水也不高,年薪20W左右,对于一个才毕业1年多的人来说,20W已经相当高了,并且那边有安排住宿,有餐补,有交通补贴,通宵补贴,基本上一个月不怎么花钱。工作非常轻松,每天就优化SQL,然后研究一下中间件,以及JAVA虚拟机内存泄露,以及研究一些业务。SQL优化不用说了,基本上瞄一眼搞定,中间件优化,JAVA虚拟机因为之前没怎么接触过,所以时间放在了这边,同时也学习了业务。但是因为北京空气原因,环境太恶劣了,加上自己一个人在北京,觉得很孤独,就在重庆找了一个DBA工作,待遇比北京低点,但是也没低太多,就回重庆发展了。重庆这边的工作基本上也是做优化相关,在这家公司我进一步的接触到了SYBASE?IQ,GREENPLUM,进一步的学习了EXADATA(2010年就开始接触了,HP最开始用第一代EXADATA),以及国产的GBASE,甚至HADOOP,还接触了各种存储,这个期间对我知识面又是更进一步的提升。在那个公司呆了大概1年之后我来到了现在的公司,主要负责数据库设计,数据库设计优化,SQL优化,系统架构优化,等等。我之所以离开之前的公司,是因为要写一些很无聊的技术架构文档,妈的哥最讨厌写文档。
从2010年以来,本人一直专注于SQL优化,SQL改写,ORACLE系统优化,表设计优化,累计优化过超过10000个以上SQL,是的,你没看错,是一万个以上SQL。帮人优化SQL收过3000元一个,也收过50元一个,当然了更多的是免费的。同时也优化过接近60套系统,当然了系统的优化是一个整体项目,并不是我一个人完成的,但是我扮演了绝对不可替代的作用。曾经改造过某个系统的表设计,使得磁盘IO经常100%降低为60-70%,CPU从60降低到30–40%,该系统数据量每天产生接近5TB。

大家如果有什么SQL需要优化的,有系统需要优化的,请直接发QQ邮件692162374@qq.com完全免费,如果超级复杂,比如几百行的,我可以远程帮助,同样的免费。如果有SQL需要改写的,我会亲自指导你手把手改写。

写到这里,我想告诉大家,学习技术一定要有恒心,要抱着必胜的心态去征服它,当然了,掌握好的学习方法同样重要,我之前是阅读了大量ORACLE书籍(绝大部分是英文),以及官方文档,有了知识广度,再根据工作需要,特立独行研究某一个领域,把某一项做精通之后,再研究其他技术,比如再去研究特殊恢复,或者研究NOSQL,或者研究架构等等。如果你一直什么都学,什么都看,最终的结果是,你什么都懂,但是不精通,那么你就是一个打杂的,你觉得自己和牛吧,与别人比差太远了,你觉得自己菜吧,但是ORACLE的玩意儿啥都玩过,就是不精通。我相信很多人都有这样的感觉,So,找个方向深入研究吧!!!
对于ORACLE初学者,建议先增加ORACLE知识广度,再根据自己喜好,选个方向深入研究。祝各位生活愉快,工作愉快,事业有成。

原文地址:http://blog.csdn.net/robinson1988/article/details/12747113

 

Java开发者需坚守的十条基本原则

有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。

一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。

二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案,比如说,在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架(framework),之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。
三、始终牢记——“少即是好(Less?ismore)并不总是对的代码效率虽然很重要,但在许多解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子:

if(newStatusCode.equals(“SD”)?&&(sellOffDate?==?null?||
todayDate.compareTo(sellOffDate)<0?||?(lastUsedDate?!=?null?&&
todayDate.compareTo(lastUsedDate)>0))?||
(newStatusCode.equals(“OBS”)&&?(OBSDate?==?null?||
todayDate.compareTo(OBSDate)<0))){
newStatusCode?=?”NYP”;
}
能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:

if(newStatusCode.equals(“SD”)?&&(sellOffDate?==?null?||
todayDate.compareTo(sellOffDate)<0?||?(lastUsedDate?!=?null?&&
todayDate.compareTo(lastUsedDate)>0))){
newStatusCode?=?”NYP”;
}elseif(newStatusCode.equals(“OBS”)?&&(OBSDate?==?null?||
todayDate.compareTo(OBSDate)<0))
{
newStatusCode?=?”NYP”;
}
是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。

四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?

public?class?A?{
public?static?final?String?S_CONSTANT_ABC?=?”ABC”;
public?boolean?methodA(String?sParam1){
if?(A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
return?true;
}
return?false;
}
}

现在,每次需要将“ABC”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。

六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估System.out.println危害啊,请看下面的代码:

public?class?BadCode?{
public?static?void?calculationWithPrint(){
double?someValue?=?0D;
for?(int?i?=?0;?i?<10000;?i++)?{
System.out.println(someValue?=?someValue?+i);
}
}
public?static?void?calculationWithOutPrint(){
double?someValue?=?0D;
for?(int?i?=?0;?i?<?10000;?i++)?{
someValue?=?someValue?+?i;
}
}
public?static?void?main(String?[]?n)?{
BadCode.calculationWithPrint();
BadCode.calculationWithOutPrint();
}
}

从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。

要避免浪费CPU时间,最好的方法是引入像如下的包装方法:

public?class?BadCode?{
public?static?final?int?DEBUG_MODE?=?1;
public?static?final?int?PRODUCTION_MODE?=?2;
public?static?void?calculationWithPrint(int?logMode){
double?someValue?=?0D;
for?(int?i?=?0;?i?<?10000;?i++)?{
someValue?=?someValue?+?i;
myPrintMethod(logMode,?someValue);
}
}
public?static?void?myPrintMethod(int?logMode,?double?value)?{
if?(logMode?>?BadCode.DEBUG_MODE)?{?return;?}
System.out.println(value);
}
public?static?void?main(String?[]?n)?{
BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
}
}

另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码:

public?static?void?concatenateStrings(StringstartingString)?{
for?(int?i?=?0;?i?<?20;?i++)?{
startingString?=?startingString?+startingString;
}
}
public?static?voidconcatenateStringsUsingStringBuffer(String?startingString)?{
StringBuffer?sb?=?new?StringBuffer();
sb.append(startingString);
for?(int?i?=?0;?i?<?20;?i++)?{
sb.append(sb.toString());
}
}

在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。

七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:

1?不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。
2?先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。
3?学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。

八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。

九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:

1?先于编写类代码之前编写单元测试。
2?记录单元测试中的代码注释。
3?测试所有执行关键功能的公有方法,这里不是指setget方法,除非它们是以自己独特方式执行setget方法。?

十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。

 

jQuery扩展类库thickbox实现弹出层

1>?引用JQuery插件、thickbox插件;

<script?type="text/javascript"?src="path-to-file/jquery.js"></script>?
<script?type="text/javascript"?src="path-to-file/thickbox.js"></script>

2>?引入thickbox的css文件;

<link?rel="stylesheet"?href="path-to-file/thickbox.css"?type="text/css"?media="screen"?/>

3>?对需要使用?thickbox效果的对象加入以下代码, 给创建的这个link元素一个class="thickbox"属性;

 <a?href="Upimg/single.jpg"?title="add?a?caption?to?title?attribute?"?class="thickbox">
??????对象/图片
?</a>

一、一张图片

<1>给创建的这个link元素一个??class="thickbox"??属性
调用代码如下:

<a?href=”Upimg/single.jpg”?title=”add?a?caption?to?title?attribute?”?class=”thickbox”>

 

 

 

<img?src=”Upimg/single_t.jpg”?alt=”Image?2″/>
</a>

二、多张图片

 <1>给创建的这个link元素一个??class="thickbox"??属性
<2>给每一个link元素一个相同的rel值。(比如:rel="gallery-plants")


<a?href="Upimg/plant1.jpg"?title="add?a?caption?"?class="thickbox"?rel="gallery-plants">
?<img?src="Upimg/plant1_t.jpg"?alt="Plant?1"?/>
</a>?

<a?href="Upimg/plant2.jpg"?title="add?a?caption"?class="thickbox"?rel="gallery-plants">
??????<img?src="Upimg/plant2_t.jpg"?alt="Plant?2"?/>
</a>?

<a?href="Upimg/plant3.jpg"?title="add?a"?class="thickbox"?rel="gallery-plants">
??????<img?src="Upimg/plant3_t.jpg"?alt="Plant?3"?/>
</a>?

三、?层

 <1>给创建的这个link元素一个??class="thickbox"??属性
<2>给link元素的href属性设置为:?#TB_inline
<3>在href属性的值#TB_inlineIn后面追加一下字符:??height=300&width=300&inlineId=myOnPageContent
????当然你也可以在参数字符串中加?modal=true(比如.?#TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true)?这样当关闭ThickBox时会调用ThickBox内部的一个tb_remove()函数。在演示中查看“显示隐藏模式的内容”则要求点击yes?或?no才能关闭ThickBox。

??代码如下:

<input?alt="#TB_inline?height=300&width=400&inlineId=myOnPageContent"?title="add?a?caption"?class="thickbox"?type="button"?value="Show"?/>?

<div?id="myOnPageContent">
?<p>Lorem?ipsum?dolor?sit?amet,?consectetuer?adipiscing?elit,?sed?diam?nonummy?nibh?euismod?tincidunt?ut?laoreet?dolore?magna?aliquam?erat?volutpat.?Ut?wisi?enim?ad?minim?veniam,?quis?nostrud?exerci?tation?ullamcorper?suscipit?lobortis?nisl?ut?aliquip?ex?ea?commodo?consequat.</p>
?<p><select?name=""><option>测试</option></select></p>
</div>

四、iframe

<1>给创建的这个link元素一个??class="thickbox"??属性?
<2>?
href属性的URL后面追加上以下字符参数:??KeepThis=true&TB_iframe=true&height=400&width=600
代码如下:

<a?href="Upimg/ajax_ifram.html?keepThis=true&TB_iframe=true&height=250&width=400"?title="add?a?caption?to?title?attribute?/?or?leave?blank"?class="thickbox">
????例子1
</a>?

参考:http://blog.sina.com.cn/s/blog_64d8a1d00100i7r5.html

获取对象在浏览器中的坐标(转)

一、定义

getBoundingClientRect?函数是W3C组织在第一版本的W3C?CSSOM?View?specification草案中确定的一个标准方法,在此之前,只有IE浏览器是支持该方法的,W3C在这次草案中把它扶正成为标准,足可以看出它并不简单。getBoundingClientRect?方法返回的是调用该方法的元素的TextRectangle对象,该对象具有top、left、right、bottom四个属性,分别代表该元素上、左、右、下四条边界相对于浏览器窗口左上角(注意,不是文档区域的左上角)的偏移像素值。

二、兼容性

getBoundingClientRect方法最先在IE5中出现,后来被W3C接纳成为标准。目前IE5.5+、Firefox?3.5+、Chrome?4+、Safari?4.0+、Opara?10.10+等浏览器均支持该方法,兼容性几乎完美。

在具体表现方面,Firefox6以前的版本使用getBoundingClientRect时不能获取到top和bottom这两个属性值,Firefox6及以后的版本和其他支持getBoundingClientRect方法的浏览器则top、left、right、bottom四个属性值均能获取到。需要说明的是由于某些版本的IE浏览器的<html>文档根元素默认是有2px边框的,所以这里需要特别处理一下,微软MSDN上说在IE5中会存在这样的情况,但据我实际测试,xp系统中IE6也存在这样的问题,奇怪的是,我在win7环境下用IETester测试的IE各版本都是正常的。但这并不是什么大问题,我们只要把得到的值减去html根元素(body也可考虑进来)的clientLeft或clientTop就能保持各浏览器一致啦。

三、用途

当getBoundingClientRect刚被w3c列为标准的时候,PPK还曾质疑过它是不是多此一举,因为已经存在类似的方法来获取元素的偏移位置,比如offsetLeft和offsetTop。但Jquery的作者John?Resig马上阐明了getBoundingClientRect的用处。用传统的方法固然可以实现getBoundingClientRect同样的功能,但兼容各种浏览器以及各种不同的元素就会把你弄死,而且效率还非常低下。所以获取页面上某个元素相对于浏览器窗口的偏移量就成了getBoundingClientRect的用武之地了。而获取元素的偏移量能有什么用,我相信,你懂的~?^_^

 

IE6和IE8区别(待整理)

IE6是单线程(解析标签会等待有阻塞,例如object没指定src属性),IE8是双线程。

IE8与IE6和IE7的区别(转载整理):

1?IE8中的css中关于width或是height中如果使用像素形式作为参数时,参数必须是带“px”的,而且此参数必须是大于0的,而在IE6和IE7中是支持不带“px”参数的,而且参数是可以为一个负数。
2?IE8中的css中“border-style:outset?;”是没有效果的。
3?IE8中的无序列表<ui>之间的距离要比IE6和IE7大的多,而且我还没有找到调整的方法。
4?在IE8中,一个Iframe中取event.x的值不是Iframe中的相对x坐标,而是最外层的window的x坐标,但是event.y却是取的是?Iframe中的相对y坐标。而在IE6和IE7中,event.x和event.y却得的都是所在Iframe中的相对坐标,真是搞不懂!可以用?event.clinetX代替。
5?IE8中的javascript中function对象例如:
??????function?a(){
????????????alert(”haha”);
???????}
??????var?fun=new?Function(“”,a);
??????alert(fun);
此时返回的值为function?anonymous(){function?a(){alert(“haha”)}}?而在IE6和IE7中返回的值为function?anonymous(){alert(“haha”)};也就是说当Function的第二个参数如果是一个函数时,IE8对此参数作用的是整个函数的代码,而IE6和IE7则是对此参数起作用的是函数的内部代码(不包括?“function?a(){”和“}”的函数头和尾)
6?IE8中expression函数不起作用。所以如何在css中写javascript代码还不清楚。
7.如下代码
.regDiv{
????background-image:url(image/bg.gif);?MARGIN:?0px?auto;?WIDTH:?800px;
}
.regWrap{
????vertical-align:center?;border:0px?;margin:0?auto;?width:95%
}
.regWrap?TD{
????FONT:?12px/25px?’arial’;
????VERTICAL-ALIGN:?buttom;
????PADDING-TOP:?2px;
????PADDING-BOTTOM:?2px;
????PADDING-LEFT:5px;
????white-space:nowrap;
????vertical-align:bottom;
}
.regWrap?EM?{
????PADDING-RIGHT:?5px;?PADDING-LEFT:?0px;?PADDING-BOTTOM:?0px;?COLOR:?#cc0000;?PADDING-TOP:?0px
}
.regWrap?SPAN{
????PADDING-RIGHT:?0px;?PADDING-LEFT:?0px;?PADDING-BOTTOM:?0px;?PADDING-TOP:?0px;OVERFLOW:?hidden;?HEIGHT:?20px;color:?#999999
}
.regWrap?INPUT{
????HEIGHT:?18px
}
A{
????FONT:?12px/12px?’arial’;
????COLOR:?#039;
????TEXT-DECORATION:?none;
}
这段代码中如果在IE8以下版本中,A的样式是无效的,而在IE8中是有效的。但是如果把A{……}的样式放在.regWrap{……}前面,这样IE8及以下版本中A的样式就都有效了。
@看了下。。?。在IE6里面做的网站其中的高度为一像素表格在IE8里面显示的不是一像素了。?总之变的很明显的大了
@bug?or?something?else
<div?style=”width:300px;float:left;clear:both;(这里的clear无关紧要似的)”>
<a?href=”#”><img?alt=””?src=”tl.png”/></a><a?href=”#”><img?alt=””?src=”pl.png”/></a>
</div>
以上这段代码,在IE8里面,如果我们给img一个float:left;属性那么a标签就会自动产生3px的margin-left(也可以理解为?img标签会吧),即便在样式里面用a{padding:0;margin:0;}都不行,给img这样做也不行,即便是inline?style;再者,如果我们给a一个width属性,那么除了3px的margin-left,我们还能看到4像素的margin-top或者说是?padding-top在掉下来的第二个a标签的头部,但是在IE8以前版本以及其他浏览器上是正常显示的(虽然给imgfloat属性是没有必要的)。。。
解决方案?暂时没有吧——但是可以避免,就是不要滥用float;
困惑
<div?class=”layout-right”>
<div?class=”list-1?height-72″?style=”width:?100%;float:left;”><a?href=”mailto:hanwei@mail.hust.edu.cn”><img?alt=”团长信箱”?src=”images/tl.png”?/></a><a?href=”mailto:zb2004@mail.hust.edu.cn”><img?alt=”书记信箱”?src=”images/pl.png”?/></a></div>
<div?class=”list-2″?style=”width:?273px;float:left;”>
。。。
这个地方有点纠结——因为两张图片的宽度加起来正好一共300px,而整个容器也是layout-right,list-1,list-2都是?300px,内第一个div,给浮动,里面的图片似乎也得给浮动(这和第一个例子不一样,似乎是因为外面的大容器对内部的内部的元素也产生了影响),不然会自动选择换行显示,且头部还会多出一点间距来(已经给img,a?padding,margin在外导入样式表清0了)即便理论上是刚刚能挤下来(这是在除IE8的nav里都能做到的),好,那我们给img浮动吧,可是很不幸,第二个a标签会向下掉若干个像素(具体什么规律和原理我还不知道),虽然a?img?的margin?padding清0工作是已经做了的——
但是如果给a,img一个inline?style?margin?padding?0?,又偏偏能起到作用,这让我怀疑自己代码的规范性了——但我确实给了a,img一个margin?padding清零的class,而且并未被覆盖。

 

javascript中window与document(转载整理)

window对象和document对象的区别

一般来讲,一个window里就是一个document,但是,iframe里面也可以装个document,在iframe里面就有区别了

alert(document.location?===?window.location);?//?true

不要混淆Window对象的location属性和Document对象的location属性。

前者引用一个Location对象,而后者只是一个只
读字符串,并不具有Location对象的任何特性。

document.location与document.URL是同义的,后者在
JavaScript1.1中是该属性的首选名称(因为这样避免了潜在的混淆)。

在大多数情况下,document.location和
location.href是相同的。但是,当存在服务器重定向时,

document.location包含的是已经装载的URL,而
location.href包含的则是原始请求的文档的URL。
document.location和window.location有什么区别就是
document你可以理解为文档,就是你的网页
window理解为窗口,就是你的ie浏览器包含的
无框架:简单的说,没有框架的情况下,是等同的
有框架:在有框架的情况下,最外层是相同的,

在iframe里面的document.location和window.location不同的。
iframe里面的document.location?你看不ie地址变化,只改变iframe部分,
此时的window.location和top.location效果一致
document.location=”url”;(只读)

document.location.reload(“url”;);
window.location=”url”;
location=”url”;
document.href=”url”;
document.location.href=”url”;
document.location.replace=”url”;
document.action=”url”;

document.submit();
document.location.href;和document.location.replace;

都可以实现从A页面切换到B页面,但他们的区别是:
用document.location.href切换后,可以退回到原页面。

而用document.location.replace切换后,不可以通过“后退”退回到原页面。
关于document.location.href或其他可回退的切换方式
document.location?相当于?document.URL?声明了装载文档的URL,
除非发生了服务器重定向,?否则该属性的值与Window.location.href的值是一样的.
history.go(-1);//返回上一页
document.IFRAME名称.location.href=’url’;//改变框架内容