赞
踩
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
1
Java 面试宝典 2020 版
前言…13
一. Java 基础部分…14
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? …14
2、Java 有没有 goto?..14
3、说说&和&&的区别。 …14
4、switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上? 14
5、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?..14
6、char 型变量中能不能存贮一个中文汉字?为什么?..15
7、用最有效率的方法算出 2 乘以 8 等於几? …15
8、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?15
9、"“和 equals 方法究竟有什么区别?…15
操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内
存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相
等,只能用操作符。 …15
10、静态变量和实例变量的区别?…16
11、是否可以从一个 static 方法内部发出对非 static 方法的调用? …17
12、Integer 与 int 的区别…17
13、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?..17
14、请说出作用域 public,private,protected,以及不写时的区别…17
15、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?18
16、构造器 Constructor 是否可被 override? …19
17、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继
承具体类(concrete class)? 抽象类中是否可以有静态的 main 方法? …19
18、写 clone()方法时,通常都有一行代码,是什么?…19
19、面向对象的特征有哪些方面…19
20、java 中实现多态的机制是什么?…20
21、abstract class 和 interface 有什么区别?..20
22、abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是
synchronized?..21
21、String 是最基本的数据类型吗? …21
22、String s = “Hello”;s = s + " world!”;这两行代码执行后,原始的 String 对象中的
内容到底变了没有?…22
23、是否可以继承 String 类? …22
24、String s = new String(“xyz”);创建了几个 String Object? 二者之间有什么区别?22
25、String 和 StringBuffer 的区别…22
26、数组有没有 length()这个方法? String 有没有 length()这个方法? …23
27、下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”; …23
28、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不
会被执行,什么时候被执行,在 return 前还是后?..23
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
2
39、下面的程序代码输出的结果是多少?…24
40、final, finally, finalize 的区别。 …26
41、运行时异常与一般异常有何异同?…26
42、error 和 exception 有什么区别?..26
43、Java 中的异常处理机制的简单原理和应用。…26
44、请写出你最常见到的 5 个 runtime exception。…27
46、sleep() 和 wait() 有什么区别?..27
47、同步和异步有何异同,在什么情况下分别使用他们?举例说明。…27
48、多线程有几种实现方法?同步有几种实现方法? …28
49、启动一个线程是用 run()还是 start()? …28
50、当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此
对象的其它方法?..28
51、线程的基本概念、线程的基本状态以及状态之间的关系…28
52、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?…29
53、介绍 Collection 框架的结构…29
54、Collection 框架中实现比较要实现什么接口 …29
55、ArrayList 和 Vector 的区别…29
56、HashMap 和 Hashtable 的区别 …30
57、List 和 Map 区别? …30
58、List, Set, Map 是否继承自 Collection 接口?..30
59、List、Map、Set 三个接口,存取元素时,各有什么特点? …30
60、说出 ArrayList,Vector, LinkedList 的存储性能和特性…31
61、去掉一个 Vector 集合中重复的元素 …31
62、Collection 和 Collections 的区别。…32
63、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用还是
equals()? 它们有何区别? …32
64、你所知道的集合类都有哪些?主要方法?…32
65、两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不
对?..33
65、TreeSet 里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用
的是父类的 compareTo 方法,还是使用的子类的 compareTo 方法,还是抛异常!33
66、说出一些常用的类,包,接口,请各举 5 个…34
67、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请
说出他们分别是哪些类?…34
68、字节流与字符流的区别…35
68、什么是 java 序列化,如何实现 java 序列化?或者请解释 Serializable 接口的作
用。…35
69、描述一下 JVM 加载 class 文件的原理机制? …35
70、heap 和 stack 有什么区别。…35
71、GC 是什么? 为什么要有 GC? …36
72、垃圾回收的优点和原理。并考虑 2 种回收机制。…36
73、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法
主动通知虚拟机进行垃圾回收?…36
74、java 中会存在内存泄漏吗,请简单描述。 …36
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
3
75、能不能自己写个类,也叫 java.lang.String?…36
二. 算法与编程…37
1、编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文
件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。.37
2、编写一个程序,将 d:\java 目录下的所有.java 文件复制到 d:\jad 目录下,并将原
来文件的扩展名从.java 改为.jad。 …38
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取
的字符串,但要保证汉字不被截取半个,如“我 ABC”,4,应该截取“我 AB”,
输入“我 ABC 汉 DEF”,6,应该输出“我 ABC”,而不是“我 ABC+汉的半个”。
…40
4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各
个字符的个数。…41
5、说明生活中遇到的二叉树,用 java 实现二叉树 …42
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次
数,并按重复次数排序:…47
7、写一个 Singleton 出来。 …50
8、递归算法题 1…52
9、递归算法题 2…53
10、排序都有哪几种方法?请列举。用 JAVA 实现一个快速排序。…54
11、有数组 a[n],用 java 代码将数组元素顺序颠倒…55
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千
零一拾一元整)输出。…56
三. Java web 部分 …57
1、Tomcat 的优化经验…57
2、HTTP 请求的 GET 与 POST 方式的区别 …57
3、解释一下什么是 servlet;…57
4、说一说 Servlet 的生命周期?..57
5、Servlet 的基本架构 …58
6、SERVLET API 中 forward() 与 redirect()的区别? …58
7、什么情况下调用 doGet()和 doPost()?…58
8、Request 对象的主要方法:…58
9、forward 和 redirect 的区别…59
10. jsp 有哪些内置对象?作用分别是什么? 分别有什么方法?…59
11. jsp 有哪些动作?作用分别是什么?..60
12、两种跳转方式分别是什么?有什么区别? …60
13、JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么?…60
14、MVC 的各个部分都有那些技术来实现?如何实现? …60
15、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,
如何输出一个某种编码的字符串?…61
四. 数据库部分…61
1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 …61
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
4 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排
序…61
3、存储过程与触发器必须讲,经常被面试到? …62
4、数据库三范式是什么? …64
5、说出一些数据库优化方面的经验? …65
6、union 和 union all 有什么不同?..66
7.分页语句…67
8.用一条 SQL 语句 查询出每门课都大于 80 分的学生姓名 …69
9.所有部门之间的比赛组合…70
10.每个月份的发生额都比 101 科目多的科目…70
11.统计每年每月的信息…72
12.显示文章标题,发帖人、最后回复时间…73
13.删除除了 id 号不同,其他都相同的学生冗余信息…73
14.航空网的几个航班查询题:…74
15.查出比经理薪水还高的员工信息:…75
16、求出小于 45 岁的各个老师所带的大于 12 岁的学生人数…76
17.求出发帖最多的人:…77
18、一个用户表中有一个积分字段,假如数据库中有 100 多万个用户,若要在每年
第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? …77
19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户。
…78
20. xxx 公司的 sql 面试…78
21、注册 Jdbc 驱动程序的三种方式…79
22、用 JDBC 如何调用存储过程…79
23、JDBC 中的 PreparedStatement 相比 Statement 的好处 …80
24. 写一个用 jdbc 连接并访问 oracle 数据的程序代码 …80
25、Class.forName 的作用?为什么要用? …80
26、大数据量下的分页解决方法。…81
27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). …81
28、这段代码有什么不足之处? …82
29、说出数据连接池的工作机制是什么? …82
30、为什么要用 ORM? 和 JDBC 有何不一样?..82
五. XML 部分…82
1、xml 有哪些解析技术?区别是什么? …82
2、你在项目中用到了 xml 技术的哪些方面?如何实现的? …83
3、用 jdom 解析 xml 文件时如何解决中文问题?如何解析? …83
4、编程用 JAVA 解析 XML 的方式…84
5、XML 文档定义有几种形式?它们之间有何本质区别?解析 XML 文档有哪几种
方式?…86
六. 设计模式…86
1、UML 方面…86
2、j2ee 常用的设计模式?说明工厂模式。 …86
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
5 3、开发中都用到了那些设计模式?用在什么场合? …87
七. J2EE 部分…87
1、BS 与 CS 的联系与区别。…87
2、应用服务器与 WEB SERVER 的区别?…88
3、应用服务器有那些?…88
4、J2EE 是什么? …88
5、J2EE 是技术还是平台还是框架? 什么是 J2EE…88
6、请对以下在 J2EE 中常用的名词进行解释(或简单描述)…89
八、Mybatis …89
class jad2java{
public void add(Student stu1){
map.put(SequenceGenerator.getInstance().getSequence(),stu1);
}
//把MemoryDao变成单例
}
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
52
Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。
一般 Singleton 模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为 private 的,它有一个 static 的 private 的该类变量,
在类初始化时实例话,通过一个 public 的 getInstance 方法获取对它的引用,继而调用其中的
方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是 private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本 class 的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instancenull)
instance=new Singleton();
return instance;
}
}
其他形式:
定义一个类,它的构造函数为 private 的,所有方法为 static 的。
一般认为第一种形式要更加安全些
8、递归算法题 1
一个整数,大于 0,不用循环和本地变量,按照 n,2n,4n,8n 的顺序递增,当值大于 5000 时,
把值按照指定顺序输出来。
例:n=1237
则输出为:
1237,
2474,
4948,
9896,
9896,
4948,
2474,
1237,
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
53
提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分。
public static void doubleNum(int n)
{
System.out.println(n);
if(n<=5000)
doubleNum(n*2);
System.out.println(n);
} 9、递归算法题 2 第 1 个人 10,第 2 个比第 1 个人大 2 岁,依次递推,请用递归方式计算出第 8 个人多大?
package cn.aaaedu;
import java.util.Date;
public class A1 {
public static void main(String [] args)
{
System.out.println(computeAge(8));
}
public static int computeAge(int n)
{ Gaibaota(N) = Gaibaota(N-1) + n
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
54
if(n1) return 10;
return computeAge(n-1) + 2;
} }
public static void toBinary(int n,StringBuffer result)
{
if(n/2 != 0)
toBinary(n/2,result);
result.append(n%2);
}
10、排序都有哪几种方法?请列举。用 JAVA 实现一个快速排序。
本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:
public class QuickSort {
/**
姓名 | + (String)hashTable.get(new String(name)) + |
学院 | + (String)hashTable.get(new String(college))+ |
电话 | + (String)hashTable.get(new String(telephone)) + |
备注 | + (String)hashTable.get(new String(notes)) + |
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
111
业务逻辑和通用功能的耦合。Aspects 模块:提供了对 AspectJ 的集成,AspectJ 提供了比 SpringASP
更强大的功能。数据访问/集成模块:该模块包括了 JDBC、ORM、OXM、JMS 和事务管理。事
务模块:该模块用于 Spring 管理事务,只要是 Spring 管理对象都能得到 Spring 管理事务的好处,
无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
(3)JDBC 模块:提供了一个 JBDC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码
还有必须的事务控制,而且能享受到 Spring 管理事务的好处。ORM 模块:提供与流行的“对象
-关系”映射框架的无缝集成,包括 Hibernate、JPA、MyBatis 等。而且可以使用 Spring 事务管理,
无需额外控制事务。
(4)OXM 模块:提供了一个对 Object/XML 映射实现,将 java 对象映射成 XML 数据,或者将
XML 数据映射成 java 对象,Object/XML 映射实现包括 JAXB、Castor、XMLBeans 和 XStream。 (5)JMS 模块:用于 JMS(JavaMessagingService),提供一套“消息生产者、消息消费者”模板
用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进
行异步通信。
(6)Web/Remoting 模块:Web/Remoting 模块包含了 Web、Web-Servlet、Web-Struts、Web-Porlet
模块。
(7)Web 模块:提供了基础的 web 功能。例如多文件上传、集成 IoC 容器、远程过程访问(RMI、
Hessian、Burlap)以及 WebService 支持,并提供一个 RestTemplate 类来提供方便的 Restfulservices
访问。
(8)Web-Servlet 模块:提供了一个 SpringMVCWeb 框架实现。SpringMVC 框架提供了基于注
解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与
Spring 其他技术协作。
(9)Web-Struts 模块:提供了与 Struts 无缝集成,Struts1.x 和 Struts2.x 都支持
(10)Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测
试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。
5. Spring 核⼼容器(应⽤上下⽂)模块
这是基本的 Spring 模块,提供 Spring 框架的基础功能,BeanFactory 是任何以 Spring 为基础
的应⽤的核⼼。Spring 框架建⽴在此模块之上,它使 Spring 成为⼀个容器。
6. ApplicationContext 通常的实现是什么
FileSystemXmlApplicationContext:此容器从⼀个 XML⽂件中加载 beans 的定义 XMLBean 配 置⽂件的全路径名必须提供它的构造函数。ClassPathXmlApplicationContext:此容器也从⼀个 XML
⽂件中加载 beans 的定义,这⾥需要正确设置 classpath 因为这个容器将在 classpath⾥找 bean 配置。
WebXmlApplicationContext:此容器加载⼀个 XML⽂件,此⽂件定义了⼀个 WEB 应用的所有 bean。
7. 什么是 Springbeans?
Springbeans 是那些形成 Spring 应用的主干的 java 对象。它们被 SpringIOC 容器初始化,装
配,和管理。这些 beans 通过容器中配置的元数据创建。比如,以 XML 文件中的形式定
义。Spring 框架定义的 beans 都是单例 beans。在 beantag 中有个属性”singleton”,如果它被赋为
TRUE,bean 就是单件,否则就是一个 prototypebean。默认是 TRUE,所以所有在 Spring 框架中
视频网站 https://edu.51cto.com/lecturer/2086101.html
的 beans 缺省都是单件。
8. 什么是 Spring 的内部 bean?
当一个 bean 仅被用作另一个 bean 的属性时,它能被声明为一个内部 bean,为了定义 innerbean, 在Spring的基于XML的配置元数据中,可以在或元素内使用
元素,内部 bean 通常是匿名的,它们的 Scope 一般是 prototype。
9. 你怎样定义类的作用域?
当定义一个在 Spring 里,我们还能给这个 bean 声明一个作用域。它可以通过 bean
定义中的 scope 属性来定义。如,当 Spring 要在需要的时候每次生产一个新的 bean 实例,bean
的 scope 属性被指定为 prototype。另一方面,一个 bean 每次使用的时候必须返回同一个实例,
这个 bean 的 scope 属性必须设为 singleton。
10. 什么是 bean 的自动装配?
无须在 Spring 配 置 文 件 中 描 述 javaBean 之 间 的 依 赖 关 系 ( 如 配 置 、
)。IOC 容器会自动建立 javabean 之间的关联关系。
11. 一个 SpringBean 定义包含什么?
一个 SpringBean 的定义包含容器必知的所有配置元数据,包括如何创建一个 bean,它的生
命周期详情及它的依赖。
12. 一个 SpringBeans 的定义需要包含什么?
一个 SpringBean 的定义包含容器必知的所有配置元数据,包括如何创建一个 bean,它的生命周
期详情及它的依赖。
13. 解释 Spring 支持的几种 bean 的作用域。
Spring 框架支持以下五种 bean 的作用域:
(1)singleton: bean 在每个 Springioc 容器中只有一个实例。
(2)prototype:一个 bean 的定义可以有多个实例。
(3)request : 每 次 http 请 求 都 会 创 建 一 个 bean , 该 作 用 域 仅 在基于 web 的
SpringApplicationContext 情形下有效。
(4)session:在一个 HTTPSession 中,一个 bean 定义对应一个实例。该作用域仅在基于 web
的 SpringApplicationContext 情形下有效。
(5)global-session:在一个全局的 HTTPSession 中,一个 bean 定义对应一个实例。该作用域仅
网址 https://blog.csdn.net/zhangchen124112
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
113
在基于 web 的 SpringApplicationContext 情形下有效。
缺省的 Springbean 的作用域是 Singleton.
14. 简单介绍一下 Springbean 的生命周期
bean 定义:在配置文件里面用来进行定义。bean 初始化:有两种方式初始化 1.在
配 置 文 件 中 通 过 指 定 init-method 属 性 来 完 成 2. 实 现
org.springframwork.beans.factory.InitializingBean 接口 bean 调用:有三种方式可以得到 bean 实例,
并进行调用 bean 销毁:销毁有两种方式 1.使用配置文件指定的 destroy-method 属性 2.实现
org.springframwork.bean.factory.DisposeableBean 接口
15. 哪些是重要的 bean 生命周期方法?你能重载它们吗?
视频网站 https://edu.51cto.com/lecturer/2086101.html
25. SpringIOC(控制反转):
SpringIOC(InversionofControl)负责创建对象,管理对象(通过依赖注⼊(DI)),装配对象,配
置对象,并且管理这些对象的整个⽣命周期。Ioc 是 Spring 所倡导的开发⽅式,所有的类都会在
spring 容器中登记,告诉 spring 你是个什么东⻄,你需要什么东⻄,然后 spring 会在系统运⾏到适当
的时候,把你要的东⻄主动给你,同时也把你交给其他需要你的东⻄。所有类的创建,销毁都由
spring 来控制,也就是说控制对象⽣存周期的不再是引⽤它的对象,⽽是 spring。对于某个具体的
对象⽽⾔,以前是它控制其他对象,现在是所有对象都被 spring 控制,这件控制反转。
26. IOC 的优点是什么?
IOC 或依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和 JNDI
查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC 容器支持加载服务时的饿汉式
初始化和懒加载。
27. 有哪些不同类型的 IOC(依赖注入)方式?
Spring 提供了多种依赖注入的方式。
视频网站 https://edu.51cto.com/lecturer/2086101.html
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
117
35. 解释对象/关系映射集成模块
Spring 通过 ORM 模块,⽀出我们在 JDBC 之上使⽤⼀个对象/关系映射(ORM)⼯具,Spring⽀持集
成主流的 ORM 框架,⽐如 Hiberate,JDO 和 IBATISSQLMaps。Spring 的事务管理同样⽀持以上
所有 ORM 框架及 JDBC。
36. 简单解释一下 spring 的 AOP
AOP ( AspectOrientedProgramming ), 即 面 向 切 面 编 程 , 可 以 说 是 OOP
(ObjectOrientedProgramming,面向对象编程)的补充和完善。OOP 引入封装、继承、多态等概
念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过 OOP 允许开发者定义纵向的
关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,
而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续
性也都是如此,这种散布在各处的无关的代码被称为横切(crosscutting),在 OOP 设计中,它导
致了大量代码的重复,而不利于各个模块的重用。AOP 技术恰恰相反,它利用一种称为"横切"
的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并
将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同
调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来
的可操作性和可维护性。使用"横切"技术,AOP 把软件系统分为两个部分:核心关注点和横切
关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的
一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。
AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。AOP 核心就
是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。比
如,一个日志模块可以被称作日志的 AOP 切面。根据需求的不同,一个应用程序可以有若干切
面。在 SpringAOP 中,切面通过带有@Aspect 注解的类实现。
37. AOP 底层实现⽅式?
动态代理,会引入到代理模式的问题。
38. 在 SpringAOP 中,关注点和横切关注的区别是什么?
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。横切
关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全
和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。
39. 什么是目标对象?
被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
118
40. 什么是切点?
切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
41. 什么是连接点?
被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连接点指的就是被
拦截到的方法,实际上连接点还可以是字段或者构造器。
42. 什么是织入?什么是织入应用的不同点?
织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。织入可以在编
译时,加载时,或运行。
43. 什么是代理?
代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。
44. Spring 的通知是什么?有哪几种类型?
通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架
触发的代码段。Spring 切面可以应用五种类型的通知:
1)before:前置通知,在一个方法执行前被调用。
2)after:在方法执行之后调用的通知,无论方法执行是否成功。
3)after-returning:仅当方法成功完成后执行的通知。
4)after-throwing:在方法抛出异常退出时执行的通知。
5)around:在方法执行之前和之后调用的通知。
45. 解释 JDBC 抽象和 DAO 模块。
通过使⽤JDBC 抽象和 DAO 模块,保证数据库代码的简介,并能避免数据库资源错误关闭
导致的问题,它在各种不同的数据库的错误信息之上,提供了⼀个统⼀的异常访问层。它还利⽤
Spring 的 AOP 模块给 Spring 应⽤中的对象提供事务管理服务。
46. 解释对象/关系映射集成模块。
Spring 通过提供 ORM 模块,支持我们在直接 JDBC 之上使用一个对象/关系映射映射(ORM)
工具,Spring 支持集成主流的 ORM 框架,如 Hiberate,JDO 和 iBATISSQLMaps。Spring 的事务
管理同样支持以上所有 ORM 框架及 JDBC。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
119
47. Spring 支持的 ORM 框架有哪些?
Spring 支持以下 ORM : Hibernate 、 iBatis 、 JPA(JavaPersistenceAPI) 、 TopLink 、
JDO(JavaDataObjects)、OJB
48. 请描述一下 Spring 的事务
声明式事务管理的定义:用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事
务。这样的好 处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在
事务管理之中,事实上也应该 如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的
一部分,如果想要改变事务管理策划的话,也 只需要在定义文件中重新配置即可,这样维护起
来极其方便。
基于 TransactionInterceptor 的声明式事务管理:两个次要的属性: transactionManager,用来 指
定一个事务治 理器,并将具体事务相 关的操作请托给它;其 他一个是 Properties 类型的
transactionAttributes 属性,该属性的每一个键值对中,键指定的是方法名,方法名可以行使通配
符,而值就是表现呼应方法的所运用的事务属性。
PROPAGATION_REQUIRED
基于 TransactionProxyFactoryBean 的声明式事务管理:设置配置文件与先前比照简化了许多。
我们把这类设置配置文件格式称为 Spring 经典的声明式事务治理
<bean id=“bankServiceTarget”
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
120
class=“footmark.spring.core.tx.declare.classic.BankServiceImpl”>
<bean id=“bankService”
class="org.springframework.transaction.interceptor.TransactionProxyFact
oryBean>
PROPAGATION_REQUIRED
基于 命名空间的声明式事务治理:在前两种方法的基础上,Spring 2.x 引入了 命名
空间,连络行使 命名空间,带给开发人员设置配备声明式事务的全新体验。
<tx:advice id=“bankAdvice” transaction-manager=“transactionManager”>
tx:attributes
<tx:method name=“transfer” propagation=“REQUIRED” />
</tx:attributes>
</tx:advice>
aop:config
<aop:pointcut id=“bankPointcut” expression=“execution(* *.transfer(…))”
/>
<aop:advisor advice-ref=“bankAdvice” pointcut-ref=“bankPointcut” />
</aop:config>
基于 @Transactional 的声明式事务管理:Spring 2.x 还引入了基于 Annotation 的体式格式,具
体次要触及@Transactional 标注。@Transactional 可以浸染于接口、接口方法、类和类方法上。
算作用于类上时,该类的一切 public 方法将都具有该类型的事务属性。
@Transactional(propagation = Propagation.REQUIRED)
public boolean transfer(Long fromId, Long toId, double amount) {
return bankDao.transfer(fromId, toId, amount);
}
编程式事物管理的定义:在代码中显式挪用 beginTransaction()、commit()、rollback()等事务治理
相关的方法,
这就是编程式事务管理。Spring 对事物的编程式管理有基于底层 API 的编程式管理和基于
TransactionTemplate 的
编程式事务管理两种方式。
基 于 底 层 API 的 编 程 式 管 理 : 凭 证 PlatformTransactionManager 、
TransactionDefinition 和
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
121
TransactionStatus 三个焦点接口,来实现编程式事务管理。
public class BankServiceImpl implements BancService {
private BanckDao bankDao;
private TransactionDefinition txDefinition;
private PlatformTransactionManager txManager;
public boolean transfer(Long fromId,Long toId,double amount) {
TransactionStatus txStatus = txManager.getTransaction(txDefinition);
boolean result = false;
try {
result = bankDao.transfer(fromId, toId, amount);
txManager.commit(txStatus);
} catch (Exception e) {
result = false;
txManager.rollback(txStatus);
System.out.println(“Transfer Error!”);
}
return result;
} }
基于 TransactionTemplate 的编程式事务管理:为了不损坏代码原有的条理性,避免出现每一个方
法中都包括相同的启动事物、提交、回滚事物样板代码的现象,spring 提供了 transactionTemplate
模板来实现编程式事务管理。
public class BankServiceImpl implements BankService {
private BankDao bankDao;
private TransactionTemplate transactionTemplate;
public boolean transfer(final Long fromId,final Long toId,final double
amount) {
return (Boolean) transactionTemplate.execute(new
TransactionCallback(){
public Object doInTransaction(TransactionStatus status){
Object result;
try {
result = bankDao.transfer(fromId, toId, amount);
} catch (Exception e) {
status.setRollbackOnly();
result = false;
System.out.println(“Transfer Error!”);
}
return result;
}
});
} }
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
122
编程式事务与声明式事务的区别:
1)编程式事务是自己写事务处理的类,然后调用
2)声明式事务是在配置文件中配置,一般搭配在框架里面使用!
49. Spring 事务隔离级别
Default:使用数据库本身的隔离级别 ORACLE(读已提交)Mysql(可重复读);
Read_Uncomited(脏读):读取过期的数据,就是一个事物读到另一个事务未提交的新数据,最
低隔离级别,一切皆有可能;
Read_Commited(幻读):读取临时的数据,就是一个事物在进行修改全表的时候,另一个事务
对数据进行了新增,从而第一个事务的执行完后发现还有没有修改的数据,就好像发生了幻觉一
样;
RepeaTable_Read(不可重复读):就是在同一个事务中先后执行两条一样的 select 语句,之间没
有执行过 Del 语句但先后结果不一样,这就是不可重复读;;
Serializable:串行化,最高隔离界别,杜绝一切隐患,但效率较低;
50. Spring 怎么设置隔离级别?
用@Transactional 注解声明式事务的事务管理中来设置 isolation 属性的隔离级别
在配置文件中设置事务tx:method元素
51. 使用 Spring 通过什么方式访问 Hibernate?
在 Spring 中有两种方式访问 Hibernate:1)控制反转 HibernateTemplate 和 Callback。2)继承
HibernateDAOSupport 提供一个 AOP 拦截器。
52. 解释 SpringJDBC、SpringDAO 和 SpringORM
Spring-DAO 并非 Spring 的一个模块,它实际上是指示你写 DAO 操作、写好 DAO 操作的一
些规范。因此,对于访问你的数据它既没有提供接口也没有提供实现更没有提供模板。在写一个
DAO 的时候,你应该使用@Repository 对其进行注解,这样底层技术(JDBC,Hibernate,JPA,
等等)的相关异常才能一致性地翻译为相应的DataAccessException 子类。Spring-JDBC提供了Jdbc
模板类,它移除了连接代码以帮你专注于 SQL 查询和相关参数。Spring-JDBC 还提供了一个
JdbcDaoSupport,这样你可以对你的 DAO 进行扩展开发。它主要定义了两个属性:一个 DataSource
和一个 JdbcTemplate,它们都可以用来实现 DAO 方法。JdbcDaoSupport 还提供了一个将 SQL 异
常转换为 SpringDataAccessExceptions 的异常翻译器。Spring-ORM 是一个囊括了很多持久层技术
(JPA,JDO,Hibernate,iBatis)的总括模块。对于这些技术中的每一个,Spring 都提供了集成类,
这样每一种技术都能够在遵循 Spring 的配置原则下进行使用,并平稳地和 Spring 事务管理进行
集成。对于每一种技术,配置主要在于将一个 DataSourcebean 注入到某种 SessionFactory 或者
EntityManagerFactory 等 bean 中。纯 JDBC 不需要这样的一个集成类(JdbcTemplate 除外),因为
JDBC 仅依赖于一个 DataSource。如果你计划使用一种 ORM 技术,比如 JPA 或者 Hibernate,那
么你就不需要 Spring-JDBC 模块了,你需要的是这个 Spring-ORM 模块。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
123
53. 在 Spring 框架中如何更有效地使用 JDBC?
使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写 statements
和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供的模板类的帮助下更有效地被使用,
这个模板叫 JdbcTemplate。JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成
基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。
54. 解释 WEB 模块
Spring 的 WEB 模块式构建在 applicationcontext 模块基础之上,提供⼀个适合 web 应⽤的上下⽂。
这个模块也包括⽀持多种⾯向 web 的任务,如透明地处理多个⽂件上传请求和程序级求参数的绑
定到你的业务对象。它也有对 JakartaStruts 的⽀持。
55. 一个 Spring 的应用看起来象什么?
一个定义了一些功能的接口。
这实现包括属性,它的 Setter,getter 方法和函数等。
SpringAOP。
Spring 的 XML 配置文件。
使用以上功能的客户端程序。
也可以自己做更形象的描述。
十二、SpringMVC
mvc:interceptors
mvc:interceptor
<mvc:mapping path=”/modelMap.do”/>
</mvc:interceptor>
</mvc:interceptors>
9. SpringMVC 的异常处理
可以将异常抛给 Spring 框架,由 Spring 的 AOP 来处理,我们只需要配置简单的异常处理器
在异常处理器中添加视图⻚⾯即可。
10. SpringMVC 的核⼼⼊⼝类是什么?Struts1,Struts2 的分别是什么?
SpringMVC 的 是 DispatcherServlet , Struts1 的 是 ActionServlet , Struts2 的 是
StrutsPrepareAndExecuteFilter。
11. SpringMVC 的控制器是不是单例模式,如果是,有什么问题,如何解决。
SpringMVC 的控制器是单例模式,所以在多线程访问的时候有线程安全问题,不要⽤同步, 会
影响性能的,解决⽅案是在控制器⾥⾯不能写字段。
12. SpringMVC 的控制器的注解⼀般⽤那个,有没有别的注解可以替代?
⼀般⽤@Controller,表示表现层,不能⽤别的注解替代。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
126
13. SpringMVC 的@RequestMapping 注解⽤在类上⾯有什么作⽤? 是⼀个⽤来处理请求地址映射的注解,可以⽤于类或⽅法上,表示类中的所有响应请求的⽅ 法都
是以该路径作为⽗路径。
14. SpringMVC 如何把某个请求映射到特定的⽅法上⾯?
直接在⽅法上⾯加上注解@RequestMapping,并且在这个注解⾥⾯写上要拦截的路径。
15. SpringMVC 如果想在拦截的⽅法⾥⾯得到从前台传⼊的参数,如何得到?
直接在⽅法中声明这个对象,SpringMvc 就⾃动会把属性赋值到这个对象⾥⾯。
16. SpringMVC 中的函数的返回值是什么?
返回值可以有很多类型,有 String,ModelAndview,Model
17. SpringMVC ⽤什么对象从后台向前台传递数据的?
通过 ModelMap 对象,可以在这个对象⾥⾯⽤ put ⽅法,把对象加到⾥⾯,前台就可以通过 el 表
达式拿到。
18. SpringMVC 中有个类把视图和数据合并在⼀起,叫什么?
ModelAndview。
19. SpringMVC 中怎么把 ModelMap ⾥⾯的数据放⼊ Session ⾥⾯?
可以在类上⾯加上@SessionAttributes 注解,⾥⾯包含的字符串就是要放⼊ Session ⾥⾯的 key。 当⼀个⽅法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
20. SpringMVC 如何在⽅法⾥⾯得到 Request 或者 Session?
直接在⽅法的形参中声明 Request,SpringMvc 就⾃动把 request 对象传⼊。获取 Session,也 是 同 样 的 ⽅ 法 ,但 是 需 要 在 ⽅ 法 中 获 取 request 中 的 Session ,例 如 :Session
session=request.getSession();即可,获取 Response 也是需要在⽅法的形参中声明 Response。
21. SpringMVC 常用注解都有哪些?
@requestMapping 用于请求 url 映射。
@RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
127
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。
22. 如何开启注解处理器和适配器?
我们在项目中一般会在 springmvc.xml 中通过开启<mvc:annotation-driven>来实现注解处
理器和适配器的开启。
23. SpringMvc 怎么和 AJAX 相互调用的?
通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js 可以识别的 Json 对象。具体步骤如下 : (1)加入 Jackson.jar
(2)在配置文件中配置 json 的映射
(3)在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody 注解。
24. 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
(1)解决 post 请求乱码问题:
在 web.xml 中加入:
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
(2)get 请求中文参数出现乱码解决方法有两个:
①修改 tomcat 配置文件添加编码与工程编码一致,如下:
<ConnectorURIEncoding=“utf-8” connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redi
rectPort=“8443”/>
②另外一种方法对参数进行重新编码:
String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)
ISO8859-1 是 tomcat 默认编码,需要将 tomcat 编码后的内容按 utf-8 编码。
25. 如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
答:可以在@RequestMapping 注解里面加上 method=RequestMethod.GET。
视频网站 https://edu.51cto.com/lecturer/2086101.html
网址 https://blog.csdn.net/zhangchen124
128
26. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对
象?
答:直接在方法中声明这个对象,SpringMvc 就自动会把属性赋值到这个对象里面。
27. 当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
答:要加上@ResponseBody 注解。
十三、Springboot
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。