解惑

解己之惑,解人之惑

标签:Java (第4页共6页)

待掌握的Eclipse快捷键

昨天整理了下我常用的Eclipse快捷键,今天看了下别人整理的,发现还有些需要掌握的:

  • Ctrl+D:删除光标所在行
  • Ctrl+K:将光标停留在变量上,按Ctrl+K键可以查找到下一个同样的变量
  • Shift+Ctrl+K:和Ctrl+K查找的方向相反
  • Shift+Ctrl+X:将所选字符转为大写
  • Shift+Ctrl+Y:将所选字符转为小写
  • Ctrl+M:快速对当前视图最大化
  • Ctrl+O:在代码中打开类似大纲视图的小窗口
  • 双击左括号(小括号、中括号、大括号),将选择括号内的所有内容。
  • Ctrl+1:光标停在某变量上,按Ctrl+1键,可以提供快速重构方案。选中若干行,按Ctrl+1键可将此段代码放入for、while、if、do或try等代码块中。
  • F3:打开声明该引用的文件

最后是一个可能不会常用的快捷键,如果掌握了这些想掌握的快捷键的话:CTRL+SHIFT+L:列出快捷键列表。

我最常用的Eclipse快捷键

有人整理了Eclipse的全部快捷键,但是要记住全部的快捷键也没有必要,下面的这些是我最常用的快捷键,和大家交流下:

  • CTRL+SHIFT+T:根据名字查找类,可以使用通配符,只能查找类,可以是工程引用的包中的类
  • CTRL+SHIFT+R:根据名字查找资源,可以是jsp,xml,js等任何文件
  • F11:以DEBUG模式运行上次运行的类
  • F5:单步进入,进入当前调试的代码行执行
  • F6:单步执行当前行
  • F8:执行到下一个断点
  • ALT+SHIFT+R:重命名选择的文件名,如果是类的话,将进行重构,同时修改相关的引用
  • ALT+上下箭头:将当前行或者选中的行上移或者下移一行
  • ALT+/:代码自动补全
  • CTRL+SHIFT+O:自动导入需要的类
  • CTRL+SHIFT+F:格式化当前文件或者选中的行
  • CTRL+L:定位到指定的行
  • CTRL+/:注释/取消注释
  • CTRL+ALT+H:打开调用层次,如果要知道一个方法的调用入口时很有用
  • CTRL+Z:取消上次修改(Undo)
  • CTRL+Y:重复上次修改(Redo)

提高Java技能的几种简单有效的方法

这个问题可能是很多做Java的人最关心的,特别是新手,而且我原来也写过一些东西,现在我再简单的列举一些简单但是行之有效的方法:

  • 上各个技术论坛看别人的帖子,特别是那些回复数或者点击数比较高的帖子,回复数高说明讨论激烈,很可能有高手在当中切磋,点击数高说明这个是大家很关心的,你以后很可能也会遇到或者用得上。
  • 尝试帮助别人解决问题,特别是你没有遇到过,但是你知道原因或者你懂得其中的原理,在这个过程中,你可以逐步的培养自己解决问题的能力、经验以及自信心。
  • 多看别人写的代码,无论是高手还是新手,从高手的代码你可以学习东西,从新手的代码中,你可以尝试去修改他的代码,让这个代码更加的高效、通用、简单,总之就是尽可能优化,直到你自己感觉很满意。
  • 注意积累自己的代码库,有时候是一个简单的方法,有时候可能是一个小的功能块,有时候甚至是一个比较大的子系统,以后自己要写一个系统,或者要设计一个系统,甚至你遇到设计问题的时候,你都可以到这些代码库中寻找思路甚至是直接拿来用。最重要的是,无论你认为自己的公司多么的差,多么的没有技术含量,你所在的项目肯定会有有价值的代码。(但是要注意,不要仅仅拷贝一份代码,要抽取你能够理解,并认为有价值的部分)
  • 多看书,系统的看书,不要浅尝辄止,要看那些经典的书。程序设计风格、设计模式、OO、重构都是必看的。
  • 最后也是最重要的是,遇到问题,要尽量去了解为什么会出现这样的问题,而不是仅仅停留在解决问题的层次。

如果你有信心并且确实可以在一个月之内找到一份满意的工作,你基本上可以算是高手(高手不一定高薪,但是温饱应该问题不大)了

最后是关于时间,众所周知,新手都会面临一个先有鸡还是先有蛋的问题,公司都要求你有经验,但是新手没有,所以你一定是一个蛋,你要把你的全部时间都花在提高自己上,少看些新闻,多看些书、看些帖子吧,当然,要花一些时间在锻炼身体上(呵呵,这个是我现在最大的感受)。关于加班,尽量避免,有两个方法,一个是提高自己的效率(使用合适的工具辅助,工欲善其事必先利其器),另外一个就是多思考你的那些工作是重复性的,怎么样可以少写一些代码。

Ant+JUnit+Cobertura

看标题就知道,这个是开发一个Java应用的利器组合,使用Ant完成工程的构建(Build),使用JUnit完成单元测试,使用Cobertura完成代码覆盖测试,也可以辅助查找性能瓶颈一些类型的BUG,下面是一个完整的build.xml范例,可以完全拿来用,不需任何修改,只要你的目录和这里的目录一致(应该也是很通用的):

下载下面的build.xml文件

文件内容:
阅读全文

遭遇OutOfMemoryError

进行运行全部的测试用例的时候发现不能运行完了,到了后面的一些测试用例的时候出现OutOfMemoryError,程序并没有什么大内存消耗,上网查了一下,发现可能是junit导致的,因为teardown并没有清理掉使用过的内存,没有办法,只能修改Run的时候的参数,把内存加大,问题解决。
Eclipse启动JUnit的时候设置的值大概是64M左右,而我加大内存后监控内存使用的结果表明全部的测试用例需要使用100M内存。
方法为:Run->Run…->JUnit->AllTests->(x)=Arguments->VM Arguments: -Xmx500m
注意上面的AllTests为自己要修改的那个包含全部测试用例的Test suite的类。

Java工程师推荐书目

简单的推荐几本我认为Java工程师应该看的书。
程序设计实践
这个不是Java的书,应该是所有的软件工程师都应该看的,可以培养良好的编程习惯。
Think In Java
不多说,学习Java必看的。
SL275
这个是SCJP认证的教材,对于学习Java的一些细节性的语法点或者特性非常的有帮助,现在很多的Java面试题似乎也喜欢出这些相关的问题。
Java高效编程指南
这个是SUN出的书,比较全面的介绍了Java基础编程应该注意的一些问题。
Java技术精髓
这个也是SUN出的书,比高效编程指南更全面的介绍了Java编程应该注意的一些问题,包括EJB方面的内容。
Java Pitfalls
介绍了很多Java编程容易遇到的陷阱以及解决方法。
设计模式
就是GOF的那本,比较难懂,但是还是必看的,结合一些Java的实际例子看比较好,或者看完以后看看老版本的Jive的源代码(2.0及以前)
重构
代码应该经常的重构以不断的提升程序的结构,让代码更好维护、更可读、更灵活、扩展性更好。特别是要和设计模式结合。

如何解决问题

对于新手而言,最大的问题可能就是遇到问题完全没有头绪,特别是程序出错的时候,简单的说一下我解决问题的方式。

  1. 首先就是看错误信息,发生错误,一般都会有一些错误信息,在控制台或者日志里面,要仔细的看那些错误信息,有时候错误信息的提示已经指出了问题的所在,如果是一堆的调用堆栈,最重要的就是最开始的错误信息和caused by的那个错误信息。通过这个方式我们至少可以解决20%的问题。
  2. 如果是自己写的或者公司其他同事的代码出错,那么就要从错误堆栈信息里面找自己公司代码的那些行了,并且重新浏览一遍那些代码,思考可能的出错原因并进行调试。一定要知道如何使用IDE进行调试。
  3. 如果不是公司的代码出错,而是使用的服务器或者第三方组件出错,那么就直接把出错信息贴到google里面搜索下其他人出现的相同问题,并找到可能和你一样的问题。
  4. 如果是第三方的代码出的问题,并且是比较简单的开源组件,看看相关的源代码也是一个选择。
  5. 如果还不能搞定,那么找公司的其他同事帮忙,特别是你认为对所出现的问题比较熟悉的人。当然,你应该首先判断是哪方面的问题。
  6. 最后就是上论坛提问题,期望有人遇到过相同问题,或者是高手帮你分析问题并提示你如何确定问题。
  7. 最后一招就是修改实现方式,绕过问题,有些是服务器、OS的限制,使用其他的方法搞定吧。

使用Command分离可能的递归依赖

在完成这个EJB单元测试框架的CMP的时候,核心应该就是成功使用Command模式,框架在初始化的时候会自动初始化需要使用的Entity Bean,包括Entity Bean之间的依赖关系,但是如果在初始化的时候,一个Entity Bean依赖另外一个还没有初始化的Entity Bean,而所依赖的那个Entity Bean又依赖这个Entity Bean,就会形成循环依赖。我使用Command模式,讲这个依赖关系放到一个Command里面,然后在一个Entity Bean的基本属性初始化完成以后再执行Command队列初始化那些关系,就不会形成循环依赖了。

代码如下:
阅读全文

使用分类提高速度

这个是我做这个单元测试框架最大的感受,原来的代码存在两个使用大List的地方,一个是MockEJB自己带的AspectSystemImpl,它把所有的Aspect放在一个List然后查找匹配的,后来我修改了实现,按照不同的Bean放到不同List再用一个Map分类,一举提高20倍速度,然后我又修改了原来Command队列的实现,使用同样的原理,也提高了30%的性能。
所以如果你的代码中也使用到了List之类的集合,添加到里面的东西比较多,要进行比较或者某种查找,那么进行简单的分类可能是提高性能的关键。分类功能简单的使用一个HashMap就可以了。

总算是初步完成了EJB单元测试框架

经过一段时间的努力,我总算是初步完成了这个EJB单元测试框架,现在运行那些测试用例(183个,难易不等)只需要60秒左右,我挑选出来的一个做为样例的Session Bean的代码行覆盖率达到94%,而Branch覆盖率为100%。
明天计划说服其它的人使用这个框架辅助他们的开发,虽然这个是单元测试,但是因为不用启动JBoss也可以调试Session Bean和Action,我想使用它辅助开发也是个不错的主意(我们的JBoss启动需要至少2分钟,一般都是在3分钟以上)。另外一个进行辅助开发的原因是我们的时间很紧,原本计划在这个版本中要求新的功能必须有单元测试的要求可能也要取消了,那我辛辛苦苦完成的框架可能要拖到至少明年3月以后才可能被使用了,夜长梦多啊。
另外一个考虑就是他们写的测试用例越多,可能发现的问题也越多,也好帮助我更加完善这个框架。另外就是可能会要求我增加更多的功能辅助他们的验证工作。

更早的文章 更新的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑