一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Java

[转]老菜鸟致青春,程序员应该选择java 还是 c#

致青春 还记得自己那年考清华失败,被调剂到中科大软院,当初有几个方向可以选,软件设计、嵌入式、信息安全等等,毫不犹豫地选择了信息安全。 为什么选信息安全?这四个字听起来多牛多有感觉,我本科是学物理的,记得做一个光学实验的时候,一个老师看我做的结果,说,学物理不是什么人都可以的,这个是需要一点智商的。 好吧,当初其实并非对我一个人所说,但我确实感觉到受到了鄙视,同时,我没有任何在物理上的精湛技艺可以反击我的老师。 由于整个大学期间,我都在沉迷游戏和小说,以至于辅导员说,现在找你都得预约。 而我的同学基本在学期开始和考试前能见到我,当时为了应付考试,我不得不学习复杂的物理公式和推导,有一门课程是激光原理,老师是双博士学位,大概是很厉害的,在我考试时,过来看我的卷子,说你的”背功“很厉害。 考试时如期通过,但老师大概都对我评价不高。自然,我是感到不愉快的。 回到我的毕业论文,大概是做一个电离层特征参量的反演,其实就是用迭代法解病态方程。 这个论文基本是没有人选的,因为题目本身可能相对比较难,也需要编程实现,好吧,当时下载的是盗版的matlab,参考的是一个日本学者和我导师的论文,铿铿锵锵地写出来了。还做了个所谓的参数优化,以使得结果看起来更平滑。 当时觉得很得意,我女朋友(现在的老婆)也很惊讶,我一个月做完了。 其实这不是第一次领略程序的魅力,在很久之前,高中时期,为了追一个女生,我做过flash,当时我就觉得拖来拖去很麻烦,但苦于没有基础,看不懂actionscript,所以难以深入体会编程的精妙,如果看到网上有一些类似雪花飘落、旋转字等效果,都是直接拷贝修改到完工。 现在回到,为什么选择信息安全上来,因为在大学时,很喜爱游戏,尤爱单机,国情大家是清楚的,而且我没有钱,也不知道哪里可以买到正版,这个猥琐了,呵呵。 仙剑、上古、火炬之光、火焰纹章,各种类型都喜欢。也很喜欢生存类游戏。给一个单机游戏做的exe补丁和用lua拓展的mod至今看来仍让我怀念。 讨厌网游是因为自己没有钱,搞不过RMB玩家,而且砸装备总失败。 唯独一个,2006年时,我玩完美世界,后来玩它的SF,为了砸装备,我第一次想到写封包外挂,由于当时已经有一些socket、tcp/ip的概念了,虽然C++玩不转,还是各种参考,写hook、写字节转换,同时完美当时打击WG很厉害,游戏基址容易变,又加了很多防调试的功能。 但为了不手工砸装备(SF里的石头几乎免费,就是砸上去的几率太低),我欲望那个强啊,所以用OD调试找网络发送的函数地址, 然后C++写代码hook。 程序最终工作很好,我还分享给了几个玩友。 后面也写过一些类似跳舞自动击键的WG,主要也是为了自娱自乐,因为我真的反应不过来屏幕上瞬间出现太多的key! 与程序为伍的日子很少,但每一次接触,似乎都是为了达到自己的一些目标。 所以凌乱的编程体验,虽然不系统,不精湛,却让我快乐。 再次回到为什么选择信息安全上来?也许答案已经很清楚。 当时觉得虚拟机加密太高深了,联网解密也难搞定,所以觉得信息安全一定是能解决我的问题的! 后来你猜到了,就是C,就是汇编,就是linux,我当时是多么反感linux,当时还用的是ubuntu,但为了课程,实在是没有办法,为了考研,自己系统自学了数据结构、计算机网络、操作系统、组成原理,当时在考研论坛上还和一个清华搞计算机体系的探讨问题,刷了好几页的帖子,现在看来,多幼稚!但,快乐也是固定在那个过程之中了。 我讨厌汇编,我讨厌C,我讨厌linux,但他们强大,能够满足需求,这就够了。 java还是 c#? 其实这不应该是我们真正的主题,而且入了行的也很少会java还是c#这么比,但初学的,java和c#往往就代表了两大流派,java代替了j2ee,c#代替了.net,ok,没有关系,这么作为title,不影响我们说事。 如果从语言的角度上来讲,c#毫无疑问胜出,易用、门槛低、优雅、较为简洁。但java和c#的语言特性是相似的。 在很多类的命名上,它们都如出一辙: //java System.out.println("java比C#强!j-a-v-a!"); //C# System.Console.WriteLine("你没看到#是4个+吗,我比c++还强2个+,你就歇菜吧!"); c#出现的时间比java晚,所以自然吸收、借鉴,同时又有它的创新,比如很早就支持lamda表达式、比如event和委托,比如var,比如linq。 但如果从面向接口来讲,java同样可以做到event和listener,只不过对象引用的传递比较直接。 而.Net的类库和jdk则各有千秋。 如果从应用的角度来看,javaee和.Net体系几乎都涵盖了主流的开发方向: 桌面、Web、服务端、数据库、网络、移动端、中间件。 哪个方向,哪个更强?这个留给读者自己体会吧。 微软给.Net一个宇宙最强的IDE,也给了各个方向统一而平滑的编程体验,不得不说,微软的上手要容易的多。 而java则一开始就和开源分不开,多如牛毛的框架、引擎、包,blabla,用java开发,程序员要懂得东西更多一些。应为你大部分情况下得自己整合。但整合的好了就是很强大的,比如SSH。 在近几年很热的大数据和云计算领域,hadoop、spark、tez、leveldb、mongodb、mariadb、hive、hbase,还有oracle,都各自在自己不同的层面发力,大部分的这些都对java是极为友好的。 很多java程序员,都觉得搞.net开发的,就是拖拖控件而已,其实我可以告诉你,说出这种话的java程序员一般都还比较小白,如果你是搞.net的,你也可以说搞java的都是拷贝别人的开源软件的代码,然后改改而已。 当然改改没什么问题,谁都不喜欢重复造轮子,比如,google里面也并非全部是创新,经常”拿“别人的东西自己改吧改吧,淘宝就很不用说了,招了一些能改c、会点编译的程序员,经常拿各种开源框架开刀,然后表明是自己的东西。比如双11的那个问题。 当然不是说淘宝找的人有问题,而是这个企业的文化就是销售和广告文化,后来的google也如此。 回到正题,wpf和silverlight(虽然已经EOL)中最大的创新莫过于xaml技术,如果你认为wpf只是winform的简单升级,或者说你只会在wpf中拖控件,说明你还是一个非常初级的.net程序员,不管你工资上w没有,或者你已经是项目经理了。 xaml天生就是为mvvm模型而生,这一点,搞前端的同学,应该熟悉,即使你不懂wpf,js和html怎么做mvvm,你也应该体会过它的好处。 wpf中在xaml中布局控件,并支持INotifyPropertyChanged接口,可以非常容易的实现界面和数据分离,做出一个mvvm模型出来。 说到标记性语言,我们看看jsp的jstl、struts2的tags,还有asp.net mvc3之后的razor引擎: jstl和aspx的标签类似,自由、强大,可以很容易的穿插交织到html标记中; struts的标签就是个另类,我个人反感这种既不遵循主流标准也不简洁的东西,虽然好多人会说好用,那是个习惯问题,我这么说,不是说这东西难学难掌握,只是比较一下和razor引擎中的标签语法,弱爆了。 razor,强大、简洁、优雅。 你肯定觉得我是微软.net的粉丝,其实我想告诉你的是,最强的标签语言只有两种,html和xml,穿插动态语句到服务端页面上,然后刷出html,从来都不是好的做法,因为不只你一个人写代码,后面可能会有其他人维护这个页面,本来这是需要由web designer来做的事情,但是有了语句,他的维护成本就很高。 规范的页面开发,程序员是不会染指一个css、style的,动态语言在aspx、view、jsp上面应该尽量少用。否则你不如使用php和asp。 这一点,你会在工作中会深有体会的。 青春的你,怎么选择? 看看现在的招聘吧,动不动就是 精通j2ee,精通struts、spring mvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。 .net方面呢? 精通.Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。 我现在处于离职状态,所以每天收到猎聘上的一些推荐,都很郁闷,因为没有一项是我精通的。 但是不妨碍我在2012年实习中,就拿到了13K的月薪,比一些正式员工可能还要高。 而且,仔细想想,代码中经常讲到要容易维护、这个设计模式、那个AOP,这个大并发,那个高性能,我个人没有见到容易维护的代码。学习一个新公司的一套模式,一套老产品,比学习一门新技术需要的时间长得多,你会发现,99%的情况下,你最需要的,不是什么代码,模式,而是对产品的理解、对业务的理解,很多情况下,除非太菜太小白,大家的代码都差不多,谁有时间重构代码?程序员又为何加班? 这是行情,一个项目接一个项目,公司需要挣钱的,这是大部分公司的现状。 为了回答java还是c#的问题,我会从我的经历提供一些参考,既然是我的,那就不会是全面的和准确的,你自己判断。 还是从故事开始吧! 在科大软院(苏州),因为老婆想和我一起在外面过个年,我不得不去临时找实习,当时c和汇编不行啊,所以得选个流行的,什么流行呢,当时是web。 所以我遇到了java还是c#的问题,确切的是我遇到了j2ee还是.net的问题。 因为经常使用windows,又因为.net门槛如此低,所以毫不犹豫选择了.net,当时是不会写SQL的,但是却系统学习了数据库设计原理。 进入公司就接触mvc3,觉得好,外企的技术确实比较新呢,比我学习.net时学的aspx优雅,那个时候开始接触并尝试理解mvc模式和ddd的概念。 当时,时薪25人民币。 6个月的实习,基本能玩javascript和c#,然后sql还是不行,当时记得一个高级开发跟我说,他以前做delphi开发的时候,团队写sql写的好就牛,我深以为然。 只会用Entityframework + mvc3 + javascript,开发网站的我,用理解很浅的.net的web技术体系,支撑了我和老婆在上海的生活费用,当时10年,我们租的拎包式入住公寓1500一个月,不算生活费、水电费。 再一次,通过一项技术,达到了我的目标,支撑了我的计划,当时对技术的理解,但是偏执于.Net,对java阵营是不屑一顾的。 后来很快离开了科大软院和苏州,考取了中科院,到了北京,房租是1580一个月,照样不算生活费、水电费。 没办法,学校发的补贴根本不够押2付3的。 找实习,做过什么呢?office编程,而且当时的老板是从IBM下来的工程师,项目主要是java开发,jsf做页面,招我过去,做word编程,还不能使用.net,你猜到了,我用的是vba。 没做多久,公司发钱就开始拖延,两周后,我没有积蓄,只能被迫离职,后来加入一家公司,从4K到10k,用了8个月,在这里,我完善了程序员生涯中sql能力的快速成长,并且广泛地使用了silvelight、aspx、oracle、mssql技术。记得当时一个北邮毕业的同事,做了6个月的office文档在web展示,因为涉及到了com编程,所以运行非常不稳定也难于调试,更重要的是,拉一个页面到展示,需要20秒。 老板是中科院软件所的博士,架构很厉害,但对于这个技术细节并不擅长,问我有没有办法,我说做过vba,大概了解word的dom结构,我试试。那个同事说,如果你能做到稳定、快速的实现,你可以拿这个做你的毕业论文了。 我说,我试试。 […]

龙生   12 May 2015
View Details

关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名

需求环境: 西安项目中,客户要求保护用户的密码信息,不允许在http中传递明文的密码信息。   实现: 用RSA非对称加密方式实现。后台生成rsa密钥对,然后在登陆页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,用私钥解密,获取密码明文。 这样客户端只需要知道rsa加密方式和公钥,前台不知道私钥是无法解密的,此解决方案还是相对比较安全的。 附件是参照网友资料的java+JS的实现,放在这里供大家下载。访问方式/RSA/login.jsp。 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar文件。 因为后台要转换成bigint,所以对明文长度有些限制: 总长度不超过126(1汉字长度为9),如下两个字符串: 阿送大法散得阿送大法散得阿送 1232132131231231232131232K1232132131231231232131232K1232132131231231232131232K1232132131231231232131232K1234567890123456789012     RSA速度 * 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论 是软件还是硬件实现。 * 速度一直是RSA的缺陷。一般来说只用于少量数据 加密。     Util.java   Java代码 package RSA; /**  *   */ import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import javax.crypto.Cipher; /**  * RSA 工具类。提供加密,解密,生成密钥对等方法。  * 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。  *   */ public class RSAUtil {     private static String RSAKeyStore = "C:/RSAKey.txt";     /**      * * 生成密钥对 *      *       * @return KeyPair *      * @throws EncryptException      */     public static KeyPair generateKeyPair() throws Exception {         try {             KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",                     new org.bouncycastle.jce.provider.BouncyCastleProvider());             final int KEY_SIZE = 1024;// 没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低             keyPairGen.initialize(KEY_SIZE, new SecureRandom());             KeyPair keyPair = keyPairGen.generateKeyPair();             System.out.println(keyPair.getPrivate());             System.out.println(keyPair.getPublic());             saveKeyPair(keyPair);             return keyPair;         } catch (Exception e) {             throw new Exception(e.getMessage());         }     }     public static KeyPair getKeyPair() throws Exception {         FileInputStream fis = new FileInputStream(RSAKeyStore);         ObjectInputStream oos = new ObjectInputStream(fis);         KeyPair kp = (KeyPair) oos.readObject();         oos.close();         fis.close();         return kp;     }     public static void saveKeyPair(KeyPair kp) throws Exception {         FileOutputStream fos = new FileOutputStream(RSAKeyStore);         ObjectOutputStream oos = new ObjectOutputStream(fos); […]

龙生   18 Apr 2015
View Details

IP地址与数字地址相互转换

站长网IP查询地址:http://tool.chinaz.com/ip/ 可以看到,IP查询工具是先将IP段地址转化成数字地址,再才得到IP的物理地址。 ————————————————————————————————————————————- 为什么要将IP段地址转化成数字地址? 根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在INTERNET范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为: 11010010 01001001 10001100 00000010 很明显,这些数字对于人来说不太好记忆。人们为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:118.123.15.102。 由于在同一个区域里,IP段都是很相近的,如果拿IP段(118.123.15.102)直接进行比较,在操作上很是麻烦,而且数据的存储也不易实现,所以才会把IP转换成数字地址,再来确定IP段的物理地址。 ————————————————————————————————————————————- 理解了IP的概念之后,诸如IP(118.123.15.102)怎样转换成数字地址呢? IP本是32为二进制,为了方便记忆才转化成了四段十进制,所以只要把IP还原成二进制,再转换成十进制就可以得到IP的数字地址。 .NET C# IP与数字地址相互转化: //IP转换成数字地址 public static uint IPToInt(string ipAddress) { string disjunctiveStr = ".,: "; char[] delimiter = disjunctiveStr.ToCharArray(); string[] startIP = null; for (int i = 1; i <= 5; i++) { startIP = ipAddress.Split(delimiter, i); } string a1 = startIP[0].ToString(); string a2 = startIP[1].ToString(); string a3 = startIP[2].ToString(); string a4 = startIP[3].ToString(); uint U1 = uint.Parse(a1); uint U2 = uint.Parse(a2); uint U3 = uint.Parse(a3); uint U4 = uint.Parse(a4); uint U = U1 […]

龙生   30 Oct 2014
View Details

动画讲解Eclipse常用快捷键

Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率。小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会。 注释 Ctrl+/ 能为光标”所在行”或者”选中行”添加注释或者取消注释。 也可以对多行添加或取消注释 快速修复 Ctrl + 1 删除当前行 Ctrl+d 光标位于行的任何地方, 按Ctrl+D 删除当前行, 当然也可以删除空行, 不用为了删除行,而按很多删除键了 格式化整个文档 Ctrl+Shift+f 插入空行 Shift + Enter Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift + Ctrl + Enter 在当前行的上一行插入空行 编辑窗口最大化 Ctrl + m 大屏幕可以提高工作效率, Ctrl + m 可以将编辑窗口最大化 显示大纲 Ctrl + O 显示类中方法和属性的大纲,能快速定位类的方法和属性 查找Java类文件 Ctrl + Shift + T 查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而痛苦,而且可以使用“*”、“?”等通配符。 查找引用 Ctrl+Shift+G 查找类、方法和属性的引用。这是一个非常实用的快捷键,例如要修改引用某个方法的代码,可以通过【Ctrl+Shift+G】快捷键迅速定位所有引用此方法的位置。 后退历史记录 Alt+ ←、Alt+ → 后退历史记录和前进历史记录,在跟踪代码时非常有用,用户可能查找了几个有关联的地方,但可能记不清楚了,可以通过这两个快捷键定位查找的顺序。 快速查找选定的内容 Ctrl+K Ctrl + K 快速向下查找选定的内容,从此不再需要用鼠标单击查找对话框了。 Ctrl + Shift + K 快速向上查找选定的内容 重命名 Alt+Shift+R from:http://www.techug.com/eclipse-shortcut-keys

龙生   28 Oct 2014
View Details

最最常用的 100 个 Java 类

大部分的 Java 软件开发都会使用到各种不同的库。近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库。每个类在同一个项目中只计数一次,下面的列表中显示前 100 名的类。 以下列表中按使用最多的类进行排序,第三个数值表示 10000 个项目里使用到该类的项目数,而完整的列表请看 here. java.util.ArrayList (6958) java.io.IOException (6866) java.util.List (6784) java.util.HashMap (5590) java.util.Map (5413) java.io.File (5097) java.io.InputStream (4234) java.util.Set (3915) java.util.Arrays (3884) java.util.Iterator (3856) java.util.Collections (3643) java.util.Date (3461) java.util.HashSet (3278) java.io.BufferedReader (3257) java.util.Collection (3192) java.net.URL (3168) java.io.FileInputStream (3044) java.io.InputStreamReader (3023) org.junit.Test (3008) java.io.FileOutputStream (2843) java.io.FileNotFoundException (2669) java.io.OutputStream (2563) java.util.regex.Pattern (2469) java.io.Serializable (2437) java.util.LinkedList (2372) java.text.SimpleDateFormat (2245) java.util.Properties (2190) java.util.Random (2171) java.lang.reflect.Method (2141) java.io.ByteArrayOutputStream (2112) java.util.regex.Matcher (2012) android.os.Bundle (2007) java.util.logging.Logger (1999) java.io.UnsupportedEncodingException (1968) org.junit.Before (1920) java.util.Comparator (1896) java.io.ByteArrayInputStream (1868) java.io.PrintWriter (1862) java.util.Calendar (1854) android.app.Activity (1843) java.net.MalformedURLException (1828) android.content.Context (1780) android.view.View (1731) java.util.Locale (1719) java.util.Enumeration (1709) java.util.Map.Entry (1705) java.io.FileWriter (1677) java.io.FileReader (1651) android.util.Log (1614) android.content.Intent (1601) java.lang.reflect.InvocationTargetException (1594) java.util.logging.Level (1557) java.lang.reflect.Field (1499) java.io.StringWriter (1499) android.widget.TextView (1442) java.util.LinkedHashMap (1409) java.io.Reader (1390) java.net.URI (1377) java.io.Writer (1339) java.text.ParseException (1318) junit.framework.TestCase (1318) java.io.OutputStreamWriter (1295) java.io.StringReader (1279) java.io.BufferedWriter (1265) java.util.Vector (1254) java.util.StringTokenizer (1251) java.text.DateFormat (1246) java.util.concurrent.TimeUnit (1237) java.io.BufferedInputStream (1235) java.util.TreeMap (1227) org.xml.sax.SAXException (1218) javax.servlet.http.HttpServletRequest (1175) java.io.PrintStream (1168) […]

龙生   30 Sep 2014
View Details

谈谈Visual Studio的缺点,比较Eclipse

 3. 跟踪活动项不方便 Visual Studio有这样一个功能叫做Tracking Active Item,有时候我需要它,有时候又希望关闭它。Visual Studio把它放在选项里面,每次修改的时候都要重复点菜单-》选分类-》点CheckBox-》点OK这样一个重复的动作。 Eclipse把这个功能叫做Link with Editor, 放在主界面的Package Explorer的工具按钮里,打开和关闭都只需要点击一次鼠标就行了。  4. 设置代码格式不够灵活 看上去Visual Studio也提供了不少代码格式选项,可还是缺少很多高级设置,比起Eclipse只能算小巫见大巫了。比如,我很喜欢Eclipse把字段对齐这个功能,但Visual Studio压根没有这个选项。  5. 代码行定位功能不如Eclipse Eclipse编辑器右侧有个特殊区域代表了整个代码文件,断点、错误、警告、书签都会在这里标识出来,不论代码有多长,点击一下就可以定位,非常的方便。 在Visual Studio里面定位代码,要么用鼠标滚轮上下翻动直到找到内容,要么从成员列表的组合框里选择,不论哪一种,都没有Eclipse来得简洁方便。   6. 设置文件编码太过麻烦 Visual Studio既不能指定文件的默认编码,也不能批量设置文件编码,只能通过Save As对话框下面一个很小的箭头手工一个一个指定,麻烦到文件多的时候我有一种想砸了它的冲动。 Eclipse可以从文件类型、工作区、项目、单个文件四个级别设置文件编码,而且允许手工输入编码名称,这比Visual Studio从一个长长的列表里选择要快捷得多。  7. 错误信息不够人性化 Visual Studio如果编译出错,错误信息只是简单的列在输出窗口里,要你去一个一个点开来看。而Eclipse的错误信息同时会在Package Explorer里显示成Overlay Icon,从而清楚的了解到项目的哪些部分受到了错误的影响。  8. 添加新类过于简单 Visual Studio在创建新文件时唯一允许你指定的选项是文件名,剩下的只能手工修改。Eclipse在创建新类时提供诸多选项,比如要求实现某个接口,那么所有接口方法的存根也会一并生成,节约了很多时间。 9. 同一文件的导航功能不够一致 在Visual Studio的代码文件中如何导航?使用成员下拉框。 在可视化编辑器里怎么导航?用Document Outline窗口。 在引用的程序集里又如何导航?用Object Browser窗口。 在Eclipse中,上述所有内容都可以通过Outlilne窗口完成,操作也完全一致,不像Visual Studio那样每个窗口都有不同的界面和操作方法。  10. 管理引用 我们创建项目的时候总有一些库是经常要用到的,比如数据项目引用NHibernate,Silverlight项目引用Toolkit,等等。Visual Studio引用哪些程序集只能由我们手工查找,而Eclipse提供了User Library的管理功能,能够让我们将常用的库引用一次性导进来,比Visual Studio的Add References不知方便几许。  11. 重构功能比较初级 Visual Studio支持代码重构,Eclipse也支持,但是你比较一下两者的菜单就知道,它们对重构的支持程度完全不是同一个级别的。 12. 代码提示不够清楚美观 Visual Studio的代码提示同样只有单一的文字格式,大段的文字看下来,很难抓住重点。 Eclipse的代码提示格式是富格式内容,能突出显示重点,可导航的部分会显示成超链接,同时还提供附加的功能按钮,比Visual Studio要细致体贴得多。 13. 缺少本地历史记录功能 Eclipse有一个非常强大的功能是将最近的编辑历史记录保存在本地,这样即使你没有使用版本数据库也能跟踪修订信息、比较版本、还原历史记录,对一些实验性的项目或者不需要签入的开源项目来说是非常有用的,并且你也可以用它来记忆内容,整理思路。Visual Studio则完全没有这种功能。 14. 缺少智能化的快速修复 这是我最爱的Eclipse功能!Eclipse不仅找出编译错误,还能够为许多种类型的错误提供修复选项。这个修复选项确实相当的智能,对很多常见的编译错误都能找到合理的解决方案,比如下面的错误它就能猜到getMessge()实际上是getMessage()拼错了,我只需要在这一项上按回车就万事OK。 Visual Studio的只能机械的显示一些错误信息。有时候错误提示也会附带一些关于如何修正错误的提示,但大多比较死板,需要程序员靠自己的经验来修复错误。   15. 最后一个不得不说的地方是,Eclipse是完全免安装的。   这意味着什么呢?如果我哪天重新安装了系统,那么打开Eclipse马上可以再次使用,以前设置的所有选项和更新内容全部立即可用。而Visual Studio就不得不重新安装、打补丁、设置各种选项,如果运气不好安装过程中突然出了什么错,那你所有过程重来一遍吧,一整天就这样没了。更让人讨厌的是,VS2010安装过程中竟然要重启两次,就算你非重启不可的话,难道不能把所有内容准备好然后一次性解决吗!? from:http://www.cnblogs.com/younggun/archive/2010/11/05/1870026.html

龙生   24 Sep 2014
View Details

Eclipse快捷键 10个最有用的快捷键

Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。    1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。 2. ctrl+o:快速outline 如果想要查看当前类的方法或某个特定方法,但又不想把代码拉上拉下,也不想使用查找功能的话,就用ctrl+o吧。它可以列出当前类中的所有方法及属性,你只需输入你想要查询的方法名,点击enter就能够直接跳转至你想去的位置。 3. ctrl+e:快速转换编辑器 这组快捷键将帮助你在打开的编辑器之间浏览。使用ctrl+page down或ctrl+page up可以浏览前后的选项卡,但是在很多文件打开的状态下,ctrl+e会更加有效率。 4. ctrl+2,L:为本地变量赋值 开发过程中,我常常先编写方法,如Calendar.getInstance(),然后通过ctrl+2快捷键将方法的计算结果赋值于一个本地变量之上。 这样我节省了输入类名,变量名以及导入声明的时间。Ctrl+F的效果类似,不过效果是把方法的计算结果赋值于类中的域。     5. alt+shift+r:重命名 重命名属性及方法在几年前还是个很麻烦的事,需要大量使用搜索及替换,以至于代码变得零零散散的。今天的Java IDE提供源码处理功能,Eclipse也是一样。现在,变量和方法的重命名变得十分简单,你会习惯于在每次出现更好替代名称的时候都做一次重命名。要使 用这个功能,将鼠标移动至属性名或方法名上,按下alt+shift+r,输入新名称并点击回车。就此完成。如果你重命名的是类中的一个属性,你可以点击alt+shift+r两次,这会呼叫出源码处理对话框,可以实现get及set方法的自动重命名。     6. alt+shift+l以及alt+shift+m:提取本地变量及方法 源码处理还包括从大块的代码中提取变量和方法的功能。比如,要从一个string创建一个常量,那么就选定文本并按下alt+shift+l即可。如果同 一个string在同一类中的别处出现,它会被自动替换。方法提取也是个非常方便的功能。将大方法分解成较小的、充分定义的方法会极大的减少复杂度,并提 升代码的可测试性。     7. shift+enter及ctrl+shift+enter Shift+enter在当前行之下创建一个空白行,与光标是否在行末无关。Ctrl+shift+enter则在当前行之前插入空白行。     8. Alt+方向键 这也是个节省时间的法宝。这个组合将当前行的内容往上或下移动。在try/catch部分,这个快捷方式尤其好使。     9. ctrl+m 大显示屏幕能够提高工作效率是大家都知道的。Ctrl+m是编辑器窗口最大化的快捷键。     10. ctrl+.及ctrl+1:下一个错误及快速修改 ctrl+.将光标移动至当前文件中的下一个报错处或警告处。这组快捷键我一般与ctrl+1一并使用,即修改建议的快捷键。新版Eclipse的修改建 议做的很不错,可以帮你解决很多问题,如方法中的缺失参数,throw/catch exception,未执行的方法等等。 更多快捷键组合可在Eclipse按下ctrl+shift+L查看。 让我们按照使用频率来看看我最爱用的一些热键组合。(注:以下内容在Eclipse3.02及一上版本通过测试) 1. Control-Shift-T: 打开类型(Open type)。如果你不是有意磨洋工,还是忘记通过源码树(source tree)打开的方式吧。用eclipse很容易打开接口的实现类的,按ctrl+t会列出接口的实现类列表 2. Control-Shift-R: 打开资源(不只是用来寻找Java文件)。小提示:利用Navigator视图的黄色双向箭头按钮让你的编辑窗口和导航器相关联。这会让你打开的文件对应显示在导航器的层级结构中,这样便于组织信息。如果这影响了速度,就关掉它。 3. F3: 打开申明(Open declaration)。或者,利用Declaration Tab(在Java视图模式下,选择Windows --> Show View — > Declaration)。当你选中代码中的一个方法,然后按这个按键,它会把整个方法在申明方框里显示出来。 4. Alt-left arrow: 在导航历史记录(Navigation History)中后退。就像Web浏览器的后退按钮一样,在利用F3跳转之后,特别有用。(用来返回原先编译的地方) 5. Alt-right arrow: 导航历史记录中向前。 6. Control-Q: 回到最后一次编辑的地方。这个快捷键也是当你在代码中跳转后用的。特别是当你钻的过深,忘记你最初在做什么的时候。 7. Control-Shift-G: 在workspace中搜索引用(reference)。这 是重构的前提。对于方法,这个热键的作用和F3恰好相反。它使你在方法的栈中,向上找出一个方法的所有调用者。一个与此相关的功能是开启“标记”功能 (occurrence marking) 。选择Windows->Preferences->Java-> Editor-> […]

龙生   24 Sep 2014
View Details

2014 年最流行的 Java 应用服务器

去年我们发布了 2013 年 Java 应用服务器市场调查。为了验证这个报告是否发送了变化,我们采集了从2月到5月的 783 给不同的配置点。数据通过启动的类路径进行收集,查询类似于 “grep -i tomcat classpath.log”. 我们发现这个结果跟去年的差别不大,如下图所示: Tomcat 仍然以 41% 比例高居榜首,不过比起 2013 年的 43% 略有下降。Jetty 占 31% 排第二,而 JBoss/WildFly 占 18%。 via plumbr from:http://www.oschina.net/news/52299/most-popular-application-servers-in-2014

龙生   30 May 2014
View Details

Struts2+Spring+Hibernate 分别用来做什么?

一、Spring  Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 二、STRUCTS  Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 三、Hibernate  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。,

龙生   24 Jan 2014
View Details
1 65 66 67 69