做为程序员,解决bug是平时工作的重要部分。很多程序员都是因为调试bug,解决线上问题占用了很多时间,最后不得不加班去赶进度,完成项目任务。加班还能忍受,最难以忍受的是最后发现导致问题的原因都是一些所谓的低级错误,而且这些错误在测试的过程中很难发现。下面举几个常见的例子一起分享一下。

1、 Integer类型的比较:

在开发中比较大小是最常见最基本的表达式,但是这里边也隐藏了一个坑。

不看答案猜下下边代码的运行结果:

Integer integer1 = 3;

Integer integer2 = 3;

if (integer1 == integer2)

System.out.println("integer1 == integer2");

else

System.out.println("integer1 != integer2");

Integer integer3 = 300;

Integer integer4 = 300;

if (integer3 == integer4)

System.out.println("integer3 == integer4");

else

System.out.println("integer3 != integer4");

感觉如何?如果猜中了,那么请再看下边的代码

Integer a=1;

System.out.println(a==1?"等于":"不等于");

Boolean bool=false;

System.out.println(bool?"真":"假");

这个又感觉如何,想知道答案的话请百度搜索 Java的拆装箱问题。

2、 Java中集合类的选择:

前端时间接到个需求,要求把字典表加载到Jvm内存中,支持范围搜索,搜索要高效。面对这个需求要怎么做呢?

首先列举熟悉的Java集合容器。

打开网易新闻 查看精彩图片

通过查看API文档发现,支持范围搜索还好说些,很多容器的构造方法都支持Comparator比较器,只要重写比较器就可以实现范围搜索,比较头疼的是搜索要高效。

如何实现搜索高效呢?只能查看各个集合容器的底层数据结构了,TreeMap,TreeSet的构造函数都支持比较器排序搜索,但是两个谁更高效呢?搜索两个底层结构比较一下看看吧。

3、 tomcat部署应用

tomcat的配置文件中有个这样的配置。

那么请问在tomcat启动的时候,加载了几个应用呢?

这两行代码又加载了几个应用呢?

以上两个为什么会出现这样结构呢?

请搜索tomcat源码分析查看一下吧。

平常工作中遇到的所谓低级错误其实都不是低级错误,顺着错误连着问三个为什么,然后努力去寻找到答案,相信会有不一样的收获。

打开网易新闻 查看精彩图片