Java测试错题集(3)

Java测试错题题解

博主声明:
本文由博主luoru_LR原创,请多支持与指教。
转载请在开头附加本文链接及作者信息,并标记为转载。
博主主页

关于依赖注入,下列选项中说法错误的是()	正确答案:B
A.	依赖注入能够独立开发各组件,然后根据组件间关系进行组装
B.	依赖注入使组件之间相互依赖,相互制约
C.	依赖注入提供使用接口编程
D.	依赖注入指对象在使用时动态注入
解析:
	依赖注入目的是减少组件之间的耦合度,使开发变得简单。
    IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
    比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。
    A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

关于以下程序代码的说明正确的是? 	正确答案:D
1.   public class HasStatic{
2.     private static int x=100;
3.     public static void main(String args[]){
4.          HasStatic hs1=new HasStatic();
5.          hs1.x++;
6.          HasStatic  hs2=new HasStatic();
7.          hs2.x++;
8.          hs1=new HasStatic();
9.          hs1.x++;
10.        HasStatic.x--;
11.        System.out.println("x="+x);
12.     }
13.   } 

A.	程序通过编译,输出结果为:x=103
B.	10行不能通过编译,因为x是私有静态变量
C.	5行不能通过编译,因为引用了私有静态变量
D.	程序通过编译,输出结果为:x=102

解析:
	static属性是属于类的,所以对象共同拥有。所以既可以通过类名.变量名进行操作,也可用对象.变量名进行操作。
Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。正则表达式为()		正确答案:A
A.	".*?(?=\\()"
B.	".*?(?=\()"
C.	".*(?=\\()"
D.	".*(?=\()"
解析:
    1.什么是正则表达式的贪婪与非贪婪匹配
    如:String str="abcaxc";
    Patter p="ab*c";

    贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

    非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。
    2.编程中如何区分两种模式

    默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

    量词:{m,n}:m到n个

    *:任意多个

    +:一个到多个

    ?:0或一个
    以上来自博主的博客,然后这道题目
    .表示除\n之外的任意字符
    *表示匹配0-无穷 
    +表示匹配1-无穷
    (?=Expression) 顺序环视,(?=\\()就是匹配正括号
    懒惰模式正则: 
    src=".*? (?=\\()) "
    结果:北京市
    因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。
以下说法错误的是()	正确答案:D
A.	虚拟机中没有泛型,只有普通类和普通方法
B.	所有泛型类的类型参数在编译时都会被擦除
C.	创建泛型对象时请指明类型,让编译器尽早的做参数检查
D.	泛型的类型擦除机制意味着不能在运行时动态获取List<T>中T的实际类型
解析:
    1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹
    配的异常。 2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普
    通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。 总结:泛型代码与JVM ① 虚拟机中没有泛型,只有普
    通类和方法。 ② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) ③ 在继承泛型类
    型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。 无论我们如何定义一个泛型类型,相应的都会有一个原
    始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。
下列不属于Java语言鲁棒性特点的是 ( )	正确答案:D
A) Java能检查程序在编译和运行时的错误
B) Java能运行虚拟机实现跨平台
C) Java自己操纵内存减少了内存出错的可能性
D) Java还实现了真数组,避免了覆盖数据的可能
解析:
    Java鲁棒性的特点如下:Java在编译和运行程序时都要对可能出现的问题进行检查,以防止错误的产生。Java编译器可以查出
    许多其他语言运行时才能发现的错误。Java不支持指针操作,大大减少了错误发生的可能性。Java具有异常处理的功能,当程
    序异常时,它能捕获并响应意外情况,以保证程序能稳妥地结束,计算机系统不会崩溃。而Java能运行虚拟机实现跨平台是
    Java的与平台无关性的特点。所以本题选B。
下面哪项技术可以用在WEB开发中实现会话跟踪实现?	正确答案:ABCD
A.session
B.Cookie
C.地址重写
D.隐藏域
解析:
    会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。 
    HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用
    户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多
    个页面间切换时,服务器会保存该用户的信息。
    有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。 
    1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。 
    2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 
    3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP 
    响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个 
    Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至 
    在客户端计算机重启后它仍可以保留其值 
    4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

    HTTP是“无状态”协议:客户程序每次读取 Web 页面,都打开到 Web 服务器的单独的连接,并且,服务器也不自动维护客户的
    上下文信息。即使那些支持持续性 HTTP 连接的服务器,尽管多个客户请求连续发生且间隔很短时它们会保持 socket 打开,
    但是,它们也没有提供维护上下文信息的内建支持。上下文的缺失引起许多困难。例如,在线商店的客户向他们的购物车中加
    入商品时,服务器如何知道购物车中己有何种物品呢?类似地,在客户决定结账时,服务器如何能确定之前创建的购物车中哪
    个属于此客户呢?这些问题虽然看起来十分简单,但是由于 HTTP 的不足,解答它们却异常复杂困难。对于这个问题,存在 3
    种典型的解决方案: 
    Cookie(结合session使用) 
    可以使用 cookie 存储购物会话的 ID;在后续连接中,取出当前的会话 ID,并使用这个 ID 从服务器上的查找表(lookup 
    table)中提取出会话的相关信息。 以这种方式使用 cookie 是一种绝佳的解决方案,也是在处理会话时最常使用的方式。但
    是,sevlet 中最好有一种高级的 API 来处理所有这些任务,以及下面这些冗长乏味的任务:从众多的其他cookie中(毕竟可
    能会存在许多cookie)提取出存储会话标识符的 cookie;确定空闲会话什么时候过期,并回收它们;将散列表与每个请求关
    联起来;生成惟一的会话标识符。 
    URL 重写 
    采用这种方式时,客户程序在每个URL的尾部添加一些额外数据。这些数据标识当前的会话,服务器将这个标识符与它存储的用
    户相关数据关联起来。 URL重写是比较不错的会话跟踪解决方案,即使浏览器不支持 cookie 或在用户禁用 cookie 的情况
    下,这种方案也能够工作。URL 重写具有 cookie 所具有的同样缺点,也就是说,服务器端程序要做许多简单但是冗长乏味的
    处理任务。即使有高层的 API 可以处理大部分的细节,仍须十分小心每个引用你的站点的 URL ,以及那些返回给用户的
    URL。即使通过间接手段,比如服务器重定向中的 Location 字段,都要添加额外的信息。这种限制意味着,在你的站点上不
    能有任何静态 HTML 页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用 servlet
    或 JSP 动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息也会丢失,因为
    存储下来的链接含有错误的标识信息。 
    隐藏的表单域 
    HTML 表单中可以含有如下的条目: 
    这个条目的意思是:在提交表单时,要将指定的名称和值自动包括在 GET 或 POST 数据中。这个隐藏域可以用来存储有关会
    话的信息,但它的主要缺点是:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不
    产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值