史上最全java面试题(二)

3 篇文章 0 订阅
3 篇文章 0 订阅
  1. 启动一个线程是调用run()还是start()方法?
    答:使用start方法让线程开始执行,jvm会调用线程的run方法来执行任务,直接使用run方法就给调用普通方法没有区别。
  2. 什么是线程池(thread pool)?

答:面向对象编程中,创建和销毁对象是很费时间的,所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,这就是”池化资源”技术产生的原因。

线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。

 

  1. 线程的基本状态以及状态之间的关系?

10.java语言中有几种方法可以终止线程运行?stop和suspend方法为什么不推荐使用?

答:

当使用stop方法时,它会释放已经锁定的所有监视资源,如果当前任何一个受到这些监视资源保护的对象处于一个不一致的状态,其他的线程将会看到这个不一致的状态,这可能会导致程序执行的不确定性,并且这种问题很难被定位。

Suspend方法容易引起死锁。例如:线程B已经获取到了互斥资源M的锁,此时线程A通过suspend方法挂起线程A的执行,接着线程B也去访问互斥资源M,这时候就造成了死锁。

一般建议采用的方法:

等待线程自行结束。

可以通过设置一个flag标志来控制循环是否执行,通过这种方法来让线程离开run方法,从而终止线程。(当线程处于非运行状态是,此方法失效)

使用interrupted方法打破阻塞的情况,当interrupt被调用的时候,会抛出interruptexception异常。课堂通过在run方法中捕获这个异常来让线程安全退出。

 

11.简述synchronized 和java.util.concurrent.locks.Lock的异同?

答:

Lock是Java 5以后引入的新的API,和关键字synchronized相比主要相同点:Lock 能完成synchronized所实现的所有功能;主要不同点:Lock有比synchronized更精确的线程语义和更好的性能,而且不强制性的要求一定要获得锁。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且最好在finally 块中释放(这是释放外部资源的最好的地方)。

 

12.多线程同步有几种实现方法?

答:当多线程访问同一个资源时,非常容易出现线程安全的问题(例如,当多个线程同时对一个数据进行修改时,会导致某个线程对数据的修改丢失)因此,需要同步机制来解决这种问题,三种方式:

  1. synchronized关键字

在Java语言中,每个对象都有一个对象锁与之相关联,该锁表明对象在任何时候只允许被一个线程所拥有,当一个线程调用对象的一段synchronized代码时,首先需要获得这个锁,然后去执行相应的代码,执行结束后,释放锁。

Synchronized方法:在方法声明前加入synchronized关键字,当一个方法的方法体规模非常大时,会大大的影响程度的执行效率。

Synchronized代码块:可以在任意代码段声明为synchronized,也可以指定上锁的对象,有非常高的灵活性。

  1. wait与notify

当使用synchronized来修饰某个共享资源的时候,如果线程A1在执行synchronized代码,另外一个线程A2也要同时执行同一对象的同一synchronized代码时,线程A2将要等到线程A1执行完成后,才能继续执行。在这种情况下,可以使用wait方法和notify方法。

在synchronized代码被执行期间,线程可以调用对象的wait方法,释放对象锁,进入等待状态,并可以调用notify或notifyall方法通知正在等待的其他线程,notify仅唤醒一个线程,并允许它去获得锁,而notifyall方法唤醒所有等待这个对象的线程,并允许他们去获得锁(并不是让所有唤醒线程都获取到锁,而是让他们去竞争)。

  1. Lock

Jdk5新增了Lock接口及它的实现类ReentrantLock,Lock也可以用来实现多线程的同步,方法如下:

  1. Lock(),以阻塞的方式获取锁,也就是说,如果获取了锁,则立刻返回,如果其他线程持有锁,当前线程等待,知道获取锁后返回。
  2. TryLock(),以非阻塞方式获取锁,只是尝试性的去获取一下锁。如果获取到锁,返回true,否则返回false。
  3. TryLock(long timeout,timeunit unit),如果获取了锁,立刻返回true,否则会等待参数给定的时间单元,在等待过程中,如果获取了锁,就返回true,如果等待超时,则返回false。
  4. Lockinterruptibly(),如果获取了锁,则立即返回,如果没有获取锁,则当前线程处于休眠状态,直到获得锁,或者当前线程被其他线程中断(会收到interruptedexception异常)。

它与lock方法最大区别在于:如果lock方法获取不到锁,则会一直处于阻塞状态,且会忽略interrupt方法。

  1. 多线程编程时有哪些注意事项?

答:

  1. 如果能用volatile代替synchronized,尽可能用volatile。因为被synchronized修饰的方法或代码块在同一时间值允许一个线程访问,而volatile却没有这个限制,因此使用synchronized会降低并发量。由于volatile无法保证原子操作,因此在多线程的情况下,只有对变量的操作为原子操作的情况下才可以使用volatile的。
  2. 尽可能减少synchronized块内代码,只把临界区的代码放入,尽量避免使用synchronized修饰方法。
  3. 尽可能给每一个线程都定义一个线程的名字,不要使用匿名线程,有利于调试。
  4. 尽可能使用concurrent容器,来代替synchronized容器。因为synchronized容器对整个容器加锁实现多线程安全的,性能较低,而concurrent采用了更加细粒度的锁,支持更高的并发量。
  5. 使用线程池来控制多线程的执行。
  1. volatile关键字的作用?
  2. 是否可以用volatile修饰数组?

网络编程:

  1. 在Java语言中,socket的建立和建立的原理是什么?

答:

网络上两个程序通过一个双向的通信连接试实现数据的交换,这个双向链路的一端称为一个socket。套接字可以用来实现不同虚拟机或不同计算机直接的通信。在Java语言中,socket分为两类,面向连接的socket(tcp)通信协议和面向无连接的socket(udp)通信协议。任何一个socket都是由ip地址和端口号唯一确定的。

基于tcp协议的通信过程如下:首先server端listen指定的某个端口是否有连接请求,然后,client端向server端发出connect请求,接着,server端向client端发回accept消息。一个连接就建立起来了,会话随即产生。

IO流:

  1. Java中如何实现序列化,有什么意义?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题。
要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。

2.Java中有几种类型的流?

答:字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。关于Java的I/O需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。
3.你在项目中哪些地方用到了XML?

答:XML的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理,XML曾经是异构系统间交换数据的事实标准,但此项功能几乎已经被JSON(JavaScript Object Notation)取而代之。当然,目前很多软件仍然使用XML来存储配置信息,我们在很多项目中通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的,而且这些框架都选择了dom4j作为处理XML的工具。

 

数据库:

  1. 阐述JDBC操作数据库的步骤。
  1. 加载驱动。

Class.forName();

2.创建连接。

Connection con = DriverManager.getConnection();

3.创建语句。

PreparedStatement ps = con.prepareStatement(SQL语句);

4.执行语句。

ResultSet rs = ps.executeQuery();

5.关闭资源。

Con.close();

关闭外部资源的顺序应该和打开的顺序相反,也就是说先关闭ResultSet、再关闭Statement、在关闭Connection。上面的代码只关闭了Connection(连接),虽然通常情况下在关闭连接时,连接上创建的语句和打开的游标也会关闭,但不能保证总是如此,因此应该按照刚才说的顺序分别关闭。此外,第一步加载驱动在JDBC 4.0中是可以省略的(自动从类路径中加载驱动),但是我们建议保留。

 

2.使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?

答:要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的setFetchSize()方法指定每次抓取的记录数(典型的空间换时间策略);要提升更新数据的性能可以使用PreparedStatement语句构建批处理,将若干SQL语句置于一个批处理中执行。

3.事务的ACID是指什么?

答:

事物必须满足四个属性:

原子性,事物是一个不可分割的整体,要么全部执行,要么全部不执行。

一致性,一个事物在执行之前和执行之后,数据库数据必须保持一致性状态。

比如,银行转账前后两个账户金额之和应保持不变。

隔离性,当两个或以上的事物并发执行时,为了保证数据的安全性,将一个事物内部的操作隔离起来,不被其他的正在进行的事物看到。

持久性,事物完成后,对数据库的数据修改是永久性的,当系统或介质发生故障时,该修改也永久保存。永久性一般通过备份和恢复来保证。

4.JDBC中如何进行事务处理?

答:

Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果在事务处理过程中发生异常则通过rollback()进行事务回滚。除此之外,从JDBC 3.0中还引入了Savepoint(保存点)的概念,允许通过代码设置保存点并让事务回滚到指定的保存点。

  1. 数据库连接池的工作机制是什么?

答:

数据库连接是一种有限的资源,建立数据库连接是耗时操作,页面应用中,每次请求都需要建立新的连接,响应时间长,影响用户体验。数据库连接个数是有限制的,如果经常建立连接,忘记释放,连接资源会耗尽,新用户连接将等待有用户释放连接为止。严重影响可用性。

数据库连接池负责分配、管理、释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不需要新建,同时还会释放超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接遗漏。

服务器启动时会创建一定数量的池连接,当客户需要使用时,直接到池中获取,不需要新建。使用时标记忙状态,使用完毕后标记为闲状态,其他用户又可使用,如果没有空闲的连接,则根据配置新建一定数量的连接。连接池会释放超过最大空闲时间的连接。

  1. 什么是DAO模式?

答:DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。在实际的开发中,应该将所有对数据源的访问操作进行抽象化后封装在一个公共API中。用程序设计语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。DAO模式实际上包含了两个模式,一是Data Accessor(数据访问器),二是Data Object(数据对象),前者要解决如何访问数据的问题,而后者要解决的是如何用对象封装数据。


7.Statement和PreparedStatement有什么区别?哪个性能更好?

答:与Statement相比,①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注射攻击的可能性);②PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。

 

8.JDBC事物隔离级别有几种?

答:五种

  1. TRANSACTION_NONE JDB:不支持事物
  2. TRANSACTION_READ_UNCOMMITTED:未提交读
  3. TRANSACTION_READ_COMMITTED:已提交读
  4. TRANSACTION_REPEATABLE_READ:重复读
  5. TRANSACTION_SERIALIZABLE:可序列化

9.数据库中“事物处理”是什么?

答:

事物是数据库中一个独立的执行单元,它通常由高级数据库操作语言或编程语言编写的用户程序执行引起。当数据库中更改数据成功时,在事物中更改的数据便会提交,不再改变。否则,事物就取消或者回滚,更改无效。

支付系统举例。

事物必须满足四个属性:

原子性,事物是一个不可分割的整体,要么全部执行,要么全部不执行。

一致性,一个事物在执行之前和执行之后,数据库数据必须保持一致性状态。

比如,银行转账前后两个账户金额之和应保持不变。

隔离性,当两个或以上的事物并发执行时,为了保证数据的安全性,将一个事物内部的操作隔离起来,不被其他的正在进行的事物看到。

持久性,事物完成后,对数据库的数据修改是永久性的,当系统或介质发生故障时,该修改也永久保存。永久性一般通过备份和恢复来保证。

一般情况下,通过commit或rollback来终止事物,当执行commit语句,自从事物启动以来对数据库所做的一切更改就成永久性的,当rollback执行,自从事物启动以来对数据库所做的一切更改都会被撤销,数据库内容返回到事物开始之前所处的状态。

 

10.用一条SQL语句查询出每门课都大于75分的学生姓名,表名为score,字段有name,course,mark。

答:select distinct name from score a where not exists(select * from score b where b.name=a.name and b.mark<=75)

反射:

  1. 获得一个类的类对象有哪些方式?

答:

方法1:类型.class,例如:String.class
方法2:对象.getClass(),例如:"hello".getClass()
方法3:Class.forName(),例如:Class.forName("java.lang.String")


2.如何通过反射创建对象?

答:
方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()
方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance("Hello");


3.如何通过反射获取和设置对象私有字段的值?

答:

可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了。

 

  1. 如何通过反射调用对象的方法?

class MethodInvokeTest {

   public static void main(String[] args) throws Exception {

       String str = "hello";

       Method m = str.getClass().getMethod("toUpperCase");

       System.out.println(m.invoke(str));  // HELLO

   }

}

设计模式:

  1. 简述一下你了解的设计模式。

答:所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。

 

  1. 简述一下面向对象的"六原则一法则"。

答:

单一职责原则:一个类只做它该做的事情。(单一职责原则想表达的就是"高内聚",所谓的高内聚就是一个代码模块只完成一项功能)

开闭原则:软件实体应当对扩展开放,对修改关闭。

依赖倒转原则:面向接口编程。(该原则说得直白和具体一些就是声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型,因为抽象类型可以被它的任何一个子类型所替代,请参考下面的里氏替换原则。)
里氏替换原则:任何时候都可以用子类型替换掉父类型。

接口隔离原则:接口要小而专,绝不能大而全,一个接口只应该描述一种能力,接口也应该是高度内聚的。

合成聚合复用原则:优先使用聚合或合成关系复用代码。

迪米特法则:迪米特法则又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。迪米特法则简单的说就是如何做到"低耦合",门面模式和调停者模式就是对迪米特法则的践行。

 

  1. 用Java写一个单例类。

答:

饿汉式:

public class SingleTon {

   private static SingleTon singleTon = new SingleTon();

   private SingleTon() {

   }

   public static  SingleTon getInstanse() {

        return singleTon;

   }

}

懒汉式:

public class SingleTon2 {

   private SingleTon2() {

   }

   private static SingleTon2 singleTon2 = null;

   public  static  SingleTon2 getInstance() {

      if(singleTon2 == null) {

        singleTon2 = new SingleTon2();

      }

      return singleTon2;

   }

4.用Java写一个工厂类。

Web部分:

Servlet/Jsp

  1. 阐述Servlet和CGI的区别?

答:HTML只能用来保存静态内容,而通常情况下静态页面难以满足实际应用的需求,因此需要动态页面的开发。其中一种是CGI,采用Perl或shell脚本或c语言编写的程序。另一种是servlet技术。

Servlet:是Java编写的服务器端程序,运行与web服务器中的servlet容器,主要功能是提供请求响应的web服务模式,可以生产动态的web内容,优点如下:

较好的可移植性。

执行效率高。

功能强大。

使用方便。

可扩展性强。

Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。

2.Servlet接口中有哪些方法?

答:

Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:
void init(ServletConfig config) throws ServletException
void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
void destory()
java.lang.String getServletInfo()
ServletConfig getServletConfig()

  1. Servlet的生命周期?

答:

Init

service

destroy

  1. forward和redirect的区别?

答:

forward是服务器内部重定向,服务器直接访问目标地址URL,把那个URL的响应内容读取过了,而客户端并不知道,因此客户端浏览器的地址栏中不会显示转向后的地址,还是原来的地址。由于整个定向过程中用的是同一个request,因此forward会将request信息带到被定向的jsp或servlet中使用。

Redirect则是客户端重定向,是完全的跳转,及客户端浏览器会获取到跳转后的地址,然后重新发送请求,因此浏览器中会显示跳转后的地址。

Forward效率更好,少一次请求。当forward满足需求时,尽量使用forward的方式,但是在需要跳转到一个其他服务器上的资源时,则必须使用redirect。

5.doget和dopost的区别?

答:

①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。

  1. Jsp和Servlet的区别?

答:

Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。

JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。

相同点:jsp是一个特殊的servlet,只要是jsp可以完成的工作,使用servlet都可以完成。不同点:servlet实现方式是在Java语言中嵌入HTML代码,但是编写和修改HTML非常不方便,所有它比较适合做流程控制的业务处理。而jsp的实现方式在HTML中嵌入Java代码,比较适合做页面的显示。Servlet没有内置对象,jsp的内置对象都是必须通过httpservletrequest对象,httpservletresponse对象已经httpservlet对象得到。

7.Jsp的内置对象,作用?

答:

- request:封装客户端的请求,其中包含来自GET或POST请求的参数;
- response:封装服务器对客户端的响应;
- pageContext:通过该对象可以获取其他对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web应用的配置对象;
- page:JSP页面本身(相当于Java程序中的this);
- exception:封装页面抛出异常的对象。

  1. Jsp四大作用域用法?

答:

JSP中的四种作用域包括page、request、session和application,具体来说:
- page代表与一个页面相关的对象和属性。
- request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
- session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
- application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

9.实现会话跟踪的技术有哪些?

10.服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?

11.简述session的作用?

 

Web

1.过滤器有哪些作用和用法?

2.监听器有哪些作用和用法?

3.web.xml文件中可以配置哪些内容?

答:web.xml用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时间、安全验证方式、错误页面等。

4.你的项目中使用过哪些JSTL标签?

答:项目中主要使用了JSTL的核心标签库,包括<c:if>、<c:choose>、<c: when>、<c: otherwise>、<c:forEach>等,主要用于构造循环和分支结构以控制显示逻辑。

  1. 使用标签库有什么好处?如何自定义JSP标签?

答:

使用标签库的好处包括以下几个方面:
- 分离JSP页面的内容和逻辑,简化了Web开发;
- 开发者可以创建自定义标签来封装业务逻辑和显示逻辑;
- 标签具有很好的可移植性、可维护性和可重用性;
- 避免了对Scriptlet(小脚本)的使用(很多公司的项目开发都不允许在JSP中书写小脚本)

自定义JSP标签包括以下几个步骤:
- 编写一个Java类实现实现Tag/BodyTag/IterationTag接口(开发中通常不直接实现这些接口而是继承TagSupport/BodyTagSupport/SimpleTagSupport类,这是对缺省适配模式的应用),重写doStartTag()、doEndTag()等方法,定义标签要完成的功能
- 编写扩展名为tld的标签描述文件对自定义标签进行部署,tld文件通常放在WEB-INF文件夹下或其子目录中
- 在JSP页面中使用taglib指令引用该标签库

6.如何在基于Java的Web项目中实现文件上传和下载?

7.Web服务器和web应用服务器有什么区别?

 

SSM框架

Spring

  1. spring是什么?

1、Spring的核心是一个轻量级(Lightweight)的容器(Container)。
   2、Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
   3、Spring提供AOP(Aspect-oriented programming)概念的实现方式。
   4、Spring提供对持久层(Persistence)、事物(Transcation)的支持。
   5、Spring供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。
   6、Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。
   总之,Spring是一个全方位的应用程序框架。

 

  1. Spring的好处有什么?

(1)Spring能有效地组织你的中间层对象。

(2)Spring能消除在许多工程中常见的对Singleton的过多使用。

(3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。

(4)Spring能够帮助我们真正意义上实现针对接口编程。

(5)在Spring应用中的大多数业务对象没有依赖于Spring。

(6)使用Spring构建的应用程序易于单元测试。

(7)Spring支持JDBC和O/R Mapping产品(Hibernate)

(8)MVC Web框架,提供一种清晰,无侵略性的MVC实现方式。

(9)JNDI抽象层,便于改变实现细节,可以方便地在远程服务和本地服务间切换。

(10)简化访问数据库时的例外处理。

(11)Spring能使用AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理。

(12)提供了JavaMail或其他邮件系统的支持。

 

  1. 简述spring ioc,作用,优点?

http://www.cnblogs.com/xdp-gacl/p/4249939.html

 

  1. 简述spring aop?

 

 

 

4.Spring中Bean的作用域有哪些?

5.Spring IoC容器配置Bean的方式?

6.阐述Spring框架中Bean的生命周期?

7.你使用过的应用服务器优化技术有哪些?

8.Spring中如何使用注解来配置Bean?有哪些相关的注解?

9.Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?

10.如何在Web项目中配置Spring的IoC容器?

11.如何在Web项目中配置Spring MVC?

 

SpringMVC

  1. Spring MVC的工作原理是怎样的?

Mybatis

1.什么是ORM?

2.什么是领域模型(domain model)?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值