基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
Java基础知识面试提问遇到的一些坑
Java基础知识面试提问遇到的一些坑
阅读
1
2020-10-05
:
001
期~
150
期汇总,方便阅读,不断更新中.....
1
.
StringBuilder
替代
String
拼接,面试中经常会问到
String
,
StringBuilder
,
StringBuffer
的区别。
解答:
String
类作为
java
语言中最常见的字符串类被广泛使用,如果在做大量字符串拼接效率时变得比较低,因为虚拟机需要不断地将对象引用指向新的地址。因此,一般方法内的私有变量推荐使用
stringBuilder
来完成,如果是多线程需要同步的自然选用
stringBuffer
。
1.对参数未做空验证,就做判断值相等
下面的写法将常量放到方法左边,能防止
NPE
。
解答:关于这道题需要查看
String
类中
equals
的实现方法,当左边为
Null
时会出现
NPE
。因此后续代码中需要保证
equals
方法左边变量不为
null
。
2.这个坑很多兄弟都踩过,知道为什么
打印结果为
false
,而下面结果为
true
为啥
解答:
Integer
类型当正整数小于
128
时是在内存栈中创建值的,并将对象指向这个值,这样当比较两个栈引用时因为是同一地址引用两者则相等。当大于
127
时将会调用
new
Integer
(),两个整数对象地址引用不相等了。这就是为什么当值为
128
时不相等,当值为
100
时相等了。
3.将变量作为参数传递,在方法中改变参数值,变量的值改变了么?下图total值到底是几?
解答:将一个私有变量作为形参传递赋值并不会改变参数原有的值,但是如果将一个对象作为参数传递改变属性,对象的属性值就会随着改变。因此
total
的值仍然为
0
。
4.由数组转换的list,只能循环遍历,而不能看长度,增加元素,删除元素,这是为何?下图代码执行竟然出错!
解答:因为将数组转换的列表其实不是我们经常使用的
arrayList
,但只是数组中内部定义的一种数据结构类型,本质还是原数组而并非列表,因此当向列表添加元素就会出现错误,这道题上当的兄弟不少吧。
5.将列表中李明的名字移除掉,下图实现有无问题?
解答:在列表中移除最后一个元素按说应该没有问题的,但是这个算法还是出现了错误,主要是这种写法的列表循环遵循下表索引查找,当移除某个元素时,上次计算出来的长度超过了当前列表长度,故而会出现越界错误。
6.在指定目录下创建文件目录,到底使用哪一种呢,两个方法都没报错,为何第一次没创建目录而第二次创建?
解答:
mkdirs
()可以建立多级文件夹,而
mkdir
()只会建立一级的文件夹。这个主要依靠
java
底层调用操作系统的实现,作者愚见无须弄明白底层实现原理,只要使用中能区分不留
BUG
就好。
7.老板从客户那里回来后骂了我一顿,说是客户界面显示金额很奇怪,我的代码那里有问题?
解答:这道题如果我是老板我会打你的,因为老板之前也写过代码。老板之所以骂你是因为客户看到的太奇怪以至于看不懂,两个
float
类型数据相减会丢失精度,尾部带着常常的一串数字。如果实际场景要做计算我给你两个思路:第一可以用
bigdecimal
来计算,第二先将单位做成整数再做除法。
8.面试官:你能说出来java中实现多线程的几种方法么?
面试者:继承
Thread
类和实现
runnable
接口!
面试官:除此以外还有方法么?
面试者:就这两种实现啊?!
面试官:我们聊点别的,呵呵。
解答:这道题最有意思了,一般人都会干脆利索回答前两个,我工作前
3
年每次都是信心满满这样回答问题的。其实 实现多线程还可以实现
Callable
接口,利用
task
来接受异步线程的执行结果。希望后面再被面试官问到这道题可千万别再入坑,并且能回答这第三种方式跟前两种不同的地方(可以获取执行结果)。
9.我只是想让这个好好循环三次,有什么问题么?
解答:这道题主要是犯了整数符号位的问题了,大家可以了解一下
Integer
.
MAX
_
VALUE
加上
1
以后的数值这道陷阱题就解决了。
10.这个一直没有弄明白,到底返回哪个true还是false?
解答:这道题大家需要弄明白
finally
的使用场景,主要是捕获异常以后必须要执行的代码,大多是关闭流之类的。即使
try
的代码块已经返回结果但程序仍然会执行
finally
里面的代码,因此上题返回
false
。
大家可以看看下面这道题返回结果是多少?欢迎留言,答对的同学自己给自己晚饭加鸡腿。
? ~
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
面试官:谈谈在做项目过程中,你是是如何进行SQL优化的
下一篇:
这些最常用的Linux命令都不会,你怎么敢去面试?
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目