首页 / 面试 / Java面试常见基础问题
Java面试常见基础问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java面试常见基础问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3929字,纯文字阅读大概需要6分钟。
内容图文
![Java面试常见基础问题](/upload/InfoBanner/zyjiaocheng/609/1f48e7a18f7c40088f382a4db24a35b7.jpg)
Java常见问题
1、equals和==有什么区别?
==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。
如:两个String对象存储的值是一样的,但是可能在内存里存储在不同的地方。
equals 是方法
== 是运算符
Equeals本质就是==,只不过String和Integer等重写了equals方法,把它变成了值比较。
总结:
==比较的是引用;如果比较的是基本数据类型,则比较的是数值是否相等;
如果比较的是引用数据类型,则比较的是对象的地址值是否相等。
equals方法比较的是内容。
即:equals比较的是值是否相等,比较的是值和数据存储位置是否相等;
也就是说equals只比较值是否相等,而比较的是两者是否是同一个东西。
2、两个对象的hashCode()相同,equals()相同吗?
两个对象的hashCode()相同,equals()不一定相同。
因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
两个对象的值相同(x.equals(y)==true),他们的哈希码(hashCode)应当相同。
即:hashCode()相同,equals()不一定相同;
equals()相同,hashCode()一定相同。
3、重载和重写的区别?
都是实现多态的方式
重载:实现的是编译时的多态性
重写:实现的是运行时的多态性
a)重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型、参数个数),视为重载。重载对返回值类型没有特殊要求,不能根据返回值类型进行区分。
b)重写发生在子类与父类中,要求子类与父类方法有相同的参数列表;
有兼容的返回类型,比父类重写方法更好访问,不能比父类重写方法声明更多的一场(里氏代换原则)
解释:重载是子类继承了父类的方法;
重写是自己继承了父类的方法,但觉得不够好,自己又修改了继承的方法。
4、抽象类
抽象类不能使用final修饰,因为抽象类是要被其他类继承的,final修饰的类是不能被继承的。
5、抽象类和接口有什么异同?
相同:
不能被实例化
可以将抽象类和接口类型作为引用类型
一个类如果继承了抽象类或者实现某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
不同:
抽象类:
抽象类中可以定义构造器
可以有抽象方法和具体方法
接口中的成员全都是公共的(public)
抽象类中可以定义成员变量
由抽象方法的类必须被声明为抽象类;而抽象类未必要有抽象方法
抽象类中可以包含静态方法
一个类只能继承一个抽象类
接口:
接口中不能定义构造器
方法全都是抽象方法
抽象类中的成员可以是默认的、public、private、protected
接口定义的成员变量实际上都是常量
接口中不能有静态方法
一个类可以实现多个接口
6、String、StringBuffer、StringBuilder的异同?
a) 可变不可变
String:字符串常量,修改时原来的字符串对象不变,再重新生成新的字符串对象。
StringBuffer:修改时会改变自身对象,每次操作都是对StringBuffer对象本身进行修改,不是生成新的对象。
使用场景:对字符串经常改变情况下,主要方法:append(),insert()等。
StringBuilder: 对象能够被多次的修改
b) 线程是否安全
String:对象定义后不可变,线程安全
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据。
StringBuilder:线程不安全,适用于单线程字符串缓冲区大量数据。
c) 共同点
1.StringBuffer、StringBuilder的方法都会调用AbstractStringBuilder 中的公共方法.
如 super.append(...)。
2.只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder 效率高于 StringBuffer。
7、分布式中的CAP原理
A:可用性 保持服务可用:多节点方式
C:一致性 多节点数据一致
P:分区容忍性 是否可以将数据存到多个地方
一个系统不可能同时满足CAP
AC;放弃分区容忍,物理数据库
AP;可以短暂允许数据不一致,NoSql数据库
CP:放弃可用性,zookeeper
项目用得较多的是AP
8、final在Java中的作用是什么?
final修饰的类叫做最终类,该类不能被继承
final修饰的方法不能被重写
final修饰的变量叫做常量,常量必须初始化,初始化之后值就不能被修改
9、如何开启多线程?
1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法
10、并行和并发
并行:两个任务同时进行,就是甲任务执行的同时,乙任务也在执行(需要多核)
并发:两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流执行。由于时间间隔很短,使人感觉两个任务都在运行
11、启动jvm是单线程的么?
不是,是多线程的。至少会启动垃圾回收线程和主线程
12、sleep和wait的区别?(未完)
sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。
sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。
它们都可以被interrupted方法中断。
内容总结
以上是互联网集市为您收集整理的Java面试常见基础问题全部内容,希望文章能够帮你解决Java面试常见基础问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。