数据结构和算法类
顺序表和链表的区别?
顺序表随机访问快,插入删除慢;链表插入删除快,随机访问慢。
栈和队列的区别?
栈:先进后出,队列:先进先出
常用的排序算法有哪些?
冒泡排序、选择排序、快速排序、堆排序等。
快速排序的实现思想是怎样?快速排序的时间复杂度是多少?
- 划分,在待排序的数列中随机选择一个x,然后通过比较最终确定它在数列中的最终位置。这个数将原数列分成三部分:比x小的数、x、比x大的数。
- 在“比x小的数”和“比x大的数”中递归使用1的方法进行划分。直到每一个数都确定最终位置。
- 因为是不断地折半,所以时间复杂度是O(Log2 N)
冒泡排序的时间复杂度是多少?
O(n^2)
堆排序的原理是怎样?
- 需要先解释堆这种数据结构(完全二叉树),对每个非叶子节点,都有:左孩子比父节点小,右节点比父节点大。
- 将堆调整为大根堆或者小根堆的过程。
- 时间复杂度是O(N*LogN)
树有哪几种遍历方式?
前序遍历、中序遍历、后续遍历
对称加密算法有哪几种?
- 对称加密:加密和解密使用同一个密钥。有DES、3DES、AES等。
- 非对称加密:加密和解密需要两个Key:公钥和私钥。有RSA、DSA等
Hash算法是怎样的?
Hash算法(摘要算法)
- Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
- 常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA
- 哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。
- 画出HashMap的数据结构实现
网上找到一篇帖子: HashMap实现原理分析 ,感谢作者!
设计模式类
熟悉哪些设计模式,说明面试官指定的某个模式的具体的实现及原理。
单例、工厂、观察者、组合、代理、适配器、装饰者、Builder等。说自己理解的,不要给自己挖坑。面试官会继续问实现和使用的。
- 观察者模式可参考Android源码中的观察者模式
- 装饰者模式可参考理解装饰者模式
单例模式的缺点是什么?
- 单例模式在Android中生命周期较长,如果单例持有act