[Spring in Action] 学习笔记之二

“One of  the key components of Spring  is  the AOP Framework.” –From Spring official documents.

近期在研究AOP的源代码和实现机制,以及Spring对于AOP的实现与AspectJ对AOP实现的区别.

Spring AOP的实现是基于JDK Dynamic Proxy 和CGLIB Proxy 两种方式.

今天先深入学习一下代理模式、 JDK Dynamic Proxy 机制,以及AOP简单思想:

代理模式:代理模式就是给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。

For Example:

针对一个接口UserManager(四个简单的方法声明,add,delete,modify,selectUserById),首先实现一个具体的业务实现类UserManagerImpl,For example:我这时候需要针对每一个方法,做一个日志打印输出System.out.println(“—-UserManagerImpl.Add()—-”),在为了不影响原有实现类UserManagerImpl的基础下, 需要生成一个代理类UserManagerImplProxy(该类也是实现了UserManager接口).

代码如下:

//UserManager interface

public interface UserManager

{

public void addUser(String userName,String userPwd);

public void deleteUser(String userID);

public void modifyUser(String userID,String userName,String userPWd);

public String findUser(String userID);

}

//UserManagerImpl 实现类

public class UserManagerImpl implements UserManager

{

public void addUser(String userName, String userPwd)

{

System.out.println(“—-UserManagerImpl.addUser()—-”);

}

public void deleteUser(String userID)

{

System.out.println(“—-UserManagerImpl.addUser()—-”);

}

public String findUser(String userID)

{

System.out.println(“—-UserManagerImpl.addUser()—-”);

return “—-UserManagerImpl.addUser()—-”;

}

public void modifyUser(String userID, String userName, String userPWd)

{

System.out.println(“—-UserManagerImpl.addUser()—-”);

}

}

//UserManagerImpl 代理类

public class UserManagerImplProxy implements UserManager

{

private UserManager userManager;

public UserManagerImplProxy(UserManager userManager)

{

this.userManager = userManager;

}

public void addUser(String userName, String userPwd)

{

userManager.addUser(userName, userPwd);

logging();

}

public void deleteUser(String userID)

{

userManager.deleteUser(userID);

}

public String findUser(String userID)

{

userManager.findUser(userID);

return null;

}

public void modifyUser(String userID, String userName, String userPWd)

{

this.userManager.modifyUser(userID, userName, userPWd);

logging();

}

private void logging()

{

System.out.println(“—-当前操作已被写入到数据库当中—-”);

}

}

//test类

public class ClientAction2

{

public static void main(String[] args)

{

UserManager userManager = new UserManagerImplProxy(new UserManagerImpl());

userManager.addUser(“heely”, “pwd”);

}

}

//Console 控制台输出的结果是:

—-UserManagerImpl.addUser()—-

—-当前操作已被写入到数据库当中—-

由以上的简单代码片段可以看出,代理模式最终的目的是想通过代理的方式为目标对象方法增加额外的功能,而不必修改目标对象的代码.

但是缺点也显而易见,类似”添加系统日志”这中”关注点”或者”横切”性的东西其实可以抽象出来一个独立的模块,而不是要针对每一个业务的实现类都要写一个代理类,而这样无非也是增加我们的代码的数量,当业务类很多时,会疯掉的.

JDK Dynamic Proxy:

动态代理的类是由java.lang.reflect.Proxy类在运行期时根据接口定义,采用java反射机制动态生成.帮助程序员减少编写代码行数,真正提高代码的可复用度.

Dynamic Proxy 需要用到java.lang.reflect 包中的两个类:interface InvocationHandler:该接口定义了一个方法 Object invoke(Object proxy,Method method,Object[] args).

Proxy类当中的 newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),  new DebugProxy(obj)) 方法.生成一个代理类.

说到动态代理,又不能不提Java 反射机制…要想简单的描述出一个功能点,必将牵涉出众多个知识点。

Java Reflection 机制主要提供了以下功能(可以让程序员在运行期动态的控制某个类的属性和方法):

1.在运行期,判断任意一个对象所属的类.

2.在运行期,构造任意一个类的对象。

3.在运行期,判断任意一个类所具有的成员变量和方法。

4.在运行期,调用任意一个对象的方法。

下一章,将记录一下Java Reflection 常用方法.

–未完待续–

public interface UserManager
{
public void addUser(String userName,String userPwd);
public void deleteUser(String userID);
public void modifyUser(String userID,String userName,String userPWd);
public String findUser(String userID);
}
Posted in J2EE | Tagged , | Leave a comment

[Spring in Action] 学习笔记之一

使用Spring开发项目有一年多时间,对Spring的IOC、AOP建立在”what”,”how”的阶段.没有深入学习其底层实现机制.
近期从杭图借阅[Spring in Action]该书,深入学习,这是第一篇笔记.

版本为:Springframework-2.0.8.

Spring的几大核心模块jar包:

1.spring-core.jar 核心的Spring容器和实体类.

2.spring-aop.jar Spring的AOP框架和元数据的支持

3.spring-context.jar Application context,验证框架,模板的支持(Velocity,FreeMarker),远程服务(JAX-RPC、Hessian、Burlap),EJB支持和作业调度服务

4.spring-dao.jar JDBC和DAO的支持.实务架构.

5.spring-web.jar Web application context和实体类.Multipart 文件上传的支持.

6.spring-webmvc.jar Spring的MVC框架.

另外,旧版本中的spring-orm.jar包分成了spring-hibernate2.jar、spring-hibernate3.jar、spring-ibatis.jar、spring-jdo.jar等四个jar包.

ApplicationContext & BeanFactory 都是载入Bean的定义信息,装配Bean,根据需要分发Bean.但是ApplicationContext有以下额外支持:

1.应用上下文提供了文本信息解析工具,包括对国际化的支持.

2.应用上下文提供了载入文件资源的通用方法,如载入图片.

3.应用上下文可以向注册为监听器的bean发送事件.

其中三个常用的ApplicationContext常用的实现类是:

ClasspathXmlAppicationContext:顾名思义就是从类路径中的XML文件载入上下文定义信息,把上下文定义文件当成类路径资源.

FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息.

XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息.

ApplicatonContext 与BeanFactory 另一个重要的区别是:BeanFactory 延迟加载所有的Bean,当getBean()方法被执行时,利用反射机制生成Bean.而ApplicationContext在上下文启动时就载入所有的单实例Bean.

Spring 中的Bean 缺省情况下是单例模式.为何要这么设计呢?

首先要明白单例模式是什么?单例模式与多线程有什么关系?

单例引出并发的问题,既然实例只能有一个,那么多线程就可能同时或不同时访问它,那么它的状态(属性成员)的一致性就是个问题,写入方法必须同步(Synchronized).

Spring支持Constructor 和 Seter 的Independence Injection.

<constructor-arg  index=”0″>

<value>StringValue</value>

</constructor-arg>

构造函数的参数位置,可以通过index属性来设置.索引从0开始.

<bean>标签中的auto-wire属性:

四种不同的类型:1.byName -试图在容器中寻找和需要自动装配的的属性名相同的Bean(或ID),如果没有找到相符的Bean,这个属性就没有被装配上.

2.byType -试图在容器中寻找一个与需要自动配置的属性类型相同的Bean.如果没有找到相符的Bean,这个属性就没有被装配.如果找到超过一个相符的Bean,会抛出org.springframework.beans.factory,UnsatisfiedDependencyException.

3.constructor -试图在容器中查找与需要自动装配的bean的构造器函数参数一致的一个或多个bean.

4.autodetect -首先尝试constructor来自动装配,然后使用byType方式.

不建议让Spring容器自动装配,应该显示的装配Bean,这样可以在XML文件中看出各个bean之间的关系.

-未完待续-

Posted in J2EE | Tagged , | Leave a comment

见过大爷

昨晚在杭州庆春影院看完了<见过大爷>这部宣传的牛逼哄哄的电影.基调很明显,我国电影制作人献给建国六十周年的一部牛逼哄哄的影片.

我对其中几点蛮有感触和印象深刻:

1.影片从1945年抗日战争结束时开始记录.国内面临如何实现民族统一,国民党和共产党如何建立民主政府?等多重不确定问题。毛泽东亲自赶赴重庆会见蒋介石.

2.剧中张国立(饰蒋介石)、唐国强(饰毛泽东)、陈坤(饰蒋经国)的演技让我惊讶.不仅对他们所饰演的角色有了重新的认识.至少让我对蒋经国这个角色充满了好感.

3.影片没有过分渲染宏大的战争场面,也没有过多描述我们熟知的辽沈战役、平津战役、淮海战役、渡江战役等.而是通过各种各样的”会议”,展示了共产党人和国民党人以及第三方政党在各个历史时期对待中国的态度和远见和策略。应该说,正是共产党的步步为营、方针明确、最终取得”见过大爷”.

要说最大的败笔莫过成龙大哥的角色,看完后,我都不知道他是做什么的.倒是范伟、葛优、王宝强、华仔等小角色的穿插,让这部历史题材影片让小放映厅中的观客发出少许的微笑。

Ps.感谢美女陪我看这部历史性题材的影片,和为了寻找外婆家而白白压马路半个多小时.你穿高跟鞋的脚还好吧?  :)

Posted in Life | Tagged , , | 2 Comments

Welcome Back,Hostmonster!

1.琐事

heely.us 什么时候被GFW已经记不清楚了,大致是我朝60周年庆典前夕。

碰巧那段时间发生了很多的小事情(面试,加薪,买Canon500D,国庆),在当时看来内心和头脑还是有很多话要写的。而现在再让我提笔回忆那时那景,却也没有感觉了。

生活是什么样子并不重要,重要的是我们还活着!

2.国庆

这个假期过的并没有想象中的那么顺畅。

先是9月30日那天中午,因为早晨在公司加班开会,加上当天杭州天公不作美,下着哗哗的大雨,没有赶上回家的火车。

紧接着回到项目组加班,9月30日加班到凌成2点钟。

昏睡了几个小时,10月1日下午又赶到公司继续为临时业务需求变动加班。到晚上9点才回到家中。身心疲惫到极点。脸上起痘痘,记忆力减退就是明显的征兆。

终于踏上了10月2日中午回家的火车,买的卧铺,睡了一晚,在火车上待了16个小时。

在家里待了10月3日、4日、5日、6日。回了一次我小时候待过的家乡,那些美好的童年记忆和农村朴实的人,家里还是小时候的样子一点都没有变,只是墙更破旧了,院子尘土多了,屋檐处有风雨的痕迹,只是门前的大槐树由于前年村子里需要重新布设电线而被砍断了。

村子还是那个村子,家还是那个家,人还是那个人,只是我们都已回不到过去了!

10月7日、8日在石家庄度过,大学宿舍6个兄弟毕业一年后再次相聚。我、军平、立佳、李敏、马琛、李梁。还是老样子。只是都多了份苦涩。在外工作一年,我们已经不是那个时候在宿舍玩CS的大学生了。

3.计划

到2009年9月30日,我已满工作一年另一个月。回顾自己去年刚工作时定下的计划,已完成。

只是有一些与自己的理想有些偏差。在这个过程中, 我也知道了自己的不足。

接下来重点是:

(1)对J2EE知识体系的回顾和再次学习,尤其是对J2SE 知识的巩固掌握和常用框架Spring和Hibernate的深入学习。

(2)每天学习 <走遍美国>系列.提高自己的口语和听力.

(3)恢复写日记的习惯,以后blog 就是自己总结和归纳的首选。

(4)学习摄影相关技巧和找感觉.争取到年底成长为一名合格的单反入门玩家。

4.其它

helloinsurance.net成立至今已有2个月了,至今无半点生气.

昨晚我深刻的总结了一下。并在DH的合租Channel询问了大家的意见.

针对行业业务的探讨、学习、总结、梳理等往往涉及面窄但是有深度。

我最开始选择helloinsurance.net是以Wiki的方式发布的,基本出发点很简单:

让同事们在总结、归纳自己所负责模块的业务知识行业背景时,可以更好的管理、组织、这些业务知识,从而让项目组或更多的朋友从中受益。

后来发现弊端很明显:

1.Wiki系统的使用时需要学习成本的,至少我作为管理员,在看完TikiWiki的英文文档后,三天才弄出了第一个wiki页面.

2.行业知识、业务梳理想要表达明白,并且以规范的语言写出来是需要很深的文学功底和对业务的透彻理解的。而Wiki这种正儿八经展示文章的方式,往往一开始就让人想往深了去写,而往深了去写,就需要花很长的时间去起草、总结、规划,时间成本太高。

经过讨论,@MCDawang童鞋建议是用BBS. 听完后, 我恍然大悟,BBS在中国已经发展了这么多年,普通网民都会使用, 学习成本为零。而且BBS本身的体系决定了这里可以是一个随意且畅所欲言的地方,轻松而欢快的环境容易让人畅所欲言。

总之,这是我第一次运营网站的体验(而且还刚刚开始),由此可见,我对互联网的认识之肤浅啊.

接下来会花时间咨询同事,并确定以一个合适的BBS发行版本.并最终推动此件事情的后续进行。(Ps.其实我本人已经准备好了几篇重量级的保险行业关于理赔模块的业务知识总结.  XD…)

1.很多事情过去了,还是最想念你。

2.千万不必假装过得很好,因为其实根本没多少人在乎。

上边的文字,是今天在GoogleReader上看到的,我觉得写的很好。

“我现在还是一个人,不过,我没有假装过的很好,我也没有过的不好,自己还是一直在追求自己想要得到的,这个过程很幸福。”

Posted in Life | Tagged , , , , , | Leave a comment

电话面试

下午接了阿里巴巴B2B的电话面试,问了若干个Java基础问题.我感觉我答的不好,因为比较突然.摘要如下:

1.Java 当中所有的对象都是默认继承与Object类,请问该类中常用的方法有哪些?

java.lang.Object类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

public native int hashCode();//返回该对象的哈希码值
public String toString() //返回该对象的字符串表示。

{
return getClass().getName() + ”@” + Integer.toHexString(hashCode());
}

public boolean equals(Object obj) //返回其他某个对象是否与此对象“相等”。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。


String类重写了equals()和hashCode()方法,可以参考

protected void finalize() throws Throwable {}
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。

protected native Object clone() throws CloneNotSupportedException;
创建并返回此对象的一个副本.所有要进行”克隆”的对象所属的类必须实现java.lang.Cloneable接口

2.Java 中的反射机制实现原理、常用方法?

在Java运行环境中,对于任意的一个类,能否知道这个类有哪些属性和方法?对于任意一个类,能否调用它的任意一个方法?可以。这种动态的获取类的基本信息以及动态的调用对象方法的功能来自于java语言的反射(Reflection)机制.

java reflection 主要提供如下功能:

1.在运行时,判断任意一个对象所属的类.

2.在运行时,构造任意一个类的对象.

3.在运行时,判断任意一个类所具有的成员变量和方法.

4.在运行时,调用任意一个对象的方法.

在JDK中,由以下类来实现Reflection,这些类位于java.lang.reflect包中:

1.Class类:代表一个类.

2.Filed类:代表类的成员变量(成员变量也称为类的属性.)

3.Method类:代表类的方法。

4.Constructor类:代表了类的构造方法。

5.Array类:提供了动态创建数组,以及访问数组元素的静态方法。

(Reflection API的应用小例子,接下来会写.)

3.Struts1.2 or Struts 2 的实现原理,简单陈述一个请求的处理流程?

Struts 1.2 实现原理如下:

1.web应用启动时加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中(Action的映射信息存放在ActionMapping对象中.)

2.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息.

3.如果ActionForm实例不存在,创建一个ActionForm对象,把客户提交的表单信息保存到ActionForm对象中.

4.根据配置信息决定是否需要表单验证,如果需要验证,就调用ActionForm的validate()方法.

5.如果ActionForm的validate()方法返回null 或者一个不包含ActionMessage的ActionErrors对象,表示表单验证成功.

6.Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户端请求转发给ActionFoward对象指向的jsp组件.

7.ActionForward对象指向jsp组件生成动态页面,返回客户端浏览器.

4.Struts1.x 和 Struts2.x 版本那一个是线程安全的?线程安全的定义是?

Struts 1.2 版本是线程安全的.原因如下:

1.Struts 1.2 的Action类是单例模式,因为只有一个实例来控制所有的请求.Action资源必须是线程安全或者同步的.

2.Struts 2.0的Action对象为每一次请求都生成新的对象,所以没有线程安全的问题.(据资料,Servlet容器产生对于每一个请求产生多个对象并不影响垃圾回收.)

Java线程安全(通俗描述):在线程中使用[共享资源]时,能够保证[共享资源]在任何时候都是原子的、一致的,这样的线程就是安全线程;反之则为非安全线程.

5.如果你来设置Session(前端的回话Session而非Hibernate中的Session),你将如何实现它?

6.Hibernate的优点有哪些?

7.Javascript Dom结构,常见的使用方法举例?

暂时将问题列出来,晚上回家后,再一一解答.其实回顾一下这些问题,都是最基本且应该掌握的问题, 可往往在项目当中为了实现而实现,而很少去考虑底层是如何实现,为什么要这么做? 不仅让我想起来前些日子在twitter上说的一句话:”架构师的道路其实也是”what”,”how”,”why”的过程.”  我还有很长的路要走.

Ps.在我写这篇日志之前,阿里的Hr来电话通知我下周一去滨江园区参加第二轮的面试.而此时我脑海当中不知道是喜还是忧,我想我的坦诚和虚心还是得到阿里技术面试官的认可了.但是我自己明白我基础是一个很薄弱的环节,这需要我尽快和努力弥补。

生活还在继续,未来捉摸不透…

Posted in J2EE | Tagged , , , , , | Leave a comment

Aix 5.3 & WebLogic 10.0.1.0 & CR3709_PATCH

项目上线后出现宕机和线程挂起现象。经过诊断和排查最终解决了该问题.

宕机和线程挂起的现象描述如下:

1.WebLogic启动后,10-30分左右 就会挂起,控制台无法访问。

2.应用程序web App 无法访问,程序无法执行。

问题原因如下:

[IBM 的JVM底层socket实现和Weblogic配合的问题,weblogic在IBM JVM上存在已久的BUG,需要打weblogic Patch才可以解决.]

服务器信息如下:

[Aix 5.3  WebLogic 10.0.1.0]

补丁jar包:[CR370915_1030GA.jar] (收费软件, 需要weblogic提供售后服务,涉及版权,所以不提供下载.)

修改方法:

该补丁包的readme文件中建议将该包放到每一个domain下,及放到weblogic 的每一个单独的域中,这样可以做到域与域之间互不影响。

1.将补丁包放在 WebLogicpath/yourdomain/lib 目录下.(我本地的地址是:/weblogic/user_projects/domains/zsi_test/lib)

2.修改当前域(domain)下的环境变量设置.编辑该shell文件:webLogicpath/yourdomain/bin/setDomainEnv.sh

找到如下代码:

CLASSPATH=”${CLASSPATH}${CLASSPATHSEP}${MEDREC_WEBLOGIC_CLASSPATH}”

修改后如下:

CLASSPATH=”${DOMAIN_HOME}/lib/CR370915_AIX_SR7_patch.jar:

${CLASSPATH}${CLASSPATHSEP}${MEDREC_WEBLOGIC_CLASSPATH}”

将补丁包的路径放在最前面即可.

3.以上操作仅对当前domain起作用.

4.重新启动weblogic即可.

详细bug跟踪调试和相关信息请参考:http://www.hashei.me/tag/cr370915

Posted in J2EE | Tagged , , , , , , , | 5 Comments

Hello,XianGuo

继Douban之后,又加入了另一个rss阵营,鲜果(xianguo.com).

xianguo-ID: BANG247190FCDE7BB0257C69D1B3XIANGUO

我只是一个小人物而已,但我坚信小人物也可以为这个世界做出自己的贡献.

Posted in Uncategorized | Tagged , , , | Leave a comment

wamp dev environment

昨天在本地装了一个WAMP的开发环境,想对wordpress做一些调整,顺便学学php&mysql.

windows xp profession sp3+apache 2.2.13+mysql 5.1.37+php 5.3.0

一、Download

(1).apache 2.2.13

http://httpd.apache.org/download.cgi?Preferred=http%3A%2F%2Flabs.xiaonei.com%2Fapache-mirror

选择的是xiaonei的镜像站点,下载 Win32 Binary including OpenSSL 0.9.8k (MSI Installer) 这个版本,当前最新版本为2.2.13.

(2)mysql 5.1.37  (MySQL Community Server)

http://dev.mysql.com/downloads/mysql/5.1.html#win32

选择Windows MSI Installer (x86)版本.

(3)php 5.3.0

http://windows.php.net/download/

选择   VC6 x86 Thread Safe (2009-Jun-30 08:52:55)版本,注意一定要选择VC6 版本的,在win下只有这个版本可以使用,关于Thread Safe 和Non Thread Safe 我会在以后的文章中说明differences.

(4)wordpress 2.8.4 English version

http://wordpress.org/

二、Install

我的原则是,安装的顺序最好是:web服务器(apache)、数据库mysql、开发语言运行环境php.

(1).install apache

如果是本地测试,NetWork Domain:localhost,Server Name :localhost,Administrator Email Address:任意的一个Email地址即可.

一路next即可,最后会在任务栏发现apache的ico.

注意,在选择Custom方式安装时,记得选择 for everyone模式,这样启动apache时才会成功,我第一次安装是for curre nt user,apache怎么都启动不了,估计跟权限有关.

记得修改Apache2.2\conf 目录下httpd.conf 文件,我一般不太喜欢默认的80的端口为服务端口,建议调整为Listen 6688;或者 Listen 8080.

用浏览器访问http://localhost:6688 既可以看到apache默认的It works !页面.即安装apache  web  server 成功了.

(2) intall mysql

一路Next,选择Develop Machine 开发机,这样mysql占用系统内存是最小的;设置mysql root用户密码.然后配置安装文件的路径和DB存放地址,启用mysql commandline,over.

(3)install php

选择第一个模式:apache 2.2.x Module.下一步,选择apache 安装目录下httpd.conf文件的目录,这样在安装php的时候,会自动修改apache配置文件,并且启用php module(这是我猜测的,没有经过验证).不过应该是这样的,因为在安装玩php之后, 我几乎没有修改任何配置文件,直接在apache目录下的htdocs下编写了一个简单的php文件,这样通过http://localhost:6688/welcome.php 直接访问成功.说明php编译环境已经成功安装.

注意,安装完php后,需要重启apache 才可以启用php module.否则无法访问.php文件.

(4)install wordpress

首先:mysql command line 登录,创建wordpress 数据库.

1.mysql -u root -p yourpass (-p 和 yourpass 之间没有空格)
2.create database wordpress;

3.quit;

直接解压wordpress的zip包,重新命名为 [blog],将文件夹放到apache安装目录下htdocs目录下,重新启动 apache web Server.

在浏览器中输入:http://localhost:6688/blog

第一次访问, 系统会自动跳转到 创建wordpress程序页面.按照提示,一步一步输入本地数据库用户名和密码即可.

恩.本地wp环境搭建起来了.接下来就是学习 wordpress的架构了,在修改theme & code 之前 首先应该明白它的架构. wordpress 官方资料是最好的入门教材:http://codex.wordpress.org/Getting_Started_with_WordPress

在看文档的同时,我感觉wp的文档之全面啊.真的很全很强大.

三、End

如果在安装过程中遇到一些问题,可以去Google一下,关于win下安装php & mysql 图文教程相当多.当然如果怕这样安装麻烦,也可以装xampp.(我在安装之前想过要装,但是一想既然要折腾,就从头到尾折腾吧,反正也是要学的.你可以根据自己的时间和爱好去选择,总之当今时代有很多东西供你选择, 关键是找到适合自己的,节省时间获得最大收益的就是最好的.)

关于xampp以及本地安装wordpress地址:http://www.tamba2.org.uk/wordpress/xampp/

四、节目预告

(1) apache 基础和web server 工作原理

(2)php & mysql 基础知识



Posted in WebDevelopment | Tagged , , , , , , | Leave a comment

基础 学习 坚持

工作一年有余,工作语言用的是Java,可以说自己学的时间确实不是很长,只是在临近毕业的前夕自学了基础,去iSoftstone后参加了三个月的培训.后来为了能快速的上手开发直接看了Struts、Hibernate、Spring,确实只是略知一二,虽然也开发了几个项目 ,但是越来越发现如果想更深入的了解和革命性的扩展的话,基础知识是必不可少的.

所以在参加工作后的第二年,我希望自己可以从零做起,好好研究一下java真正的世界.我想,学好一门语言,比你同时掌握好几门语言要有用的多.毕竟等你的理解能力和运用能力到达一个层次的时候,真的可以去快速的学习另一种开发语言。

1.jdk和jre的区别?

答:

jdk:java development kit 顾名思义:Java 语言开发工具包.是开发所用包括sun提供给开发者的类库和常见的javac、java等工具.

jre:java runtime environment 顾名思义:java语言运行环境.是运行java程序的基础.必须包括jvm虚拟机和java类库的class文件.都在lib目录下打成了jar包.在win上,jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。

update:

1.今天没有去公司上班,由于特殊的原因,在家里休息,突然觉得不适应这样的生活,一年多来我从来没有在上班时间休息过.很不适应.也冷静下来想了好多东西。

2.刚看到一些有用的话,摘抄过来.

1.学习专业技能,获得能力,能够搞定一些事情

2.通过沟通和分享,得到大家的认可,从而获得影响力.

3.对其他人产生有效的影响,赢得信任,获得领导力.

3.突然觉得自己处在一个很尴尬的位置,攒了好多的东西,结果到头来为了完成这些东西需要去看更多的书,去看更多基础的事情 ,一时间也有点茫然了.这么多东西在极短的时间内能完成吗?更要命的是,我知道这些基础的知识并不是为了完成某一个特定的任务而要去看的,而是对我整个编程而言,乃至以后的个人发展将有着非常大的作用.所以要想草草了事,迅速了事,是不可行的.必须静下心来,一点点做起.可我不知道从何时起,我竟没有了那份耐心和毅力.这才是最要命的.

4.突然觉得能耐住寂寞和毅力持续去做一件小事是多么的不容易.

Posted in 乱7八糟 | Tagged , , , , , | 1 Comment

绍兴游记(二)

其实早应该完成绍兴游记系列,只是越想深入的写,越发现需要凝练语言,组织思路,需要更多的时间。

上周被一个任务搞的焦头烂额,还要周五下午的时候Over.这样可以在这个周末做自己喜欢的事情.人世间最爽的事情莫过于此,做自己喜欢的事情.

接上书:

话说第一天绍兴之旅,时间紧凑,很是劳累,昏睡一晚后,第二天清晨7点10准时起床,洗漱,更衣,去小院吃早餐.(早餐是要提前预订的,青旅的程姐会在第一天晚上通知游客是否有早餐的需要).我们预订的是5RMB套餐,白粥+咸菜+馒头.吃的很好.饱饱的.咸菜=蚕豆+酱豆腐+腌黄光.

然后一看绍兴古城游的通票,还有2/3的景点还没有浏览…跟程姐一商量,看来难免要舍弃一些景点.因为所有景点几乎遍布了绍兴各个地方 ,覆盖面很广,而我们时间有限.

最后决定先去兰亭,就是王羲之笔下<兰亭序>中的兰亭.路程相对较远,但是公车还是有的,在鲁迅故居之鲁迅中路站坐303和3路都可以直达兰亭,刚上车问司机师傅,多长时间可以到兰亭,他含蓄的说50分钟。可结果却是30分钟,可见绍兴的交通还是不错的.车少,几乎没有堵车现象,而在杭州这是几乎不可能发生的。

兰亭还是值的一去的,环境优雅,绿意盎然,生机勃勃,典型的世外桃源,难怪诗人们会相聚此地,饮酒作诗不亦乐乎.

兰亭

兰亭门票是40RMB,单独买是够贵的.所以还是建议买联票.

逛完兰亭已经12点多了,乘303路直奔城市广场,在附近吃了午饭,下一站自然是周恩来故居,故居似乎都是一模一样的陈设和造型, 陈旧的木梁雕刻着历史的印记。每当来到伟人的故居,我都会思绪万千,会一万个假设假如我们出生在那样的年代,假如自己是一名英勇善战的冲锋先兵…

旁边是周恩来纪念馆,两层建筑,从周老生前讲述至逝世.照片,VCR,资料相当齐全,甚至连周老生前的贴身内衣内裤都有陈列, 着实让我们大吃一惊,那件贴身衬衣的做工真实不敢恭维,粗燥的线条和面料.

我们足足的缅怀了一小时十分钟,可见大家对伟人的尊敬.

我们怀着沉重的心情向下一站出发,仓桥直街.

从周恩来估计一直向西直走, 十分钟就到了.没有来到绍兴之前,就听到”仓桥直街”这个名字,但是对这四个字已经充满了历史的信息。可是现实却是如此的残酷,仓桥直街太让我失望了.破败的小街,两旁的店铺关门的关,要不就是买时尚内衣的.没有一点点的千年抑或是百年的老街的感觉,只有地面上的破旧的青石告诉我, 我现在在仓桥直街.听路人介绍仓桥直街很长,至少有一公里吧,我们只是走了不到300米,在一个十字路口大家都站定了,无法继续了.游人很少 ,而且由于当时天气闷热,周围散发着一股让人难闻的气味.

最让人失望的是 ,当我们在桥墩上休息时,看着游人乘坐的乌篷船游荡在仓桥直街后面的小河里时,一家饭店的小伙计端着一盆脏水倾倒在河中…大煞风景.

大伙也都累了,走了这么长的路,我们选择了就近的一站,乘车直奔绍兴汽车站,然后直奔杭州.

–EOF–

相关阅读:

绍兴游记(一)

Posted in Uncategorized | Tagged , , , , , , | 2 Comments