java面试题集锦

1.ArrayList 与LinkedList的区别

ArrayList底层是数组,LinkedList是双向链表,保存数据是LinkedList的开销比ArrayList大,因为要存储前后节点的地址,相对比来说ArrayList就省了内存了。

插入和删除效率方面,数据量小时,两者区别不大,数据大时,在顶部插入或删除时ArrayList 比LinkedList 慢,在底部插入或删除时反之。

查询效率,ArrayList 比LinkedList 快。

2.sql最左匹配规则

联合索引,只要创建索引时最左的索引字段出现了在where 语句中时,就生效,否则,即使有了除最左以外的其他索引字段,也不会走索引。

3.面向过程与面向对象的区别

java面向对象编程比面向过程的语言性能差,因为java是半编译半解析语言,最终的执行代码不是CPU直接执行的二进制机械码。

为什么说java是半编译半解析语言,因为.java文件需要编译成.class 文件,再由jvm 去解析并运行。

4.重载与重写

先明白这个概念是基本相同的方法名来说的。

重载,同一类内,参数必须不同,其它都可以修改。

重写,子类内,参数,返回值,必须相同,修饰符要大于等于原来权限,异常要小于等于原来。

5.String StringBuffer StringBuilder的区别,为什么String 是不可变的

String 不可变是因为用的final 修饰,常量,不可变所以是多个线程共享的,所以是线程安全的。

StringBuffer 的方法加了同步锁,所以是线程安全的,Builder则没有。

6.volatile关键字的作用

a.保证内存的可见性--共享变量在主内存中,不同的线程有自己的工作内存,volatile保证了他们刷了共享变量后,立即同步刷主内存,避免了线程A对a=0,a+1后,线程B读取时还是a=0的问题。

b.禁止指令重排序--JVM会对非依赖性的代码进行优化排序,某些时候重排序会导致程序走向了非预期的结果。

c.不保证原子性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值