下午到了百度大厦感觉这一生有幸再一次来到这里真心高兴。梦开始的地方不能忘。不忘初心方的始终。 第一面 基础知识面试 首先问了hashmap是如何存储数据、找数据的。
第一点,单个数据是什么结构
jdk1.6
transient Entry[] table;
hashmap允许key值为空放置
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;
}
这里要注意了,判断相等是首先判断hash值是否相等,如果相等还要判断key值是否相等(有== 和equal两种情况)。
jdk1.8
transient Node<K,V>[] table;
jdk1.8hashmap的实现和1.6的差别还是蛮大的。
jdk1.6的节点就是Entry链的形式。这样如果数据很大的情况下,查找要从头到尾,效率比较低。
jdk1.8将Entry链改成了TreeNode。TreeNode继承自LinkedHashMap.Entry<K,V>,本身维护了一个红黑树。
这样在开练解决冲突的时候会将冲突数据组织成红黑树,当查找某个数据的时候查找次数不会超过logn,查找效率得到了提高。
spring的事务传播和事务隔离。
见我的相关文章,这块表述清楚就好。
主键索引和唯一索引
主键和唯一索引都要求值唯一,但是它们还是有区别的:
①.主键是一种约束,唯一索引是一种索引;
②.一张表只能有一个主键,但可以创建多个唯一索引;
③.主键创建后一定包含一个唯一索引,唯一索引并一定是主键;
④.主键不能为null,唯一索引可以为null;
⑤.主键可以做为外键,唯一索引不行;
模式(写个单利)
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
第二面 项目方面、代码能力
所做的项目,如何能适应修改,代码的可扩展性如何理解
第三方面 个人素养、职位匹配度
加班如何看待、做过什么东西有深度和广度的提升。
对百度口号“简单,可依赖”怎么理解。
加微信:hyssop的后花园 (技术公众号)
来源:oschina
链接:https://my.oschina.net/u/166980/blog/750625