面试
java基础
如何实现跨平台--jvm翻译奇迹马
编译生成字节码文件,通过java虚拟机变成机器码
不同系统可以设置自己的袭击
JDK=JRE(环境) + Java工具 + 编译器 + 调试器
JRE=JVM + 核心类库
编译型语言--整体编译,速度快,缺点修改够需要重新编译
IDEA每次修改,有时候需要重启,才能跟上
解释型语言--翻译一句执行一句
三大特性
封装:不让外部访问
继承:新类通过继承父类,可以对父类进行扩展,单继承(为了安全,不知道具体执行哪个方法,)
多态:父类引用指向子类实例,同一个行为的不同表项形式
浮点数不能表示金额:计算机保存的小数是十进制小数的近似值
包装类:让他具有对象的特征,有更多的属性和方法
String不可变
原码:String源码一个一个字符存储在value数组中去,另外用fianl
原因:保证线程安全,网络URL,path,密码一般都是String类型,这些东西是不能改变的
JDK9:cahr改成byte,节约内存,char2个字节,byte1个字节
Object
toString:默认输出对象地址
equals:默认比较两个引用变量是否指向同一个对象
hashCode
clone
equals
equals相同,hashCode一定相同
hashCode相同,equals不一定相同
hashCode主要为了提高比较效率,先比较hashCode,相同不用再次比较equals
基本数据类型:比较的值
复合数据类型:比较的是地址,equals默认比较地址值
创建对象--new,反射,clone,反序列化
实例化顺序:静态属性,静态代码块,普通属性,普通代码块,构造方法
关键字
static:被共享,一个副本,类名.,
final:锁定,不能覆盖,不可继承,不能重新赋值
finally:try-catch-finally
finalize:垃圾回收
抽象类
可以有方法,接口都是抽象方法
抽象类各种类型,接口只能是public static final
一个类只能继承一个抽象类,一个类可以实现多个接口
异常
编译时异常,运行时异常
throw:用于抛出一个具体的异常对象
throws:用于声明该方法可能抛出异常
序列化
集合
泛型
先定义一个不确定的类型,传过来才知道是什么类型
集合:
Collection
Map:HashMap,HashTable,SortedMap
List:有序,可重复,多个null
Set:无序,不重复,一个null
map:一个键值对
List:底层数组和链表
List
ArrayList:底层是动态数组,新容量是原来的1.5倍
for each快速失败问题
Iterator itr = list.iterator();
while(itr.hasNext()){
if(itr.next().equals("jay")){
itr.remove();
}
}
Vector--扩充两倍,ArrayList是1.5倍
LinkedList:新增修改比较方法
SSM
Spring
SpringMVC
客户端发送请求到DispatcherServlet,然后通过映射器,适配器,到对应的handler
拦截器
这个里面有拦截器
pre1,2,3
post3,2,1
使用,实现这个方法就行了