??xml version="1.0" encoding="utf-8" standalone="yes"?>
q次q着休息?/span>3天,重新装好EclipseQ配|好环境Q试用了一?/span>GAEQ感觉还是很好玩的。还没有惛_要做一个怎样的服务,先试着装一下。尤其是~存Q想了一个办法提供动态的失效期,而不是在~存创徏的时候定义?/span>
法很简单,在本地测试了一下也没有问题。可是部|到服务器就出问题,~存无视定义的失效期Q每ơ都命中。想了一下,觉得应该是失效期单地使用了静态变量。在本地没有问题Q因为我只有一?/span>JVM。而服务器应该是一个分布式的环境,x多个JVM。同一个类的对象也怼在多?/span>JVM环境中被创徏与初始化。静态变量也失M用了?/span>
写了一个小例子Q可以看到在刚开始静态变量是起作用的?/span>1分钟后,另一?/span>Servlet对象在另一?/span>JVM中被创徏且初始化?br />
最后把失效期也攑օ~存p决问题了。缓存应该可以被认ؓ是在整个分布式服务中Q唯一可以被共享的数据区域吧。另外,ServletW一ơ被创徏会耗费不少CPU旉Q需要考虑用缓存优化一下?/span>
]]>
在第一ơ飞法国的飞Z想q,l于可以不用Z~码而困C。工作后Q公司的目都是英、法、d三种语言Q没有超?/span>Latin1字符集。默认的工作环境也是ISO-8859-1~码集。一q多以来Q倒也是相安无事?/span>
最q,开始了一个新目。不很大的工作量,也没有什么陌生的技术,一开始进展很是顺利。但是在实际试时发C问题Q就是表单数据的字符~码。这个项目有两个版本Q罗马尼亚语和土耛_语。这两种语言都超了西欧Latin1字符集,却又分属?/span>ISO-8859-2?/span>ISO-8859-9两个不同的编码集?/span>
其实完全可以全部?/span>UTF-8~码了事。但是公司的Tomcat?/span>MySQL全局环境都显式配|ؓISO-8859-1Q而且在庞大的底层E序中有好几处都编码成Latin1。更改全局配置是不可能的,也不惛_极大的风险来修改底层cR?/span>
最后完全迷׃~码转换?#8230;…很神奇的是没有ؕ码出现?/span>Latin1以外的字W被转换?/span>HTML格式~码了。所以就用了很恶心的ҎQ把d的表单数据从8859-1d转换?/span>UTF-8Q?/span>HTML <-> UTF是很Ҏ的)后再转成8859-2/9昄Q由于客hl端不支?/span>UTF-8ҎQ不能直接用输出UnicodeQ。尽?/span>8859-1~码集不支持Latin1字符集以外的字符Q但是这层{换的内部处理q是通过UnicodeQ不存在信息丢失问题。说白了是UTF-8 -> ISO?/span>
不过数据库中的数据却始终无法正常存储。数据永q以qdQ而且无法转换。奇怪的是,如果把控制台~码换成8859-2/9的话Q可以在数据库中看到正确的数据。但是运?/span>
得到的结果却是错误的。获得的十六q制~码是信息经q?/span>8859-1~码后的Unicode倹{这个问题涉及到pȝ底层c,数据库配|等多个斚w?/span>Rene甚至不知道在数据库中贮存的到底是什么?br />
最后的理解是这LQ底层接口类把数据{换成8859-1~码存入数据库,同样也以8859-1d?/span>SQLh以字节流q回Q这也说明了在控制台下可以用8859-2/9~码看到正确l果。但是中间结果由于全局配置的关p,被编码成8859-1Q所以显C的Unicodeg寏V在E序中,׃数据取出后被强制转换?/span>8859-1~码Q所以造成了信息丢失。就再也找不?/span>Latin1以外的字W了?/span>
最l的解决ҎQ让Rene恶心到可以从Montparnasse上蟩下来。由于数据在存入数据库前是正的Q其实在存入时也是正的。所以打在存入前,把信息{成十六进制编码。理Z应该是可行的Q就是会很难看,非常非常隄?/span>
其次Q快乐来自于开发对其他人有用的东西。内心深处,我们期望其他Z用我们的力_成果Qƈ能对他们有所帮助。从q个斚wQ这同小孩用_土?/span>
?/span>
爸爸办公?/span>
?/span>
捏制铅笔盒没有本质的区别?/span>
W三是整个过E体现出术般的力量
—?/span>
相互啮合的雉件组装在一P看到它们_֦地运行,得到预先所希望的结果。比起弹珠游戏或点唱机所h的迷人魅力,E序化的计算机毫不逊色?/span>
W四是学习的乐趣Q来自于q项工作的非重复Ҏ。h们所面的问题,在某个或其它斚wL些不同。因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理Z的,或者兼而有之?/span>
最后,乐趣q来自于工作在如此易于驾驭的介质上。程序员Q就像诗ZP几乎仅仅工作在单U的思考中。程序员凭空地运用自q惌Q来建造自q ?/span> 城堡 ?/span> 。很有q样的介?/span> —?/span> 创造的方式如此得灵z,如此得易于精炼和重徏Q如此得Ҏ实现概念上的设想?/span>
然而程序毕竟同诗歌不同Q它是实实在在的东西Q可以移动和q行Q能独立产生可见的输出;能打印结果,l制囑ŞQ发出声韻IUd支架。神话和传说中的术在我们的时代已变成了现实。在键盘上键入正的咒语Q屏q会zd、变q,昄出前所未有的或是已l存在的事物?/span>
首先Q必追求完。因机也是以同L方式来变戏法Q如果咒语中的一个字W、一个停,没有与正的形式一_术׃会出现。(现实中,很少的hcL动要求完,所以hcd它本来就不习惯。)实际上,我认为学习编E的最困难部分Q是做事的方式往q求完美的方向调整?/span>
其次Q是׃人来讑֮目标Q供l资源,提供信息。编Eh员很能控制工作环境和工作目标。用理的术语来_个h的权威和他所承担的责L不相配的。不q,g在所有的领域中,对要完成的工作,很少能提供与责Q怸致的正式权威。而现实情况中Q实际(相对于正式)的权威来自于每次d的完成?/span>
对于E序员而言Q对其他人的依赖是一仉常痛苦的事情。他依靠其他人的E序Q而往往q些E序设计得ƈ不合理,实现拙劣Q发布不完整Q没有源代码或测试用例)Q或者文档记录得很糟。所以,E序员不得不p旉ȝI和修改Q而它们在理想情况下本应该是可靠完整的?/span>
下一个烦?/span>
—?/span>
概念性设计是有趣的,但寻扄的
bug
却只是一w复性的zd。伴随着创造性活动的Q往往是枯燥沉L旉和艰苦的力_。程序编制工作也不例外?/span>
最后一个苦|有时也是一U无?/span>
—?/span>
当投入了大量辛苦的劳动,产品在即完成或者终于完成的时候,却已昑־陈旧q时。可能是同事和竞争对手已在追逐新的、更好的构思;也许替代Ҏ不仅仅是在构思,而且已经在安排了?/span>
最初接?/SPAN>Bolandq是5q前的事了,那个时候用Borland?/SPAN>Pascal~译器学习编E技术的基础。后来的C/C++用的都是Borland的品。所以说Rene对于~译器的选择上已l有一U?/SPAN>Borland情节Q我的开发生zM已经怹性地打上?/SPAN>Borland的烙印。我惻I学了6q的MFC始终没有学会Q至今对?/SPAN>VC一直存在着的那U厌恶感应该也来源于此。说?/SPAN>C/C++的开发,Rene宁愿使用C++3.0q种老土得掉渣的开发工P呵呵。或者用BCQ喜?/SPAN>BC的那U开发风根{?/SPAN>
管现在使用Java作ؓ最主要的开放语a?/SPAN>IDE也从Borland的开发线产品专向?/SPAN>IDEAQ但是不得不承认Q?/SPAN>Jbuilder对于Java开发是一个极好的产品?/SPAN>Rene之所以不使用Jbuilder是由于它q于庞大了,或者说是过于强大了。当Ӟ有些时候还是要用到Jbuilder的,比如?/SPAN>GUI的设计或者是对于产品最后封装的时候?/SPAN>
但这三个E序都有一些问题,而且是大问题Q甚臛_以说Q我写的代码Ҏ没有用。先说说CQ这个东西单单运行功能都没有什么差错,管功能没有全部实现。但是这是一?/SPAN>Binome的项目,两个人做。所以就有问题了Q很早就问女王要另一个h的程序,我要看他的结构定义。但是传说中的程序迟q没有到来,因此决定单qӀ这里面q沟通,一切数据定义?/SPAN>API全部是自q。现在,那个Binome的程序来了,发现自己做了很多重复的功能,而且最大的问题是整合不能。两个对于基本数据结构定义截然不同的E序怎么可能协同工作呢?不过我的E序本nq是比较完善的,应该可以单单拿我的程序去应付一下吧Q具体怎样Q?/SPAN>Rene也不知道?/SPAN>
至于法Q呵呵,直是W话Q天大的W话。我拿到的是一个大目中的一部分,但还是老问题,基本l构定义q迟不来。一个大目Q对于图的算法,囄构定义总要l一吧,但是我就是没看到Q前天算是看CQ。那好,自己定义Q到整合时又是问题,不过q好Q这个图定义是从文g中读取的Q我在那两个算法中再读了一遍定义,按自ql构存放。这L法是对了Q但是输出又成问题?/SPAN>API定义是他人的Q但是我不知道,l果q要修改。不知道人家改得怎样?/SPAN>
Floyd是太没面子了,耍酷Q玩指针Q结果在VC~译下都好的E序Q拿?/SPAN>GCC下面一~译、运行。算法根本不对!Q估计是intcd的字长在VC?/SPAN>GCC下面的定义不一致引LQ但x也不对啊Q这个问题尚未解冻I有待研究?/SPAN>
三个E序Q三ơ失败。这个确实可以作Z个失败的案例了。首先是组成员之间的沟通不良,造成了重复劳动和API、基本数据结构定义的不一致。其ơ就是小l中应该使用l一的编译环境。第三就是要把整合期提前Q不能到最后再L合、联调。第三点可以和第一点合qӞ其实q也是沟通的问题?/SPAN>
现在开始怀?/SPAN>JavaQ怀?/SPAN>Vincent。怀?/SPAN>Java?/SPAN>Write once, run everywhere自不必说。至?/SPAN>VincentQ貌似我们的合作L比较成功的。但仔细xQ以前的那些个合作项目,其实q是一个h在具体实现。要么一个h专注新技术研IӞ另一个做实现。要么两个h做不同的模块Q但q两个模块都没有什么耦合性,所以沟通不良的问题管有,但不明显。以前喜Ƣ把组d单干Q应该也是这个原因。毕竟要定义出整个小l都能接受且易用?/SPAN>API和数据结构是需要功力的。功力不够啊Q!D念~~
记得以前说过Q程序一直不写会手生的。这是Rene至今仍旧保持着?/SPAN>ACM?/SPAN>TopCoder的缘由。即使不做项目,仍旧能够保持对于Coding的一U模式记忆以及类库用的熟练E度。没惛_如今新问题来了?/SPAN>
前几天,女王让我帮她做一?/SPAN>C?/SPAN>Project。这个项目乍看之下不难,是做一个函数计器。尽要用到一些诸如变量寄存、词法分析的技术,但如果有合适的cd支持的话Qƈ不能难Q就随口说了?/SPAN>C’est facile~~但是q个是出?/SPAN>Java的思考逻辑?/SPAN>C语言没有那么丰富的类库,即有对于熟?/SPAN>Java~码风格?/SPAN>Rene来讲Q用v来学习曲U也是很陡峭的。如今没有了JavacdQ就如同?/SPAN>C++没有STL一PU?/SPAN>CQ?/SPAN>OhQ?/SPAN>Mon DieuQ什么都要自己来Q所有的Q包括数据结构…?/SPAN>
本来像变量寄存之cȝQ弄?/SPAN>HashMap以解决问题的。可是如何构造哈希表呢?其?/SPAN>Hash函数Q不?/SPAN>Java中的“一切皆对象”,每个对象都有一?/SPAN>Hash码。刚才写了一个框Ӟ发现q?/SPAN>C的语法、格式都有些生疏了。把谭浩强的书翻出来看了Q幸亏这本书q在 JQ。至于哈希,看了法DQ没什么启发。难道真的要用性能极差的线性表吗?