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方法中断。
13、开启多线程的方式
a.继承Thread类,重写run方法。
b.实现Runnable接口,重写run方法。
c.实现Callable接口:如果想要在线程执行完毕之后得到带有返回值的线程则实现Callable接口。
14、Java语言的三大特性?
封装、继承、多态
15、几个方法
notify:唤醒在该对象上等待的某个线程
notifyAll:唤醒在该对象上等待的所有线程
toString:转换成字符串
16、while循环和do...while循环的区别?
while循环是先判断再执行。
do...while循环是先执行一次,再判断下一次要不要执行。
17、&和&&的区别?
例:
a==b&b==c
即使a==b为false,程序还是会继续判断b是否等于c。
a==b&&b==c
如果a==b为false,程序不会继续判断b是否等于c。
判断某对象中的属性是否等于某值,则必须使用&&,否则会出现空指针异常。
18、String str="a"与String str=new String("a")一样吗?
不一样,因为分配内存方式不同。
String str="a",是常量池方式。
String str=new String("a"),是堆内存方式。
19、抽象类能使用final修饰吗?
不能,定义抽象类就是要让其他方法继承的,final就是最终的,不能被继承。
20、重载与重写的区别?重载的方法能否根据返回类型进行区分?
重载与重写都是实现多态的方式。
重载:编译时的多态性。
重写:运行时的多态性。
重载:发生在一个类中,同名的方法,参数类型不同、参数个数不同、或者类型和个数都不同。
重写:发生在子类与父类之间,要求同名的被重写的方法有相同的参数列表(参数类型、参数个数),有兼容的返回类型。
重载对返回类型没有特殊要求,不能根据返回类型进行区分。
21、什么是序列化和反序列化?
序列化:将对象转为字节序列的过程
反序列化:将字节序列转为目标对象的过程。
22、什么时候需要序列化?
当Java对象需要在网络上传输或者持久化存储到文件中时。
23、序列化怎么实现?
让类实现Serializable接口,注入该类对象是可被序列。
24、某些数据不想序列化,如何处理?
在字段前面加上transient关键字。
例:transien privat String name;
25、List、Set、Map是否继承自Collection接口?
List:是一个有序集合,可包含重复元素。List的长度可动态变换。
Set:元素不可重复的集合,无序。
Map:有key和value,Map是一个将key映射到value的对象。一个Map不能包含重复的key,每个key只能映射一个value。
List、Set继承自Collection接口。
Map是键值对映射容器,不是继承自Collection接口。
26、HashMap和HashTable的区别是什么?
1.HashMap允许key和value为空,HashTable不允许。
2.HashTable是同步的,而HashMap不是。HashMap适合单线程环境,HashTable适合多线程环境。
3.在Java1.4之后引入了LinkedHashMap,HashMap的一个子类。
假如想要遍历顺序,很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。
4.HashMap提供对key的Set进行遍历,因此它是fail-fast的,但HashTable提供对Enumeration进行遍历,它不支持fail-fast。
5.HashTable被认为是个遗留的类,如果你寻求在迭代的时候修改Map,你应该使用CocurrenHashMAP。
Java面试常见基础问题的更多相关文章
- Java面试-常见基础笔试题目
1. Vector, ArrayList, LinkedList的区别 Vector:①长度可变,以类似数组的形式存储于内存中,线程安全(同步),因为其大部分方法都有synchronized 关键字, ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- java面试| 精选基础题(3)
每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...
- java面试| 精选基础题(2)
关注微信公众号"java从心",置顶公众号 每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 继续挖掘一些有趣的基础面试题,有错望指出来哈,请赐教~ 1.包装类的装箱与拆 ...
- Java面试常见知识点总结(三)
21.volatile关键字: 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: (1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...
- java面试常见题目
JAVA相关基础知识面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用 ...
- java面试|精选基础(1)
以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢! 1.反射 1.1定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法 ...
- Java面试专题-基础篇(1)
- Java面试准备基础篇_11.24
Java类加载机制 Java内存模型JMM 为什么 Redis 单线程能支撑高并发? 高并发下的接口幂等性解决方案! 面试官问:平常你是怎么对 Java 服务进行调优的? JAVA虚拟机(JVM)六: ...
随机推荐
- zset如何解决内部链表查找效率低下
zset作为有序集合,内部基于跳表或者说索引的方式实现了数据的快速查找.解决了链表查询效率低下的痛点 前言 紧接前文我们学习了Redis中Hash结构.在里面我们梳理了字典这个重要的内部结构并分析了h ...
- mybatis 批量新增-批量修改-批量删除操作
mapper.xml <!-- 批量新增 --> <insert id="saveBatch" parameterType="java.util.Lis ...
- Flask(9)- 蓝图的基本使用
前言 在前面的例子中,所有的页面处理逻辑都是放在同一个文件中,随着业务代码的增加,将所有代码都放在单个程序文件中是非常不合适的 不仅会让阅读代码变得困难,而且会给后期维护带来麻烦 Flask 中使用蓝 ...
- SESSION和JWT
1.传统登录的方式是使用 session + token,比较适用于Web应用的会话管理.token 是指在客户端使用 token 作为用户状态凭证,浏览器一般存储在 localStorage 或者 ...
- 测试基础(四)Jmeter基础使用
前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...
- Sql Server(3)运算符的使用
where 订货日期 between '2017/10/24' and '2017/10/30' 小的写在前面,大的后面,不可以写反 一:运算符的使用 T-SQL的运算符应用指派运算符算术运算符比较 ...
- 检测当前手机正在运行的APP
import re #一定要引入,否则不提示错误,但找不到目标def jiance(sjh): aakk="adb -s {0} shell dumpsys activity activit ...
- kali之Metasploit入门
前言 不得不说Metasploit 目前是世界领先的黑客框架.它在某种程度上被几乎每个黑客/渗透者使用.因此,如果您想进入网络安全/渗透测试行业并有所成就,您就必须要需要熟悉它. Metasploit ...
- 如何监控 Log4j2 异步日志遇到写入瓶颈
如何监控 Log4j2 异步日志遇到写入瓶颈 在之前的一篇文章中(一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位),我们详细分析了一个经典的 Log4j2 异步日志阻塞问题的定位,主要原因还 ...
- sqliab刷题笔记-联合注入
Less-1 测试是字符型还是数字型 判断所在字段数 查看显示值 可以看出显示2,3位置.因此我们选择2的位置进行联合注入 查看表名 我们要对admin,users等字符敏感 查看admin表中的字段 ...