一些常见问题

来源:互联网 发布:java栈和队列的区别 编辑:程序博客网 时间:2024/05/18 10:58

比较乱, 仅供参考

  1. HashMap的原理, 为什么不是线程安全的?
  2. 类的加载机制。(?????)
  3. String, StringBuffer, StringBuilder的区别。,String是不可变对象,StringBuffer和StringBuilder是可变对象,StringBuffer是线程安全的,StringBuilder不是线程安全的。
  4. 简述List, set, Map的区别
  5. 数组与链表的相同点与不同点
  6. object类有哪些方法, hashcode, equals 和 ==的区别。
  7. classloader, 动态加载;
  8. 垃圾回收
  9. 两个list快速去重。(其实是一个排序问题)1. 挨个比(蠢), 对于实现comparable接口的->2. 二叉搜索树(红黑树,普通二叉搜索树);3. HashMap根据Key散列,value为出现次数, 查找到了就将value+1;4. HashSet
  10. 寻找中位数,寻找第k大的数:利用快速排序中的切分
  11. 有两个线程A和B,如果一个线程要等另一个线程执行完,该怎么做。(Thread.jion()方法)
  12. java 线程有哪些状态,这些状态之间是如何转化的。(新建,运行,等待(有限期,无限期),阻塞,结束)
  13. comparator,comparable(??????编程:java统计一个文本中出现频率最高的20个单词)。

紧急项:

  1. 熟练掌握链表、 树、 栈、 队列和哈希表以及他们的操作,(链表和二叉树),红黑树(一种平衡树)
  2. 查找、 排序算法,了解各种查找和排序算法的基础上, 重点掌握二分查找, 归并排序和快速排序。

  3. session与cookie的原理与比较

  4. 泛型的原理, 泛型的各种写法。
  5. 各种容器的深入研究
  6. 求最长子串:动态规划
  7. 各种排序与查找
    1. 快速排序
    2. 堆排序
    3. 归并排序
    4. 选择排序
    5. 插入排序
    6. 二分插入排序
    7. 希尔排序
    8. 冒泡排序
  8. Java的内存模型与垃圾回收
  9. Top k (调用基于堆实现的优先队列)
  10. 数据库
  11. 熟悉的设计模式 ??(重点掌握单例模式, 工厂模式和观察者模式)
  12. 线程安全,线程的状态,线程池
  13. gc算法
  14. finally是不是一定会执行。
    答:不是,例如内存溢出或者System.exit(0)。
  15. IO,NIO
  16. 多线程
  17. 索引: 为什么索引可以快速检索目标, 数据库中的索引多是利用B树或B+树实现的, 建立的索引数据结构是经过排序的,可以对他进行二分查找。
  18. 接口的作用. extends and implements ?? abstract class
    接口: 1. set of methods.
    2. common functionality among set of classes.

    接口可以被称为完全抽象的类, 因为它并没有提供功能的任何具体实现,而抽象类除了抽象方法和属性外,还可以有具体的实现。

  19. Hashmap与Hashtable的区别:线程安全方面;null作为key值方面;效率方面
  20. Iterable, iterator()
  21. Spring,切面编程(Aspect-oriented programming), 多线程锁, IOC(Inversion of Control),IoC与工厂模式比较。
  22. 迭代器
  23. return的作用
  24. java的监视器模式
  25. final:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象


所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

排序

  1. 选择排序:每次选index右侧集合最小的插入当前index位置,向右(数组尾端)移动index 适用于小数组
  2. 插入排序:适合已经部分有序(倒置少的)的数列。 适用于小数组
  3. 希尔排序:高效算法,不需要理解它的性能。对于各种数组均有较好的表现。 最好手写

  4. 归并排序:将两个有序数组归并成一个更大的有序数组。
    先递归地将它分成两半排序, 然后将结果归并起来。时间:O(N*logN),空间:O(N)
    运用了分治的思想。不适用与小数组

  5. 快速排序:分治的排序算法,将一个数组切分成两个子数组, 将两部分独立地进行排序。如何进行切分是快速排序的关键。每一次切分都是将切分元素j放到了排序的最终位置,且a[lo..j-1]<= a[j] <=a[j+1…hi]
  6. 堆排序:典型用例,基于二叉堆求解Top K问题。

查找

三种经典的数据类型:
1. 二叉查找树:理想状态复杂度为logN,但由于插入可能不平衡,导致最坏结果可能复杂度为N(形成一个链表模式)。
2. 红黑树:平衡树,在插入和删除时保持平衡(通过旋转和改变链接的颜色), 由此实现了查找复杂度为logN. 定义为含有红黑链接并满足下列条件的二叉查找树:
1. 红链接均为左链接。
2. 没有任何一个结点同时和两个红链接相连。
3. 任意空链接到根节点的路径上的黑链接数量相同。
3. 散列表

原创粉丝点击