1.Java,Math.round(-1.5)=-1的原因
round的实现方法是这样的:
public static long round(double a) { if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5 return (long)floor(a + 0.5d); else return 0; }
即将param+0.5 之后向下取整,因此:-1.5+0.5=-1;floor(-1)=-1;
再深入的之后再研究。
2.jdk1.5及以下在实现接口的时候不能使用@Override注解,1.6及以上的jdk中才可以。在idea中有个一个project structure设置。里面可以设置语言等级,这个和jdk的设置不太一样。
里面描述了一些jdk版本变化带来的差异。
3.try{}finally{}相关
public static void main(String[] args) { System.out.println(test("5")); } public static String test(String abc){ try{ return rStr(abc); }finally{ System.out.println("yes"); abc = abc + "5"; } } public static String rStr(String str){ return str+"1"; }
答案:yes
51
3.java继承相关
当子类中出现与父类一模一样的方法(返回值, 函数名, 形参)时, 会出现重写(Override)操作.@Override毕竟不是必须的,但是它可以有编译器检测到,提高代码的可读性、健壮性。
在对父类方法进行重写(Override)操作的时候,子类不允许出现与父类同名同参但是不同返回类型的方法。
子类重写父类的方法的访问权限要大于或者等于父类中被重写的方法。
记住一点,重写是方法重写,虽然父类的方法还在,但是除非在子类方法定义是指明调用super的方法,否则即使在父类中调用的方法都会变成调用子类重写过的方法。
但属性是根据类型来判断的。父类引用调用的是父类的属性,子类引用调用的时子类的属性。而且这有些像javascript的原型继承链,如果子类没有该属性、方法,他会根据继承链向上去找。
4.关于按位运算符
<<、>>、>>>这是同一级别的优先级,比较高。注意没有无符号左移。
&、|、~ 这是同一级别的优先级
x<<y 相当于 x*(2^y)
x>>y 相当于 x/(2^y)
x&y 主要是用来跟一个mask做运算,比如说要控制一个数字递增,范围是0-3,则可以x = (x+1)&0b11;
x|y 主要是两个二进制各移好位之后拼接到一起。比如已经设置好了a4位,b4位,c8位。则可以,d = (a<<(4+8)) | (b<8) | c 。要解析的时候可以反向取出来。 c = d&0b11111111;b=(d&0b111100000000)>>8;c同理可得。
4.关于服务器推送,四种方法:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)
相关说明:http://blog.csdn.net/jb2011000/article/details/51910602
5.关于泛型,A extends B, List<A> listA = new ArrayList<B>();// 报错
6.关于DWR,根据java接口动态生成js的ajax接口。看起来好像是使用js来调用java。
7.切面之后再加事务
8.关于避免页面重复提交,最直接的方式是页面加载时就生成一个messageId,点击提交时这个按钮也带上,后台根据这个id做避免重复的处理。这样页面只要不刷新,无论怎么点击操作都是幂等的。
9.子类重写父类的方法后,不管引用变量是父类还是子类,调用的都是子类重写后的方法,即使是在父类方法里调用的。