baidu面试

徘徊边缘 提交于 2019-12-03 01:52:13

下午到了百度大厦感觉这一生有幸再一次来到这里真心高兴。梦开始的地方不能忘。不忘初心方的始终。 第一面 基础知识面试 首先问了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的后花园 (技术公众号)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!