Java知识点
1. ClassLoader&JVM工作原理
当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。
双亲委托模式:任何一个自定义ClassLoader加载一个类之前,它都会先委托它的父亲ClassLoader进行加载,只有当父亲ClassLoader无法加载成功后,才会由自己加载
2.s+=1 与s=s+1区别
s+=1 <=> s = (s的类型)(s+1)
3.final,finally,finalize区别
Final成员:一旦初始化不可修改
Final方法:不允许继承类覆写
Final类:不允许继承
Finally 异常处理的最佳补充,无论有无异常,总会执行(return 之前)
http://blog.csdn.net/mymyway/article/details/7954549
finalize 在垃圾回收器将对象从内存清出之前做必要的清理工作
4.传值&传引用
不管java参数的类型是什么,一律传递参数的副本(值的副本&应用的副本)
http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html
5.static
1.静态数据成员是该类的所有对象所共有的,静态数据成员存储在全局数据区。
2.静态数据成员定义时要分配空间,所以不能在类声明中定义。
3.与普通函数相比,静态成员函数由于不是与任何的对象相联系,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数
http://blog.csdn.net/hackbuteer1/article/details/7487694
6.内存管理和内存泄露
内存分配:由程序完成,释放由GC完成,对象在堆中分配。(有向图)
http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/
内存泄露:1、对象可达的,有向图中存在边 2、对象是无用的,程序不会再使用这些对象
7.封装、继承、多态
封装:将数据和函数集合在一个个单元里(类),保护代码不被无意中破坏
继承:代码的重用
多态:同一操作操作于不同的对象,产生不同的执行结果,基类指针实现。
重载(编译时多态),虚函数(运行时多态)
http://www.cnblogs.com/mountain-mist/articles/1214996.html
8.ArrayList 和LinkedList
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增/删除操作add和remove,LinedList占优势,因为ArrayList要移动数据。
9.HashMap 和Hashtable区别
10.构造函数和初始化变量执行顺序
先是成员变量的初始化,而且成员的初始化的顺序以成员变量的定义顺序有关,先定义的先初始化,初始化后再调用构造方法。static的成员比普通的成员变量先初始化。
http://blog.csdn.net/macheng365/article/details/6403050
11.抽象类和接口
抽象类不可被实例化(new),抽象类可以包含非抽象方法,抽象类不可以是final,非抽象类派生抽象类必须覆盖抽象方法,抽象方法不可以自己实现。
12.异常
只要程序中的函数用throws声明了,就表示此函数中不会处理异常,而是交给调用此函数的函数去处理
http://blog.csdn.net/fuuckwtu/article/details/6504181
数据结构
一.排序
http://blog.sina.com.cn/s/blog_6d57505401019ulx.html