设为首页 收藏本站
查看: 892|回复: 0

[经验分享] 查漏补缺2012

[复制链接]

尚未签到

发表于 2016-5-23 10:06:10 | 显示全部楼层 |阅读模式

2012.2-2012.12

  1、Notepad++中的“Show All Characters”可以查看windows和unix下的不同的换行符,windows下的换行符为CRLF,unix下的换行符为LF

  


  2、单元素的枚举类型目前是实现Singleton的最佳方法。枚举表示简洁,并提供了序列化机制,即使在面对复杂的序列化或者反射攻击的时候,能够绝对防止多次序列化。


public enum Elvis {
INSTANCE;
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}








  
 


  3、IOC(控制反转)/DI(依赖注入)

  它的主要目的是实现松散耦合,以便提升整个解决方案的可维护性。






松散耦合可被概述为基于接口而不是具体实现进行编程的思想。






但是,因为接口没有构造函数,如何创建那些接口的实例马上就成了一个问题。

  参考Martin Fowler
的两篇文章

  


  first: http://martinfowler.com/bliki/InversionOfControl.html


  


  second: http://martinfowler.com/articles/injection.html


  


  4、Servlet技术简介: http://www.ibm.com/developerworks/cn/education/java/j-intserv/index.html


  里面有一个简单的demo,可以帮助学习或者复习基本的Servlet,里面的例子稍稍修改了一点,主要是I/O操作方面的,还有这个例子的代码感觉有个别地方有点小错误,修改了一下。附件contacts.zip是代码。

  
  另一篇文章:http://www.oschina.net/question/12_52027


  再一篇:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/


  


  5、float和double类型不适合用于货币计算,使用BigDecimal、int、long进行货币计算。

  相对于int和long类型,BigDecimal(可以处理超过18位的数字)使用起来相对麻烦,但对于完全控制舍入进行业务计算,使用它非常方便。

  另外一点是,使用float和double进行比较的时候,应该使用他们包装类的compare方法,如Float.compare和Double.compare,至于为什么要这样使用,可以查看你Double和Float的API
,其中的equals方法。

  


  6、ANT常用标签:http://ant.apache.org/manual/index.html


  之后点击Ant Tasks, 然后点击Overview of Ant Tasks, 可以看到所有的标签,如果你想了解某一个,可以自行查看。

  


  7、关于注解的基础知识: http://www.infoq.com/cn/articles/cf-java-annotation


  



import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredRoles {
String[] value();
}








  



import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.security.AccessControlException;
import java.util.Arrays;
public class AccessInvocationHandler<T> implements InvocationHandler {
final T accessObj;
public AccessInvocationHandler(T accessObj) {
this.accessObj = accessObj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
RequiredRoles annotation = method.getAnnotation(RequiredRoles.class); // 通过反射API获取注解
if (annotation != null) {
String[] roles = annotation.value();
// String role = AccessControl.getCurrentRole();
String role = "user";
if (!Arrays.asList(roles).contains(role)) {
throw new AccessControlException(
"The user is not allowed to invoke this method.");
}
}
return method.invoke(accessObj, args);
}
}








  
 


      
Effective java中的item35(注解优先于命名模式)也有一些较好的解释。附件中的effective java second edition是电子书(英文版的)。

  


  8、


上面的注解代码中出现了动态代理,所以有必要了解动态代理的相关知识,下面是IBM上的一篇文章:

Java 动态代理机制分析及扩展


        
关于代理的另一篇文章: http://www.iyunv.com/topic/448655



  


  9、深入理解java虚拟机(翻译):http://www.cnblogs.com/gengyulong/archive/2011/04/11/2012560.html


  


  10、A filesystem is a higher level of abstraction. Filesystems are a particular method of arranging and interpreting data stored on a disk (or some other random-access, block-oriented device).


  


  文件系统是更高层次的抽象,是安排、解释磁盘(或其他随机存取块设备)数据的一种独特方式。

  


  11、深入学习java NIO,附件中有java NIO电子书。

  a、 
http://tutorials.jenkov.com/java-nio/index.html


   b、 查看java编程思想的nio那一章(18.10-第十八章第十小节)

  
  
  12、 pl/sql中NUMBER变量默认值是null。

  

DECLARE
v_num1 NUMBER := 0;
v_num2 NUMBER;
BEGIN
IF v_num1 = v_num2 THEN
DBMS_OUTPUT.PUT_LINE ('v_num1 = v_num2');
ELSE
DBMS_OUTPUT.PUT_LINE ('v_num1 != v_num2');
END IF;
END;
  

输出结果是:

                   v_num1 != v_num2

                 PL/SQL procedure successfully completed.

  


13、RFC
Request for
Comments

)是各个标准机构提交的标准文档,研究人员和开发人员可以通过这些文档跟踪新技术。

 
14、jsoup使用:http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/index.html?ca=drs-


 
15、
shell中[ ]与[[ ]]条件测试有什么区别?

[ ]是shell内建的测试命令,[[ ]]是由外置命令/usr/bin/test进行测试,[[]]结构比Bash
的[]更加灵活,在[[]]结构中,将没有文件扩展或者是单词分离,但是会发生参数扩展和命令替换.:使用[[]],而不是[],能够阻止脚本中的许多逻
辑错误.比如,尽管在[]中将给出一个错误,但是&&,||,<>操作还是能够工作在一个[[]]test 之中。

 
16、15.18.1.2 Optimization of String Concatenation(JLS中关于字符串连接操作符‘+’的性能说明)




An implementation
may choose
to perform conversion and concatenation in one

step to avoid creating and then discarding an intermediate String object. To

increase the performance of repeated string concatenation, a Java compiler may

use the StringBuffer class or a similar technique to reduce the number of intermediate

String objects that are created by evaluation of an expression.

For primitive types, an implementation may also optimize away the creation

of a wrapper object by converting directly from a primitive type to a string.


 
还可以参考effective java2(items 51)

 
17、try catch finally中不执行finally的方式,在try中调用System.exit(0), The System.exit
method halts the execution of
the current thread and all others dead in their tracks.



try {
System.out.println("Hello world");
System.exit(0);
} finally {
System.out.println("Goodbye world");
}
   输出的结果是: Hello World

 
18、Eclipse调试JDK源码(内容来自网络


  突然发现用eclipse调试时不能跟进jdk的类,search一下有人说下jdk的debug版本,但之前我一直用非debug版本也可以进入调试啊,也有人说下完整的src,但是我的是一些核心jdk类就无法调试。

   重新检查eclipse的配置,发现原因,原来install
jre配置使用的是jre
home是jre安装目录,更改到jdk目录,即可以如愿跟进jdk的核心类了。<路径:preferences-->java-->install jre>

附录:   

    1、JDK自带的src.zip里源代码并不完整,不能查看相关类的源文件(当然,喜欢的话可以反编译)。譬如,以sun.开头的包就不包含在src.zip这个压缩包中。   

    解决办法:下载完整的源文件包,调试时附加给Debugger 即可。    

     2、默认的 rt.jar没有行号信息,虽然有源代码,但是不能设置断点。   

  

   解决办法:下载Debug版的JDK,安装以后将其设置为Eclipse的默认JVM即可。


  19、Windows下硬链接、软链接和快捷方式的区别(来自网络
)

  20、网络抓取 可以 httpcomponents + jsoup实现(仅jsoup也可以)

  21、网络爬虫的学习可以看Apache Nutch

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-220614-1-1.html 上篇帖子: SQL SERVER 2012 POWER VIEW 下篇帖子: 2012,三星势必问鼎中原
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表