todayx.org
todayx.org
posts - 39,comments - 60,trackbacks - 0

时代在进步,浏览器也在进步,做WPO(性能优化)工作得跟得上形势。

 

《高 性能网站建设 High Performance Web Sites》英文版2007年推出,直到今天,都被奉为经典。书写得很好,但这本书毕竟是2007年,当时还在IE4一统天下的时代,一些书中的内容已经 不符合现在的浏览器进化情况。举个例子:今天的浏览器缓存已经大大增加;浏览器并行下载数已经从原来的2个提升到4个、8个甚至16个;IIS7.0已经 考虑到Etags的消极作用,不需再设置。

 

比较大的一个变化,我认为是JS脚本阻塞的情况发生了变化。Steve也留意到这一点,在他2010年初的博客中,也提到了新浏览器下对JS阻塞已经做出了一些努力。下面的瀑布图是2007年大多数浏览器的加载JS组件的情况:

上图加载了6个文件:

  • 1.  html文档
  • 2. js脚本,下载2秒,执行2秒(下载和执行都发生了阻塞情况)
  • 3. js脚本,下载2秒,执行2秒(下载和执行都发生了阻塞情况)
  • 4. 图片文件(三个组件并行下载)
  • 5. css脚本(三个组件并行下载)
  • 4. iframe(三个组件并行下载)

上述老浏览器的情况,js脚本无论在下载还是执行时,都发生了阻塞。

 

那么我们看看新浏览器(以ie8为例)情况下,情况有没有改善呢?

可以看出,两个js脚本和一个css样式表文件并行下载了,但js脚本执行时,还是发生了阻塞。js脚本执行的阻塞,似乎是无法避免的,因为js脚本经常会生成或修改HTML组件,必须等js执行完后,页面才能正常生成。

虽 然js脚本执行阻塞还在发生,但js脚本下载阻塞似乎已经解决了。事实的确如此,IE8下,可以和JS脚本并行下载的包括JS脚本、CSS样式表,但不包 括图片。在firefox 3.6版本以上,chrome 4.0以上的版本,可以和JS脚本并行下载的包括JS脚本、CSS样式表、图片。下面表描述了浏览器对JS脚本并行下载兼容情况:

 

 

浏览器在不断进步,很多以前奉为金科玉律的WPO原则,可能会轻松的整合在浏览器中。前段优化的很多传统工作,会变得越来越轻松。不过随着互联网媒体样式的演进以及移动互联网的重要性增加,WPO工作页面面临新挑战。

 

刚解放那阵儿,有句顺口溜“三天不学习,赶不上刘少奇”。 借用一下,: )  三天不学习,赶不上浏览器。


转自:iteye

历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2012-01-13 13:33 todayx.org 阅读(1124) | 评论 (1)编辑 收藏

到了年末,又是一年一度写 “年终总结” 的时候了。浪子正坐在办公室里瞎呆着:究竟在2011年里,自己做些了什么? 又真正能得到了些什么呢? 左思右想,真的是毫无头绪,反正又不是读书写作文的时候,写好了也不一定要交给老板看。浪子终于把心一横:好!就写下自己的经历与教训,真正为自己的将来 打算一下。

年终总结

  从年少无知到心思细密,从一无是处的待业青年到如今知名软件公司的副总,当中经历了无数的跌倒,又从失败和挣扎中爬起来。总结概括,本人觉得没有家庭背景,没有政治地位,没有金钱辅助的人想得到成功,必须经历以下5个阶段:

  一、明确目标,脚踏实地,从低做起

  世上没有不劳而获的事情,要想从一个寻常的老百姓开始做起,得到广阔的发展空间,必须比其他人加入多倍的努力。做IT行业也是如此,无论你的理 想是从事技术的开发,还是从事业务的管理,都必须从低做起,脚踏实地工作。在工作的过程中了解行业的现状,业务的动向,客户的需求,未来的方向,并为自己 定立一个长期的发展目标。只有有理想、有目标、有方向的人才不会在激烈的社会竞争中迷途。

写到这里,不禁让浪子想起一个故事:古时候,一位学医的年轻人为了研制一种毒药的解药配方,不禁以身试毒,然后到深山里采集山药,以研制配方。越往 山里走,他越发现有很多山药都有着其独特的功能,当他把药采回药馆研究的时候,却忘记了为自己的毒药寻找配方的事,最后不幸毒发身亡。

其实对初入社会的人来说也是如此,很多人面对这个复杂的社会会感到迷途,有时候可能会被一些眼前的利益所蒙骗而忘记了自己的目标。虽然每个人的背 景,现状都不相同,每个人都有着自己的目标和抱负。但有一点是一样的,只有坚持自己目标,努力奋斗的人才会得到成功,反之,那些随波逐流,半途而废的人最 终只会面对失败。

想到这里,浪子脸上露出了一丝微笑,他似乎有些自喜,自喜自己是个有抱负,有目标的人。自喜他能面向着目标,一如既往地奋斗,虽然道路是坎坷的,但他相信,只要他能继续努力,总会有成功的一天。这时候,浪子拿起了笔,继续写到:

  二、发掘优点,提升能力

  安于现状的人能享受知足所带来的快乐,但永远也不能突出自己特点。想在这茫茫的人海中突出自己,就应该找到自己的长处,发现自己的优势,为自己 争取更广阔的发展空间。要是你口舌灵利,反应敏捷,能快速地洞察市场的走势,那你就应该把握机会,在大型的项目中好好地表现自己。要是你思维明锐,心思细 密,能完成复杂的开发过程,那就应该尽量争取难度大,回报高的新型技术项目,在开发过程中吸收学习崭新的开发技术。

这个阶段真让浪子发起一段感慨:想当年,自己也是从一个小小的程序员出身,刚出来的时候什么都不懂,在工作过程中的确学到了不少的东西。但做久了,工作也只是千篇一律,用来用去都是相似的东西,难以再从中再领略到什么新知识。

但只要记住自己的目标,那就不再是 “为了工作而工作,为了金钱而工作”,工作只被视作是一种过程,一种实现目标的过程。在工作过程你可以了解到要做好工作需要一些什么,要表现自己还需要些什么,要体现自己比别人优胜的地方必须先做到些什么。

虽然,短期的学习并不能直接体现个人的优点,但经过长期的积累,你比别人优胜的地方就能逐步的展现。

但是光有优点还不够,还需要找到表现个人能力的机会:

   三、主动争取机会,把握每个能得到发展的机遇

  想要得到成功必须记住:机会不是等着别人给的,而是自己争取回来的!如果每天只坐在那里,等着上级给你机会,那你的理想最终将会变成泡影。要想 得到成功就必须变被动为主动,不是等着机会的到来,而是在自己有能力,有实力的时候主动地去争取机会。世上没有免费的午餐,有时候,你必须放弃面前的一些 东西,才能得到机会去发展,但只要你对自己有信心,在机会到来的时候就应该大胆地尝试,放弃面前的一些小利益,以争取更大的回报。

浪子露出了一丝苦笑,想着自己以前经常被别人笑说成 “跳槽冠军”,两年期间跳了好几家大公司,但还是感到不满意。其实争取机会并不是怂恿各位去跳槽,哪家公司高薪就跳哪去,而是说应该尝试寻找一个更能发挥自己能力的地方。

想想哪一家公司的老板会想旗下的企业会有大型的人事变动呢?想要成功,人就要有逆向思维:如果我是老板,我希望自己的公司是怎么样的呢?我的希望是:企业能长期处于一个稳定的状态,绝对不愿意开除了哪一位管理层,然后破格提升一个小伙子。

当你有了突出的能力却到了瓶颈的位置,长期呆在一家公司做着乏味的工作的时候,就更应该大胆地尝试,为自己的发展谋求一条合适的道路。正所谓,赛翁失马,焉知非福!不敢放弃现有的,也就失去了进一步发展的机会。

  四、提升管理能力,提高综合素质

  无论从事技术还是业务,无论你是技术总监还是业务总监,都只是单方面的能力。想要成为出色的人才,这是远远不够的。企业是一个运营的团体,想要 一家企业能够得到长远的发展,就必须有完善的管理能力,知人善用。一个成功的企业家往往并不是样样皆能,而是他有妥善的管理才能,能有效地控制企业的日常 运作,把握人才,充分发挥企业的独有优势。

浪子第一时间想起最爱看的一部惊世名著:三国演义,古人云:得民心者得天下。回望三国,刘备虽无大才,文不能安邦,武不能定国,但却从一没落的市井 草席之人成为一方之主,就是因为他能知人善用。卧龙凤雏暂倾心辅助,五虎上将暂俯首称臣,令他终成霸业。当今作为企业的领导者也该有此发掘人才能力,注重 人才的管理,通过沟通提高人才对企业的了解程度,唤醒其工作热诚。

管理是一种学问,要通过出色管理让一家不知名的小企业华丽变身成为一家上市集团更是一种艺术。这绝对不仅仅是通过技术或业务等单方面的学习就能掌握的,这必须经过长期的累积与学习,多方面的了解与实践才能从中领悟。提高个人的综合管理能力,是一个成功人事的必要条件。

这时候,让浪子眼里回放出近期看过的一部电影:杜拉拉升职记,剧中女主角拉拉经历了不断的努力与尝试,终于从一不知名的小员工提升到跨国企业的部门 主管,当中经过了多少的波折与考验。但即便如此,拉拉也不过是年薪五十万左右,但区区的五十万年薪,又能干些什么呢?要想真正达到发展的目标,最重要的是 第五点:

  五、团积资源,建立社会关系网

  现今社会,光有钱并不足以成事。最重要的是必须拥有一个完善的关系网,在市场的调研,项目的研发,产品的包装,业务的推广上都必须有对应企业的 支持,那产品才有可能成功地提出市场,得到丰厚的回报。所以在企业建立前,必须建立自己的人际关系网。而这资源,不单单是指钱,更重要的是市场关系,人才 资源,产品信息。只有把握市场动向,了解产品信息,团结人才队伍,抢在技术前线的企业才会得到最终的成功。

自主创业,是浪子最终想要到达的目标,到这里,浪子终于想到年终报告里面2012年的目标是什么了,那就是洞察市场发展,注视产品路线,发掘有用人才,团积社会关系。在创业之前一定要拥有一个完善的发展渠道,建立成熟的社会关系网,那自主创业才可能得到成功。

正所谓创业难,守业更难,在创业后,必须密切观察市场的走势,制定企业长期的发展路线,那企业才能得到迅速的发展与壮大。

其实为啥这是 “反流程” 升职记,就是因为 “升职” 不应该只是等待,而应该是自己争取。“命运” 不应该由天父来控制,而应该由自己去创造。“升职” 并不是一个已有的流程,而是由我们通过自己的努力而创造的一个 “奇迹” 。


历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2012-01-12 13:03 todayx.org 阅读(3768) | 评论 (3)编辑 收藏

工作变更的事宜快要告一段落了,从电信行业转向互联网行业。其实我不算一个很有经历的人,但是我依然愿意回头望望走过的路,记录下我的体验、感触,给那些刚入职的兄弟们、遇到困惑的朋友们,说一些小小的事情,给一些小小的建议;同时,更作为一份小小的新年礼物,送给自己。

 

-------------------------------------------------------------------------------------------------------------------------------

 

关于求职

 

每一次求职都意味着一次挑战,在这一步过程中,至少要战胜四个这样的自己:

(1)频于抱怨、懒得行动、安于现状的自己;

(2)面对较大的变化发生,感到畏惧的自己;

(3)缺少耐心,容不得不确定,浮躁的自己;

(4)人云亦云,缺乏主见,难拿主意的自己。

 

我从计划工作变更,到完成,要经历大约半年的时间,在这段时间里,没有什么人给我打气,在前半部分的时间内我也没有告诉任何人。工作一如既往的繁忙,我只能抽出有限的时间来安排自己尤其关心的事情。

 

“我现在的工作很不错,为什么要离开?”

这不是一个心血来潮的问题,也不是一个能在几个日夜内给出答案的问题。我不由自主地询问自己:我的梦想是什么?如果我觉得我还在做我热爱的事业,也许某一天我会达到梦想中的目标。如果我的工作让我燃不起热情,离我的目标渐行渐远,我就开始反思,究竟是哪里出了问题。

其实谁都没有问题,电信领域的发展如火如荼,可是我渐渐发现,互联网的故事才更引人入胜;或许管理岗位是一个最好的发展途径,可是我从来都对技术充满热情。

我觉得,也许是时候了。

 

身边的人会给你听到耳朵起茧的“忠告”,这些所谓的“忠告”包括但不限于下列:

“在中国,做技术没有前途的。”

“到家乡来吧,漂泊在外的,什么时候能够安定下来?”

“找那些抱政府大腿的企业,或者考公务员吧,那些有钱途”

“证券行业待遇丰厚,你有没有兴趣”

“你想要编码到什么时候,六十岁吗?!”

 

如果这个阶段,连自己的主意都拿不下来,下一份工作,也只能说是“忠告”选择的工作,而不是自己。

我找了一份工作,不是有前途的管理岗位、不在安定的家乡;但我可以做自己憧憬的工作了,可以在优秀的团队里共事,可以开阔我的眼界,也可以拿到不错的薪水。

 

-------------------------------------------------------------------------------------------------------------------------------

 

关于眼界

 

眼界有多远,自己才能走多远。

在求职期间,我了解到了IT各个领域的是是非非,也体验到了不同企业的工作环境、文化氛围,对自己而言,不可谓不是一种自我成长。

从传统软件到一些新兴领域,从数万人的大公司到百人以下的创业团队,我看到了许许多多奋斗着的充满智慧的伙伴们,每个地方他们的生活状态都不甚相同,IT行业是一个包容的行业。

 

-------------------------------------------------------------------------------------------------------------------------------

 

关于坚持

 

没有什么比坚持的故事更感人。

我对那些所谓的前途不前途的论断没有兴趣,做一件自己喜欢的事情,把它做到极致,通常都能得到很不错的回报。

曾经看到过这样的程序员的故事,我的一些短小的故事,实在算不得什么。

 

-------------------------------------------------------------------------------------------------------------------------------

 

做一个有心的程序员

 

譬如最近火热的密码泄漏事件,譬如风言风语中的火车票订票难的问题,很多愿意思考的程序员说出了自己的想法,甚至给出了自己的解决方案,这些都有趣 而令人回味。在中国,一个好的想法能够得到生存实属不易,这些优秀的程序员们,需要由足够厚的脸皮和足够包容的肚囊,留心生活中的是是非非,好好利用聪慧 的大脑。程序员,也便是这样成长的。


历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2012-01-12 13:02 todayx.org 阅读(1676) | 评论 (2)编辑 收藏

不知不觉,2011已经过去了,这一年中的大多时间,都花在了舆情监控系统的探索和研发上。尤其是作为舆情监控系统的基础子系统——网络爬虫系统,更是消耗了不少的时间和精力。下面简单分享一下在网络爬虫系统设计开发中的一些经验和不足。

 

首次接触爬虫,是在前年的时候,一次偶然的机会,从图书馆带回一本书中,夹带了一个网络爬虫的demo源码,当时只觉得非常敬仰那些能够写出爬虫程 序的人,认为倘若有一天自己也能写一个网络爬虫出来,该是一件多么让人兴奋的事。后来工作之后,参与的第一个项目,就是网络舆情监控系统的开发,不过当时 因为只是应届毕业生,且公司的这套产品已趋向成熟,正在推广期间,所以工作内容主要是该系统下网络爬虫子系统的配置和维护,以及爬虫日志的分析。也正是从 这里开始,真正踏上了网络爬虫的探索之路。

 

期间,我的毕业设计作品就是一个小型的搜索引擎系统,做这个东西的目的也很明确,就是为了探索网络爬虫系统在实际应用中的一些核心技术,并积累一些 经验。后来来了上海,没想到公司又是搞搜索、搞网络舆情的,所以又继续沿着之前的路走:设计开发爬虫,数据分析,和海量数据的全文检索。

 

这样的日子,不知不觉已经有一年了,在这一年里,采用不同的技术、不同的设计理念和不同的目的,主要做了三个版本的爬虫系统,最满意的要数现在这个 了。个人认为最主要的原因还是因为有了之前的经验积累和沉淀,使得在爬虫设计之初就注意到了并避开了之前爬虫遇到的各种各样的问题。现在的爬虫系统,主要 是作为一个定向数据采集和网页文本挖掘软件为网络舆情监控系统服务的,除了常规爬虫的网页采集、链接跟踪等功能外,还带有网页主题识别和价值文本抽取等稍 微有点“特色”的功能。在笔者看来,这样的网络爬虫稍显“另类”,因为它与常规的网络爬虫相比,人工依赖更多,但是数据抽取更精准,更高效。不同于公司版 本的网络爬虫是以命令行方式控制,笔者个人探索研究之用的UI版,整合了一个简单的界面,以使用户可以更方便、更直观的控制和配置爬虫。界面在设计之初, 参考了国内某著名信息采集系统的UI,所以看起来爬虫更像是一个网页数据采集系统。但事实上,舆情监控使用的爬虫跟普通的网页信息采集系统,并没有很大的 区别。以下是该系统的部分截图:

 

 

 

 

 

 

该系统目前采用的技术架构是:Quartz + HtmlUnit + HttpClient + DBCP,采用XPath来精确抽取网页文本,最低内存消耗5M,最长运行时间15天,最快抓取速度10208网页/小时,最高宽带占用38M/s
测试环境为:Windows Server2003 SP3 32位Hotspot 1536M内存 100M光纤 MySql5.1

 

其实对于网络爬虫工作模式,以及网络爬虫的模块设计,应该说很多人即便是没有做过爬虫的人,也能说出来个大概。事实上,虽然网络爬虫系统是技术密集型的软件系统,但是如果一个基础扎实的程序员要做一个像模像样的“简化版”爬虫,也不是什么十分困难的事情。

 

为什么这么说呢?笔者认为,爬虫的核心,无非就是网页获取、链接抽取、文本抽取,稍微高级一点即是权重分析、网页去重、更新策略,再高级就是人工智 能和分布式集群了。抛开人工智能和分布式,要做一个单机版的爬虫,还是很容易的:java世界中,网页获取技术可谓多如繁星,如HttpClient等, 链接抽取自然也不在话下,对于单机版的爬虫,权重分析、网页去重和更新策略可以暂时不去做,那么就剩下一个文本抽取了,过滤HTML标签就是最简单的文本 抽取(当然实际上很少有这么简单处理的),而这对HtmlParser来讲,简直是小菜一碟。

 

在笔者看来,一套完善的网络爬虫系统,应该具备以下特点:
1、良好的框架结构
2、合适的网页获取技术
3、高度优化的代码
4、易于配置和管理

 

第一点:因为爬虫系统一旦运行起来,可能好几周甚至更长时间都不会停下来,良好的框架结构可以保证爬虫在这个漫长的作战过程中尽量少的犯错误,和较低资源占用;同时,良好的框架结构也为扩展和增强爬虫的功能奠定良好的基础;
第二点:在 一年多的网络爬虫开发过程中,笔者接触了众多的网页获取技术,如Watij、JRex、JSoup再到后来的HtppClient和目前的 HtmlUnit,总的来讲,各有优劣,所谓“优劣”,主要的判断标准有同一网页的获取时间、解析时间、是否支持脚本以及对内存和CPU的占用,爬虫要面 对不同的页面类型,何时采用何种页面获取技术,以使爬虫消耗的资源和时间最少,是爬虫设计者不得不考虑的问题;据笔者了解,HttpClient应该是 Java开源爬虫中用的最多的技术,也确实应该是爬虫的首选网页获取技术;
第三点:正如第一点所说,在爬虫长时间运行过程中,如果不对代码做高度优化,那么万一出现内存泄露,对爬虫而言,将会是致命的打击;另外,经过高度优化的代码,可以使CPU占用处于低位,如此,便可保证同样的服务器硬件上,爬虫的效率、速度和稳定性都会有质的提高;
第四点:爬虫系统不是智能的,很多情况不能够自己判断并作出决定,但是为了让爬虫变得聪明,往往需要配置大量的参数来“指导”和管理爬虫工作

 

 

正是基于上述四点保证,现有爬虫才能在最低5M内存时稳定运行,才能在两周的连续运行时间内不出现任何内存泄露等问题。不过这不能掩饰爬虫的“内伤”,而这些“内伤”也正是2012所要解决的问题:
1、虽然爬虫能够精确抽取论坛主题和回帖,以及点击量和回复数,但爬虫严重依赖XPath,不能够自主识别链接重要程度,不能够自主识别网页价值数据;
2、爬虫采用插件模式,每个站点都有一个插件,以此来保证抽取数据的准确性,但是缺乏大规模全网爬取的能力;
3、不支持robots协议,像个“流氓”;
4、不支持集群;
5、采用关系型数据库,而没有使用NOSQL数据库;

 

这些内伤有的影响了爬虫的性能,有的限制了爬虫的成长,有的则使爬虫看起来像个“流氓”,所以在未来的2012上半年,需要解决这些问题。目前的打算如下:


爬虫改定向爬取为定向爬取与全网爬取共存后,爬虫需要自动跟踪链接、抽取文本,所以要用到主题识别技术、网页切片技术和网页权重分析技术;
系统应该提供一个默认的插件,来兼容绝大部分网页,但要保留现有的插件模式;
为爬虫加入robots协议的支持,使其变成“正规军”;
好的爬虫当然是要支持集群的,目前考虑采用apache的hadoop来做分布式的爬虫;
URL数据存储在关系型数据库中对爬虫性能的影响十分明显,稍后要用MongoDB来取代关系型数据库来管理URL数据

 

 

网上已有很多开源爬虫,笔者也研究过好几款,只能说良莠不齐吧,且笔者觉得大多爬虫采用的技术都比较老,而且普遍存在一个问题,就是对网页权重分析 和URL链接管理做得很不到位,或者干脆就没有做,不明白为什么。不过作为开源软件的一名贡献者,其作者的精神和勇气还是值得钦佩的,在此向所有开源事业 的先驱们致敬!

 

 

历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/

 

原创文章,转载请注明出处:http://yshjava.iteye.com/blog/1338896



posted @ 2012-01-10 22:44 todayx.org 阅读(7185) | 评论 (6)编辑 收藏

      看到本文标题,我要说些什么,想必你大概可以知道一些,——小城市(二三线的城市)IT业发展比较薄弱,有些城市可能连真正做IT(软件开 发相关)的比较大的公司都没有几家,像我现在所在的城市襄阳(原名:襄樊),就只有那屈指可数的几家公司;公司少,选择和发展的空间相对也小,——这也造 成了(留在本地的)程序员较少[刚毕业的基本上都想着到外面去闯闯,展示拳脚(我刚毕业时就是这种心态),不会选择留在本地发展,于是在本地的程序员,差 不多都是在外面工作过两年左右的时间后回来的(当然,这部分程序员大多都是不打算在外面长期发展或在外发展的不顺利等原因而返乡)]。说到'人才难招', 有的公司老板就会说:"襄阳吸引不了人 特别高素质的人",——我个人认为其实正因为这样,没有比较有实力的公司,就留不住高素质的人,这是个双向的;人才是流动的,襄樊这地方需要 有实力的公司来‘激活’!

     大环境已经是这样,(襄阳)缺少好的平台,导致留不住人和人难招的局面——不是一两个人能改变的事;从外面回到襄阳发展的苦逼程序员,也都清楚的知道这样 会有怎样的取舍——可比外面过的要舒服一些,压力比较小,至少大部分人还可以每天回家感受家的温馨等——这是在外面发展很难获得的;而你要舍去的是:比外 地(北上广等一线城市)要低很多的工资(就襄阳的情况,两三年或更长时间工作经验的程序员,工资平均也就在3k左右,这还算是比较高的工资或比较有实力的 公司能给的薪水,而相同的条件,在北京工资大概在8k左右),再加上假期休息时间都会缩水(如外地每周基本上都是双休,而襄阳基本上都只休一天,其它的国 家法定假日也会缩短一两天),更别说其它的福利待遇了...——所以,有些打算回家乡发展的程序员,在打听或了解到家乡的薪资等情况后,就打消了‘回家发 展’的念头,因为他们更多的想:我在外地辛苦打拼一两年,就抵在家乡三四年,而且发展空间等都会坚定他的想法。

    以上所说的算是以我现在的居住的城市襄阳(我毕业后在北京工作了一年,09年底回到家乡发展)的IT圈情况和个人的感受与大城市的反差,道出小城市程序员或公司发展所面临的困境;而接下来我要说的是此文的核心之一:小城市程序员的迷茫——主要从以下几点阐述:
   1.小城市的IT公司因其上面提到的:规模和实力的限制,很多公司只有7,8个人,在其招聘员工(如:程序员)时,就会在招聘要求上说明——除了 会.net等xx技术外,还需要熟悉div+css,会美工...,而从外地回来的程序员,在之前的公司基本上都是只负责做程序,别说不会美工,可能连 div+css都不怎么了解,这样即使你被公司聘用了,在之后的工作中boss可能还是对你抱着你能够一锅端——什么都会的态度,让你把做的项目的页面调 整下布局(修改下样式),你也只能是'赶鸭子上架',试着去修改,再比较不情愿的去学习之前与你毫不相干的div+css。[小城市的IT公司大多都是希 望你能独立搞定一个项目(程序和美工等),且工资也不想多给——这让不少程序员只能是忍气吞声,感觉有些迷茫:是不是应该回来发展?!]
   2.基于上面所说的:工资低,且各方面都不如外面好,当听到之前的同事或同学说他们或有人做xx技术开发,工资已涨到8、9k,或12k,更或公司分了房 子等时,你就很难不为之躁动了,想着同样的技术,why自己就甘于平凡,拿着这点儿工资,还有时忙的火急火燎的,于是就会在心里考虑,准确的说是在犹豫: 到底是应该继续留在家乡,还是再到外面去'享受'大城市的精彩?!
   3.除了工资低,同样让人迷茫的还有:似乎公司一直处在创业发展阶段,看不到公司的发展前景,就更看不到自己会有怎样的发展;再加上公司整体的工作氛围比 较低迷,缺少斗志和激情,公司也没有什么制度或福利等能刺激员工奋斗——有的更多的只是加班费和项目奖金,这在一定程度上可以提高员工的工作积极性,但就 像我现在的公司,除了公司的发展前景比较模糊,在项目开发上也让人比较难受——公司自己开发运营的同城网,底层框架和栏目频繁的改动:一方面是为了提高程 序的性能及代码的重用性,其实这也没什么,只是已经推出了10个左右的栏目(资讯、人才...),却没有一个栏目能有比较高的访问量(日均1000以 上),——(公司的的策划和boss等提出的)修改也基本上围绕着'改善用户体验性',这样说实在的让人比较郁闷,工作也很能提起兴趣;而如果是对一个已 经有比较高访问量的项目进行优化和修改,那情况会截然不同,比如:你在淘宝等大型的互联网公司工作,当看到自己辛苦开发的项目,被很多人使用(访问),那 种自豪或成就感会油然而生,对工作自然会充满激情;我认为'用户体验性'的改善建议,应该(绝大多数)来自于用户,对于web项目不必等到做的自认为尽善 尽美时才去推出(广),让用户帮你做体验测试和反馈意见,否则将可能会出现:投入太多(time and money),改来改去却并不是用户‘用起来舒服的’网站。
   4.除此之外的迷茫还有:(单身的程序员)因为有时比较空虚、无聊等,会感觉不知道该做些什么,更准确的说是:没有心情去做事,就我而言,就很讨厌这种感觉。

   说完了迷茫,再说说有哪些坚持:
   1.小城市的IT公司基本上都是一些中小型的项目,不要指望从工作项目中或某个同事身上学到多少技术,自己要坚持学习,有个大致的学习计划——比如今年计 划学习xx技术等;尽可能的利用休息时间接一些外包项目做,这样可以促使你更快的学习一些比较实用的技术,也能挣一些外快,所以相对于看教程学习,从做项目中学习要更快更实用!
   2.坚持形成自己的思考问题的方式和解决问题的能力,善于分析和总结,要知道:做再多的项目,如果不用心去think,你增加的顶多是项目经验,但你的能力却未必达到相同的高度;我们学习一个新东西,大致要经历这样的阶段:what(它是什么)→how(如何使用)→why(为什么要这么使用,深入了解),所以我们对技术的掌握应该不要只满足或停留于how的阶段,应该努力弄清楚why!
   3.坚持自己的信念或目标,对于动摇或浮躁的情况,要学会自我调节,弄清楚到底什么才是你最想要的。比如:当我面对外面的高薪工作有些犹豫时,我会告诉我自己:外面虽然很精彩,但你并不会因此而快乐,最起码没有家的温馨。

   好了,比较零散的写了一些(以我个人的感受和经历)关于小城市程序员发展的迷茫和坚持,及其小城市IT业的环境和状况,希望能引起有相似经历或正处在小城 市发展的朋友的共鸣,也希望大家能够多些交流——让苦逼的工作多一点儿快乐和谈定;一个月前就打算写这篇博客了,却拖到今天才算写完,不是没有时间,而是 不能静下心去写;写了,也算是聊以平抚下有些躁动的心。


我爱历史,历史上的今天,有趣
http://www.todayx.org
posted @ 2012-01-09 16:44 todayx.org 阅读(231) | 评论 (0)编辑 收藏

Java VS Python 生产效率 -概述
下面是3个主要的特性能够让Python程序员效率高于java程序员

Java

Python

静态类型
在java里面所有的变量名称(和他们的类型)必须被明确的定义,如果尝试去将某个对象赋予错误的类型,只会引起类型异常。这就为什么说java是静态语言。

java 集合对象(如:Vector和ArrayList)里面可以保存了通用类型对象,但是无法保存基本类型,如int等。要保存int到Vector,你必须 先要转换int到Integer(注:这里指的1.5版以前的java)。同样的,当你要从集合中取出一个对象时,已经不记得对象的类型,必须显示转换为 期望的类型。
动态类型
在Python里面,你不需要定义任何东西(注:这里主要指的还是变量)。赋值语句将对象赋给某个变量名,并且对象可以是任意类型。如果变量已经被赋予某个类型对象,之后还可以被赋予另外一个不同类型的对象。这就是为什么Python被称为动态类型。
Python的集合对象(如:lists和dictionaries)里面可以保存任意类型的对象,包括数字和lists。当你从集合中取出一个对象是,他仍然记得这个对象的类型,所以无需进行类型转换。
静态类型vs动态类型的更多信息,看这里
冗长
”大量的语句;使用过程中很多语句并不是必须的”
简洁(简练)
只需要几个简单的语句就可以表达很多。意味着清晰而简洁,无需多余的语句就能完成目标。
不紧凑
紧凑
在新的黑客字典里,Eric S. Raymond给予了“紧凑”这样的定义:
Compact adj. 在设计中,描述有价值的特性并能够被人们立马理解。

 

 

 

 

 

 

 

 

例子

 

 

“hello world!”

Java

Python

public class HelloWorld {     public static void main (String[] args)     {         System.out.println("Hello, world!");     } }
print "Hello, world!"

print("Hello, world!") # Python version 3

 

 

 

 

 

 

 

例子

下面的例子里,我们初始化integer为0,再把他转为string,最后检查他是否为空。注意,数据的声明在java里是必须的,但Python里不是。还会注意到即时只是在简单的比较两个字符串的时候,java代码还是会显得冗长。

Java

Python

int    myCounter = 0; String myString = String.valueOf(myCounter); if (myString.equals("0")) ...
myCounter = 0 myString = str(myCounter) if myString == "0": ...
// print the integers from 1 to 9 for (int i = 1; i < 10; i++) {    System.out.println(i); }
#print the integers from 1 to 9 for i in range(1,10):     print i

 

 

 

 

例子

你的应用有15个class。(准确的说是15个顶层的public class)。

Java

Python

每个顶层的public class都必须定义一个单独的文件。如果你的应用有15个class,那就有15个文件。 多个class可以被定义到单个文件中。如果你应用有15个class,只要你愿意甚至可以将整个应用都存放到一个文件中,但是更明智的情况是将这些class分散到4-6个文件中。

 

 

 

 

 

例子

在你的应用中,A方法调B方法,B调C,C调D,D调E,E调F。当你发现F必须抛出SpecialException异常,它必须被A捕获时。

Java

Python

你必须在F中throw SpecialException,然后在A中进行catch。
同时
你必须在B、C、D、E和F,每个方法上都申明”throws SpecialException”。
你必须在F中rasie SpecialException,并在A中进行catch。由于异常会自动往上升,所以你不需要做任何其他事情。

这个原因还是因为java事实上是封闭的面向对象程序语言,使用了checked exception --- 在异常出现的每个方法中,他们必须被抛出或捕获,否则连编译都无法通过。

 

 

 

 

 

 

例子

你的应用里面有个Employee class,当一个Employee的实例被创建,构造函数可能传入1个、2个或者3个参数。

如果是在java中,这意味着你必须写3个不同参数的构造函数。如果你用Python,你只用写一个带可选参数和默认值的构造函数。

Java

Python

public class Employee {     private String myEmployeeName;     private int    myTaxDeductions = 1;     private String myMaritalStatus = "single";      //--------- constructor #1 -------------     public Employee(String EmployeName)     {         this(employeeName, 1);     }      //--------- constructor #2 -------------     public Employee(String EmployeName, int taxDeductions)     {        this(employeeName, taxDeductions, "single");     }      //--------- constructor #3 -------------     public Employee(String EmployeName,            int taxDeductions,            String maritalStatus)     {        this.employeeName    = employeeName;        this.taxDeductions   = taxDeductions;        this.maritalStatus   = maritalStatus;     } ...
class Employee():      def __init__(self,         employeeName         , taxDeductions=1         , maritalStatus="single"         ):          self.employeeName    = employeeName         self.taxDeductions   = taxDeductions         self.maritalStatus   = maritalStatus ...

在Python中,一个类只包含一个构造函数。
构造方法都是用的特殊的名字:__init__

 

 

 

 

 

 

 

 

 

例子

关于紧凑(注:略去”名人名言“若干)

Java

Python

import java.io.*; ...  BufferedReader myFile =     new BufferedReader(         new FileReader(argFilename));
# open an input file myFile = open(argFilename)

 

 

 

 

 

 

 

 

 

例子

string处理能力的比较

功能

Java

Python

去掉头尾空格 s.trim() s.strip()
去掉头部空格 未提供 s.lstrip()
去掉尾部空格 未提供 s.rstrip()

 

 

 

 

 

 

 

 

例子

将int加到Vector

Java

Python

public Vector<Integer> aList = new Vector<Integer>; public int    aNumber      = 5; public int    anotherNumber;  aList.addElement(aNumber); anotherNumber = aList.getElement(0);
aList = [] aNumber = 5  aList.append(aNumber) anotherNumber = aList[0]

 

 

 

 

 

 

 

 

 

例子

Java

Python

if ( a > b ) {     a = b;     b = c; }
if  a > b :     a = b     b = c

 

 

转自:
http://xflykkk.iteye.com/blog/1337444


历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2012-01-08 16:25 todayx.org 阅读(3317) | 评论 (7)编辑 收藏

1 快速排序

介绍:

  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

  • 从数列中挑出一个元素,称为 "基准"(pivot),
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

排序效果:

详细过程:

 

 

2 归并排序

介绍:

  归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用

步骤:

  • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  • 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  • 重复步骤3直到某一指针达到序列尾
  • 将另一序列剩下的所有元素直接复制到合并序列尾

排序效果:

详细过程:

 

 

3 堆排序

介绍:

  堆积排序(Heapsort)是指利用这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

步骤:

(比较复杂,自己上网查吧)

排序效果:

详细过程:

(暂无)

4 选择排序

介绍:

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

排序效果:

详细过程:

 

 

5 冒泡排序

介绍:

  冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

排序效果:

详细过程:

 

 

6 插入排序

介绍:

  插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤:

  • 从第一个元素开始,该元素可以认为已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置中
  • 重复步骤2

排序效果:

 (暂无)

详细过程:

 

 

7 希尔排序

介绍:

  希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

  希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
  • 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

排序效果:



历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2012-01-08 16:23 todayx.org 阅读(14135) | 评论 (4)编辑 收藏

01. 自己的户口档案、养老保险、医疗保险、住房公积金一定要保管好。
由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5 个以上的单位,这期间跳来跳去,甚至是城市都换过3个。还好户口没丢掉,其他都已经是乱了,好几个城市里,都有交过三金,甚至是一个程序的2个区里交的都 有,那些东西,10年后,会变得很重要。你买房子若有公积金,可以取出来,贷款利率也会比较低一些,有孩子了,还需要上学,生病了还需要医疗保险。


特别是买房子时,你要商业贷款与公积金贷款的利率差别还是很大,有可能会有10万的差距。你平时都注意这些,会给你带来的损失会最小,例如 每个月缴纳300元的公积金,公司也缴纳300元,你一个月能存下来600元,一年就是7200元,10年就是72000元。我以前都忽视了这些,到我需 要买房子时,公积金里可能只有几千元,10年很快就过去了,结果我没能存下来多少公积金,医疗保险,养老金等更别提了,都已经稀里糊涂了,这些损失10年 累加起来,是很庞大的数字,大家要注意,跳槽换工作时也要保护好自身的利益,现在房价很贵,你可能是跟我一样,大山里出来打拼的娃子,家里也没有丰厚的积 蓄,只有靠自己拼搏,买房子是人生的一件大事,等你到了10年,才想到这个事情,已经晚了,特别是孩子要上学,上幼儿园等,需要户口啥的都要齐全。

 

 

02. 不要轻易换笔记本电脑,不要跟潮流,不要买过多的电子产品,不要过于频繁的更换手机。
这方面我的经验教训也是惨痛的。我大概前后购 买过5-6个笔记本,以前的都是1万多元一台,最近买的是一台是1万多给女朋友的,自己买了一台是7500元左右,手机大概换过接近10个了,这些钱加起 来也足够有10万以上了,你可能一不小心就购买了这些电子产品,但是时间长了,你一回过头来想想,你为什么赚得也不少,但是为什么还是那么穷,是因为你购 买这些电子产品花费了过多的金钱了,平时笔记本啥的贵重物品要保护好,我一个同事不小心丢了2台笔记本电脑,接近2万的损失啊,你净赚2万,不是那么容易 的,这个窟窿不是开玩笑的,我曾经也被人偷了一个崭新的笔记本,损失1.5万左右,更糟糕的是最新的代码也丢被偷了。

 

 

03. 这年代外语、学历、职称、驾驶证还是蛮重要的。
想找高薪,外资企业是正确的选择,在同样的打工里,外资企业的收入普遍是高的,我就想不明白,我们的赚钱能力怎么就比不过人家了,社会不断发展,将来可能去外国就像串门一样了,也说不定的,外语好将来的就业机会也会更多更广一些。
学历并不代表啥,但是学历也是敲门砖,例如有300个应聘者,那至少重点本科以下的,统统不看了,因为实在是来不及看了,你再厉害也被挡在机会的门外了,同样有时候你想改行什么的,职称也很重要,最起码评个中级职称,说不定还有机会能进入大学或者政府部门还是有可能性。


若有充裕的时间,应该把驾驶证考了,因为你越到后面越忙与工作家庭,没机会学车了也说不定的,平时也别光顾拼命工作,工作10年后你才发 现,原来身边的人都至少硕士学历了,你被社会自动淘汰了,我现在就有这个感觉,虽然我带过很多硕士,他们的就业机会比我还好,经常能进入名牌企业,我也一 直进不去。

 

 

04. 不要谈过多的女朋友,谈女朋友要看准,下手要稳准狠。
我谈过2个女朋友,平均每个女朋友身上的开支前后大概会有10万左右,还好我 不用谈第3个女朋友了,若投资失误,那也是很残忍的,谈女朋友也会消耗很多时间精力、还会消耗很多金钱,实话的讲的确是这样的,人家女孩子也值钱啊,凭什 么就那么轻易的跟你啊,我跟第一个朋友分手时,我的生活至少是倒退了3-4年,一切从零开始,一切从头开始,我劝大家谈女朋友是人生最大的一笔买卖,投资 失误会有惨痛的后果,不仅仅是金钱上的损失,更会有精神、心灵上的沉重打击,大家要学会珍惜女朋友,要学会哄好女朋友,让老婆开心每一天,虽然鱼儿上钩 了,不用再下鱼饵了,偶尔也别忘记放点米,这个鱼要是脱钩了,那不是开玩笑的。

 

 

05. 工作不要更换得太过于频繁,选好了行业方向最好别更换太频繁。
换工作,换行业方向,就像熊掰苞米一样的道理,有时候是丢了芝麻捡西瓜,有时候是丢了西瓜捡芝麻,这个道理我就不多讲了,大家都应该能明白的。

 

 

06. 要对身边的人好,要得到老板的信任、同事的认可及支持、珍惜良好的工作环境。
有个朋友的QQ名字很有意思,“只爱陌生人”,陌生人 是很有意思,但是最关键时刻,还是需要靠非陌生人,你每天跟同事一起生活,要维系好身边的人。你的成功与失败,往往是你身边的30-40个人决定的。你就 是世界首富,他身边也是那么不超过100个人的在左右着他的生活,当你工作10年了,没一个老板信任你,没几个要好的同事朋友,那你惨了,你在这个世界上 已经是很孤单了,你的收入,其实大多是来自这些身边的朋友给你介绍的生意,不大会网上掉几个馅饼的。
现在你身边的人有可能在不久的将来,给你提供很多好机会。

 

 

07. 钱很重要,但是生活质量比钱还重要,工作是很重要,但是家人比工作还重要。
钱不是万能的,但是没钱是万万不能的。钱赚了,身体夸 了,全送给医院了,钱赚了,身心疲惫了,人活着为了啥?不就为了开开心心生活嘛?工作重要,但是失去了家人的爱,失去了女朋友,失去了老婆孩子,那这个工 作有啥用了?工作很容易就换了,家人是换不了的,老婆不是想换就换的,孩子不是想换就换的,连自己的家庭都不负责的人,怎么可能对公司负责呢?我一直是这 个观念,来面试时觉得工作更重要的,我们一般不录取的,那太假了,或者太不懂事了。

 

 

08. 工作累了,也别太贪玩,有时候还是需要多想想如何才能赚钱。
时间一晃就过去了,工作累了是可以适当放松,但是别太贪玩,10年很容 易就过去了,10年后你要买房子,要娶老婆,要买车子,要生娃娃,身体也会变得脆弱一些,需要良好的生活习惯,也经不起通宵了,通宵一次,你要低迷好几天 才能缓过劲儿来,跟20刚出头完全不一样了,用钱的地方多了去了,父母也会变得更老一些,可能也需要你的照顾,整个家子都指望你赚钱,别到了这个时候,你 才意识到赚钱是那么的重要,更何况现在城市的房价,动不动就是100万,加上按揭的利息,你很可能需要支付150万。还可能需要装修,买车子。可能你身上 的压力是200万。别觉得谈钱就俗,你要学会赚钱,要有个需要赚钱的良好意识,当然你出身富裕家庭,就不用考虑这些因素了。

 

 

09. 每天一点点进步,每月一点点积累,要敬业要爱业,我们给别人提供的也是服务。
总有一天,你也会有累的时候,你也会有老的时候,这时 候,你要靠啥呢?就要靠你平时的积累,你10年的积累,可以打倒很多竞争对手,他们再厉害,再怎么样,也很难抵得过你10年的积累,特别是后面5-10年 的积累,成果会很明显,前面的1-5年,算是做软件的入门吧,除非你有高人指点,那可能2-3年就可以修成正果,软件在将来还是会值钱的,以为生活会越来 越智能化,越来越数字化,软件的需求还是很有前途,最起码未来的10-20年里不用太担心失业问题了。

 

 

10. 对程序员来讲,开发思想、架构、代码就是财富,别老丢弃你的劳动成果,要学会保护你的劳动成果。
我大概7-8年前的代码都在手上, 经常改进来改进去,维护来维护去,在一定的程度上,让我生活轻松了不少,因为我不用什么都从头来过,我只要痛苦一次,以后就要反复重复利用,软件的价值在 于重复利用,而不是每个东西,都从头开发,那永远也是辛苦的程序员,这个生活质量就别提了,不管自己的代码丑还是拿不出手,要学会精心维护,每天改进一点 点,每个月一个小进步,每年一个大进步,多年的积累是宝贵的,这个早晚也会给你带来丰厚的收益。

 

 

11. 当程序员要防止原地踏步,不是工作年限长了,经验就丰富了,能力就强了,年纪越大工作越难找。
我有一个朋友跟我开玩笑,工作5年的 人,可能能力差距会很大,为什么呢?因为第一年他们干的事情都是一样的,都写程序了,2个人可能由于价值观不一样,5年后差距会很大,甚至是大到无法追赶 的程度,为啥?因为还有机会的因素在里面,有的人干了5年,还是在原地踏步,天天只会写那些添加、删除、修改的代码。那你得注意了,需要不断的提高自己, 才是硬道理。例如你会SQLServer,那要试着学习Oracle, 你是做C/S的,那得需要提高到B/S的,你是做单机软件的,那得需要提高到网络软件,你只关注自己的工作的,需要学会管理,关心他人的工作。你是当程序 员的,要试着提高当项目经理、部门经理,公司的总监等等,人有野心有目标才会不断进步,最俗的为了多赚钱,提高工作职位工作岗位,工作单位,也是可以理解 的。


年纪越大工作越难找,例如3-4千的工作是随便找找,玩一样,但是你30过后,最起码要找月薪上1万的工作,这样的工作是机会也少,一般小 公司也给不起,还得找个好公司才可以,好公司又不是天天招聘人,天天缺好的工作岗位,说不好听点儿,小公司的老板才赚多少啊?他来钱也很不容易的,小池塘 就不好容得下大鲨鱼了。

 

 

12.当创业的收入比打工还少时,那就别创业,要找比自己能力强的人创业,你不会吃亏。
创业的收入,比打工还少,那就是瞎扯蛋,恶搞。创业的真正意思并不是要你去吃苦没钱赚,那是忽悠无知的人的。当你创业时的收入,比打工还多,那你可以考虑创业,没有工资什么的,股份啥的,都是瞎扯蛋。
不要跟自己能力还弱的人一起创业,那损失最大的,很可能就是你,要创业,也要找比自己强的人一起创业,最起码赚不到钱,还能学到不少。不会有过多的损失。别热血一沸腾就创业了,创业了,也别烧自己的钱,家人的钱,那是很不抗烧的,没几下几十万就烧干了。


其实打工,也是创业的开始,每个月都能拿到钱,还可以学到知识,什么公司的股份都是空话,没几个小公司能成功,开起来了也走不了3年就分家了,都忽悠小孩子玩的,除非真的有科技含量或者是客户资源的,否则股份是一文钱不值的,就算创业每个月也按时拿工资才是硬道理。

 

 

13. 未来的生活节奏会更快,生活压力会更大,竞争会更激烈,社会服务体系会更完善。
在未来,我们享受良好的服务的同时,也会为别人提 供更良好的服务,需要在技能上还是服务质量上的要求会更高更严格。平时要注意提高自己,不要被时代淘汰掉,我从小的朋友,一波又一波被社会无情的淘汰了, 很小的时候,我出生在大草原与大山的交界处,我小时候的玩伴,还在大山里,我跟着家人杀出来了,我小学、中学、大学、工作上的、这10年,我一直很坚强的 拼搏下来,很不容易的在杭州立住脚了,说实话,参加工作后的十年,也是不断拼搏,不断提高的十年。


转自iteye
http://syc001.iteye.com/blog/1297741

历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2011-12-11 10:42 todayx.org 阅读(2889) | 评论 (3)编辑 收藏

这些最为奇怪的程序语言的特性,来自stackoverflow.com,原贴在这里。我摘选了一些例子,的确是比较怪异,让我们一个一个来看看。

1、C语言中的数组

在C/C++中,a[10] 可以写成 10[a]

“Hello World”[i] 也可以写成 i["Hello World"] 

2、在Javascript中 

 ’5′ + 3 的结果是:’53′

 ’5′ – 3 的结果是:2              更多javascript点击这里

3、C/C++中的Trigraphs 

Cpp代码  收藏代码
  1. int main() {  
  2.     cout << "LOL??!";  
  3. }  

 上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 | ,关于Trigraphs,下面有个表格: 

??= #
??( [
??/ \
??) ]
??’ ^
??< {
??! |
??> }
??- ~

4、JavaScript 的条件表 

看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了

Js代码  收藏代码
  1. ''        ==   '0'          //false  
  2. 0         ==   ''           //true  
  3. 0         ==   '0'          //true  
  4. false     ==   'false'      //false  
  5. false     ==   '0'          //true  
  6. false     ==   undefined    //false  
  7. false     ==   null         //false  
  8. null      ==   undefined    //true  
  9. " \t\r\n" ==   0            //true  

 

5、Java的Integer cache

Java代码  收藏代码
  1. Integer foo = 1000;  
  2. Integer bar = 1000;  
  3.   
  4. foo <= bar; // true  
  5. foo >= bar; // true  
  6. foo == bar; // false  
  7.   
  8. //然后,如果你的 foo 和 bar 的值在 127 和 -128 之间(包括)  
  9. //那么,其行为则改变了:  
  10.   
  11. Integer foo = 42;  
  12. Integer bar = 42;  
  13.   
  14. foo <= bar; // true  
  15. foo >= bar; // true  
  16. foo == bar; // true  

为什么会这样呢?你需要了解一下Java Interger Cache,下面是相关的程序,注意其中的注释

Java代码  收藏代码
  1. /** 
  2.  
  3.      * Returns a <tt>Integer</tt> instance representing the specified 
  4.  
  5.      * <tt>int</tt> value. 
  6.  
  7.      * If a new <tt>Integer</tt> instance is not required, this method 
  8.  
  9.      * should generally be used in preference to the constructor 
  10.      * <a href="mailto:{@link">{@link</a> #Integer(int)}, as this method is likely to yield 
  11.      * significantly better space and time performance by caching 
  12.      * frequently requested values. 
  13.      * 
  14.      * @param  i an <code>int</code> value. 
  15.      * @return a <tt>Integer</tt> instance representing <tt>i</tt>. 
  16.      * @since  1.5 
  17.      */  
  18.     public static Integer valueOf(int i) {  
  19.         if(i >= -128 && i <= IntegerCache.high)  
  20.             return IntegerCache.cache[i + 128];  
  21.         else  
  22.             return new Integer(i);  
  23.     }  

5、Perl的那些奇怪的变量

Php代码  收藏代码
  1. $.  
  2. $_  
  3. $_#  
  4. $$  
  5. $[  
  6. @_  

 其所有的这些怪异的变量请参看:http://www.kichwa.com/quik_ref/spec_variables.html

 

6、Java的异常返回

请看下面这段程序,你觉得其返回true还是false?

Java代码  收藏代码
  1. try {  
  2.     return true;  
  3. finally {  
  4.     return false;  
  5. }  

 在 javascript 和python下,其行为和Java的是一样的。 

7、C语言中的Duff device

下面的这段程序你能看得懂吗?这就是所谓的Duff Device,相当的怪异。

C代码  收藏代码
  1. void duff_memcpy( char* to, char* from, size_t count ) {  
  2.     size_t n = (count+7)/8;  
  3.     switch( count%8 ) {  
  4.     case 0: do{ *to++ = *from++;  
  5.     case 7:     *to++ = *from++;  
  6.     case 6:     *to++ = *from++;  
  7.     case 5:     *to++ = *from++;  
  8.     case 4:     *to++ = *from++;  
  9.     case 3:     *to++ = *from++;  
  10.     case 2:     *to++ = *from++;  
  11.     case 1:     *to++ = *from++;  
  12.             }while(--n>0);  
  13.     }  
  14. }   

8、PHP中的字符串当函数用

PHP中的某些用法也是很怪异的

Php代码  收藏代码
  1. $x = "foo";  
  2. function foo(){ echo "wtf"; }  
  3. $x();  

9、在C++中,你可以使用空指针调用静态函数

Cpp代码  收藏代码
  1. class Foo {  
  2.   public:  
  3.     static void bar() {  
  4.       std::cout << "bar()" << std::endl;  
  5.     }  
  6. };  

呵呵。的确是挺怪异的。

转自iteye
http://justjavac.iteye.com/blog/1297756

历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted @ 2011-12-08 19:23 todayx.org 阅读(1923) | 评论 (6)编辑 收藏
仅列出标题
共4页: 上一页 1 2 3 4