Java基础

来源:互联网 发布:淘宝动态评分怎么提升 编辑:程序博客网 时间:2024/06/03 21:00

1.面向对象和面向过程的区别​

面向对象编程以提供对象的形式,对客户端程序员提供方法,屏蔽内部实现,对客户端程序员来说是透明的​,方法与数据之间进行封装。对事物进行对象化,更符合人类的认知

面向过程编程主要是提供各种方法来供人使用,方法与数据之间没有必然联系。

2.面向对象的四个基本特性(抽象、封装、继承,多态)

继承:子类对父类的继承,很大程度上提高了代码的重用性

封装:将数据与方法进行绑定,使得外界不能直接对数据进行操作

多态:运行时多态和编译时多态

运行时多态:通过引用所指的具体对象的方法,执行自己的方法。

    编译时多态:方法的重载​

3.Overload和Override的区别

重写是对于父子类而言,是子类对父类的方法的重写

重载是对同一类而言,同一个类中同名方法根据参数的不同产生不同的行为

4.构造器Constructor是否可被override

可以被重载

5.访问控制符public,protected,private,以及默认的区别

public :all​

protected:​同一个包下或者子类可以访问

private:同一类​

默认:包访问权限控制,同包

6.是否可以继承String类

不可以,String是final类​

7.String和StringBuffer、StringBuilder的区别​

String是不可变字符串,StringBuilder和StringBuffer是可变的,StringBuilder不是线程安全的StringBuffer是线程安全的。

8.hashCodeequals方法的关系

当两个对象equals方法返回true时,两个方法的hashcode值就要相等否则将会产生效率问题

9.抽象类和接口的区别

抽象类中可以包含成员变量和成员方法以及抽象方法

接口中智能包含常量和抽象方法

10.自动装箱与拆箱

将基本类型数据与引用类型数据进行转换,是jdk1.5以后的特性

11.什么是泛型、为什么要使用以及泛型擦除

泛型的本质是参数化类型,泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。在没加入泛型前,参数都是object类型,容易引发ClassCastException。泛型是编译器认可的,但虚拟机并不认识,因此在编译期,编译器会将泛型转换为原始类型擦除是将泛型类型以其父类代替,如String变成了Object等。其实在使用的时候还是进行带强制类型的转化,只不过这是比较安全的转换,因为在编译阶段已经确保了数据的一致性。

12.Java中的集合类及关系图

Collection:List,Set,Queue

Map:HashMap,HashTable

13.HashMap实现原理(看源代码)HashTable实现原理(看源代码)看了大概

14.HashMapHashTable区别

  1. HashMap是线程不安全的,但效率比HashTable高,HashMap允许有空值而HashTable不允许有空值

    15.HashTable如何实现线程安全(看源代码对可能引起线程安全问题的方法加了同步锁)ArrayListvector区别(看源代码)看了部分

    16.ArrayListLinkedList区别及使用场景

    ArrayList是基于数组的实现的,随机访问快,随机访问可达到O1),增删元素消耗较大

    LinkedList是基于链表实现的,增删元素块快,但访问元素需要遍历链表

    17.CollectionCollections的区别

    Collection是集合接口而Collections是集合的工具类,提供一系列基于Collection的操作

  1. Concurrenthashmap实现原理(看源代码锁部分理解有障碍,有待学习)

    http://www.cnblogs.com/ITtangtang/p/3948786.html

通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
有些方法需要跨段,比如size()containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。这里按顺序是很重要的,否则极有可能出现死锁,在ConcurrentHashMap内部,段数组是final的,并且其成员变量实际上也是final的,但是,仅仅是将数组声明为final的并不保证数组成员也是final的,这需要实现上的保证。这可以确保不会出现死锁,因为获得锁的顺序是固定的。

19.ErrorException区别

Error一般是重大错误,属于不可控的,大多是虚拟机上的问题,遇到这样的问题大多是让程序终止

Exception是指异常,异常的出现帮助程序员更好的发现潜在的问题,更好的编程。遇到Exception解决办法是捕获异常让程序继续运行下去

20.Unchecked ExceptionChecked Exception,各列举几个

 

 

 

 

 



0 0