个人笔记
1.JAVA三大特性
1.继承: 从已有的类中得到继承信息创建新类的过程.提供信息的叫做父类,得到继承信息的叫做子类
2.封装: 通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口
3.多态性: 允许不同子类型对象对同一消息作出不同响应,简单说用同样的对象引用调用同样的方法但是做了不同的事情,多态性又分为编译时多态和运行时多态.编译时多态值重载,运行时多态指重写.
4.抽象: 将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,抽象只关注对象有哪些行为和属性,并不关注这些行为的细节.
2.&和&&的区别
1. &运算符的两种用法: (1)按位与; (2)逻辑与.
2. &&运算符是短路与运算.逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true.只有前边的运行成功后才会运行后面,如果前面的为false后面的不需要执行.
3.两个对象值(x.equals(y)==true?
如果两个对象x和y满足x.equals(y)==true;他们的hashCode应当相同java中equals方法和hashCode方法:(1) 如果两个对象相同(equals方法返回true),那么它们的hashCode一定相同 ;(2) 如果两个对象的hashCode相同,它们并不一定相同.equals 方法必须满足自反性(x.equals(x)必须返回 true)、对称性(x.equals(y)返回 true 时,y.equals(x)
也必须返回 true)、传递性(x.equals(y)和 y.equals(z)都返回 true 时,x.equals(z)也必须返回 true)和一致性(当x 和 y 引用的对象信息没有被修改时,多次调用 x.equals(y)应该得到同样的返回值),而且对于任何非 null 值的引用 x,x.equals(null)必须返回 false。
4.重载(overload)和重写(override)的区别?重载方法能否根据返回类型进行区分
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
重载
1.方法名一致,参数列表中的参数顺序,类型,个数不同.
2.重载与方法的返回值无关,存在于父类和子类,同类中。
3.可以抛出不同的异常,可以有不同修饰符。
重写
1.参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致。
2.构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次声明。
3.访问权限不能比父类中被重写的方法的访问权限更低。
5.抽象类和接口的异同
不同:
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中成员全是public
4.抽象类中可以定义成员变量
5.有抽象方法的类要被声明为抽象类,抽象类中不一定有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全为抽象方法
3.抽象类中的成员可以是private,默认,protect,public
4.接口中定义的成员变量都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同:
1. 不能实例化
2. 可以将抽象类和接口类型作为引用类型
3. 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类
6.==和equals的区别
equals和==最大的区别是一个是方法,一个是运算符
==: 比较的如果是基本数据类型,则比较的是数值是否相等;如果比较的是引用类型,则比较的是对象的地址值是否相等.
equals(): 用来比较方法两个对象的内容是否相等.
注意: equals方法不能用于基本数据类型变量,如果没有对equals方法重写,则比较的是引用类型的变量所指的地址值.
7.thorw和throws区别
throw
1)throw语句在方法体内部 ,表示抛出异常,由方法体内的语句处理
2)throw是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw一定是抛出了某种异常
throws
1)throws语句是用在方法后面的声明,表示如果抛出异常,则由该方法调用者进行异常处理
2)throws主要是声明这个方法会抛出某种类型的异常,让它的使用者知道需要捕捉的异常的类型
3)throws表示出现异常的一种可能性,并不一定发生这种异常
8.final, finally, finalize的区别
final: 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被修饰的方法不可继承
finally: 异常处理语句中的一部分,表示总在执行.
finalize: Object类中的一个方法,在垃圾回收器执行的时候调用被回收对象的该方法.
9.Integer包装类
Integer f1= 100,f2=100,f3=150,f4=150; f1==f2, f3==f4
如果整型字面量的值在-128 到 127 之间,那么不会 new 新的 Integer 对象,而是直接引用常量池中的 Integer 对象,所以上面的面试题中 f1==f2 的结果是 true,而 f3==f4 的结果是 false。
10 String,StringBuffer,StringBulider的区别
(1),可变不可变
String: 字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象
StringBuffer: 在修改时会改变对象自身,每次操作都是对StringBuffer对象本身进行修改,不生成新的对象;使用场景对字符串经常改变情况下,主要方法:append(),insert()等
(2).线程是否安全
String:对象定义后,不可改变,线程安全
StringBuffer: 是线程安全(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据.
StringBulider: 是线程不安全的,适用于单线程下操作字符串缓冲区大量数据
(3).共同点
tringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。tringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
11.数据类型之间的转换
(1)字符串如何转换为基本数据类型?
调用基本数据类型对应的包装类中的方法parseXXX(String)或者valueOf(String)即可
(2)基本数据类型转化为字符串
一种方法是将基本数据类型与空字符串("")连接,即获得其对应的字符串;另一种方法是调用 String类中的 valueOf()方法返回相应字符串。
12.List,Set和Map的区别
(1j结构特点:List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合;List 中存储的数据是有顺序,并且允许重复;Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的,Set 中存储的数据是无序的,且不允许有重复,但元素在集合中的位置由元素的 hashcode 决定,所以对于用户来说 set 中的元素还是无序的
(2)实现类:
List 接口有三个实现类(LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;ArrayList:基于数组实现,非线程安全的,效率高,便于索引,但不便于插入删除;Vector:基于数组实现,线程安全的,效率低)。
Map 接口有三个实现类(HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键;HashTable:线程安全,低效,不支持 null 值和 null 键;LinkedHashMap:是 HashMap 的一个子类,保存了记录的插入顺序;SortMap 接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序)。
Set 接口有两个实现类(HashSet:底层是由 HashMap 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hashCode()方法;LinkedHashSet:继承与 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMp)。
JAVA中的引用类型有哪些?
Java中对象的引用分为4中级别,这四种级别从高到低依次为: 强引用,软引用,弱引用和虚引用
1.强引用: 我们天天写的代码就是强引用,如果一个对象被人拥有强引用,那么垃圾回收器绝不会回收它.
2.软引用: 如果一个对象只具有软引用,那么如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象.
3.弱引用: 如果一个对象只具有弱引用,那么该类就是可有可无的对象,因为只要改对象被gc扫描到就会把它清理掉.
4.虚引用: 虚拟引用不会决定对象的声明周期,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收,虚引用主要用来跟踪对象被垃圾回收的活动.
linux常用指令
打包:tar -xvf
打包并压缩:tar -zcvf
显示当前所在目录:pwd
事务的四大特性
ACID
1.原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2.一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
3.隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。
4.持久性(Durability):持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
oracle中如何进行分页查询
select * from ( select rownum r,a from tabName where rownum <=20)
where r > 10
SpringMVC的工作原理
1.用户向服务器发送请求,请求被springMVC前端控制DispatchServlet捕获.
2.DispatcherServle对请求url进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain
3.DispatchServlet根据获得的Handler选择一个合适的HandlerAdapter适配器处理
4.Handler对数据处理完成后返回一个ModelAndView()对象给DisPatchServlet
5.返回的ModelAndView()只是逻辑视图,并不是一个真正的视图,DispatcherSevlet通过ViewResolver视图解析器将逻辑视图转换为真正的视图view
6.DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;