11
关于spring说法错误的是?
A.spring是一个轻量级JAVA EE的框架集合
B.spring是“依赖注入”模式的实现
C.使用spring可以实现声明事务
D.spring提供了AOP方式的日志系统
解析:
本题考查的就是spring的一些特点,所以翻出一些Spring框架的介绍和特点,大家可以一起看看
Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,Spring中包含的关键特性:
1.强大的基于JavaBeans的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
2.一个可用于从applet到Java EE等不同运行环境的核心Bean工厂。数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
3.内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
4.JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个’终止’(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
5.以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和iBATIS SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范。
6.灵活的基于核心Spring功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Tiles、iText以及POI。值得注意的是,Spring中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
7.提供诸如事务管理等服务的面向方面编程框架。
另外,Spring并没有提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统
答案:D
12
对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
其最小内存值和Survivor区总大小分别是()
A.5120m,1024m
B.5120m,2048m
C.10240m,1024m
D.10240m,2048m
解析:
刚看到这个题,我也是一脸懵逼就随便猜了个答案,果不其然错了,看了大佬们的解析后,才搞懂,下面的解析来自某位大佬:
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmn:年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
年轻代5120m,
Eden:Survivor=3,
Survivor区大小=1024m(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。
-Xms初始堆大小即最小内存值为10240m
-XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor =
3,总大小为5120,3x+x+x=5120 x=1024
新生代大部分要回收,采用Copying算法,快!
老年代 大部分不需要回收,采用Mark-Compact算法
答案:D
13
Servlet的生命周期可以分为初始化阶段,运行阶段和销毁阶段三个阶段,以下过程属于初始化阶段是()。
A.加载Servlet类及.class对应的数据
B.创建servletRequest和servletResponse对象
C.创建ServletConfig对象
D.创建Servlet对象
解析:
有图有真相,这就不必多说了,看图↓↓↓
答案:C,D
14
JAVA反射机制主要提供了以下哪些功能?
A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法
D.在运行时调用一个对象的方法
解析:
Java反射机制主要提供了以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法;
- 生成动态代理。
答案:ABCD
15
以下代码执行的结果显示是多少( )?
public class Demo { class Super{ int flag=1; Super(){ test(); } void test(){ System.out.println("Super.test() flag="+flag); } } class Sub extends Super{ Sub(int i){ flag=i; System.out.println("Sub.Sub()flag="+flag); } void test(){ System.out.println("Sub.test()flag="+flag); } } public static void main(String[] args) { new Demo().new Sub(5); } }
A. Sub.test() flag=1 Sub.Sub() flag=5
B. Sub.Sub() flag=5 Sub.test() flag=5
C. Sub.test() flag=0 Sub.Sub() flag=5
D. Super.test() flag=1 Sub.Sub() flag=5
解析:
在继承中代码的执行顺序为:
1.父类静态对象,父类静态代码块
2.子类静态对象,子类静态代码块
3.父类非静态对象,父类非静态代码块
4.父类构造函数
5.子类非静态对象,子类非静态代码块
6.子类构造函数
对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。最终选择了A
答案:A