死锁是由于一系列线程竞争一些列资源产生的永久阻塞。导致死锁的有两种情况:
1.自死锁(往往被忽略)
一个线程在拥有某个资源的情况下又试图申请对该资源的使用,陷入到自死锁。
2.另外一种情况是线程1用于资源A,线程2拥有资源B,这时候线程1申请资源B,线程2申请资源A,陷入了相互等待的境地,造成死锁。
===============
map内部实现是依据红黑树的,查询的时间复杂度为log(n)。hash_map的内部实现是哈希表,查询的时间复杂度为n(1)。hash可以看成用空间复杂度换取了时间复杂度。
在hash_map中,每个key都对应于一个桶,用来容纳value值。为了实现hash_map,我们需要定义哈希函数和等于比较函数。在没有提供这些函数的时候会用一个缺省的。
有很重要的一点是hash_map需要定义的是等于函数,而map需要定义的是比较大小的函数,这样是和他们的特点相对应的,hash_map是基于哈希的思想,它只要看看置顶的键值有没有存在,用等于函数就可以实现。map是基于红黑树的,用比较函数比较大小。
================
在面试题目中经常要让我们从一个数字序列中找出我们想要的一些信息,针对这样的题目,本人有如下重要总结,希望帮助大家:
1.如果要处理的数字序列是一个无序的数列,那么尽量往快速排序上靠,用快速排序的思想解决此类问题。
2.如果要处理的数字序列是一个有序的数列,那么尽量往二分查找上靠,用二分查找的思想解决此类问题。