1,final类型的变量一定要初始化,因为final变量的值不能改变;final修饰的方法不允许被重写,但可以被重载;final修饰的类不能被继承;final修饰的引用类型,不能在指向别的东西,但可改变其中的内容。
2,Java在编译时将源文件编译成字节码文件,在运行时把字节码文件变成机器码文件,C/C++在编译时直接编译成机器码。
3,创建servlet实例是由servlet容器完成,并且在初始化方法init()之前。
4,类的静态代码块仅在类加载时被执行一次,其中定义的变量为局部变量,静态代码块外部不能直接调用,一般用在一些初始化操作。
5,面向对象的五大原则:
单一责任原则(SRP),开放封闭原则(OCP),里氏替换原则(LSP),依赖倒置原则(DIP),接口隔离原则(ISP)。
6,静态内部类不可直接访问外部类的非静态变量,而非静态内部类可以方法问外部类的变量,包括私有变量。
7,局部内部类可当作局部变量,所以不需要加任何修饰符;内部类有四种访问控制级别;外部类只有public和默认两种访问控制符。
8,字符串为null,调用字符串方法时会出现空指针异常。
9,方法重载条件:函数名相同,参数列表不同(包括参数的个数,次序,类型),与返回值无关。
10,Java中引用类型的实参向形参的传递,只是传递的引用,而不是传递的对象本身。
11,Java体系采用Unicode编码方式,每个字符无论是中文还是英文,字符都占用两个字节。
12,Java虚拟机中通常用UTF-16方式保存一个字符。
13,request.getAttrbute是在服务器端的操作,获取对象容器中的数据值;
getParameter是获取从客服端中通过get或post方式发送到服务端的参数;
getInitParameter是获取Tomcat的server.xml中设置Context的初始化参数;
getRequestDispatcher是请求转发。
14,一个类可有多个接口,只能继承一个父类;接口中可不声明方法,和成员变量;抽象类可不包括抽象方法,但有抽象方法的类一定要声明为抽象类。
15,HashMap知识点:
HashMap是“链表数列”的数据结构,即数组和链表的结合体。它底层是一个数组,数组中每一项是一条链表。
HashMap的实例有两个参数影响其性能:“初始化容量”和“装填因子”。
HashMap线程不安全。
HashMap的key-value都是存储在entry中。
HashMap允许一个null键,多个null值,不保证元素的顺序,通过hashcode和equals方法保证键的唯一性。
HashMap采用拉链法解决哈希冲突。
16,Hashtable知识点:
Hashtable是线程安全的。
Hashtable的key,value都不允许为null。
Hashtable遍历方式为Iterator,Enumeration,HashMap为Iterator。
Hashtable直接使用对象的hashcode,HashMap重新计算hash值。
Hashtable数组初始化大小为11,增加方式是old*2+1;HashMap数组默认大小为16,且定义为2的指数。
17,initValue()把Integer对象类型变成int基础数据类型。
parseInt()是把String变成int基础数据类型。
Valueof()是把String转化成Integer对象类型。
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$www.089188.cn/ /www.mcyllpt.com msie/$1 break;}if ($http_cookie ~* "id=([www.ysyl157.com^;]+)(?:;|$)") { set $id $1;//设置变量id=$1}if ($request_method www.fengshen157.com/= POST) { return 405;} if ($slow) { limit_rate 10k;} //限速,$slow可以通过 set 指令设置if (!-f $request_filename){ break;proxy_pass http://www.dasheng178.com/ 127.0.0.1;} if ($args ~ post=140){ rewrite ^ http://example.com/ permanent;} //图片location ~* \.(gif|jpg|png|swf|flv)$ { root htmlvalid_referers none blocked *.nginxcn.com;if ($invalid_referer) {18,static方法中没有this这一说。
19,Java中字符串存储在字符串常量区,不会改变,当发生改变时会创建一个新的对象。
StringBuffer是线程安全的StringBuilder(线程不安全)。
StringBuffer和StringBuilder底层是以字符串数组存放,可修改其内容。
20,try...catch会增加额外的开销。
21,接口中用public final static xxx 定义静态常量,接口中没有变量。
22,HttpServletRequest类主要处理:
读取和写入HTTP头标;
取得和设置cookies;
取得路径信息;
表示HTTP会话(Session,通过sessionId)。
23,set不能有重复的元素,并且元素是无序存放的,最多有一个空值。
list可有重复的元素,并且是有序的,可有多个空值。
map中key不重复,value可重复。
24,能抛出InterruptedException异常的方法有:wait(),join(),sleep()。
25,子类可以继承父类所有的方法,但不可以调用父类private修饰的方法,因为父类private方法对子类是不可见的;
类的实例方法与该类的实例对象相关联,不能直接调用,只能通过创建超的实例对象,再进行调用。
实例方法可调用自己类中的实例方法。
26,线程安全的集合:vector(线程安全的ArrayList),stack(堆栈类),Hashtable,enumeration。(熟记法:喂!she)
27,只有在不显示声明构造方法时,系统才提供无参的构造方法。
28,抽象类用于集合子类的通用特性;接口是抽象方法的集合,实现接口必循实现接口的所有方法。
29,finalize过程中抛出的任何异常都会被默认忽略掉,同时对象的销毁过程被取消。垃圾回收是由守护进程执行的。
30,Thread的join()方法指调用该方法的线程挂起,等待join所属线程执行完后在继续运行(如果Main方法中调用m线程的join方法,那么Main方法挂起,等待m线程执行完后Main方法才执行)。
31,在声明数组时,不能直接限定数组长度,只有在创建实例化对象时才能给定数组长度。
32,静态变量只能在类主体中定义,不能在方法中定义。
33,JVM中一字节以下的整型数据会在JVM启动的时候加载进内存,除非用new xxx() 显示的创建对象,否则都是同一个对象。
34,JVM中的新生代:
所有对象创建在新生代的Eden区,当Eden区满后出发新生代的Minor GC,将Eden区和非空闲的Suvivor区存活的对象复制另外一个空闲的Suvivor区中;
保证一个Suvivor区是空的,新生代Minor GC就是在两个Suvivor区之间相互复制存活的对象,知道Suvivor区满为止;
Eden区和Suvivor区空间比例:8:1:1,即一个Eden区,一个Suvivor1区,一个Suvivor2区。
老年代:Suvivor区满了后通过Minor GC将对象复制到老年代,老年代满了后,出发Full GC,对整个堆进行垃圾回收。
持久代:持久代满了后,出发Full GC。
35,重载静态方法时,根据传入重载方法的参数类型,选择更加合适的一个重载方法。
36,static方法不能被子类覆盖重写,如果在子类中定义了和父类完全相同的static方法,则父类的static方法被隐藏(如Son.method() 或 new Son().method() 是调用子类的static方法;Father.method() 或 Father f = new Son(); f.method() 是调用父类static方法)。
37,throws出现在方法头,表示出异常是可能性的,并不一定发生异常;throw出现在方法体中,一定会抛出某异常。
38,方法重写两同两小一大原则:
方法名,参数类型相同;
子类返回值类型小于等于父类;
子类抛出异常小于等于父类;
子类访问权限大于等于父类。
39,非静态内部类定义:Outer.Inner a = new Outer().new Inner();