java问题集锦

 ★什么时候该用数组型容器、什么时候该用链表型容器?
  ★什么是散列函数?HashMap的实现原理是什么?
  ★什么是递归?如果你以前从来没写过递归函数,尝试着写一个(比如用递归函数进行目录树遍历)。
  ★什么是算法复杂度?
  ★你是否理解空间换时间的思想?
  ★写一个针对整数数组的冒泡排序函数,看看你要修改几次才能跑通。
  ★写一个针对整数数组的二分查找函数,看看你要修改几次才能跑通。

  ★基于接口的继承和基于实现的继承各有什么优点、缺点?
  ★继承(包括extend和implement)有什么缺点?
  ★多态(polymorphism)有什么缺点?
  ★为什么Java可以多继承interface,而不可以多继承class?
  ★假如让你写一个小游戏(比如人机对战的五子棋),你会如何设计类结构?
  ★类结构设计时,如何考虑可扩展性?

    OOAD和设计模式

 ★关于基本类型和引用类型
  很多新手不理解Java的基本类型和引用类型在本质上有什么区别。请看如下的问题:
  ◇这两种类型在内存存储上有什么区别?
  ◇这两种类型在性能上有什么区别?
  ◇这两种类型对于GC有什么区别?
  关于前两个问题,请看之前的帖子“Java性能优化[1]:基本类型 vs 引用类型 ”。

  ★关于垃圾回收(Garbage Collection)
  很多新手不理解GC的实现机制。请看如下的问题:
  ◇GC是如何判断哪些对象已经失效?
  ◇GC对性能会有哪些影响?
  ◇如何通过JVM的参数调优GC的性能?
  关于GC的问题,可以参见之前的帖子“Java性能优化[3]:关于垃圾回收(GC) ”。

  ★关于字符串
  对于Java提供的String和StringBuilder,想必很多人都知道:String用于常量字符串,StringBuilder用于可变字符串。那Java当初为什么要这样设计捏?为啥不用一个类来统一搞定捏?

  ★关于范型(Generic Programming)
  从JDK 1.5开始,Java引入了一个重量级的语法:范型。不过捏,很多新手仅仅知道范型的皮毛,而对于很多本质的东东,不甚了解。
  ◇GP是在编译时实现的还是在运行时实现的?为什么要这么实现?
  ◇GP的类型擦除机制是咋回事?有啥优点/缺点?
  ◇使用范型容器(相对于传统容器)在性能上有啥影响?为什么?

  ★关于多线程
  另外,多线程也是大部分Java新手的短板。所以俺最后再来提几个关于多线程的问题。
  ◇synchronized关键字是怎么起作用滴?
  ◇synchronized的颗粒度(或者说作用域)如何?是针对某个类还是针对某个类对象实例?
  ◇synchronized对性能有没有影响?为什么?
  ◇volatile关键字又是派啥用滴?啥时候需要用这个关键字捏?

你可能感兴趣的:(java问题集锦)