于吉吉的技术博客

建造高性能门户网

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  65 随笔 :: 6 文章 :: 149 评论 :: 0 Trackbacks

web开发

posted @ 2012-03-19 16:33 陈于喆 阅读(4357) | 评论 (3)  编辑

     摘要: 其实为什么javascript的定时器会出现所谓的不可靠或偏差的情况,这是可以理解的,最主要的问题是它们并不是所谓的线程,其实
javascript是运行于单线程的环境中,而定时器只是计划代码在未来某个执行的时间,执行的时间点是不能被保证的,因为在页面的生命周期中,不同时间可能存在其他代码,或各个浏览器的内核控制住javascript进程。  阅读全文
posted @ 2012-01-10 15:15 陈于喆 阅读(3519) | 评论 (6)  编辑

posted @ 2011-12-06 16:22 陈于喆 阅读(4970) | 评论 (7)  编辑

posted @ 2011-08-21 15:55 陈于喆 阅读(6393) | 评论 (0)  编辑

posted @ 2011-06-02 16:11 陈于喆 阅读(955) | 评论 (0)  编辑

     摘要: google map测距的实现和分析
不断有传闻google map在今年的7月1号之后在大陆停止运营,具体原因是因为天朝的牌照问题,这个就不多讲了,可以发现现在搜房网的地图,和安居客等的地图纷纷都撤下 google map,而重新选择了mapabc或baidu,当然网易房产地图也不例外,现在也在使用mapabc作为网易房产地图的开发,预计将在6月底前上线,到 时再跟大家分享一下mapabc的一些开发实践。
还是说回google map的开发,自从上次建了个qq群就有不少人在问测距怎么实现,当然很多人想的是拿来主义的,当时是拿http://xf.house.163.com /gz/map/000B.html的例子出来,但确实页面上进行了封装也写得比较乱,所以还是比较难以抽离,先给个简单实现的例子:  阅读全文
posted @ 2011-06-02 14:01 陈于喆 阅读(3929) | 评论 (1)  编辑

     摘要: 有朋友去一家大型的互联网公司参加了java程序员的笔试,抄下了一些笔试题,可能有的抄的并不全,试了解答一下,有些还真的答不出来

1.cookie和session的作用以及他们的应用场合
2.怎样让jvm加载一个Class的同时执行一段代码
3.post和get区别
4.事务的属性有哪些?写出spring或jdbc管理事务的例子
5.实现一个高并发、高性能的hashmap。写出伪代码
6.解析一段xml,拼接成一个url。  阅读全文
posted @ 2011-04-21 17:23 陈于喆 阅读(3536) | 评论 (9)  编辑

     摘要: google Map的交互基本都是事件驱动的,这表示js是通过生成时间来响应交互的,并且处于监听我们设定的事件,每个 Google Maps API 对象都可导出大量已命名的事件。如果程序想要实现某些事件,则会为这些事件注册 Javascript 事件侦听器,并会在通过在 google.maps.event 命名空间中注册 addListener() 事件处理程序接收这些事件时执行相应的代码。

初步的事件响应

google map中的所有对象都可以对用户事件监听并作出响应,用户的事件可以包括鼠标或键盘,对象可以监听以下这几种事件:
'click','dblclick','mouseup','mousedown','mouseover','mouseout'
这些事件看上去很像标准的DOM事件,但这些时间可以在不同的浏览器实现不同的DOM事件模型。  阅读全文
posted @ 2011-03-30 16:58 陈于喆 阅读(26535) | 评论 (0)  编辑

     摘要: 本来是想将房产地图google map的应用记录一个系列,但继1)记录完之后总找不到时间继续记录下去,1)中主要解决了Google Maps JavaScript API V3 与 Google Local Search API两者由于版本问题带来的一系列麻烦,思路是使用一个iframe作为兼容的跳板,子页面应用Local Search API获得查询的result后返回给父页面,下面再记录一些地图坐标的定位和一些UI的组成。

可参考 http://xf.house.163.com/gz/map/00Xa.html  阅读全文
posted @ 2011-03-05 16:02 陈于喆 阅读(4391) | 评论 (2)  编辑

     摘要: 以前的房产地图一直都是使用有道地图,虽然有道地图是很好,但是为了更好,还是决定使用google地图来重新开发^_^,下面是一个开发完毕的简单应用http://xf.house.163.com/gz/map/000B.html

1)整合Google Maps JavaScript API V3 与 Google Local Search API

Google Maps JavaScript API V3
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/

Google Maps JavaScript API V3 文档读起来真的是很清晰,各种demo也很齐全,并且论坛的拥有巨大的论坛支持,对比了一下Google Maps JavaScript API V3 和 V2 的版本,虽然第3版的 Google Maps API 看上去跟第2版挺相识,但在内在机制上有了较大的变化,尤其在对移动浏览器的支持上,专门针对iphone和android  阅读全文
posted @ 2011-02-12 15:57 陈于喆 阅读(4932) | 评论 (6)  编辑

     摘要: The minimum requirement for a POM are the following:

project root
modelVersion - should be set to 4.0.0
groupId - the id of the project's group.
artifactId - the id of the artifact (project)
version - the version of the artifact under the specified group

Here's an example:  阅读全文
posted @ 2010-12-29 17:50 陈于喆 阅读(314) | 评论 (0)  编辑

     摘要: 目前几套系统中主要使用的hessian进行远程调用webservice服务的有hessian的 HessianProxyFactory(com.caucho.hessian.client.HessianProxyFactory)和 spring的 HessianProxyFactoryBean(org.springframework.remoting.caucho.HessianProxyFactoryBean).

1.HessianProxyFactory
查看HessianProxyFactory源码后发现,hessian在创建http请求连接webservice服务并没有对连接超时进行相关的参数设置,所以当网络出现问题就会造成整个hessian处理的阻塞,进而阻塞整个线程后续的处理
以下是HessianProxyFactory对连接处理的源码

protected URLConnection openConnection(URL url)
throws IOException
{
URL  阅读全文
posted @ 2010-12-16 14:46 陈于喆 阅读(11985) | 评论 (11)  编辑

     摘要: 对很久以前的一个bug进行分析和总结

function parsePost(data, action) {
try {
var postData = eval("(" + data + ")");

// TO DO1
} catch (e) {

// TO DO2
}
}


这是一段页面的老代码,data是数据库body字段,既是用户录入并取出的数据,由于业务的关系,data是以json格式保存的,为了使数据能实现兼容,这里使用try...catch...方式处理,如果变量data能被转换成对象,则执行TO DO1,否则执行TO DO2.

我们知道eval的作用很简单,就是把一段字符串传递给js解析器,由javascript解析器将这段字符串解释成为  阅读全文
posted @ 2010-12-15 11:31 陈于喆 阅读(4317) | 评论 (2)  编辑

     摘要: 大名鼎鼎的分布式缓存系统memcached,在开源社区中可谓是无人不知无人不晓,memcached支持分布式的横向扩展,但memcached的服务端却是单实例,并无"分布式"的功能,所谓的分布式只是客户端在存储的主键做分布的存储;还有memcached组件缓存对象,如果组件无进行序列化必定无法正确取得数据;如何使用memcached的java组件来监控memcached的运行状态;以上等等的问题是我在日常的工作中碰到并解决的,拿出来跟大家做个分享^_^

对象的序列化
首先memcached是独立的服务器组件,独立于应用系统,从客户端保存和读取对象到memcached是必须通过网络传输,因为网络传输都是二进制的数据,所以所有的对象都必须经过序列化,否则无法存储到memcahced的服务器端.
正如我们以往在集群中应用的序列化一样,memcached的序列化的性能也是往往让大家头疼,如果我们对我们的domain类进行对象的序列化,第一次序列化时间会比较长,但后续会优化,也就是说序列化最大的消耗不是对象的序列化,而是类的序列化,如果存储的只是一个String  阅读全文
posted @ 2010-12-08 15:00 陈于喆 阅读(5599) | 评论 (4)  编辑

     摘要: 很久以前就见过这本1000页的书<代码大全>,觉得应该是说些写代码的东西,没怎么又兴趣去读它,一次偶然的机会,发现自己是误解了它,<代码大全>觉得应该叫软件百科好像更合适一点,因为它里面涵盖了架构,分析,设计,编程,测试,重构,面向对象,调试,规范,管理,软件质量控制,协作,优化,开发工具,注释,甚至个性,开发艺术等等等,让人感觉就是一本软件百科全书.

书读的不多,不过刚开始读了100多页有一点感悟,所以做了一点记录,叫读<代码大全>的一点记录之1.

利用隐喻
隐喻通过把软件开发与你所熟知的事情联系在一起,从而使你对其更有深刻的理解,正是因为如此在计算机中的发展不过仅有数十年的历史,却拥有着所有科学最为丰富多彩的语言

盖房子的隐喻
狗屋
霹雳啪啦,木材加铁钉,犯错了怎么办?无所谓,拆了再来过  阅读全文
posted @ 2010-12-07 17:59 陈于喆 阅读(1238) | 评论 (0)  编辑

     摘要: 上个月参加的网易游戏部QA组的黑盒测试培训,觉得挺有意思的,不过最让我感兴趣的是,能和真正专业的测试人员做了一点讨论,发现站在开发人员的角度看待测试和站在测试人员看待测试时完全不同的一种东西.

程序员和测试人员的心理差别
程序员和测试人员的心理差别可以简单的归纳为以下几种

成功 / 不成功
什么才是一次成功的测试,大多数的开发人员对自己的程序测试完没发现错误,就会说"这是一个成功的测试",如果发现某些新的错误则称"这是不成功的测试";而测试人员刚好相反,当然这也是因为双方的职责不同而引起的

维护 / 破坏,施虐
开发人员对测试往往是一种维护性的测试,目标在于证明自己开发的程序没有错误,可能跟我们开发人员经常做建设性工作,更倾向创造事物,而不是将事物破坏有关;而测试人员在测试更多是一种破坏的过程,甚至是一种施虐,摆出一种把鸡蛋打碎搅黄来挑骨头的姿态  阅读全文
posted @ 2010-12-03 16:00 陈于喆 阅读(1712) | 评论 (3)  编辑

     摘要: 把我上次的工程所用到的jar包做了一个整理,也加了一些简单的描述,下面图是上次工程用到的所有jar吧



JAR包与描述对照表 注:jar包尾后的版本号不代表当前最高版本
activation-1.1.jar Sun的JavaBeans Activation Framework(JAF),JavaMail要运行必须依赖于它的支持
asm-3.0.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
asm是一个轻量级字节码处理和分析框架
alveole-struts2.jar
alveole-tools.jar

aspectjtools-1.5.3.jar
Aspect提供的注释类库和相应的解析类库
atomikos-util.jar
数据库提供分布式事务支持
  阅读全文
posted @ 2010-11-03 14:59 陈于喆 阅读(3250) | 评论 (1)  编辑

     摘要: 记得问过身边的一些开发工程师(非前端)缓存要分几个层次,从哪里做起,答案很多,比如反向代理缓存,DNS缓存,memcached,数据库缓存等等,确实很完整,不过好像漏掉了我们用户跟我们联通的最根本的工具浏览器,确实好似很少有人把用户的浏览器当作是web站点的组成部分来看待

缓存协商
现在我们需要将用户的浏览器也纳入我们构建网站各个缓存层次中的其中一个重要层次,网站信息和内容在由web服务器生成,而将这些信息和内容作为一段二进制的文件作为本地缓存文件存放在用户的浏览器,是两个独立个体共同完成的任务,所以两者之间需要一种沟通的机制,也就是HTTP的缓存协商

Last-Modified和If-Modified-Since协商
Last-Modified和If-Modified-Since分别位于响应头信息和请求头信息中,都是记录请求的页面最后的修改时间
在第一次访问web服务器会返回200状态,并在浏览器的响应头Last-Modified上写上此页面最后修改的时间戳
使用firebug进行查看


  阅读全文
posted @ 2010-08-25 00:03 陈于喆 阅读(6425) | 评论 (0)  编辑