牛客网错题集系列(二)

版权声明: https://blog.csdn.net/qq1641530151/article/details/82846959

目录

1.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。()

2.关于异常抛出

3.list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()

4.一道Java内存分析的题目

5.在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?

6.多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为 ()

7.HashMap和HashTable的描述,错误的是?

8.单例模式中,两个基本要点是

9.下面几个关于Java里queue的说法哪些是正确的()?


 

1.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList<String>取代ArrayList),程序的运行时性能会变得更好。()

错误,在编译阶段,虚拟机就会将泛型擦除还原成没有泛型的代码,并没有提高运行时的性能。

2.关于异常抛出

虽然会在try/catch语句中写很多的异常用来捕获,但是只会抛出一个异常。

下列程序的运行结果
1
2
3
4
5
6
7
8
9
10
11
public void getCustomerInfo() {
        try {
            // do something that may cause an Exception
        } catch (java.io.FileNotFoundException ex) {
            System.out.print("FileNotFoundException!");
        } catch (java.io.IOException ex) {
            System.out.print("IOException!");
        } catch (java.lang.Exception ex) {
            System.out.print("Exception!");
        }
    }

结果是FileNotFoundException IOException Exception中的一个被抛出

3.list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()

Iterator it = list.iterator();
int index = 0;
while (it.hasNext())
{
    Object obj = it.next();
    if (needDelete(obj))  //needDelete返回boolean,决定是否要删除
    {
        //todo delete
    }
    index ++;
}
it.remove();
list.remove(obj);
list.remove(index);
list.remove(obj,index);
  •  

迭代器支持从原集合中删除安全地删除元素,当打开迭代器的同时也可以对原集合进行修改。如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态。

4.一道Java内存分析的题目

static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;

假定str0,...,str4后序代码都是只读引用。 Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()

堆区,只有new出来的对象会放到堆区。所以首先substring是一次new的过程,加上str3和str4一共是5+5+5= 15

5.在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?

每个中文字符占用2个字节,每个英文字符占用1个字节
假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。
Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。
实现国际化应用常用的手段是利用ResourceBundle类

CD  

A:    无论是中文还是英文字符都是占两个字节

B:          不同的编码之间是可以相互转换的。

6.多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为 ()

同步,也就是把数据放到同步代码块中

 

7.HashMap和HashTable的描述,错误的是?

他们都实现了Map接口。
HashMap非线程安全,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供额外同步。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
通过contains方法可以判断一个对象是否存在于HashMap或者Hashtable中。

HashTable不允许将null作为value值,HashMap没有contains方法

8.单例模式中,两个基本要点是

构造函数私有和唯一实例

 

9.下面几个关于Java里queue的说法哪些是正确的()?

LinkedBlockingQueue是一个可选有界队列,不允许null值
PriorityQueue,LinkedBlockingQueue都是线程不安全的
PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则

LinkedBlockQueue是线程安全的,ConcurrentLinkedQueue遵循的是优先级高的优先原则

猜你喜欢

转载自blog.csdn.net/qq1641530151/article/details/82846959