java多线程异步调用别的系统接口代码_java中那些不得不说的坑(填坑篇)

看到大家对上篇《java中那些不得不说的坑》一文表现出强力的关注度,说明大家确实在开发及面试遇到了类似的难题。

我将题目答案写下来,这个并非标准答案,有不准确的地方请大家辩证补充。

d6f398507d0a19c3954759a999321152.png

1.StringBuilder替代String拼接,面试中经常会问到String,StringBuilder,StringBuffer的区别。

fa8f0d4b47c659a8bab3cd2db2b40cf8.png

37f445d4a400578570c7f1098eba944e.png

解答:String类作为java语言中最常见的字符串类被广泛使用,如果在做大量字符串拼接效率时变得比较低,因为虚拟机需要不断地将对象引用指向新的地址。因此,一般方法内的私有变量推荐使用stringBuilder来完成,如果是多线程需要同步的自然选用stringBuffer。

2.对参数未做空验证,就做判断值相等

d63797461fbbfd39f075fa89c1d8eb2c.png

下面的写法将常量放到方法左边,能防止NPE。

b71cbdaa16bbad11ace2110eedcf8866.png

解答:关于这道题需要查看String类中equals的实现方法,当左边为Null时会出现NPE。因此后续代码中需要保证equals方法左边变量不为null。

3.这个坑很多兄弟都踩过,知道为什么

8478c08b632cb4049c8b026821bf9362.png

打印结果为false,而下面结果为true为啥

e3403ec668ed9c2c82407f19bf2cbfca.png

解答:Integer类型当正整数小于128时是在内存栈中创建值的,并将对象指向这个值,这样当比较两个栈引用时因为是同一地址引用两者则相等。当大于127时将会调用new Integer(),两个整数对象地址引用不相等了。这就是为什么当值为128时不相等,当值为100时相等了。

4.将变量作为参数传递,在方法中改变参数值,变量的值改变了么?下图total值到底是几?

dca1a54f0ff216832d34481fdb442ba0.png

解答:将一个私有变量作为形参传递赋值并不会改变参数原有的值,但是如果将一个对象作为参数传递改变属性,对象的属性值就会随着改变。因此total的值仍然为0。

5.由数组转换的list,只能循环遍历,而不能看长度,增加元素,删除元素,这是为何?下图代码执行竟然出错!

c1cca303ea8f774bb376ad4cbc1977c8.png

解答:因为将数组转换的列表其实不是我们经常使用的arrayList,但只是数组中内部定义的一种数据结构类型,本质还是原数组而并非列表,因此当向列表添加元素就会出现错误,这道题上当的兄弟不少吧。

6.将列表中京东的名字移除掉,下图实现有无问题?

91947f2be0dd7ff3b69a1e2bda7d3f1b.png

解答:在列表中移除最后一个元素按说应该没有问题的,但是这个算法还是出现了错误,主要是这种写法的列表循环遵循下表索引查找,当移除某个元素时,上次计算出来的长度超过了当前列表长度,故而会出现越界错误。

7.在指定目录下创建文件目录,到底使用哪一种呢,两个方法都没报错,为何第一次没创建目录而第二次创建?

35dbec7016f8eebf1ceaa9f2d9e031c6.png

解答:mkdirs()可以建立多级文件夹,而mkdir()只会建立一级的文件夹。

8.面试官:你能说出来java中实现多线程的几种方法么?

面试者:继承Thread类和实现runnable接口!

面试官:除此以外还有方法么?

面试者:就这两种实现啊?!

面试官:我们聊点别的,呵呵。

解答:这道题最有意思了,一般人都会干脆利索回答前两个。其实 实现多线程还可以实现Callable接口,利用task来接受异步线程的执行结果。希望后面再被面试官问到这道题可千万别再入坑,并且能回答这第三种方式跟前两种不同的地方(可以获取执行结果)。

9.我只是想让这个好好循环三次,有什么问题么?

e5924a56fcbd162ff77746a11ddfd6e5.png

解答:这道题主要是犯了整数符号位的问题了,大家可以了解一下Integer.MAX_VALUE加上1以后的数值是多少,就知道这个问题了。

10.这个呢,到底返回哪个true还是false?

3782270f3bed83c4ef06c422c55764bf.png

解答:这道题大家需要弄明白finally的使用场景,主要是捕获异常以后必须要执行的代码,大多是关闭流之类的。即使try的代码块已经返回结果但程序仍然会执行finally里面的代码,因此上题返回false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值