Java SE面试基础 超详细

切记-一定要转化为自己的话讲出来,要表现的很自然,不像是背诵!!!

1、面向对象是什么,并解释

面向对象是利于语言对现实事物进行抽象。面向对象具有以下三大特征:
(1)继承:继承是从已有类得到继承信息创建新类的过程
类与类之间的关系,提高了代码的复用性,
(2)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
包起来,
(2)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
事物的多种形态,java引用数据类型子父类之间的类型转换问题
前提:必须有继承/实现关系, 有方法的重写,必要:父引用指向子类对象
面向对象思想更加符合平时的思维习惯,把程序员从一个执行者变为一个指挥者.把复杂的问题简单化

2、Object类中常见方法

(1)protected Object clone()—>创建并返回此对象的一个副本。
(2)boolean equals(Object obj)—>指示某个其他对象是否与此对象“相等”。
(3)protected void finalize()—>当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
(4)Class<? extendsObject> getClass()—>返回一个对象的运行时类。
(5)int hashCode()—>返回该对象的哈希码值。
(6)void notify()—>唤醒在此对象监视器上等待的单个线程。
(7)void notifyAll()—>唤醒在此对象监视器上等待的所有线程。
(8)String toString()—>返回该对象的字符串表示。
(9)void wait()—>导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。
void wait(long timeout)—>导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。
void wait(long timeout, int nanos)—>导致当前的线程等待,直到其他线程调用此对象的notify()

3、重载与重写有什么区别?

1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。
4、重写的访问权限不能比父类中被重写的方法的访问权限更低。
5、构造方法不能被重写
6. 重写子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Student < Person)。
注意:如果返回值类型是基本数据类型和void,那么必须是相同
子类方法的权限必须【大于等于】父类方法的权限修饰符。
注意:public > protected > 缺省 > private
父类私有方法不能重写
7.跨包的父类缺省的方法也不能重写

4、接口与抽象类的区别

区别抽象了接口
与子类关系单继承多实现
构造器
方法普通方法,或者抽象方法jdk1.7:只可以抽象方法
jdk1.8: 静态方法 默认方法
jdk1.9:私有方法
实例化不可以不可以
修饰方法public、protected和default这些修饰符看上面
成员变量无 ,只能声明常量

5. StringBuffer 、StringBuilder、String的区别

(1)StringBuffer 与StringBuilder中的方法和功能完全是等价的,
(2)只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。
(3)在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低
(4) 对比String、StringBuffer、StringBuilder三者的效率:
从高到低排列:StringBuilder > StringBuffer > String
(5) String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
后两个和Strinng欸写不一样的类型的

6、ArrayList和LinkedList有什么区别?

ArrayList LinkedList 都是线程不安全的
(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2)对于随机访问get和set,ArrayList绝对是优于LinkedList,因为LinkedList要移动指针。
(3)对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
(4) ArrayList 底层是数组 LinedkList底层是双向链表,数据很多的时候,对内存的开销比较大,因为每个数据都要存储上一个和下一个元素的地址,ArrayList没有, 但是Arraylist的占用内存在声明的时候就是已经确定了,默认大小为10,以1.5陪扩容;linkList在声明的时候没有指定大小,元素的添加或者删除时大小随只改变 ,ArrayList只能用于列表,linklist可以作为列表和队列,它实现了Deque接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值