Java面试总结

1.什么是OOP、AOP

OOP即面向对象编程

  1. OOP三大特征:封装、继承、多态
  2. OOP五大原则:
  1. 单一职责原则 (Simple Responsibility Pinciple,SRP)
  2. 开放闭合原则 (Open-Closed Pinciple,OCP)
  3. 里氏代换原则 (Liskov Substitution Principle,LSP)
  4. 依赖倒置原则 (Dependence Inversion Principle,DIP)
  5. 接口隔离原则 (Interface Segregation Principle,ISP)
  6. 五大原则参考自:http://blog.csdn.net/anders_zhuo/article/details/8949566
  1. 关注的是业务处理过程中实体及其属性、行为进行抽象封装,将业务划分为相对独立的单元

AOP即面向切面编程

  1. AOP是以OOP为基础
  2. AOP主要是对公共模块的封装和使用,降低公共模块与业务处理的耦合度
  3. 主要使用场景:日志记录、事务处理、异常处理等

2.Servelet生命周期

分为3个阶段

  1. 初始化阶段 =====>invoke init()方法
  2. 响应请求阶段 ====>invoke service()方法
  3. 终止阶段========>invoke destory()方法

Servlet整个生命周期内,init()方法只被调用1次

3.[转载]equals 和 ==比较的区别

1

  1. == 是一个运算符。
  2. equals 则是string对象的方法,可以.(点)出来

2

我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较

  1. 基本数据类型比较

==和equals 都比较两个值是否相等。相等为true 否则为false

  1. 引用对象比较

==和equals 都是比较栈内存中的地址是否相等 。相等为true 否则为false

3

  1. string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 equals 这两者比较的都是字符串是否相同
  2. 当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的
  3. 基本数据类型比较(string 除外) == 和 equals 两者都是比较值

原文:https://zhidao.baidu.com/question/209371810.html

4.[转载]接口和抽象类有什么区别

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

1.抽象类要被子类继承,接口要被类实现
2.接口只能申明方法,抽象类可以申明,也可以实现
3.接口的变量是公共的静态变量,抽象类是普通变量
4.抽象方法需要被实现,所有不能使静态的,也不能是私有的
5.接口可以多继承,类只能单根继承

原文:http://www.cnblogs.com/yongjiapei/p/5494894.html

5.throw和throws有什么区别

  1. throw出现在方法体中,throws出现在方法声明后面
  2. throw抛出具体异常类型, throws声明方法可能抛出的异常类型,交由方法调用者处理异常

6.Oracle三种分页SQL

第1种

select *
  from (select *
          from (select t.*, rownum rn from erp.t_app_loanapp t) a
         where rownum  <= &end) b
 where b.rn >= &start;

第2种

select *
  from (select a.*, rownum rn from (select t.* from erp.t_app_loanapp t) a) b
 where b.rn <= &end
   and b.rn >= &start

第2种参考:http://git.oschina.net/drinkjava2/jdialects

第3种

select *
  from (select t.*, rownum rn from erp.t_app_loanapp t) a
 where a.rn between &start and &end;

7.Spring中事务特性、隔离级别、传播行为

4大特性
  1. 原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

  1. 一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

  1. 隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

  1. 持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

4个隔离级别
  1. Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
  1. Repeatable read (可重复读):可避免脏读、不可重复读的发生。
  1. Read committed (读已提交):可避免脏读的发生。
  1. Read uncommitted (读未提交):最低级别,任何情况都无法保证。
7个传播行为

PROPAGATION_REQUIRED

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择

PROPAGATION_SUPPORTS

支持当前事务,如果当前没有事务,就以非事务方式执行

PROPAGATION_MANDATORY

使用当前的事务,如果当前没有事务,就抛出异常

PROPAGATION_REQUIRES_NEW

新建事务,如果当前存在事务,把当前事务挂起

PROPAGATION_NOT_SUPPORTED

以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

PROPAGATION_NEVER

以非事务方式执行,如果当前存在事务,则抛出异常

PROPAGATION_NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作

8.请说出你所知道的线程同步的方法

  1. wait():Object的方法,使一个线程处于等待状态,并且释放所持有的对象的lock
  1. sleep():Thread的方法,使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常
  1. notify():Object的方法,唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级
  1. notifyAll():Object的方法, 唤醒所有的等待线程。将线程池中的所有线程都唤醒

9.List、Set、Map三个接口,存取元素时,各有什么特点

List : 有序的,可重复的;可以使用for、foreach、iterator迭代器迭代
Set: 无序的,不可重复的;可以使用for、iterator迭代器迭代
Map: 键值对,key不可重复,value可重复;可以使用map.values()、map.keySet()、map.entrySet()

你可能感兴趣的:(Java面试总结)