牛客网刷题错题(三)

版权声明:转发者请注明地址哦-----kuls的博客-一个正在疯狂学习的大学生- https://blog.csdn.net/qq_36547531/article/details/86124786

1.java 中哪个关键字可以对对象加互斥锁? B
A.transient
B.synchronized
C.serialize
D.static

解析:
static 修饰符,用来创建类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 用于多线程的同步。用来给对象和方法或者代码块加锁,各线程互斥访问。
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
serialize:Java 对象序列化为二进制文件。
transient:序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
关于以上修饰哪些能修饰类,哪些能修饰接口等等,参考:http://blog.csdn.net/dawn_after_dark/article/details/74527137

2.关于依赖注入,下列选项中说法错误的是(B)
A.依赖注入能够独立开发各组件,然后根据组件间关系进行组装
B.依赖注入使组件之间相互依赖,相互制约
C.依赖注入提供使用接口编程
D依赖注入指对象在使用时动态注入

解析:
B 依赖注入的动机就是减少组件之间的耦合度,使开发更为简洁
补充:
依赖注入和控制反转是同一概念:
依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

3.关于spring说法错误的是(D)
A.spring是一个轻量级JAVA EE的框架集合
B.spring是“依赖注入”模式的实现
C.使用spring可以实现声明事务
D.spring提供了AOP方式的日志系统

解析:
D
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实现我们自己的日志系统

**4.

1 .class Parent{
2. public float aFun(float a, float b) { }
3 .}
4 .class Child extends Parent{
5 .
6 .}

将以下哪种方法插入行5是不合法的。(A )
A.float aFun(float a, float b){ }
B.public int aFun(int a, int b) { }
C.public float aFun(float p, float q){ }
D.private int aFun(int a, int b){ }**

解析:
方法重写应遵循“三同一小一大”原则:
“三同”:即方法名相同,形参列表相同,返回值类型相同;
“一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;
“一大”:子类方法的访问修饰符应比父类方法更大或相等。

A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。 default,默认的访问权限,也是可以省略的访问权限,它不仅能在设置了该权限的类中访问,也可以在同一包中的类或子类中访问。意思就是只能由跟这个类在同一个包中的类来访问,比private限制更少,但比protected限制更多。

B、D不是重写。因为形参列表和返回值类型不同,不满足“三同”。所以写在第五行以普通方法对待,插入第五行没有错误。

C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误。

5.考虑下面这个简单的例子,让我们看看reflection是如何工作的。

import java.lang.reflect.*;
public class DumpMethods{
    public static void main(String[] args) {
        try {
            Class c=Class.forName(args[0]);
            Method m[]=c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++) {
                System.out.println(m[i].toString());
            }
        } catch (Throwable e) {
            System.err.println(e);
        }
    }
}

其中"c.getDeclaredMethods"的作用是:D
A.取得类的公有方法对象
B.取得类的所有公有方法名称
C.取得类的所有方法对象
D.以上选项都不正确

解析:
public Method[] getDeclaredMethods()返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也包括它所实现接口的方法。

public Method[] getMethods()返回类的所有public方法,包括其继承类的公用方法,当然也包括它所实现接口的方法。

6.对于JVM内存配置参数:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

其最小内存值和Survivor区总大小分别是()
A.5120m,1024m
B.5120m,2048m
C.10240m,1024m
D.10240m,2048m

解析:
D
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmn:年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
年轻代5120m, Eden:Survivor=3,Survivor区大小=1024m(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。
-Xms初始堆大小即最小内存值为10240m

猜你喜欢

转载自blog.csdn.net/qq_36547531/article/details/86124786