搜狗2015java工程师笔试题总结
2017-07-30 09:11
288 查看
1.下列关于Java并发的说法中正确的是()
A.CopyOnWriteArrayList适用于写多读少的并发场景 B.ReadWriteLock适用于读多写少的并发场景 C.ConcurrentHashMap的写操作不需要加锁,读操作需要加锁 D.只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
正确答案为B。
A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥, 读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性,不保证原子性
2.下面哪段代码实现了GBK编码字节流到UTF-8编码字节流的转换
byte[] src,dst; A.dst=String.fromBytes(src,"GBK").getBytes("UTF-8") B.dst=new String(src,"GBK").getBytes("UTF-8") C.dst=new String("GBK",src).getBytes() D.dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
正确答案为B。
操作步骤就是先编码再解码。先通过new String(src, “gbk”)解码得到字符串,然后再通过getBytes(“utf-8”)来得到UTF-8编码字节数组
A/D错误原因:String类并没有fromBytes/encode/decode方法
C错误原因:getBytes()没有指定编码格式
3.如下代码,执行test()函数后,屏幕打印结果为()
public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + ""); } }
执行结果为:-128 127
b=b++并不会改变b的值
而a在进行add之前便进行了自增++a,byte类型的数据范围是: -128, 127之间,因此a=127进行了越界,其值变成了-128
4.以下哪些类是线程安全的()
Vector HashMap ArrayList StringBuffer Properties
正确结果为:Vector/StringBuffer/Properties
所谓线程安全就是线程同步,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问。
线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
Vector类的许多操作都是加了synchronized修饰的,用于保证线程的安全,比如他的写入元素的操作方法
public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj; }
而HashMap的许多操作都是没有添加synchronized修饰的,比如他的写入put方法:
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for(Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash &&((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
ArrayList也是线程不安全的
public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return true; }
StringBuffer类是线程安全的
public synchronized StringBuffer append(String str) { super.append(str); return this; }
Properties类也是线程安全的
public synchronized Object setProperty(String key, String value) { return put(key, value); }
5.Collection接口的原型链/h4>
在java.util包中提供了一些集合类,常用的有List、Set和Map类,其中List类和Set类继承了Collection接口。这些集合类又称为容器,长度是可变的,数组用来存放基本数据类型的数据,集合用来存放类对象的引用。List接口、Set接口、Map接口以及Collection接口的主要特征如下:
Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用。
List接口继承了Collection接口,List接口允许存放重复的对象,排序方式为按照对象的插入顺序。
Set接口继承了Collection接口,Set接口不允许存放重复的对象,排序方式为按照自身内部的排序规则。
Map接口以键值对(key—value)的形式存放对象,其中键(key)对象不可以重复,值(value)对象可以重复,排序方式为按照自身内部的规则。
相关文章推荐
- 2015数码视讯校园招聘JAVA开发工程师笔试题
- 2015数码视讯校园招聘JAVA开发工程师笔试题
- 美图--Java大数据工程师笔试总结。
- 搜狗2015校招(社区搜索:Java工程师)一面经历
- 名企笔试:2015携程Java工程师笔试题
- 搜狗2015 C++工程师笔试题
- 搜狗2015校招(社区搜索:Java工程师)一面经历
- 阿里巴巴2015秋季笔试研发工程师JAVA
- 2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题)
- iOS工程师综合练习卷/ iOS工程师能力评估/搜狗2015 iOS工程师笔试题
- 2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题)
- 牛客网(搜狗2015 C++工程师笔试题)
- 2015网易Java开发工程师(技术架构)笔试题
- 阿里题目总结——阿里巴巴2015研发工程师B笔试卷
- 面试总结三---2015百度校园招聘长沙站前端工程师笔试面试经历
- 搜狗2015校园招聘Java开发笔试
- 2015网易校招Java开发工程师(技术架构)在线笔试题
- 2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题)
- 阿里题目总结——阿里巴巴2015研发工程师A笔试
- 搜狗2015前端工程师笔试题总结