一些网上的Java面试题

/ 笔记 / 无站内评论 / 629浏览
以下答案皆为查询资料理解后写的,跟官方解释会有点差别。不过答到点上就OK了-------
1、面向对象的特征有哪些方面?
1.抽象
2.继承
3.封装
4.多态性
2、访问修饰符public,private,protected,以及不写(默认)时的区别?
类中 包中 子类 其他包
public 1  1 1 1
private 1  0 0 0
protected 1    1 1 0
默认 1    1     1   0

3、String 是最基本的数据类型吗?
不是
基本类型数据:byte short int long float double boolean char
4、float f=3.4;是否正确?
不正确
需要加f,因为浮点型默认类型为double
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
s1 = s1 + 1 有误,因为1默认为int类型,因此short+int=int类型。需要强转。而s1 += 1包含默认类型强转。没错
6、Java有没有goto?
没有goto,但是goto作为保留字。
7、int和Integer有什么区别?
int是基本数据类型,默认初始化值为0
Integer是int的封装类,默认初始化值为null
8、&和&&的区别?
&是位运算符,&&是逻辑短路与运算符
9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。


10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
12、-11
11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
都可以,String在JDK1.7后才可以
12、用最有效率的方法计算2乘以8?
位运算 2<<3
13、数组有没有length()方法?String有没有length()方法?
数据没有length方法,只有length属性。String有length方法
14、在Java中,如何跳出当前的多重嵌套循环?
在想跳出的循环行前加个标识符名: 
想跳出时使用break 加标识符名即可
15、构造器(constructor)是否可被重写(override)?
不可以,constructor是被final修饰的类,不可以被继承.
16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,对象equals相同。hashcode必然相同。

17、是否可以继承String类?
不可以,Spring类是加了final修饰的类。表示不可被继承
18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。
指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
 Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。
  如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.
  如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,
而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,
如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。
19、String和StringBuilder、StringBuffer的区别?
String的值不可以被改变。
StringBuilder、StringBuffer可以动态改变。
StringBuilder线程不安全,速度快
StringBuffer线程安全,速度慢于StringBuilder
20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重载是指在同一个类中,方法名相同,参数类型或参数个数不同的方法。
重写是指在子类重写了父类的方法,其方法中,参数类型,返回值必须一致。
重载跟返回值类型无关。
21、描述一下JVM加载class文件的原理机制?

22、char 型变量中能不能存贮一个中文汉字,为什么?
能,java采用unicode编码。一个字符占位两个字节。然一个汉字两个字节

23、抽象类(abstract class)和接口(interface)有什么异同?
1.抽象类中可以有构造方法,接口不能有构造方法。(但是抽象类不能被实例化)。
2.抽象类中可以有普通成员变量,接口没有。
3.抽象类和接口都可以包含静态成员变量,抽象的静态成员变量访问类型可以是任意的。但是接口的静态成员变量只能是public static final类型。而且默认就是public static final。
4.抽象类中可以包含非抽象的普通方法,接口只能包含抽象方法。
5.抽象方法访问类型可以是public、protected。接口只能是public。
6.抽象只能单继承,接口可以多实现。

24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
内部类实例化需要绑定外围类的实例化对象,而静态嵌套类的实例化不能也无法绑定外围的实例化对象。

25、Java 中会存在内存泄漏吗,请简单描述。
会,当一个程序有不再使用的对象或者变量一但直占据内存。就会造成内存泄漏。
26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

27、阐述静态变量和实例变量的区别。
静态变量属于类,随着类的加载而加载。随着类的消失而消失。
当类加载时初始化静态变量
成员变量属于对象,随着对象的创建而创建,随着对象的消失而消失。
当创建对象时初始化成员变量。

28、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
不能,静态方法只能访问静态成员。
非静态方法是对象创建的,而静态方法属于类。类加载就可以使用,因此静态方法再调用非静态方法的时候可能还没有创建该实例对象。

29、如何实现对象克隆?
调用Clone()方法。

31、String s = new String("xyz");创建了几个字符串对象?
2个。
首先创建new String对象在堆中,地址指向s,然后去常量池找有没有xyz这个值。没有就在常量池创建xyz这个对象。

32、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
可以,可以,可以
象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。
33、一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以
唯一限制:整个文件中只能允许一个public class,并且该类名要与文件名一致。

34、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
不能继承其他类,可以实现另一个内部类接口。

35、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
可以
如果是静态嵌套类,就只能访问外部的静态成员。

36、Java 中的final关键字有哪些用法?
修饰类,表示不能被继承。
修饰方法,表示不能被重写。
修饰变量,表示是一个常量,不可被修改。

38、数据类型之间的转换:
基本类型转String
String.valueOf(xx);
String转基本类型
包装类.paserXXX(xx);

39、如何实现字符串的反转及替换?
反转:使用StringBuider类,调用reverse方法。
替换:使用StringBuider类,调用repalace方法。

40、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
byte[] b1={'a','b','c'}; 
String s3=new String(b1, "GB2312");
byte[] b2 = s3.getBytes();
String s4=new String(b2, "ISO-8859-1");

41、日期和时间:
Date d=new Date();
System.out.println(d.getDate()); //获取日期
System.out.println(d); //获取时间

42、打印昨天的当前时刻。
d.setDate(d.getDate()-1); //设置日期为当前-1
System.out.println(d);

43、比较一下Java和JavaSciprt。
java是编译型语言,javasript是解释性语言。
java是强类型变量,javasript是弱类型。
44、什么时候用断言(assert)?

45、Error和Exception有什么区别?
error表示错误。Exception表示异常。
error是指jvm发生错误,一般不由程序猿解决。
Exception表示异常。异常又分检查异常与运行时异常。
检查异常是必须抛出的异常。如IO流,必须进行try cach块处理或者向上抛出异常,否则无法通过编译。
运行时异常:一般是程序员代码不够严谨造成的异常,例如空指针、0除数异常。一般可以避免。

46、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
会执行,前。
47、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
throws是声明一个方法可能抛出的异常
throw则是智抛出一个具体的异常。
try里面写可能会异常的代码
cach处理try中会抛出的异常
finally表示总是执行

48、运行时异常与受检异常有何异同?
相同:都是Expcetion的子类。
运行时异常可以不用进行处理。运行时异常一般都是程序员写的代码不够严谨造成的异常
受检异常则是编写时就必要抛出的异常,否则不通过编译。

49、列出一些你常见的运行时异常?
空指针异常,0除数异常。ClassNotFount异常。
50、阐述final、finally、finalize的区别。
final表示最终的。
当修饰类时,表示类不可以被继承。
修饰方法,表示不能被重写。
修饰变量,表示是一个常量,不可被修改。
finally在try/cach异常处理中的一个语句块。里面的代码总是会执行。
finalize垃圾收回。当对象不存在引用时,由该对象调用此方法。

51、类ExampleA继承Exception,类ExampleB继承ExampleA。
请问执行此段代码的输出是什么?
52、List、Set、Map是否继承自Collection接口?
List、Set继承Collection接口。

53、阐述ArrayList、Vector、LinkedList的存储性能和特性。
ArrayList底层是数组,查询快,操作慢。线程不安全。
Vector与ArrayList一致,但是线程安全。性能稍差与ArrayList;
LinkedList底层结构是链表。查询慢,操作快。
54、Collection和Collections的区别?
Collection是一个集合的顶级接口,继承的有list/set集合。
Collections是集合的工具类,提供了对集合的一些操作方法,

55、List、Map、Set三个接口存取元素时,各有什么特点?
List存储的值有序,可重复。
Set存储的值无序,不重复。
Map以键值对的方式储存。键不可重复。

56、TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
实现Comparable接口,并重写compareTo方法。

57、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
Thread类的sleep()方法暂停指定时间后自动进入执行状态,而且不会释放锁。
对象的wait()方法需要调用notify方法才能使其进入可执行状态。该方法会自动释放锁。

58、线程的sleep()方法和yield()方法有什么区别?
两者都是使线程暂停,sleep可以使其暂停指定时间,在这断时间内该线程绝对不会执行。
但是yield不能指定时间暂停。直接让线程进入可执行状态,使相同优先级的线程有机会执行。但是不保证yield不会立即执行。

59、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
不可以。
只能进入该对象的非synchronized方法。

60、请说出与线程同步以及线程调度相关的方法。
同步:
wait():使线程进入等待状态,并且释放对象的锁。
sleep():使线程进入睡眠状态,不会释放对象的锁。
notify:唤醒一个等待状态的线程进入可执行状态。
notifyAll():唤醒全部等待状态的线程进入可执行状态。

61、编写多线程程序有几种实现方式?
三种:
继承Thread类,重写run方法。
实现Runnable接口,重写run方法。
实现callable接口,重写call方法。

62、synchronized关键字的用法?
synchronized(this){
....
}

63、举例说明同步和异步。
比如广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息
电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息

64、启动一个线程是调用run()还是start()方法?
start方法

65、什么是线程池(thread pool)?
线程池是指在一个多线程应用程序的初始化中创建一个线程集合,在执行任务的时候不会去创建新线程而是从线程集合获取。

66、线程的基本状态以及状态之间的关系?
基本状态:就绪,阻塞,运行。
就绪状态:线程具有立即运行的条件,等待jvm调用。
阻塞状态:线程进入等待或者睡眠时。
运行状态:线程正在运行。

67、简述synchronized 和java.util.concurrent.locks.Lock的异同?
Lock能完成synchronized所有功能。
不同:Lock比synchronized性能更好,需要手动释放锁,并且必须在finally语句中。
synchronized自动释放锁。

68、Java中如何实现序列化,有什么意义?
实现serializable接口,写一个IO方法
以便数据存储在文件中或者在网络上传输。

69、Java中有几种类型的流?
2.
字节流,字符流。

70、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

71、如何用Java代码列出一个目录下所有的文件?
72、用Java的套接字编程实现一个多线程的回显(echo)服务器。
73、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
74、你在项目中哪些地方用到了XML?
spingmvc配置信息,Mybatis映射配置。

75、阐述JDBC操作数据库的步骤。
1.加载数据库驱动
class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接对象
Conn=DriverManager.getConnetion("jdbc:mysql://http:///demo");
3.获取数据库操作对象
st=conn.createStament();
4.定义sql操作语句
String sql="xxx";
5.执行sql语句
st.exequery(sql);
6.获取结果
st.getint()
7.关闭数据库相关对象
st.close;

76、Statement和PreparedStatement有什么区别?哪个性能更好?
PreparedStatement可以放sql注入,并且可以预编译。避免繁琐的参数拼接。
PreparedStatement可以将sql语句缓存起来,性能更好。


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

78、在进行数据库编程时,连接池有什么作用?
由于创建和释放连接都需要很大的开销,为了提升系统访问数据库的性能。我们实现创建一些连接置于连接池中,需要时直接从连接池获取。释放连接时归还给连接池。
从而避免频繁的创建和释放连接所造成的开销。

79、什么是DAO模式?
dao是数据库操作对象设计模式的简称,是javaeeMVC模式中对数据库进行crud操作的那一层。

80、事务的ACID是指什么?
原子性,一致性,隔离性,持久性。
原子性:在事务中,数据库的所有操作要全部成功,如果有一条sql语句错误。将撤销之前成功的sql执行。返回到事务之前的状态。
一致性:例如在银行转账中,不管是转账成功还是失败。两者的余额总值必须一致。
隔离性:在并发操作时,其他的操作不能影响当前的事务。
持久性:如果数据库崩溃了,再重新启动后,数据也要和崩溃前一致。

81、JDBC中如何进行事务处理?
1.设置手动提交
conn .setAutoCommit(false);
2,手动提交
conn.commit();

82、JDBC能否处理Blob和Clob?

83、简述正则表达式及其用途。

84、Java中是如何支持正则表达式操作的?


85、获得一个类的类对象有哪些方式?
对象.getClass();
类名.class();
Class.forName("路径");

86、如何通过反射创建对象?
对象.getClass();
类名.class();
Class.forName("路径");
通过以上任意一种方法创建类对象,然后通过类对象.newInstance();
Object b=类对象.newInstance();
87、如何通过反射获取和设置对象私有字段的值?
Field f = 类对象.getDeclaredField("字段名");
88、如何通过反射调用对象的方法?
Method method=类对象.getMethod(方法名,参数类型);

89、简述一下面向对象的"六原则一法则"。

90、简述一下你了解的设计模式。
单例模式:为了减少创建对象。节省服务器内存,例如数据库连接工具类。
工厂模式:解耦,可以将代码统一写带工厂类中。

91、用Java写一个单例类。
public public demo1{
private static Student s=new Student();
public static Student getStudent(){
return s;
}
}

92、什么是UML?
93、UML中有哪些常用的图?
94、用Java写一个冒泡排序。
int[] arr={9,8,7,6,5,4,3,2,1};
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y+1];
arr[y+1]=arr[y];
arr[y]=temp;
}
}
}

95、用Java写一个折半查找。
...

96、阐述Servlet和CGI的区别?
servlet生命周期:
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,
service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
CGI每次客户端请求都会创建一个新实例,因此会占用大量的内存资源。
而servlet实例只创建一次,初始化后驻留内存当中。可以节省内存。性能优于CGI;

97、Servlet接口中有哪些方法?
init() 对servlet进行初始化
service() 被servlet容器调用,执行相应的请求响应方法
destroy(); 容器决定摧毁实例时调用此方法
getServletConfig servlet初始化配置信息。
getServletInfo servler对象信息


98、转发(forward)和重定向(redirect)的区别?
forward:服务器内部的重定向,服务器直接访问目标地址的url,把里面的东西读出来,客户端并不知道。因此浏览器地址并不会改变。一次请求。
redirect:客户端的重定向,服务器向浏览器返回一个url,然后浏览器重新对该url发送请求。因此浏览器的地址会改变。两次请求。

99、JSP有哪些内置对象?作用分别是什么?
request:客户端请求,包含向服务器请求的参数。
response:包含向客户端响应的参数。
session:客户端与服务器的一次会话。
page: 当前页面对象。
pageConttext: 可以对所有jsp对象的访问。
application: 它实现了用户间数据的共享,可存放全局变量。服务器启动时启动,关闭时关闭。
config: 它是在一个Servlet初始化时,JSP引擎向它传递信息用的
expcetion: 当页面发生异常,就会产生该对象。
out:客户端输出内容的对象。

100、get和post请求的区别?
get用于获取数据, 参数存在url中
post用于修改数据, 参数在http的body中

101、常用的Web服务器有哪些?
apache tomcat

102、JSP和Servlet是什么关系?
当jsp第一次被访问时,jsp会被java编译器编译成为一个java类,然后被容器加载。实际上jsp也是一个sevlet。

103、讲解JSP中的四种作用域。
page: 当前页面有效。
request: 一次请求范围有效。
session: 会话有效,只要不关闭浏览器。
application: 服务器没有关闭就一直有效。

104、如何实现JSP或Servlet的单线程模式?
在jsp加上命令isThreadSafe="false"

105、实现会话跟踪的技术有哪些?
session
cookie
hidden

106、过滤器有哪些作用和用法?
验证权限,验证是否登录。
实现filter接口,重写dofilter。

107、监听器有哪些作用和用法?
统计在线人数,统计访问次数。
实现httpsessionLisener接口,
在createsession和destroysessuib中写业务代码。

108、web.xml文件中可以配置哪些内容?
 1.配置欢迎页
 2.配置servlet与URl映射
 3.根据指定错误码跳转指定处理页面
 4.设置过滤器
 5.设置监听器
 6.设置session会话过期时间

109、你的项目中使用过哪些JSTL标签?
<fmt:formatNumber> 使用指定的格式或精度格式化数字

110、使用标签库有什么好处?如何自定义JSP标签?
 
111、说一下表达式语言(EL)的隐式对象及其作用。

112、表达式语言(EL)支持哪些运算符?


113、Java Web开发的Model 1和Model 2分别指的是什么?
model 1:jsp+javabean开发
model 2:MVC模式开发

114、Servlet 3中的异步处理指的是什么?
将请求从一个线程传给另一个线程的过程。

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

116、服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
如果没在表单写method参数,默认就是get方式提交,goGet方法进行处理。
如果method=“post”,就使用depost方法。

117、JSP中的静态包含和动态包含有什么区别?
静态包含:先将要包含的文件内容整合到一个页面中,再统一编译。这样只只会生成一个java文件。
动态包含:将各个jsp文件单独编译,再将编译后的结果整合输出。会产生多个java文件。

118、Servlet中如何获取用户提交的查询参数或表单数据?
通过request.getParameter(“参数名”);

119、Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
使用ServletContext对象。Servlet中通过this.getServletConfig().getServletContext()来获取ServletContext对象,
使用该对象的getInitParameter()方法获取指定名称的参数值。getInitParameterNames()获取所有参数名称。

120、如何设置请求的编码以及响应内容的类型?
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

121、解释一下网络应用的模式及其特点。
122、什么是Web Service(Web服务)?
123、概念解释:SOAP、WSDL、UDDI。
124、Java规范中和Web Service相关的规范有哪些? 
125、介绍一下你了解的Java领域的Web Service框架。
126、什么是ORM?
对象关系数据库映射。
面对对象到关系数据库之间的映射规则。

127、持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?
安全性,并发性,数据库性能,缓存机制。
Hibernate,Mybatis。JdbcUtils

128、Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?
SessionFactory线程是安全的,可以并发访问。session线程不安全,因此线程间不能共享session。

129、Hibernate中Session的load和get方法的区别是什么?
get调用首先会查询session缓存。没有就查询数据库。因此调用就会执行sql语句。
load调用首先会查询session缓存,再查二级缓存。找到就返回该对象,找不到则返回代理对象,直到真正使用数据的时候才向数据库发送sql语句。
get查询数据不存在时返回null,load查询不存在时抛异常ObjectNotFountExpcetion。
1.如果没有找到符合条件的记录,get方法返回null,load方法抛出异常。 
2.get方法直接返回实体类对象,load方法返回实体类对象的代理。 

130、Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
save将瞬时态对象变为持久态
update将游离态变为持久态。
saveOrUpdate 可以将瞬时态或者游离态变为持久态。
merge 将游离态变为持久态。
lock将游离态对象变为持久态。

131、阐述Session加载实体对象的过程。
1.首先去一级缓存session中查询
2.一级没有进入二级sessionFacor二级缓存进行查询。
3.二级缓存没有将对数据库发送sql语句。
4.根据映射配置创建对应实体对象。
5.将对象放入一级缓存缓存。
6.如果有拦截器,执行拦截器。
7.如果设置了二级缓存,将对象放入二级缓存。
8.返回对象。

132、Query接口的list方法和iterate方法有什么区别?
list:查询结果存入缓存,但不会从缓存取数据。查询时将属性连同id一起出现。
只有一条select语句。
iterate:查询结果存入缓存,并在缓存中查询结果。查询时先找出所有的id,
然后根据id到缓存中查询,没有找到再根据id到数据库查询。
会有多条select语句。
性能上, Iterator优于list。

133、Hibernate如何实现分页查询?
通过Hibernate实现分页查询,开发人员只需要提供HQL语句(调用Session的createQuery()方法)或查询条件(调用Session的createCriteria()方法)、设置查询起始行数(调用Query或Criteria接口的setFirstResult()方法)和最大查询行数(调用Query或Criteria接口的setMaxResults()方法),并调用Query或Criteria接口的list()方法,Hibernate会自动生成分页查询的SQL语句。

134、锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制。

135、阐述实体对象的三种状态以及转换关系。
136、如何理解Hibernate的延迟加载机制?在实际应用中,延迟加载与Session关闭的矛盾是如何处理的?
懒加载就是在读取对象的时候,并不会立即加载数据。只有在真正使用数据的时候才会加载数据。
1.关闭懒加载
2.在关闭session之前使用一下对象

137、举一个多对多关联的例子,并说明如何实现多对多关联映射。
商品与订单的关系。
 
在商品与订单的映射表中配置多对多映射配置。
 

138、谈一下你对继承映射的理解。

139、简述Hibernate常见优化策略。
    ① 制定合理的缓存策略(二级缓存、查询缓存)。 
② 采用合理的Session管理机制。 
③ 尽量使用延迟加载特性。 
④ 设定合理的批处理参数。 
⑤ 如果可以,选用UUID作为主键生成器。 

140、谈一谈Hibernate的一级缓存、二级缓存和查询缓存。
 一级缓存,也叫session缓存。生命周期与session一致。
 get()查询实体对象会放入session缓存
 load()查询实体对象会放入session缓存。
 save保存的实体对象会放入session缓存。
 clear evirct 会清除缓存。
 
二级缓存,线程级别的缓存,也叫sessionFactory缓存。
该缓存可以被session共享,生命周期与sessionFactory一致。
 
查询缓存
只缓存普通属性结果集的缓存,实体对象只缓存id。
查询缓存只对list起作用,Iterator不实用查询缓存。
生命周期:当缓存关联的表发生修改,就结束。

141、Hibernate中DetachedCriteria类是做什么的?
142、@OneToMany注解的mappedBy属性有什么作用?
143、MyBatis中使用#和$书写占位符有什么区别?
#可以防止sql注入,在sql中生成语句的时候会自动加上双引号。
$存在sql注入漏洞。
144、解释一下MyBatis中命名空间(namespace)的作用。
在项目中,可能有很多sql语句。这时候为每条sql语句起的标识符就变得不容易了。
不同模块中可能有相同的功能,就会起一样的标识符。为了解决这样的问题,
在Mybatis中,就可以为每个映射文件起一个唯一的命名空间。这样我们只需要保证每个命名空间唯一就可以了。
在不同映射文件中,就算相同sql标识符相同也不会冲突。

145、MyBatis中的动态SQL是什么意思?
对于一些复杂的操作,可能会有多个条件。但是这些条件并不是固定的,有时候可能多,也可能不存在。此时就要根据用户指定的条件动态的生成sql语句。

146、什么是IoC和DI?DI是如何实现的?
IOC(控制反转) 对象的管理交给spring。在传统开发模式中,通过由调用者创建对象实例,在spring中,不再由调用者创建。
ID:依赖注入,可以通过setter方法,接口、构造器注入。spring只出setter方法与构造器注入。

147、Spring中Bean的作用域有哪些?

148、解释一下什么叫AOP(面向切面编程)?
数据是如何注入-------反射
AOP的实现原理------动态代理
  面向切面编程,在我们的应用中,经常需要做一些事情,但是这些事情与核心业务无关,比如,要记录所有update*方法的执行时间时间,操作人等等信息,记录到日志,

149、你是如何理解"横切关注"这个概念的?

150、你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?


151、Spring中自动装配的方式有哪些?
-no 手动bean配置。
byName 根据属性值自动装配
byType 根据类型自动装配
constructor 根据构造器自动装配
autodetect:如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。

152、Spring中如何使用注解来配置Bean?有哪些相关的注解?
在spring.xml开启注解扫描
<context:component-scan base-package="包的路径"></context:component-scan>
@Component:普通类用该标识。
@Controller: 标识将该类定义为SpringMVC的控制器 ==> Controller层
@Service: 标识将该类定义为业务服务==> Service层
@Repository: 标识将该类定义为数据仓库==> Dao层

153、Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?
编程式事务与声明式事务。编程式事务可以精确的控制回滚点。但是这样会使代码耦合高,不便于管理。
项目一般用声明式事务管理,可以在xml配置文件中对所有事务进行统一管理。

154、如何在Web项目中配置Spring的IoC容器?
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

155、如何在Web项目中配置Spring MVC?

<web-app>

    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

</web-app>


156、Spring MVC的工作原理是怎样的?
1.客户端请求提交到dispatcherServlet
2.dispatcherServlet根据请求信息查询HandleMaping,找到处理请求的Controller
3.dispatcherServlet将请求提交到Controller
4.Controller调用业务处理后,返回ModelAndView
5.dispatcherServlet查询视图解析器,找到ModelAndView指定的视图。
6.视图将结果显示到客户端

157、如何在Spring IoC容器中配置数据源?
<bean id="dataSource"
        class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${jdbc.driverClassName}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/>

158、如何配置配置事务增强?
159、选择使用Spring框架的原因(Spring框架为企业级开发带来的好处有哪些)?
1.非侵入式:不需要实现接口或者继承某个类。
IOC容器:降低耦合性,对象依赖关系可以通过修改配置。而不用修改代码。
AOP:
MVC:在开发速度与代码书写上都远远优于struts2.
事务管理:spring提供的声明式事务管理让我们能统一管理所有事务。不要像传统开发那样都要写一堆编程事务。

160、Spring IoC容器配置Bean的方式?
161、阐述Spring框架中Bean的生命周期?
162、依赖注入时如何注入集合属性?
163、Spring中的自动装配有哪些限制?
164、在Web项目中如何获得Spring的IoC容器?
165. 大型网站在架构上应当考虑哪些问题?
166、你用过的网站前端优化的技术有哪些?
167、你使用过的应用服务器优化技术有哪些?
168、什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
169. 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别?
170. 谈一谈测试驱动开发(TDD)的好处以及你的理解。
召唤蕾姆
琼ICP备18000156号

鄂公网安备 42011502000211号