技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!
技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!
本期特邀《轻量级Java EE企业应用实战(第3版)》一书作者李刚老师,针对Java EE企业应用开发中遇到的典型问题给予解答,欢迎网友积极提问,与专家一起讨论!
查看本期门诊精彩实录:http://doctor.51cto.com/develop-261.html
参与最新技术门诊:运维工程师的生存法则
精选本期网友提问与专家解答,以供网友学习参考。
Q:学了两年的Java,从事J2EE企业级网站开发工作也近一年的时间了,自己想去学习Android,但是有人说,如果去学Android,那么你将会与J2EE方面的知识绝缘,而自己对这方面又不想丢下,不想与它绝缘,一种矛盾油然而生,请李老师您给点建议,谢谢!
A :如果有扎实的Java基本功,Java开发者是可以非常快速都过度到Android开发的。关于如何从Java开发者快速过度到Android开发,可以先了解一下《疯狂Android讲义》,应该对你有帮助。
整个Java、Java EE、Android的学习路线,可以参考http://www.crazyit.org/thread-5953-1-1.html的学习路线图。
Android完全可以和已有的JavaEE技术融合:因为Android只是一个移动客户端,而企业级应用的数据存储、数据计算都放在服务器端完成。Android客户端可以充分发挥“携带方便、上网方便”的优势,作为企业级应用的客户端使用。
Q:李老师您好。我想补充一我的问题,我想问一下关于:
1.关于我们使用这些框架,性能优化方面的建议。
2.关于代码优化方面,架构优化方面了希望能给指点个方面。
十分感谢,期待您的回复。
A:性能优化方面,可以从如下几个层次考虑
1. Java编程的代码风格,比如尽量使用String直接量、避免多次重复new实例,使用位移运算代替乘、除运算等等。
2. 从持久层考虑,优化底层数据库设计,比如建索引、分表存储等,同时对查询语句进行调优。
3. 从数据缓存方面着手。采用适当的缓存策略,可以减少与底层数据库的交互次数。
4. 采用“静态响应”,服务器可以采用页面缓存技术,将经常被请求的页面做成静态缓存,避免每次请求都需要重新生成响应页面。
5. 提升服务器性能,可以考虑使用cluster,增加负载均衡、fail over等。
Q:我挺讨厌Hibernate的,Hibernate把程序员和数据库隔离了,长久使用Hibernate的程序员虽然能够快速 开发,但是写出来的代码的执 行效率很低,比不上jdbc直接操作mysql,我认为Struts +Spring +jdbc就够了,我面试的很多程序员对数据库一无所知,对于程序优化不知道如何优化,完全是代码堆砌。不知道老师对Hibernate是如何理解的?
A:我十分认同你的观点!早几年我甚至在网络上、其他培训机构过来的学生听到一个观点:有了Hibernate,以后就不需要JDBC了。当时我就极力驳斥这种观点。
但Hibernate也不需要被“深恶痛绝”,关键在于你怎么使用它,因为Hibernate同样存在性能优化。
就像我在讲授Hibernate时,总是打开SQL调试选项,这样就可以实时观察Hibernate为我们做到每一个事情,从而可以进行“针对性的”优化。
实际上,Hibernate在性能优化上做了不少努力:比如Hibernate的延迟加载(本质就是动态代理模式)、更新之前的状态检查,Session 级别的一级缓存,SessionFactory级别的二级缓存,如果好好利用这些特性,Hibernate比单纯用JDBC性能要更好(注意这里说的是, 单纯用JDBC。因为JDBC用得好,同样可以实现缓存、延迟加载、更新之前的状态检查 等机制)。
其实看到你的“讨厌”,我有非常深的体会——我甚至劝告初学者开始学java时不要用JBuilder(早期)、Eclipse之类工具,因为它们同样把程序员和真正的Java编程隔离了,导致那些java学习者离开IDE工具之后、甚至换一个IDE工具都会无所适从。
——所以我的建议是,初学者先不要使用IDE工具。等你真正明白你在IDE工具里每点一次菜单、每按一个按钮……IDE工具为了做了什么, 为什么 要做这 些东西之后,再去使用IDE工具,这时候就可以随意地在各种IDE工具之间自由切换,从而做到:没有IDE工具可以做得很好,有IDE工具可以开发的很 快;也会自己开发一些IDE插件来更大程度地加速开发。
Q:李老师,您好!首先,非常感谢您写的书,使我进入了Java EE开发的世界,让我快速的了解了Java EE,并且成功的做出了两个小的项目了,目前有一个稍微大点的项目还正在进行中。我现在就说说我的困惑吧,希望李老师能帮忙解惑,谢谢了。
我的问题分为以下几点:
1。由于项目属于没有人带,完全自己摸索着做的那种,我不知道 自己的设计是否规范,是否 安全,效率是否高,因为我的项目数据量也比较小,逻辑关系也不是很复杂,现在,手头正在进行的这个项目,关系有点复杂,隐隐约约的感觉有些吃力。我们的项 目团队就那么几个人,我们都是学生,个人感觉我们开发出来的项目都比较的山寨,做项目的出发点就是把功能做出来,而不管里面的代码有多么的丑陋,多么的糟 糕,多么的没有扩展性、不能重用等问题,这些问题我个人归结于一点就是规范性,我不知道该怎么来规范我的开发,我的小团队。
2.项目中出了问题的解决之道
虽然到目前为止,项目中出现了各种各样的问题,比较幸运的是, 目前好像都解决了,这里用 了"好像"这个词,因为有些个问题,其实说解决了也算解决了,但是仔细较真的话,那就是没解决了。个人解决问题的方式一般是:①CSDN发帖子②QQ群询 问③google 再就没其他的途径了,和团队的其他成员也没啥好沟通的,主要是因为跟团队里面的人员沟通都比较的费力,而且感觉更是浪费时间。
鉴于上述几种途径也有比较多的缺陷,所以,这里询问李老师,当碰到了自己不会的问题怎么办,怎么做到有一个指导方向,快速的解决问题。而不是浪费大量的时间去发帖子,等回复。
3.我们目前开发的项目中存在的问题
由于开发的是些ERP之类的小系统,所以对于网络编程、多线程等接触的很少,感觉还是有必要做一做这方面的事情,但是感觉使用SSH框架接触这些东西的概率很小是吧,也不知道是不是我思考的太狭隘了。
谢谢李老师。盼回复。
A:1. 规范这个东西,一方面可以借助于一些网络上流行的、有些公司暴露的规范,另一方面也可以根据自己的思考、总结制订一些约定。但如果希望更高层次的规范,只能去参加一些国际上通用的软件行业规范,但这些对你们小公司可能并不台适合吧。
2. 遇到问题的解决方法,就看你对技术的把握程度了。一般来说,我遇到问题也是先google看看,找不到再仔细查看下它的manul、guide之类,还找不到解决方法再登录相关jira找找,还解决不了再跟踪源代码看看底层细节——按这个思路基本都能解决了。
3. 没错。你说的多线程、网络通信、反射这些都是Java基础,都需要扎实掌握。
Q:你好,李老师:
我做java快两年了,平时的工作也就是用一些框架快速完成开发任务而已,感觉学东西都是跟着项目走的,学的也很浅,也很被动,您能给一些提升能力的建议吗?作为一个java开发人员,应该怎样规划自己的发展道路?
我自个觉得一个项目中数据是重要的一块,所以会多关注一些数据库的东西,我这样的看法对吗?如果是对的,从项目的角度出发,我应该学习数据库的哪些知识呢?又该怎样学习?
期待您的回复!
谢谢
A:有一定道理的。可以这样说,所以IT技术都是以数据为核心的。
所有开发人员,都需要在企业里完成企业项目——这是我们领工资后必须做的事情。但作为一个有想法、希望提高的程序员,不能仅仅满足于完成公司的项 目,而是 应该尽量在项目开发中体现自己的设计理念:多换几种实现方式,思考如何让自己可以“更懒”——尽可能把自己所做的项目进行“通用化”,把项目中通用代码与 业务代码分离开,把通用代码抽取出来简化后面项目的开发。
并思考让代码更加优雅、更加简洁?以及如何让项目后期修改、升级时,如何改动最小?
数据库的学习,掌握通用的SQL语法、数据库管理之后,可以在数据库性能监控、性能调优上多化精力。
Q:老师您好。
是不是在实际的开发中,一定要掌握和运用Struts +Spring +Hibernate等等这些核心呢?
我也可以用到其中的某一个去完成一件事。
Struts +Spring +Hibernate等等这些核心的优缺点在哪里?如何能更好的掌握?在何种开发环境下用最合适?烦请老师解答.
A:其实并不是一定要用Struts2+Spring+Hibernate,只是说这种组合具有很大的通用型。说得简单点,这种组合是一种无需选择、无需评估的组合,很多公司,很多项目都在用,它具有稳定性高、可扩展性好的特点。
对于Hibernate来说,它作为一种持久化技术,主要的功能在于允许用户以面向对象的方式来操作数据库;但对于大批量、集中的数据访问操作,性能上并没有任何优势。遇到这种场景,可以选择使用MyBatis来代替Hibernate。
掌握Struts2+Spring+Hibernate整合开发的方法,可以参考《轻量级Java EE企业应用实战》。
本文出自 “51CTO技术门诊” 博客,请务必保留此出处http://doctor.blog.51cto.com/939235/882833