4 Mar 2017
找实习中的问题
面试中的问题
- HashMap的原理, 为什么不是线程安全的?
- 类的加载机制
- String, StringBuffer, StringBuilder的区别。
- 简述List, set, Map的区别
- 数组与链表的相同点与不同点
- object类有哪些方法, hashcode, equals 和 ==的区别。
- classloader, 动态加载;
- [垃圾回收][q8]
- 两个list快速去重。(其实是一个排序问题)1. 挨个比(蠢), 对于实现comparable接口的->2. 二叉搜索树(红黑树,普通二叉搜索树);3. HashMap根据Key散列,value为出现次数, 查找到了就将value+1;
- 寻找中位数,寻找第k大的数:利用快速排序中的切分
紧急项:
- 熟练掌握链表、 树、 栈、 队列和哈希表以及他们的操作,(链表和二叉树),红黑树(一种平衡树)
-
查找、 排序算法,了解各种查找和排序算法的基础上, 重点掌握二分查找, 归并排序和快速排序。
- session与cookie的原理与比较
- 泛型的原理, 泛型的各种写法。
- 各种容器的深入研究
- 求最长子串:动态规划
- 各种排序与查找
- 快速排序
- 堆排序
- 归并排序
- 选择排序
- 插入排序
- 二分插入排序
- 希尔排序
- 冒泡排序
- Java的内存模型与垃圾回收
- Top k (调用基于堆实现的优先队列)
- 数据库
- 熟悉的设计模式 ??(重点掌握单例模式, 工厂模式和观察者模式)
- 线程安全,线程的状态,线程池
- gc算法
- finally是不是一定会执行。
答:不是,例如内存溢出或者System.exit(0)。
- IO,NIO
- 多线程
- 树
- 索引: 为什么索引可以快速检索目标, 数据库中的索引多是利用B树或B+树实现的, 建立的索引数据结构是经过排序的,可以对他进行二分查找。
-
接口的作用. extends and implements ?? abstract class
接口: 1. set of methods.
2. common functionality among set of classes.
接口可以被称为完全抽象的类, 因为它并没有提供功能的任何具体实现,而抽象类除了抽象方法和属性外,还可以有具体的实现。
- Hashmap与Hashtable的区别
- Iterable, iterator()
- Spring,切面编程(Aspect-oriented programming), 多线程锁, IOC(Inversion of Control)
- 迭代器
- return的作用
- java的监视器模式
- final:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
- 创建对象的几种方式。(反射机制,new关键字,序列化和反序列化,clone(),还可以从这个问题引申到类的加载机制。)
所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
排序
- 选择排序:每次选index右侧集合最小的插入当前index位置,向右(数组尾端)移动index 适用于小数组
- 插入排序:适合已经部分有序(倒置少的)的数列。 适用于小数组
-
希尔排序:高效算法,不需要理解它的性能。对于各种数组均有较好的表现。 最好手写
- 归并排序:将两个有序数组归并成一个更大的有序数组。
先递归地将它分成两半排序, 然后将结果归并起来。时间:O(N*logN),空间:O(N)
运用了分治的思想。不适用与小数组
- 快速排序:分治的排序算法,将一个数组切分成两个子数组, 将两部分独立地进行排序。如何进行切分是快速排序的关键。每一次切分都是将切分元素j放到了排序的最终位置,且a[lo..j-1]<= a[j] <=a[j+1…hi]
- 堆排序:典型用例,基于二叉堆求解Top K问题。
查找
三种经典的数据类型:
- 二叉查找树:理想状态复杂度为logN,但由于插入可能不平衡,导致最坏结果可能复杂度为N(形成一个链表模式)。
- 红黑树:平衡树,在插入和删除时保持平衡(通过旋转和改变链接的颜色), 由此实现了查找复杂度为logN. 定义为含有红黑链接并满足下列条件的二叉查找树:
- 红链接均为左链接。
- 没有任何一个结点同时和两个红链接相连。
- 任意空链接到根节点的路径上的黑链接数量相同。
- 散列表