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面试常见基础问题的更多相关文章

  1. Java面试-常见基础笔试题目

    1. Vector, ArrayList, LinkedList的区别 Vector:①长度可变,以类似数组的形式存储于内存中,线程安全(同步),因为其大部分方法都有synchronized 关键字, ...

  2. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  3. java面试| 精选基础题(3)

    每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...

  4. java面试| 精选基础题(2)

    关注微信公众号"java从心",置顶公众号 每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 继续挖掘一些有趣的基础面试题,有错望指出来哈,请赐教~ 1.包装类的装箱与拆 ...

  5. Java面试常见知识点总结(三)

    21.volatile关键字: 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:   (1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...

  6. java面试常见题目

    JAVA相关基础知识面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用 ...

  7. java面试|精选基础(1)

    以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢! 1.反射 1.1定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法 ...

  8. Java面试专题-基础篇(1)

  9. Java面试准备基础篇_11.24

    Java类加载机制 Java内存模型JMM 为什么 Redis 单线程能支撑高并发? 高并发下的接口幂等性解决方案! 面试官问:平常你是怎么对 Java 服务进行调优的? JAVA虚拟机(JVM)六: ...

随机推荐

  1. zset如何解决内部链表查找效率低下

    zset作为有序集合,内部基于跳表或者说索引的方式实现了数据的快速查找.解决了链表查询效率低下的痛点 前言 紧接前文我们学习了Redis中Hash结构.在里面我们梳理了字典这个重要的内部结构并分析了h ...

  2. mybatis 批量新增-批量修改-批量删除操作

    mapper.xml <!-- 批量新增 --> <insert id="saveBatch" parameterType="java.util.Lis ...

  3. Flask(9)- 蓝图的基本使用

    前言 在前面的例子中,所有的页面处理逻辑都是放在同一个文件中,随着业务代码的增加,将所有代码都放在单个程序文件中是非常不合适的 不仅会让阅读代码变得困难,而且会给后期维护带来麻烦 Flask 中使用蓝 ...

  4. SESSION和JWT

    1.传统登录的方式是使用 session + token,比较适用于Web应用的会话管理.token 是指在客户端使用 token 作为用户状态凭证,浏览器一般存储在 localStorage 或者 ...

  5. 测试基础(四)Jmeter基础使用

    前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...

  6. Sql Server(3)运算符的使用

    where 订货日期 between '2017/10/24' and '2017/10/30'  小的写在前面,大的后面,不可以写反 一:运算符的使用 T-SQL的运算符应用指派运算符算术运算符比较 ...

  7. 检测当前手机正在运行的APP

    import re #一定要引入,否则不提示错误,但找不到目标def jiance(sjh): aakk="adb -s {0} shell dumpsys activity activit ...

  8. kali之Metasploit入门

    前言 不得不说Metasploit 目前是世界领先的黑客框架.它在某种程度上被几乎每个黑客/渗透者使用.因此,如果您想进入网络安全/渗透测试行业并有所成就,您就必须要需要熟悉它. Metasploit ...

  9. 如何监控 Log4j2 异步日志遇到写入瓶颈

    如何监控 Log4j2 异步日志遇到写入瓶颈 在之前的一篇文章中(一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位),我们详细分析了一个经典的 Log4j2 异步日志阻塞问题的定位,主要原因还 ...

  10. sqliab刷题笔记-联合注入

    Less-1 测试是字符型还是数字型 判断所在字段数 查看显示值 可以看出显示2,3位置.因此我们选择2的位置进行联合注入 查看表名 我们要对admin,users等字符敏感 查看admin表中的字段 ...