八、算法与数据结构
❤1、哈希
1、hashset存的数是有序的吗?
hashset继承的是set接口,set是无序集合。
2、Object作为HashMap的key的话,对Object有什么要求吗?
Hashmap不允许有重复的key,所以要重写它的hashcode和equal方法,以便确认key是否重复
3、一致性哈希算法
4、什么是hashmap?
http://www.cnblogs.com/qingyunzong/p/9143233.html
5、Java中的HashMap的工作原理是什么?
6、hashCode()和equals()方法的重要性体现在什么地方?
同一个对象(没有发生过修改)无论何时调用hashCode(),得到的返回值必须一样。
hashCode()返回值相等,对象不一定相等,通过hashCode()和equals()必须能唯一确定一个对象。
一旦重写了equals(),就必须重写hashCode()。而且hashCode()生成哈希值的依据应该是equals()中用来比较是否相等的字段。如果两个由equals()规定相等的对象生成的hashCode不等,对于HashMap来说,他们可能分别映射到不同位置,没有调用equals()比较是否相等的机会,两个实际上相等的对象可能被插入到不同位置,出现错误。其他一些基于哈希方法的集合类可能也会有这个问题。
❤2、树
1、说一下B+树和B-树?
2、怎么求一个二叉树的深度?手撕代码?
3、算法题:二叉树层序遍历,进一步提问:要求每层打印出一个换行符
4、二叉树任意两个节点之间路径的最大长度
5、如何实现二叉树的深度?
6、如何打印二叉树每层的节点?
7、TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
❤3、遍历
1、编程题:写一个函数,找到一个文件夹下所有文件,包括子文件夹
2、二叉树 Z 字型遍历
❤4、链表
1、反转单链表
2、随机链表的复制
3、链表-奇数位升序偶数位降序-让链表变成升序
4、bucket如果用链表存储,它的缺点是什么?
5、如何判断链表检测环
❤5、数组
1、寻找一数组中前K个最大的数
2、求一个数组中连续子向量的最大和
3、找出数组中和为S的一对组合,找出一组就行
4、一个数组,除一个元素外其它都是两两相等,求那个元素?
5、算法题:将一个二维数组顺时针旋转90度,说一下思路。
❤6、排序
1、排序算法知道哪些,时间复杂度是多少,解释一下快排?
2、如何得到一个数据流中的中位数?
3、堆排序的原理是什么?
4、归并排序的原理是什么?
5、排序都有哪几种方法?请列举出来。
6、如何用java写一个冒泡排序?
❤7、堆与栈
1、堆与栈的不同是什么?
2、heap和stack有什么区别。
3、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
❤8、队列
1、什么是Java优先级队列(Priority Queue)?
❤9、高级算法
1、题目:
Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the following operations: get and put.
get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
put(key, value) - Set or insert the value if the key is not already present. When the cache reaches its capacity, it should invalidate the least frequently used item before inserting a new item. For the purpose of this problem, when there is a tie (i.e., two or more keys that have the same frequency), the least recently used key would be evicted.
Could you do both operations in O(1) time complexity?
2、id全局唯一且自增,如何实现?
3、如何设计算法压缩一段URL?
4、为什么要设计后缀表达式,有什么好处?
5、LRU算法的实现原理?