Java面试常问问题

1、抽象类与抽象方法

具有抽象方法的类必然是抽象类

抽象类不一定具有抽象方法


2、抽象类、接口、抽象方法

抽象类中可以有抽象方法,但是接口中不能有抽象方法


3、类初始化顺序

父类静态块 静态属性 子类静态块 静态属性 父类初始化块 或者 父类属性 父类构造函数 

子类初始化块 或者 子类属性 子类构造函数


父类构造函数中可以使用子类静态属性,所以静态的东西一般都会先初始化


4   java中的集合


Collection—>Quene

 

Collection—>List=>ArrayList LinkedList

Collection->Set->sortedSet=>TreeSet

                        =>HashSet<---(继承)LinkedHashSet

Map->SortedMap=>TreeMap

      =>HashMap 


HashMap的数据结构是数组(Entry)加链表(key相同,那么value将被上一个value引用)

HashSet的数据结构是HashMap

ArrayList的数据结构本质上是数组

LinkedList为双向链表并非继承于ArrayList


Set是一个集合,不含有重复元素,也是因为其本质上是HashMap通过Equals来判断是否重复

Collection接口通用的接口方法比如说size、interator


WeakHashMap 是为了解决键值已经死亡,而value无法取出这个问题,如果键值死亡,那么value值也随之不会引用到,而放入到垃圾对列中


   

5、ClassLoader

 

classloader bootstrapclassloader extclassloader appclassloader(systemclassloader) customerclassloader

 

bootstrapclassloader 是加载jdk/lib下的jar包中的class,本地代码进行编写的

extclassloader 是加载jdk/ext javax下扩展class

appclassloader是加载应用下的class   classpath下的class

cutomerclassloader是自定义classloader


先从parent classloader进行加载,如果父无法加载那么就用子加载


 

6、接口和抽象类

类可以实现多个接口,但是不能继承多个类


接口是like -a 侧重于行为的相似,而抽象类侧重于is-a。


使用抽象类一般是在继承的时候使用抽象类,但是不恰当的引入继承会造成一些问题。


继承可以既继承属性又继承行为。另外继承是一种紧耦合,继承的滥用可以造成继承层次过多。另外,有些设计模式比如模版和策略,模版使用继承而策略使用接口,使用接口更容易进行算法的替换。


优先使用聚合而非继承。就是因为继承是一种紧耦合,往往导致继承了不该继承的方法,或者导致继承的层次过多。


7、面向对象设计的几个原则

开闭原则 对修改是封闭的,对扩展是开放的

单一职责原则 类的职责应该只有一个,应该只有一个修改它的原因。

迪米特替换原则 子类可以完全替换父类,客户端并不知道调用对象被替换了。

依赖倒置原则    依赖抽象而不是依赖实现

接口隔离原则    依赖一个接口,应该只是依赖其需要的接口


8、默认可见性为包可见性,相当于friendly 友元


9、JVM与JDK的区别

JDK包含JVM,JVM是运行时环境,但是JDK包括了开发环境,对源代码进行编译、然后调用与java类库运行在jvm上。


10、动态绑定就是方法调用的类的类型是动态确定的而不是编译时就确定的




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值