欢迎来到Heck's Blog,专业承接拿站、企业建站、仿站、网上商城架构、门户网站搭建、空间域名注册、软件定制等项目。关注网络安全,因为专注,所以专业,懂得放弃,才能收获。有事请发邮件至i@heckjj.com,请记住本站网址:http://www.heckjj.com,多谢。
11月6
        在最初寻找编程工作的时候,我并没有意识到在一家非软件公司的IT部门工作和在一家软件公司的研发或者产品开发部门工作有什么不同。
  对于我来说,都是工作而已。我会看看公司的口碑,使用的技术或者额外津贴,试着权衡一下会不会有很多机会。事实上,这两种工作截然不同,人们很可能会在其中的某一个快乐并更成功。

  IT部门的编程工作

  在IT部门的屋檐下工作,你的职责便是公司的内部网络、其他部门使用的应用程序还有公司网站和应用程序。这听起来可能平淡无奇,但在某些层面上来说,这些工作都是极具挑战。你可能会遇到比在一家小型软件公司更大的挑战。其实,取决于公司态度的不同(自己开发还是外部购买),你可能会有机会来做更多不同的项目。

  别人会把你们看成是一个“消费”部门——也就是说你们不为公司赚钱,只是“消费”。这样,工作的重点总是会转移到如何节约开支。用来衡量成功与否的标准就是你节约了多少钱(相比体力劳动或购买现成的解决方案等)。偶尔,你可能有机会帮助公司赚钱,比如建立一个电子商务网站。

  当评定工资和额外津贴的时候,负责预算的人可能没有编程背景,他会尽可能把预算压低。同时,他们很可能会把人看成可替换的资源。
10月15
         最近Heck被这个Session.find()的方法困扰了好几天,今天才看到新的Hibernate里没有了Session.find()方法。
现在转载在此,方便大家。

查询性能往往是系统性能表现的一个重要方面,查询机制的优劣很大程度上决定了系统的整体性能。这个领域往往也存在最大的性能调整空间。

hibernate2中Session.find()对应于3中的session.createQuery().list();
hibernate2中Session.iterate()对应于3中的session.createQuery().iterate();
find和iterate区别:
find方法通过一条Select SQL实现了查询操作,而iterate方法要执行多条Select SQL.
iterate第一次查询获取所有符合条件的记录的id,然后再根据各个id从库表中读取对应的记录,这是一个典型的N+1次的查询问题,如果符合条件记录有10000条,就需要执行10001条Select SQL,可想性能会如何的差。

那为什么要提供iterator方法,而不只是提供高效率的find方法?

原因1.与hibernate缓存机制密切相关
find方法实际上是无法利用缓存的,它对缓存只写不读。
find方法只执行一次SQL查询,它无法判断缓存中什么样的数据是符合条件的,也无法保证查询结果的完整性。而iterate方法,会首先查询所有符合条件记录的id,然后根据id去缓存中找,如果缓存中有该id,就返回,没有可以根据id再去数据库查询。
String hql = "from TUser where age > ?";
List userList = session.find(hql, new Integer(18), Hibernate.INTEGER);
Iterator it = session.iterate(hql, new Integer(18), Hibernate.INTEGER);
顺序执行,iterate方法只会执行一次SQL查询,就是查找id,然后根据id就可以从缓存中获得数据。
10月15
         这次我们来讨论一下Hibernate3.2 Session加载数据时get和load方法的区别,其实这个在网上有很多的论述,可大多语焉不详或经不起实践的推敲,让很多初学者学的满腹疑窦,现在我给大家讲解一下:

1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本中get方法也会查找二级缓存!

2.  load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论:

(1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

(2)若为false,就跟get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。
10月10
         很久没有复习java的基础了,对于重定向forward和sendRedirect的区别都有点模棱两可了,最近用到,所以特地的来复习复习这个基础,而且上次面试被别人问forward与sendRedirect没理解太清楚,搞得比较尴尬。现将自己对这个问题的体会写在下面。期望能对一些人有帮助。其实说的简单易懂一些forward是转发,redirect是重定向 ;forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

1.RequestDispatcher.forward()

    是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面(注:这个我的理解是通过参数记录,然后在框架页面中用参数来设定框架内页的地址).
重定向后浏览器地址栏URL不变.
     因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个 JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。
注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个异常
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]