边城愚人

如果我不在边城,我一定是在前往边城的路上。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  31 随笔 :: 0 文章 :: 96 评论 :: 0 Trackbacks

2007年6月22日 #

推酷是面向IT领域的个性化阅读产品(www.tuicool.com),关于产品的更多信息请参考网站的关于页面。 推酷目前加入到国外一家孵化机构的孵化计划,该孵化计划于8月到10月这3个月在大连进行集中开发(提供住宿), 之后会返回北京继续开发(亦解决住宿问题)。目前推酷正处于热烈的第二阶段开发中,预计今年11月初能正式上线推广。 为了把推酷各方面做得更好更专业,推动推酷更快的发展,现诚邀热爱技术的朋友加入。 推酷目前需要的技术主要有以下三方面: 1)前端开发,即html/css,少量的JS应用,会些简单的UI设计更好。功力方面,至少要比现在的页面做的更专业些。 2)Web开发,即Ruby on Rails开发,如果有其他语言的Web开发经验,有志转向ROR亦可。 3)Android开发,有扎实的Java经验亦可。 对于上述技能,擅长其中某一方面即可。你可以没有多年的开发经验,但还是需要有一定的项目经验基础, 并且能自我驱动学习,持续不断地提高自己的技术。在推酷,你可能会独立负责某一方面的开发, 这会使你在技术方面更快的成长。当然,我这个零号员工还是可以给予一些指导的。 因为是创业初期,目前推酷可以提供的月薪在3000-6000元(这个工资水平确实不够给力, 考虑到创业的机会与风险,如果想找个稳当些的工作,推酷就不太合适了)。 如果你有创业热情,并认同推酷的价值,作为初创成员会给予你丰厚的干股。 推酷也欢迎实习生加入,但要求能全职的实习4个月以上。 就组团理念来说,推酷希望能组成3-4人的技术型小团队,在个人技术发挥、工作时间安排等方面,都会更加的自由开放。 如果你有加入推酷的意愿,可以将个人简历发给我(不用太正式,就别写自己用过什么eclipse、svn等工具啦), 邮箱是kafka0102@163.com。 打造忒酷的个性化阅读产品的路上,我在等你。
posted @ 2012-07-16 13:36 kafka0102 阅读(406) | 评论 (0)编辑 收藏

     摘要: 继承是面向对象中很重要的概念。如果考虑到Java语言特性,继承分为两种:接口继承和实现继承。这只是技术层面的问题,即便C++中不存在接口的概念,但它的虚基类实际上也相当于接口。对于OO的初学者来说,他们很希望自己的程序中出现大量的继承,因为这样看起来很OO。但滥用继承会带来很多问题,尽管有时候我们又不得不使用继承解决问题。  阅读全文
posted @ 2007-09-03 10:08 kafka0102 阅读(2693) | 评论 (5)编辑 收藏

     摘要: 在结束了上一篇Spring 1.x中AOP的使用之后,我用马不停蹄的打开Eclipse,做着Spring2.X下了AOP的Sample。在上一篇文章中的配置过程中,由于对自动代理不是很熟,出现了循环引用的异常信息。当初在阅读PicoContainer源码时看到循环引用不以为然,后来在学习AspectJ时小有印象,这次在折腾了半个多小时后可加深了印象。  阅读全文
posted @ 2007-08-30 08:42 kafka0102 阅读(2285) | 评论 (2)编辑 收藏

     摘要: 本文通过一个“Hello World”级别的横切性功能介绍Spring1.X中AOP的使用,并结合Spring的经典的声明式事务管理给出Spring AOP配置中的经典方案。在Spring2出来以后,Spring1.X的AOP使用方式已经“不合时宜”了,因此如果你是在新项目中采用Spring AOP,建议使用Spring2中的AOP使用方式。关于Spring2.X中AOP的使用,参考该文的姊妹文章Spring2.X中AOP的使用。

一提到AOP的应用,人们就会本能地提起日志功能,它就像一门语言的“Hello World”一样被人们无数次提起。也许有人会疑问除了“不实用”的日志功能,AOP还能做些什么?可能在很多时候我们并不需要自己实现一个AOP功能,尤其是在拥有了很多优秀的AOP应用框架来解决通用的横切性问题的情况下(比如Spring的事务管理、比如Acegi的安全管理、比如WebWork的拦截功能)。但问题总是层出不穷的,总会有些问题可能需要我们自己AOP一下。  阅读全文
posted @ 2007-08-30 08:38 kafka0102 阅读(2348) | 评论 (1)编辑 收藏

     摘要: 1)MVC模式

当年做JSP生产实习时,印象最深也最困惑的模式就是MVC模式了。那时候Struts刚红,几乎每本Struts书中都会有大篇幅的MVC介绍。这个模式最早出现在GUI,后来在Web服务器端红火起来,先前在Ajax书中也看到Web客户端的MVC介绍。说实话,在我看了很多人的MVC解释后,我仍有些糊涂,这里说说我的理解。

有人提到MVC模式时说MVC代表了模型层、视图层、控制层,我觉得这是不对的。在经典的J2EE三层架构中,三层是分为Web层、业务层、持久化层;这个经典分层是基于分布式应用(EJB)的,也就说,Web层物理上是在Web服务器中,业务层和持久化层物理上是在应用服务器中。在这种情况下,MVC只是属于Web层这一层的,而不是分为三层。在这种分布式应用中,视图就是JSP(如果采用的话),控制器就是Servlet(如果采用的话),而模型就是就是调用业务层的在Web层中的桩子。假如我们采用轻量级的SSH技术架构,视图还是JSP,控制器是Struts,而模型就是Spring+Hibernate。这里最难理解的就是模型的概念。我觉得模型是有状  阅读全文
posted @ 2007-08-23 10:00 kafka0102 阅读(1584) | 评论 (0)编辑 收藏

     摘要: 今日发现一名为savage100的同学问我关于范型效率的问题的留言,抱着负责任的态度,想给那位仁兄做个回复,不成想未发现blogjava有回复功能,而且也未找到savage100的博客。唉!于“百忙之中”以此文作解,也算尽了我回复之责任。  阅读全文
posted @ 2007-08-21 22:47 kafka0102 阅读(689) | 评论 (0)编辑 收藏

     摘要: 最近在学Acegi,就试着运行一个小例子,不成想抛出下面的异常
org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 23 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:  阅读全文
posted @ 2007-08-21 21:55 kafka0102 阅读(24574) | 评论 (15)编辑 收藏

     摘要: Hibernate提供客户化映射类型接口,使用户能以编程方式创建自定义的映射类型来将持久化类任意类型的属性映射到数据库中。使用客户化映射类型,需要实现org.hibernate.usertype.UserType接口。这是个强大的功能,也是Hibernate的最佳实践之一。我们经常提到 ORM中很困难的一点便是O的属性和R的属性不能一一映射,而Hibernate提供的UserType无疑给出了一个很好的解决方案。本文给出使用客户化映射类型的两个例子,算是对Hibernate初学者的抛砖。  阅读全文
posted @ 2007-08-15 10:32 kafka0102 阅读(1514) | 评论 (0)编辑 收藏

     摘要: Hibernate的检索策略包括类级别检索策略和关联级别检索策略。
类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在Hibernate映射文件中,通过在上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qurey检索,持久化对象都会被立即加载而不管lazy是false还是true。一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load方法在检索不到对象时会抛出异常(立即检索的情况下),因此我个人并不建议使用load检索;而由于中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。

关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索,又可分为一对多和多对多、多对一和一对一两种情况讨论。  阅读全文
posted @ 2007-08-11 13:33 kafka0102 阅读(1030) | 评论 (0)编辑 收藏

     摘要: JDK内建的任务调度工具类有Timer和TimerTask类,对于简单的任务调度,JDK的Timer就能够胜任。一般来说,Timer应该随程序启动后一直运行。如果是web程序,可以通过listener加载Timer实例。对于普通的应用程序,需要将Timer设置成非后台线程才行。  阅读全文
posted @ 2007-07-19 09:50 kafka0102 阅读(2920) | 评论 (4)编辑 收藏

     摘要: 本文主要介绍如何使用简单的Spring邮件抽象层来实现邮件发送功能,对于JavaMail中的API并不做介绍。通过对比JavaMail的API和Spring的邮件抽象层,我觉得,Spring的邮件抽象层优点就是简化了代码量,并能充分利用IOC功能;缺点就是要使用部分Spring API,使程序与第三方框架耦合。关于这方面的内容,可以参考Spring的参考手册。  阅读全文
posted @ 2007-07-15 20:41 kafka0102 阅读(2686) | 评论 (1)编辑 收藏

     摘要: call和execution的指示符分别为call(Method-Signature)、execution(Method-Signature),匹配方法签名的方法或构造函数的执行。对于call来说,调用的连接点位于方法调用点的调用代码处;对于execution来说,执行的连接点位于方法执行的位置。也就是说,call和execution的重要区别在于它们传递了哪些类型给AspectJ编译器以用来与aspect进行链接。  阅读全文
posted @ 2007-07-12 09:50 kafka0102 阅读(4147) | 评论 (6)编辑 收藏

     摘要: target切入点格式如下:target([Type|Identifier])。Type指示对连接点处的对象类型提供一个静态编译时评估,并采用完全限定类名的形式(也就是说,Type不能是使用通配符的类型声明模式)。Identifier提供了一种方法,可通过它来评估连节点处的运行时对象的实际类型,而不仅仅是静态类型。 Identifier在运行时动态地赋予合适的对象。  阅读全文
posted @ 2007-07-09 09:17 kafka0102 阅读(2690) | 评论 (3)编辑 收藏

     摘要: 让我好好想想,AspectJ中最常用的切入点是什么?哦,也许是call(Method-Signature)吧。这是个相对简单的方法签名。实际上,方法签名的完整形式如下:

[modifiers] [returnTypePattern] [DeclaredTypePattern.]methodName([Parameters])[throws TypePattern],其中方括号中的签名组件是可选的。modifiers 为修饰符模式,returnTypePattern 为返回类型模式,DeclaredTypePattern 为类型声明模式,methodName 为方法名称,Parameters 为方法参数,throws TypePattern 为throw字句。该文仅仅介绍 DeclaredTypePattern,因为相比之下其它模式比较简单的多。

  阅读全文
posted @ 2007-07-07 14:54 kafka0102 阅读(1728) | 评论 (2)编辑 收藏

     摘要: 经常地,你必须遍历一个对象集合并基于一些条件(criteria)来过滤它们。JDK提供了有用的机制来排序集合,即Comparator接口。然而,JDK缺少过滤集合的机制。

这篇文章描述了一个仅由一个类和一个接口组成的简单机制,它允许你快速和灵活地过滤集合。当搜索一个集合时,该机制提供了与SQL中的select语句相同的功能。它的隐含的概念是,在遍历集合和过滤集合中的对象时,达到职责的分离。
这里提出的方法有下面的优点:
1、一个核心的过滤器组件的复用产生更清晰的代码。
2、通用过滤组件的复用产生更免于错误的代码。
3、从过滤逻辑中分离出迭代逻辑使你任意地增加和删除过滤器而不影响到其他代码。
4、对于大集合和多个criteria能够获得性能提高。  阅读全文
posted @ 2007-06-30 22:22 kafka0102 阅读(1330) | 评论 (1)编辑 收藏

     摘要: 对于没有使用过Calendar的程序员来说,再次处理日期时不妨使用Calendar而不仅仅是Date和SimpleDateFormat等类。这篇文章根据几个使用日期的场景来说明如何使用Calendar等类。
在数据库编程时,我们通常将java日期字段选作Date型的(一般是java.sql.Date,继承于java.util.Date,使用方法是类似的),当然也可以存储为字符串甚至是long型的time,但我们这里只讨论date型的。如果存储的时间是系统当前时间,我们可以使用Date d = new Date();就得到想要的时间;以前我编程时也指定存储日期的格式,但现在想来不是很有必要,完全可以在读出数据时指定格式。另一种可选的方法是使用 Calendar类,方法如下:  阅读全文
posted @ 2007-06-22 08:40 kafka0102 阅读(4067) | 评论 (0)编辑 收藏