Java

[经验]为什么一个BUG调了这么久?

1.仅从表面现象判断出错的地方。 一个报文从A发到B收不到,从B发给B自己却能收到,这让我以为问题在操作系统或者TCP/IP协议方面。这样判断太草率,因为运行的环境不同,可能导致程序中不同语句的执行时序也不同。我的同事QQ曾提出一个通用的排错公式:           已知:环境A + 程序A = 出错     若       环境B  + 程序A = 正常     Then           环境A存在问题     若        环境A  + 程序B = 正常     Then           程序A存在问题     道理虽然简单,但在实际运行中我们往往只是无意识地运用这个公式,而不是有意识地。无意识=启发式 + 迅速, 有意识 = 穷举 + 完备 2. 日志比较重要。对于非致命的错误,界面的输出往往只是粗略的出错原因,日志才能告诉你更多的细节,如异常发生所在的类,所在的方法等等,必要的情况下,要将日志输出的级别设为最低,否则就查不到足够的信息。 3. 日志所记录的异常可能仍不是最原始的异常,这时候就要单步调试了。将断点设在日志所记录的出错处,然后一步一步地查找出错原因

string.split()方法

p(String.valueOf("5".split("\\.").length));     //print "1" p(String.valueOf(".5".split("\\.").length));    //print "2" p(String.valueOf("\"\".5".split("\\.").length));//print "2" p(String.valueOf("5.".split("\\.").length));    //print "1" p(String.valueOf("5.\"\"".split("\\.").length));//print "2" p(String.valueOf("".split("hi").length));//print "1" p(String.valueOf("hi?".split("\\?").length)); //pring "1" 还有: "  hi".split("\\s+") = {"","hi"}

啥叫动态绑定(dynamic binding)?

    发送给对象的请求和它的相应操作在运行时刻的连接就叫做“动态绑定”。动态绑定允许你在运行时刻替换有相同接口的对象,这种可替换性就叫做“多态”