WePay 面试 | 书脊
Wepay的面试很容易拿, 扔个简历过去,很快就换个oa回来. oa的题也很固定2个选择题, 1个设计hashtable题. 但是这个hashtable题很奇葩, 因为oa就30分钟, 而且用的是hackerrank的环境, 根本没法复制粘贴,全靠手敲代码+测试, 要求是能支持put和get方法, 并且是有抽象参数, 并且还要能解决hash冲突. 然后我敲了下面的代码, 居然说oa没过..然后发网上, 问了过了的同学怎么写的…大家纷纷表示我写的很好- – move on 了
-- array resize, data copy
Wepay的面试很容易拿, 扔个简历过去,很快就换个oa回来. oa的题也很固定2个选择题, 1个设计hashtable题. 但是这个hashtable题很奇葩, 因为oa就30分钟, 而且用的是hackerrank的环境, 根本没法复制粘贴,全靠手敲代码+测试, 要求是能支持put和get方法, 并且是有抽象参数, 并且还要能解决hash冲突. 然后我敲了下面的代码, 居然说oa没过..然后发网上, 问了过了的同学怎么写的…大家纷纷表示我写的很好- – move on 了
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
public class myHashTable<K, V> {
class Entry<K, V> {
public Entry(K key, V value) {
this.key = key;
this.value = value;
}
K key;
V value;
}
private int size = 1000;
private ArrayList<LinkedList<Entry<K, V>>> ary = new ArrayList<>(size);
public myHashTable(int size) {
this.size = size;
for (int i = 0; i < size; i++) {
ary.add(i, null);
}
}
public void put(K key, V value) {
if (key == null)
throw new NullPointerException("null of key is not allowed");
if (ary.get(key.hashCode() % size) == null)
ary.set(key.hashCode() % size, new LinkedList<Entry<K, V>>());
ary.get(key.hashCode() % size).addFirst(new Entry<K, V>(key, value));
}
public V get(K key) {
if (key == null)
throw new NullPointerException("null of key is not allowed");
if (ary.get(key.hashCode() % size) == null)
return null;
else {
LinkedList<Entry<K, V>> res = ary.get(key.hashCode() % size);
Iterator<Entry<K, V>> iterator = res.iterator();
while (iterator.hasNext()) {
Entry<K, V> e = iterator.next();
if (e.key.equals(key))
return e.value;
}
return null;
}
}
public static void main(String[] args) {
myHashTable<String, String> m = new myHashTable<>(1000);
m.put("abc", "eee");
m.put("abc", "bbb");
m.put("eee","ddd");
System.out.println(m.get("eee"));
}
}
Read full article from WePay 面试 | 书脊