先对自己脑海中能瞬间出现的知识做一个罗列,后续再详细展开。
1.java环境变量,JAVA_HOME,PATH:$JAVA_HOME/bin
2.java基础数据类型:byte,boolean,char short,int,long,float,double.
3.String是final修饰的不可变类,string适合做map的键值,它生来就有hash值.构造String的类有StringBulder和StringBuffer,常用方法有append()和toString(),后者是同步,线程安全的,但是效率比较低。
4.Java对象的创建,可通过new或者clone或者反射得到对象。
5.类加载,BootstrapClassLoader,ExtensionClassLoader,以及Application ClassLoader即用户自定义类加载,即ClassPath中的类加载。双亲委托,java类加载会首先使用父类,若父类中加载不到才会自己加载。
6.新建的对象都在堆内存中,对象的引用存储在栈中,指向堆中的对象。新建对象在青年代,大对象直接放进老年代。对象GC,引用计数法和可达性分析来判断对象是否可以回收。另外,GC算法有 标记清除法(标记然后清楚,会造成堆中空间稀疏,各种空闲区域),复制法(需要一半空间闲置用于复制),标记整理法(标记然后移动到堆的边缘,接着统一回收),分区法(对不同区采用不同的回收算法)。标记清楚或者标记整理适合青年代,而复制法适合老年代,青年代中多次GC未被回收的对象会转到老年代,空间可拆分。
7.Java集合框架,集合的顶层接口为Collection,Set(集合中元素不能重复)、Queue以及List的分别继承Collection.Set有HashSet(可为null),LinkedHashSet等,List有ArrarList,Vector以及LinkedList,其中还有线性表链表,线程安全与非线程安全之分。另外一个关键的是Map,Map有HashMap(可为null),Hashtable(不为null,线程安全),linkedHashMap还有ConcurentHashMap(分段hashtable)(高级,concurent包中),
8.Java接口和抽象类。具有抽象方法的类即抽象类,继承抽象类必须实现父类的抽象方法;接口中的非default方法全部是抽象方法,属性全部默认是static final型,实现接口必须实现其所有的抽象方法。
9.Java多线程,实现Runable或者Callable接口,后者有返回类型,还可以直接继承Thread类,使用时用start()方法,run()只会执行操作而不会开启新线程。
10.线程同步,Synchronized修饰方法或者代码块,实现内部锁。ReentrantLock,同步锁,可以多次过得锁,但要记得释放,获得几次就要unlock()几次。Semaphone,信号量,可以限制方法访问的线程数量,每次访问要获取信号量,然后release()。
线程通信可以通过Synchronized,while轮询以及wait/notify实现。多线程编程注意死锁。
11.Volatile修饰的变量具有多线程可见性,直接读内存,具有一定的同步效果,CAS(CompareAndSet)原子操作;ThreadLocal,顾名思义,其修饰的变量在各线程中都有复制存在,成为各线程独立使用的变量,不具有线程共享性。
12.迭代器Iterator,常用使用是 while(i.hasNext()){
func(i.next());
}
13.for,while,do...while,循环的三种方法。break 和 continue。
14.switch case,现在也可对字符串做switch选择了。
15.error exception,都可以捕获,但是一般error不捕获,exception选择性捕获,一些RuntimeException可以适当抛出
16.数组。。。数组越界问题
17.TimerTask
18.日期操作,DateFormat,Calendar
19.NIO,Socket
20.泛型以及java 反射。