搜狗2013校园招聘java笔试题分析(个人的一点分析拙见,不到之处请不吝赐教)

不知道 自己理解 有哪些 不到之处,还望高手们, 不吝指教,一点点贴出我的分析 过程,错误之处还请批评指教。

 

13.下面关于字符串的描述,正确的是(C

A.通过Strinf s1=new String(“abc”)和String s2=”abc”,额s1==s2为true

B.”abc”+”def”则会创建三个字符串对象,第三个是”abcdefg”,也就是说,在Java中对字符串 

   的一切操作,都会产生一个新的字符串对象。

C.StringBuffer是线程安全的,它比String快。

D.StringBuider是线程安全的,它比String快。

 

首先,我们排除了A,根据Java的堆栈赋值原理,我们知道。s1在堆中,s2在栈中,是false;

字符串拼接我们经常会使用StringBuider(在单线程里面),这样做的原因就是减少了”abc”+“def”浪费空间的缘故,还浪费时间(这一点是在资料上查的,我曾用拼接前后的时间差对比,可是ms级别上得不到结果啊!)。

在《java核心技术基础卷I的第51页》我查到,StringBuider是java1.5以后引入的,它的前身就是StringBuffer,StringBuffer的效率略低,但允许采用多线程方式执行添加或删除字符的操作。而在单线程中,应该使用StringBuider。所以我觉得答案应该是C,不知道对不对。

 

14.以 下操作中,可 能的解决 java内存泄露问题的手段有;  【 多选】 ( )

A.在 程序中调用 system.gcr);

B.关掉不再使用的网络数据库连接 ;

C.在程序中调用finalize();

D.清理集合类中的无用对象;

E.在 程序中调用Runtime.getRuntime().runFinalization().

不知道为啥,这种题对我很抓狂啊....求大侠指点。

 

15.假设如下代码中,若t1线程在t2线程启动之前就已经完成启动,代码输出是()。

public static void main(String[] args) throws Exception {

final Object obj = new Object();

Thread t1 = new Thread() {

public void run() {

synchronized (obj) {

try {

obj.wait();

System.out.println("Thread 1 wake up.");

catch (InterruptedException e) {

}

}

}

};

t1.start();

Thread.sleep(1000);

Thread t2 = new Thread() {

public void run() {

synchronized (obj) {

obj.notifyAll();

System.out.println("Thread 2 sent notify.");

}

}

};

t2.start();

}

A.

Thread 1 wake up.

Thread 2 sent notify.

B.

Thread 2 sent notify.

Thread 1 wake up.

C.A、B皆有可能

D.程序无法输出,卡死。

这是很基础的一道题,看过java并发编程的一些资料的朋友应该都很清楚这个waitnotify/notifyAll的工作机制,wait要等到有对象发出nitifyALL)通知它时才会执行,选B

 

16.Math.floor(-8.5)=(B)

A.(float)-8.5  B.(long)-9 C.(long)-8 D.不能确定,与软硬件相关。

这个不多说了,我的android论坛的java板块有BOSS的一篇文章,http://www.eyeandroid.com/thread-10639-1-1.html,说的很详细,选B

17.synchronize关键字可以作用在下列哪些选项(多选)(BCD)

A.int值  B.字符串常量  C一个Integer对象 D.ExampIe.Class  E.数组

我们知道,synchronize的主要作用是多线程中,不同线程对一个对象的加锁访问机制,就是为了并发访问的安全性。而synchronize的用法一般是这样的吧(不知道我说的全不全):

1.放在方法作用域和返回值类型之间Synchronize,同一时刻只允许一个线程访问此方法;

Public Synchronize int add();

2.Synchronize(anObject),这样同一时刻,anObject就只允许一个线程访问了,当然,这里面必须是对象,基本类型是不行的。 我特意试了下数组,是不行的,这为什么,其实给我的错觉 E是可以的,           应该是BCD

 Prototype模式和Factory Method模式之间的区别可以理解为 【多选】 ( BC)
A.Factory Method模 式是利用现有的对象进行克隆。
B.Prototype模 式是利用现有的对象进行克隆。
C.Factory Method模 式是重新创建一个对象。
D.Prototype模 式是重新创建一个对象。

 Prototype模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype本身就是“对象工厂”(因为能够生产对象),实际上Prototype模式和Builder模式、AbstractFactory模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是:Builder模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory模式重在产生多个相互依赖类的对象,而Prototype模式重在从自身复制自己创建新类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值