在线考试教育,中软,解决方案

上传人:F****n 文档编号:90762363 上传时间:2019-06-16 格式:DOCX 页数:46 大小:54.82KB
返回 下载 相关 举报
在线考试教育,中软,解决方案_第1页
第1页 / 共46页
在线考试教育,中软,解决方案_第2页
第2页 / 共46页
在线考试教育,中软,解决方案_第3页
第3页 / 共46页
在线考试教育,中软,解决方案_第4页
第4页 / 共46页
在线考试教育,中软,解决方案_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《在线考试教育,中软,解决方案》由会员分享,可在线阅读,更多相关《在线考试教育,中软,解决方案(46页珍藏版)》请在金锄头文库上搜索。

1、在线考试教育,中软,解决方案篇一:中软测试题中软的一次试题:1. 请说明下面代码的执行结果:byte a=1;byte b=1;byte c=a+b;2. -23结果是多少?3. 一个ArrayList的引用ArrayList还是List好?为什么?4. 类方法与实例方法有什么区别?5. Hashtable和HashMap有何区别?6. 单例模式有几种实现方式?举例说明7. Socket编程有哪两种模式?8. JSP和Servlet有何区别?9. Java语言中是怎样实现多线程的?请说明Synchronized,volatile,ThreadLocal的区别?说明wait、sleep、join

2、方法的区别10. TCP/IP分几层?11. Java是用什么进行垃圾处理的?列出你所知道的垃圾收集器的实现方式12. 请说明TCP/IP三次握手过程13. 举例说明Linux常用命令14. 什么是序列化?Java是怎样实现序列化的15. 说明heap和stack的区别16. 编程对任意一组数进行排序,使用冒泡程序类方法与实例方法有什么区别有时候我们对静态方法和实例化方法会有一些误解。1、大家都以为“ 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。”事实上,他们都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。2、

3、大家都以为“ 静态方法在堆上分配内存,实例方法在堆栈上”事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。方法占不占用更多内存,和它是不是static没什么关系。因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所以字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存

4、在一份代码,也就是只占用一份内存空间。同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值?3、大家都以为“实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单”事实上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。从面向对象的角度上来说,在抉择使用实例化

5、方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。我们为什么要把方法区分为:静态方法和实例化方法?如果我们继续深入研究的话,就要脱离技术谈理论了。早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c+,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方

6、法和实例化方式的区分是为了解决模式的问题。拿别人一个例子说事:比如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目”的。拓展:JAVA中构造方法,实例方法,类方法,有什么区别?构造方法:构造方法是用来构造类的对象的,方法名和类名相同没有返回值。一般用 new 构造方法名 来创建该类的对象。在不写构造方法的情况下会有一个默认的无参构造方法,当然你也可以重写和重载构造方

7、法(建议你找一本Java编程思想看看,里面讲的很透彻)。实例方法:简单地说就是可以通过类的实例(某个对象)调用的方法,也就是我们正常情况下使用的方法。实例方法也称成员方法(成员方法和成员变量的知识你可以参考Java编程思想)。类方法:简单地说就是直接可以用类名调用的方法,也就是被关键字static修饰的方法,它不需要创建类的对象来调用该方法。(关于static关键字的详细用法你也可以在Java编程思想这本书中找到)。HashTable和HashMap的区别HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashT

8、able。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。不允许null值,HashMap允许null值。有一个contains,功能和containsValue功能一样。使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它们的实现也有很大的不同。中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。6.哈希值的使用不同,HashTab

9、le直接使用对象的hashCode,代码是这样的:int hash = ;int index = % ;而HashMap重新计算hash值,而且用与代替求模:int hash = hash;int i = indexFor;static int hash int h = ;h += ;h = ;h += ;h = ;return h;static int indexFor return h & ;以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如HashMap对null的操作。单例模式有几种实现方式?举例说明在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是

10、简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。1. 最简单的实现首先,能够想到的最简单的实现是,把类的构造函数写成private的,从而保证别的类不能实例化此类,然后在类中提供一个静态的实例并能够返回给使用者。这样,使用者就可以通过这个引用使用到这个类的实例了。public class SingletonClass private static final SingletonClass i

11、nstance = new SingletonClass ;public static SingletonClass getInstance return instance;private SingletonClass 如上例,外部使用者如果需要使用SingletonClass的实例,只能通过getInstance()方法,并且它的构造方法是private的,这样就保证了只能有一个对象存在。2. 性能优化lazy loaded上面的代码虽然简单,但是有一个问题无论这个类是否被使用,都会创建一个instance对象。如果这个创建过程很耗时,比如需要连接10000次数据库(夸张了?:-),并且这个

12、类还并不一定会被使用,那么这个创建过程就是无用的。怎么办呢?为了解决这个问题,我们想到了新的解决方案:public class SingletonClass private static SingletonClass instance = null;public static SingletonClass getInstance if instance = new SingletonClass ;return instance;private SingletonClass 代码的变化有两处首先,把instance初始化为null,直到第一次使用的时候通过判断是否为null来创建对象。因为创建过

13、程不在声明处,所以那个final的修饰必须去掉。我们来想象一下这个过程。要使用SingletonClass,调用getInstance()方法。第一次的时候发现instance是 null,然后就新建一个对象,返回出去;第二次再使用的时候,因为这个instance是static的,所以已经不是null了,因此不会再创建对象,直接将其返回。这个过程就成为lazy loaded,也就是迟加载直到使用的时候才进行加载。3. 同步上面的代码很清楚,也很简单。然而就像那句名言:“80%的错误都是由20%代码优化引起的”。单线程下,这段代码没有什么问题,可是如果是多线程,麻烦就来了。我们来分析一下:线程A

14、希望使用SingletonClass,调用getInstance()方法。因为是第一次调用,A就发现instance是null 的,于是它开始创建实例,就在这个时候,CPU发生时间片切换,线程B开始执行,它要使用SingletonClass,调用getInstance() 方法,同样检测到instance是null注意,这是在A检测完之后切换的,也就是说A并没有来得及创建对象因此B开始创建。B创建完成后,切换到A继续执行,因为它已经检测完了,所以A不会再检测一遍,它会直接创建对象。这样,线程A和B各自拥有一个SingletonClass的对象单例失败!解决的方法也很简单,那就是加锁:public class SingletonClass private static SingletonClass instance = null;public synchronized static SingletonClass getInstance if instance = new SingletonClass ;return instance;private SingletonClass 是要getInstance()加上同步锁,一个线程必须等待另外一个线程创建完成后才能使用这个方法,这就保证

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号