Java基础面试题

1、面向对象的特征有哪些方面?
抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便充分的注意与当前目标有关的方面,抽象包括两个方面,一个是过程抽象,二是数据抽象
封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治,封装的对象,这些对象通过一个受保护的接口访问其他对象
继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表达共性的方法,对象的一个新类可以从现在的类中派生,这个过程成为继承,新类继承了原始类的特性,新类成为原始类的派生类,而原始类称为新类的基类,派生类可以从他的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更加适合特殊的需求,
多态性:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活,抽象,行为共享,代码共享的优势,很好的解决了应用程序函数同名的问题

2、int和Integer有什么区别?
int 是基本数据类型; Integer是其包装类,注意是一个类。

3、String,StringBuffer StringBuilder的区别。
可变与不可变
是否多线程安全
StringBuilder与StringBuffer共同点

4、Overload和Overriding的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了. 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。Overloaded的方法可以改变返回值的类型

5、静态变量和实例变量的区别?
静态变量属于类,不用实例化就已经存在,所有的实例共享同一个静态变量,可以通过类名和实例名来访问。实例变量属于实例,每个实例都有自己的这个变量,只能通过实例名来访问

6、GC是什么?为什么要GC?
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。

7、java中实现多态的机制是什么?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

8、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取.
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.

9、java和javascript的区别?
首先,这两个家伙没有任何的血缘关系,java是是由Sun 公司于1995年5月推出的,而javascript是于1995年由Netscape公司设计实现而成的,由于Netscape公司与Sun公司合作,Netscape高层希望它看上去能够像Java,因此取名为JavaScript。
其次,这两个家伙的本质也不一样,java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,即使是开发简单的程序,也必须设计对象;而JavaScript是一种直译式脚本语言,它本身提供了非常丰富的内部对象供设计人员使用。
并且它们的执行方式也是不一样的,Java是介于解释型和编译型语言之间的一种语言,java的源代码在传递到客户端执行之前,必须经过编译,通过相应平台上的解释器,实现独立于某个特定的平台编译代码的束缚。JavaScript是一种解释性编程语言,其源代码在发往客户执行之前不需经过编译,而是将文本格式的字符代码发送给客户编由浏览器解释执行。
再其次两者的用途也不一样,java广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等,而Javascript的用途是:1.嵌入动态文本于HTML页面;2.对浏览器事件做出响应; 3.读写HTML元素;4.在数据被提交到服务器之前验证数据;5.检测访客的浏览器信息; 6.控制cookies,包括创建和修改等。

10、HashMap和Hashtable的区别?
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,
主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

11、forward和redirect的区别?
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.

12、运行时异常与一般异常有何异同?
异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
  2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。运行时异常如果在函数内被抛出,在函数上不需要声明。

13、error和exception有什么区别?
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。
Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
Exception :表示可恢复的例外,这是可捕捉到的。由程序员导致的错误 ,应该在应用程序级被处理.

14、java语言如何进行异常处理?关键字:throws,throw,try,catch,finally分别代表什么含义?在try块中可以抛出异常吗?
把异常当做一个对象封装并提供接口。当出现异常时,抛出一个异常对象,调用这个对象的方法可用捕获到这个异常并进行处理。
try:用来指定一块预防所有异常的程序。
catch:用来指定你想要捕捉的异常类型。
finally:为了确保一段代码不管是否发生异常都能被执行。
throw:用来明确的抛出一个异常。
throws:用来标明一个成员函数可能抛出的各种异常。
在try块中可以抛出异常。

15、final,finally,finallize的区别.
final:修饰符(关键字)。
修饰类,则类不能被继承。
修饰方法,则方法不能重载。
修饰属性,则属性一旦赋值不能修改。
finally:异常处理的一部分。
被finally包括的代码,不管是否发生异常都能被执行。
finallize:方法名。
finalize()方法时在垃圾收集器删除对象之前对这个对象的调用。

16、什么是java的序列化,如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,
然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

17、你所知道的集合类有哪些?主要方法?
List、Set和Map集合。List具体实现包括ArrayList、LinkedList和Vector。Map集合具体实现包括HashMap和Hashtable。
List的方法:add()添加元素 remove()移除元素 get()获取元素
Set的方法:add()添加元素 remove()移除元素
Map的方法:put()添加元素 remove()移除元素 get()获取元素

18、Collection和Collections的区别?
Collection是各种集合的父接口,继承它得接口主要有Set和List。
Collections是针对集合的帮助类,提供一些列静态方法实现对集合的操作。比如sort()排序方法。

19、HashMap与HashTable的区别?
HashMap允许一个null键和多个null值,Hashtable不允许。
HashMap没有contains方法,Hashtable有。
Hashtable的方法是synchronize的,而HashMap不是,所有在多线程的情况下,Hashtable比HashMap安全。但是单线程的情况下,HashMap比Hashtable更高效。

20、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
继承Thread类与实现Runnable接口都能实现多线程。
1.同步方法: 使用synchronized关键字修饰的方法。
2.同步代码块: 使用synchronized关键字修饰的语句块
3.使用同步锁实现线程同步 声明一个ReentrantLock同步锁,调用lock() : 获得锁 unlock() : 释放锁

21、同步和异步有何异同?在什么情况下分别使用它们?
同上8

22、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?
两种方法:
​​a.继承java.lang.Thread类
​​b.实现java.lang.Runnable接口
​关键字:
​​synchronized关键字修饰同步方法

23、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出它们分别是哪些类?
两种类型的流:
​​字节流和字符流
​字节流继承于InputStream
​字符流继承于OutputStream

24、编程题:写一个Singleton出来。
懒汉单例:
​​public class Singleton{
​​​//1.构造化私有
​​​private Singleton();
​​​private final static Singleton obj = new Singleton();
​​​//2.提供公开对象的获取方式
​​​public static ActiveSingleTon getInstance() {
​​​​return obj;
​​​}
​​}
​饿汉单例:
​​public class Singleton{
​​​//1.构造化私有
​​​private Singleton();
​​​private static Singleton obj;
​​​//2.提供公开对象的获取方式
​​​public static Singleton getInstance() {
​​​​synchronized (Singleton.class) {
​​​​​if (obj == null) {
​​​​​​obj = new LazySingleTon();
​​​​​}
​​​​​return obj;
​​​​}
​​​}
​​}​

25、说说你所熟悉或听说过的javaee中的几种常用设计模式?及对设计模式的一些看法。
简单工厂模式:
​​1.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
​​2.简单工厂模式组成部分
​​​工厂角色:简单工厂核心,负责创建所有的类的内部逻辑
​​​抽象产品角色:简单工厂模式所创建的所有对象的父类(接口/抽象类),负责所有实例所共有的公共接口
​​​具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
​​3.优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
​​4.缺点:当我们新增加一个产品的时候就必须修改工厂类,响应的工厂类就必须重新编译一次。导致系统失去了灵活性和可维护性。

单例模式
​​1.单例模式:单例模式确保某一个类只有一个实例,而且该类只能自己实例化自己并向其他类公开这个实例的对象来创建模式
​​2.单例模式应用场景:重量级对象可以采用单例模式创建,例如配置文件解析器,连接工厂等等。单例模式一般和简单工厂搭配使用
​​3.饿汉单例和懒汉单例的比较
​​​饿汉式是线程安全,在类创建的同时就已经创建好一个静态对象供系统使用,以后不在改变。
​​​懒汉式是延时加载,它在加载类时创建实例如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。

动态代理模式
​​1.动态代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式可以在客户端和目标对象之间起到中介的作用
​​2.优点:
​​​职责清晰
​​​保护委托对象增强安全性
​​​高扩展性
​​3.组成结构:
​​​客户对象
​​​公共接口
​​​代理对象
​​​委托对象

​设计模式的一些看法:
​​使用设计模式是为了让自己在项目开发中明确各个部分组成的各种关系与角色,使项目层次简洁明确,易于维护、二次开发等等。

26、什么是ORM?
对象关系映射
​​编写程序的时候,以面向对象的方式处理数据
​​保存数据的时候,却以关系型数据库的方式存储
​ORM是通过使用描述对象和数据库之间映射的元数据,将JAVA程序中的对象自动持久化到关系数据库中。

27、java中访问数据库的步骤?Statement和PreparedStatement之间的区别?
1.加载驱动
​2.打开连接
​3.创建Statement
​4.执行sql语句
​5.处理结果集
​6.关闭连接

​Statement和PreparedStatement之间的区别:
​​1.PreparedStatement使用预编译,一次编译多次运行,相比Statement有效节省服务器资源。
​​2.PreparedStatement可以使用占位符,使用起来更加灵活,提高代码可读性和可维护性。而Statement不可以使用占位符。
​​3.PreparedStatement相比Statement安全性更高,防止SQL注入。

28、说出Servlet的生命周期。
WEB容器加载Servlet并将其实例化后,生命周期开始。当用户第一次访问servlet,容器调用init方法进入servlet方法初始化。请求到达时运行service方法,当服务器决定将实例销毁时调用destroy方法。其中构造方法,init, destroy只会调用一次,而service会调用多次。

29、forward和redirect的区别。
​同上11

30、hibernate对象的三种状态之间如何转换?
瞬时状态(Transient)无-无
​​刚被new语句创建,还没有被持久化,且不处于Session的缓存中,数据库没有记录
​持久状态(Persistent)有-有
​​已经被持久化,且加入到Session的缓存中,数据库有记录
​游离状态(Detached)无-有
​​已经被持久化,Session关闭,但不再处于Session的缓存中,数据库可能有数据

31、JSP的内置对象及方法?
jsp共有以下9种基本内置组件
request:用户端请求,一般来自get/post
response:网页传回用户端的回应
pageContext:网页的属性是在这里管理
session:与请求有关的会话期
application:servlet正在执行的内容
out:用来传送回应的输出;
config:servlet的构架部件;
page:jsp网页本身
exception:针对错误网页,未捕捉的例外

32、get和post的区别?
1:get使用从服务器获得数据,而post是用来向服务器上传递数据
2:get将表单中数据按照variable=value的形式,添加到action所指的URL后面,并且两者用"?连接"而各个变量之间用"&"连接:post是将表单中的数据放在form的数据体中
按照变量和值相对应的方式,传递到action所指向url
3:get是不安全的,因为在传输过程中,数据被放在请求的url中,post的所有操作对用户来说都是不可见的
4:get传输的数据量小,这主要是因为受url长度限制;而post可以传输大量的数据,所以在上传文件只能使用post
5:get限制from表单的数据集必须为ASCII字符,而post支持整个ISO10646字符集
6:get是from的默认方法

33、Jsp和Servlet有哪些相同点和不同点,它们之间的联系是什么?
jsp是servlet技术的扩展,本质上的是servlet的简易方式,更强调应用的外表表达。jsp编译后是"类servlet"。servlet和jsp最主要的不同点在于,servlet的应用逻辑是在java文件中,并且完全从表示层中的html分离出来。而jsp的情况是java和html可以组合一个扩展名为.jsp的文件jsp侧重于视图,servlet主要用于控制逻辑

34、详细描述MVC.
1:基于java的Web应用系统采用MVC架构模式,即model(模型),view(视图),control(控制)分离设计,是现在web应用服务系统的主流设计方向
2:model(模型):处理业务逻辑模块,每一个处理一个模块
3:view(视图):负责页面的显示,显示model处理结果给用户,主要实现数据到页面转换过程
4:control(控制):负责每个请求的分发,把from数据传递给model处理。把处理结果的数据传递给view显示

35、简述HttpSession的作用、使用方法,可以用代码说明。
HttpSession中可以跟踪并储存用户信息,把值设置到属性中,有2个方法:setAttribute(),getAttrribute();
例如:在一个方法中用session.setAttribute(“student”,student);在session中设置一个属性名为student,值为一个名为student的对象。而后可在同一session范围内用getAttribute(“student”)取出该属性,得到student对象

36、排序有哪几种方法?请列举。用JAVA实现一个快速排序。
1:插入排序
2:交换排序
3:选择排序
4:归并排序
5:分配排序
6:快速排序(a[0:n-1])

37、Hibernate有哪5个核心接口?
configuration接口
SessionFactory接口
session接口
Transaction接口
query接口

38、web项目有几种会话跟踪技术?
1:通过session提供的方法保存
2:通过Cookie保存信息
3:通过表单的隐藏域保存信息
4:通过地址重写的方式保存信息

39、jsp的四种范围。
application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:请求作用域,就是客户端的一次请求。
page:一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。

40、有几种会话跟踪技术。
同上38
41、B/S与C/S的联系与区别。
c/s模式就是 客户端(client)/服务器(server)模式,客户端的电脑也可以参与整个系统的事务处理,可以处理一些不需要服务器处理的事务。b/s模式就是 浏览器(brower)/服务器(server)模式,浏览器端只能通过浏览程序(IE等访问服务器,显示报务器提供的信息,整个系统的事务处理都要由服务器来完成
C/S和B/S,是再普通不过的两种软件架构方式,都可以进行同样的业务处理,甚至也可以用相同的方式实现共同的逻辑。但是B/S随着Internet技术的兴起,是对C/S结构的一种改进或者扩展的结构。相对于C/S,B/S具有如下优势:
1、分布性:可以随时进行查询、浏览等业务
2、业务扩展方便:增加网页即可增加服务器功能
3、维护简单方便:改变网页,即可实现所有用户同步更新
4、开发简单,共享性强,成本低,数据可以持久存储在云端而不必担心数据的丢失
B/S架构与C/S架构的区别
1、硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境, 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
2、对安全要求不同 :
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息;B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群.
3、对程序架构不同:
C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑;B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上.
4、软件重用不同:
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好;B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.
5、系统维护不同 :
C/S 架构的每一个客户端都必须安装和配置客户端软件。如果系统发生变化,则需要对每一个客户端都进行升级维护;B/S 架构中,软件应用的业务逻辑完全在服务器端实现,所有的客户端只是浏览器,不需要做任何的维护。因此系统维护员只需要关注服务器的软件升级即可。客户端只有重新登录系统,使用的就已经是最新版本的软件了
6、处理问题不同:
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统; B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.
7、用户接口不同:
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高 ;B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
8、信息流不同:
C/S 程序一般是典型的中央集权的机械式处理,交互性相对低;B/S信息流可变化,B-B B-C B-G 等信息、流向的变化,更像交易中心

42、项目中如何体现Spring中的切面编程,具体说明。
面向切面编程(AOP)的概念:把项目中需要在多处用到的功能,比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。
面向切面编程的目标:

  1.  把横切关注点从业务逻辑中分离,独立模块化
    
  2.  在不改变现有代码的前提下,动态的添加功能
    

面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。在切面上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定义了要插入的方法。切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。
项目中用到的Spring中的切面编程最多的地方:声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

43、项目中为什么使用SSH?

  1. 使用Struts:因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。
  2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。
  3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;
    采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等

44、简述HttpSession的作用、使用方法,可以用代码说明。
同上35
45、spring是什么?根据你的理解详细谈谈你的见解。
Spring是一个轻量级的企业级框架,提供了IoC容器、AOP实现、DAO/ORM支持、Web集成等功能,目标是使现有的Java EE 技术更易用,并促进良好的编程习惯。
Spring主要核心是:
控制反转(IOC):控制反转也可以称为依赖注入(DI),即由容器负责把组件所依赖的具体对象注入给组件,一般以配置文件的形式,从而避免组件之间以硬编码的方式耦合在一起。
面向切面编程(AOP):AOP 的目的是从系统中分离出切面,独立于业务逻辑实现,在程序执行时织入程序中运行。面向切面编程主要关心两个问题:在什么位置,执行什么功能。
通俗的说,IOC就是将组件对象的控制权从代码本身转移到外部容器。AOP就是将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决问题。采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。

46、spring的事务如何配置(不用代码,文字说清楚步骤和概念)?
简单的说,分为4步骤:
• 导入tx和aop命名空间
• 定义事务管理器Bean(transactionManager),并为其注入数据源Bean(sessionFactory)
• 通过tx:advice配置事务增强,绑定事务管理器并针对不同方法定义事务规则
• 配置切面,将事务增强与方法切入点组合

47、springmvc运行原理?​
SpringMVC流程
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值