luohg666/
共73个网摘 [
1 2 3 ]
下一页 |
访问luohg666的个人空间
luohg666收录,使用标签:google,时间:2008-7-4 10:21:24 | 相关网摘,我也收藏
Google背后的分布式计算架构策略
Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型),更在于其有别常规的IT策略……
加利福尼亚州山景城(Mountain View)Google公司(Google,下称Google)总部有一个43号大楼,该建筑的中央大屏幕上显示着一个与Google地球(Google Earth)相仿的世界地图,一个转动的地球上不停地闪动着五颜六色的光点,恍如罗马宫廷的千万烛灯,每一次闪动标志着地球的这个角落一名Google用 户发起了一次新的搜索。
这同时意味着Google又一次满足了人们对未知信息的好奇与渴望。
Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型),更在于其有别常规的IT策略。从人们的常理来看,简单的硬件商品和免费软件是无法构建出一个帝国的,但是Google做到 了。在性能调整后,Google把它们变成一个无可比拟的分布式计算平台,该平台能够支持大规模的搜索和不断涌现的新兴应用。我们原本认为这些应用都是个 人消费级别的,但是Google改变了这一切。现在商业世界也在使用它们,这就令这家搜索公司显得那么与众不同。
GoogleWeb 服务背后的IT架构对无数使用搜索引擎的用户来说也许并不是非常重要,但它是Google几百位致力于把全球信息组织起来,实现“随处可达,随时可用”目 标的工程师们的最核心工作。这就需要一个在覆盖范围和野心上都与Google的商业愿景完全相符的IT蓝图作为支撑。
Google 的经理们一直对公司的IT策略话题保持沉默,他们厌恶谈及特定的厂商或者产品,当被问到他们的服务器和数据中心时,他们总是闭口不谈。但与几位 Google的IT领导一起呆了一天后,我们最终得以揭示该公司的IT是如何运作的,那可不仅仅是一个运行在无数服务器集群上的、表面看来非常简单的搜索 引擎。在其简单的外表下,蕴涵着许多内部研发软件、定制硬件、人工智能,以及对性能的执着追求和打破常规的人力管理模式。
IT理念方面,Google对同行有一条建议:尽量避免那些人人都在使用的系统和软件,以自己的方式做事会更有独特的竞争优势。
“企业文化决定了你的做事方式。”道格拉斯"美林(Douglas Merrill),这位Google工程副总裁和事实上的首席信息官(CIO) 指出,“到了我们这样的发展阶段,企业观念和文化非常与众不同,这也反过来鞭策我们必须要采用与众不同的方式来运行那些他人看来很常规的系统。”
Google 最大的IT优势在于它能建造出既富于性价比(并非廉价)又能承受极高负载的高性能系统。因此IT顾问史蒂芬"阿诺德(Stephen Arnold)指出,Google与竞争对手,如亚马逊网站(Amazon)、电子港湾公司(eBay)、微软公司(Microsoft,下称微软)和雅 虎公司 (Yahoo,下称雅虎)等公司相比,具有更大的成本优势。Google程序员的效率比其他Web公司同行们高出50%~100%,原因是Google已 经开发出了一整套专用于支持大规模并行系统编程的定制软件库。据他估算,其他竞争公司可能要花上四倍的时间才能获得同等的效果。
.............
http://bigweb.group.javaeye.com/group/topic/5749
luohg666收录,使用标签:Java,时间:2008-6-20 13:07:06 | 相关网摘,我也收藏
接到ZTE的面试通知是我始料未及的,之前也说过,题做得贼烂。没想到通知我去了。我的是5:00开始,杀到那4:40,没想到连4:00的都没面完,人叫做一个多字。等到5:40总算该我了。进去后两个面试官就开始翻简历,都问简历上的内容,没啥新鲜感,问到我在项目中做的一个改进,我开始吧唧吧唧的说,发现他们很认真在听,不过似乎没听懂,估计他们都是搞底层的吧。最后问有没有其他公司的Offer,说拿到HP的。我问了个问题,说公司准备招多少人,是不是以硬件居多。他们回答只要有能力都要,硬件的缺口最大。出来想肯定能进下一轮了,没想到最后莫名其妙的挂了,虽说没想通,但还是有点门道:一般大公司知道你有offer只会去把你竞争过来,但像ZTE这样的公司,大概自叹给的工资不如HP吧,所以直接不给下次面试的机会;另一个原因也是我做上层居多,估计不对口吧,总之,大家都互相BS。说起ZTE,就会想到和华为的争斗,非常搞笑。当初华为在科大宣讲的时间是11月5号左右,中兴决定提前10天来,口号是:宁可错招三千,绝不放过一个。华为来了之后发现很多人都已经有中兴的offer了,于是想出一招更毒的:只要拿到中兴offer的都可以免笔试和第一轮面试,并且工资加1K。晕倒。中兴一看又想出一招:当初签的三方只有在明年4月才能退回,因为那时许多公司都招聘结束了。两家明争暗斗特别有趣。成为茶余饭后的笑料。
之后就是海笔,主要是笔了两家:亚微电子和锐捷网络。亚微电子是刚好那天没事干,就跟同学说去见识下题,没想到真的见识到了,第一部分,高数,看见题目就一阵眩晕;第二部分,智力题,再晕;第三部分,C++,我想直接站起来走了……看看人家那么热情的给我拿试卷,又觉得不好意思,于是写C++,都拿不准,想想不如写高数,于是做了几题高数,没想到N年没做,求导求积分到是一点不含糊;再做了个智力题交卷走人,没报希望,果然也没通知。锐捷网络到还比较大,在福州,也是跟同学去霸王笔,黑板上写了有三套题:嵌入式,C++,java,没看见,结果稀里糊涂做了嵌入式的题,出来后被同学嘲笑了。不过题目还是有点深度的,印象比较深的有两题,一题无论在何种环境下都要赋给unsigned long l最大值;另一题编个函数模拟malloc,似乎以前见过,不过当天做的还是模糊,唉,好久没搞c了。
稍微正式点的是瞬联软件,瞬联是做外包的,给的工资很高,老早就查过。投了简历后特意通知我去听宣讲,宣讲何必通知,又没笔试,后来估计是自己的简历让对方产生了兴趣。最有竞争力的是它的福利,太人性化了,想到的都有了……宣讲时听着企业文化,第一条就是诚信,举了很多例子,突然觉得心就靠过去了,因为诚信,后面说的每句话都相当可靠,直到放出希望工程的捐赠图,觉得这个公司真的很善待员工。虽然是外包,但是都派到MOTO,朗讯,北电这样的大公司,接触的都是核心。第一个从企业文化上让我折服的公司……又投了纸质简历,知道一定会有我的面试机会,果然,还没到家呢,电话就响了。第二天早9点30的笔试和面试,带本科和研究生成绩单,带简历,开始做了份题,果然不简单,都是java相当基础相当细的东西,很多东西都不是平时能见到的,后来发现我也错了好几题,印象比较深的有一题问sleep和wait的区别,《多线程设计模式》讲过;还有题public String aaa(){ return stringArray[index++]}//其中stringArray和index已经在别处定义过,问这个函数会不会发生内存泄漏,记得在《effective java》上看过,是会发生内存泄漏,但具体如何却想不起了,只怪自己学艺不精。笔试完直接面试,一个GG,一个MM,一进去先是英文自我介绍,之后介绍一个项目,乱七八糟蹦出来的word,发现大家还是勉强可以交流的,因为面试官的英文更难听。面试主要集中在项目上,半小时很快就完了,没搞懂这么快就能要一个人了?结果1星期后收到Offer,赞一个,高效率。
然后是群硕的笔试。老早就摩拳擦掌的准备要去了,不是因为想进去,而是半年前这个公司直接将我的简历拒掉了,这次是报仇的好机会,决定好好做题上去BS它一把。第一份题是计算,数列之类的,又是考智商的,那些出题的人智商才有问题,20分钟,没做完,心想挂了。第二份题是编程,第一题取得链表中倒数第m个元素的值,《程序员面试攻略》上的原题,无语,几分钟搞定,第二题如何最快判断一个数是不是2的n次方,我想的方法是移位,当且仅当出现一个1判为是,不过思路错了,回去同学说起才发现。第三题又是测试。第四题问面向对象的open-close原则,举出相应例子,刷刷刷把设计模式和设计原则写上去,收工。下来后感觉第一份没做好,编程第二题也错了,顿觉得失望,没想到BS它的机会都没有。没想到过了几天通知面试了。说实话,群硕面试是我最爽的一次。先是英文自我介绍,有了早上的经历,下午说得是相当溜,又英文介绍项目,仍然被我命中,照溜。接着问我一个项目的业务逻辑,又被我准备过,仍然很溜。然后就是问ConcurrentHashMap的一些实现比Hashtable有哪些好处,撞到我枪口上了,当年读了ConcurrentHashMap的源码可不是白读的,解释一遍源码机制,那人有点茫然,连连点头;又问设计模式中的Facade模式,再晕,将bang的facade经典用法解释一遍,那人又点头;完了又问decorator模式,将java IO类中的decorator用法解释一遍,那人非常满意,开始跟我聊家常,心里窃喜,知道过了……果然,让我等HR面下一轮,HR问的问题都是我深有体会的,每个问题都举个例子说明,比如遇到的挫折,对我的影响,比如自己的优点,最后问我期望月薪,答8k,问怎么定位的,我说什么怎么定位,她问为什么要这个价位的薪资,答HP给了6.5*14,自己算去。面完出来一阵快感,终于达成梦想。一周后收到Offer,打开一看写了6k*13,还要签三年,还来句这是北京上海的薪资,如果不在北京上海,会适当调整,无论如何,都会给竞争力的薪资,差点一把撕掉,群硕的工作强度早有耳闻,不比别的公司高反而还降工资,完全是小公司的作为。看来还是它再次BS了我……
接下来又收到IBM的面试通知。当天正在听AT科尔尼的宣讲,看看那些商务人士,做的事情往往可以影响整个公司乃至国家,觉得这样的工作真有成就感,无奈,英语水平不到家。IBM面试通知是比较意外的,用纸记了半天时间地点,心想:妈的,这也能过,IBM也真够搞笑的了。一周后才开始面试,面试当天跑到古井假日酒店,又是5星,豪华得刺眼,突然发现当时记的时间地址里只有酒店名,没有房间号,狂汗!赶紧跟前台说,前台查了半天说有很多IBM的房间,不知道是谁?晕,赶紧跑出去打个电话给IBM总部,妈的还没开始上班。迟到了,疯了。还不放弃,跑回酒店问一个前台MM,让她随便给我一个IBM的房间,丫的直接拒绝,理由是不能将客人的信息随便透露,又去打电话……就这样来回跑了几次……最后幸亏酒店一个服务生帮我问到了,对这次面试完全失望。上去发现我是第一个到了,因为别人也没得到房间号通知。面试开始,是一个很有礼貌的GG,看他那台超小的IBM笔记本就知道是项目经理级别。照例是自我介绍,出乎我意料的是没有用英文,完了,之后不知道会有什么英文提问。提问不多,但是都很一针见血。比如见到我的项目经验有struts,问我struts在使用过程中有什么优缺点。想起来一个优点,但看他那么厉害就知道不能乱忽悠了,直接说了sorry。面试中突然问我个用英文回答的问题:为什么希望进IBM?虽然是常规得不能再常规的题型了。但我的英文回答仍然是结结巴巴,答完我自己就笑了。最后还问了个问题:你认为我们有什么理由要你,对于这种很tough的问题,还是得小心翼翼。实际上就是问自己的优点,我回答优点时每条都加上一个例子证明,结果面试官说让他很impressive,心想,也许有下一面了吧。
本文出自:http://blog.sina.com.cn/s/blog_58adc9e701000bx1.html
http://blog.csdn.net/hzbooks/archive/2008/06/15/2551235.aspx
luohg666收录,使用标签:Java,时间:2008-6-20 13:03:45 | 相关网摘,我也收藏
昨天玩h2的时候想起来的, 这年头把在线应用报装成桌面应用是越来越流行了,几年前做过类似的事情,简单介绍一下。
1. 选择一个嵌入的web 服务器和 数据库。
web服务器我选择的是jetty,虽然tomcat也有类似的嵌入版本,但是体积和性能都还是有点差距。 如果你的应用使用了大量的ajax效果,建议选择6的版本,对并发支持更好。
数据库方面我原来用的是hsql,现在可以选择h2. 两者的sql 兼容性都比较好,扩展功能也比较强。如果原来的应用在mysql上进行开发,则基本不用做修改, h2现在有mysql兼容模式,如果原来应用使用的是db2或者oracle,则你可能需要把一些函数和过程改用java实现,h2提供了这方面的支持。 数据问题方面也不用担心,h2目前比较成熟了,而且最大可以提供256g的文件支持。我做过一些测试,关机,死机,都还可以恢复的比较好。
h2的一个特性是支持只读数据库,所以你也可以选择将数据库备份成zip文件以后,以光盘的方式发布应用,很适合做大量分发的演示光盘,比较酷吧。
jetty+h2的组合占用系统资源非常少,而且速度极快, 在我成功移植以后,我的一个同事吃惊的发现速度要比原来的online版本提高了很多。一般用户几乎感觉不到在线操作的那种停顿。
java6自带的那个java数据库就不要考虑了,速度慢,体积大,兼容问题多多。
2. 使用JDIC或者java6提供的一些native特性和桌面进行整合
主要使用诸如系统托盘来提供一些控制操作和辅助功能, 打开浏览器或者将浏览器嵌入到swing应用等等。我的做法是将浏览器嵌入到swing应用中,并做了一些小手脚,保证用户不能使用浏览器直接访问,这样看起来更安全,更象桌面应用。
java6在这些方面有比较好的支持,6以前的版本可以使用JDIC,反正都是一回事。 另外可以选择jgoodie之类的扩展包,让你的桌面看起来更骚包一些。
当然,使用6的话启动要快一些,特别是重复启动的时候,java6还有的一个特性是splash的支持, 这样在启动的时候可以自然一些。
3. 对配置文件进行适当精简,使用混淆工具编译关键包
发布到桌面以后就意味着受攻击指数增加了,增加适当的防范也是必要的,此处如果不怕麻烦,可以使用gcj来编译。
4. 将执行包编译成exe文件, 使用安装工具打包
把java启动类编译成可执行文件的工具很多,我经过比较,使用的是launch4j,主要是支持的特性多一些,对linux也提供支持。
然后再把jre和应用整理规划好目录,使用安装工具打包, 我选择的是nsis, 也是免费的东西, nisi如果不想深入研究的话,建议找supertoy开发的一个脚本生成向导工具,很好用。
5. 其他
* 需要考虑数据的备份和交换操作, 我一般使用dbunit来干这个事, 因为导出导入都可以是完整的xml文件,比较方便。
* 如果要制作光盘版本,再配置一个auto run 就可以自动启动了。
* 要防止应用多次启动, 实现思路有2种,一个是使用一个端口来检测, 另外一个就是使用文件锁。 我使用的是后者,盗用了hsql的部分代码。
基本思路很简单,工作量也不大, 呵呵,反正当初用户是看不出来这是java 做得,还误以为我们是用delphi之类重新开发的。
http://www.blogjava.net/ghostdog/archive/2008/06/19/209049.html
luohg666收录,使用标签:java, Velocity,时间:2008-6-10 9:52:34 | 相关网摘,我也收藏
在SSH项目中,我们应用了service layer模式,所以针对一个模块,它就存在pojo、dao、daoImpl、service、serviceImpl,再到struts中的action、form。假设设计是面向数据库的,针对一个数据库表,那么就要产生7个java文件,如果还要做异常处理,那么就是8个java文件。如果数据库有50个表,那么就是50*8=400个java文件。工程不小。
至于为什么要用service layer模式,论坛上已有讨论http://www.javaeye.com/topic/29867
然而我们都知道,web中出现最多的操作是CURD,这400个java文件中有多少代码是重复的?几乎占了80%甚至更多。编写这样重复的代码是很枯燥无味的,而且如果是由不同人负责不同的模块的分工方式,程序员编码的风格是各不相同(虽然可能有规范约束,但是最后出来的东西还是避免不了的带有程序员个人风格的)。
所以为了节省时间和精力,便做一个程序来生成程序。
只要配置好你的项目名,你的模块名,模块路径,就可以在几秒之内完成一个模块的CURD代码,同时你可以自定义模板。
....................
http://www.javaeye.com/topic/30893
luohg666收录,使用标签:Java,时间:2008-6-7 18:49:05 | 相关网摘,我也收藏
有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。
如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:
Cookie cookie = new Cookie("user", user);
cookie.setMaxAge(365 * 24 * 3600);
cookie.setPath("/");
response.addCookie(cookie);
当用户再次访问程序时,服务端程序应该检测这个Cookie是否存在,代码如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
// 如果user Cookie存在,进行处理
break;
}
}
尽管从客户端可以获得User Cookie,但这上Cookie可能存在很长时间,而且仅凭这个Cookie就自动登录并不安全,因此,可以在服务端使用一个Session来管理用户。也就是当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session顺。代码如下:
HttpSession session =request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
当再次访问程序时,确定了cookie存在后,就会继续验证User Session的存在,代码如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
if(session.getAttribute(user) != null)
{
// 直接forward到主界面
break;
}
else
{
// forward到登录界面
}
}
}
虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于Servlet用于保存Session ID的JSESSIONID Cookie是临时的(也就是说不是持久Cookie,当浏览器关闭后,这个Cookie就会被删除),因此,需要将JSESSIONID进行持久化。代码如下:
HttpSession session = request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(2 * 3600); // 客户端的JSESSIONID也保存两小时
session.setMaxInactiveInterval(interval)
cookie.setPath("/");
response.addCookie(cookie);
如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,因此,并没有任何影响。如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie,如下面的两个Cookie,最后一个将覆盖前一个:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web
由于下面两个Cookie的path不同,因此,它们是完全不同的两个Cookie:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2
谁有其他的方法实现自动登录,请跟贴!
http://www.blogjava.net/nokiaguy/archive/2008/06/05/206030.html
共73个网摘 [
1 2 3 ]
下一页