zoukankan      html  css  js  c++  java
  • Java面试题总结论(一)-数据结构

    以下面试题都是自己通过大量面试遇到的高频题目,都需要掌握。

    ArrayList和LinkList区别

    ArrayList数组,LinkList双向链表;前者按顺序存储查询速度快,后者增删改速度快。

    HashMap数据结构

    JDK1.7及之前:数组+链表

    JDK1.8:数组+链表+红黑树

    HashMap初始容量是16,默认加载因子为0.75,长度大于等于8链表转红黑树。

    为什么两倍扩容

    扩容、地址变动,可以用与运算替代取模运算。

    为什么大于8转红黑树

    红黑树平均查找长度是log(n),长度为8的时候,平均查找长度为3,如果继续使用链表,平均查找长度为8/2=4

    为什么默认加载因子0.75(达到0.75比例后扩容

    折衷,空间和时间的折衷。

    HashMap线程安全吗?用什么安全

    不安全,线程安全用HashTable或者ConcurrentHashMap

    如何循环HashMap

    • 循环keyset
    • 通过 Map.entrySet().iterator()
    • 通过Map.entryset(很大Map时候用)
    • 通过Valueset

    为什么HashMap线程不安全

    1.7扩容时,同时Rehash形成闭环或数据丢失

    1.8并发put,发生覆盖

    HashMap头插还是尾部插入

    1.8之后尾部插入,防止环化

    String、StringBuffer、StringBuilder区别

    String字符序列不可变,只会被重新指向和销毁。

    StringBuffer是线程安全,通过synchronized实现

    StringBuilder线程不安全

    为什么使用红黑树/B树

    降低树的深度,增加查询效率

    红黑树的算法复杂度

    log(n)

    voletile的作用

    禁止指令重排、缓存一致性协议

    字节流字符流区别

    字节流--传输过程中,传输数据的最基本单位是字节的流。

    字符流--传输过程中,传输数据的最基本单位是字符的流。

    字符只是根据编码集对字节流翻译之后的产物。

    字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。

    字节流默认不使用缓冲区;字符流使用缓冲区。

    字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。

    字节流中输出数据主要是使用OutputStream 完成,输入使的是 InputStream,在字符流中输出主要是使用 Writer 类完成,输入流主要使用 Reader 类完成。这四个都是抽象类。

  • 相关阅读:
    SpringMVC传值、转发、重定向例子
    内存、指针操作函数
    文件、磁盘操作函数
    字符串、数组操作函数 Copy Concat Delete Insert High MidStr Pos SetLength StrPCopy TrimLeft
    Delphi代码模拟“显示桌面”的功能
    SQLite 入门教程(四)增删改查,有讲究
    NET Core
    Publisher/Subscriber 订阅-发布模式
    数据分片
    C#调用Java方法
  • 原文地址:https://www.cnblogs.com/pghcx/p/14657910.html
Copyright © 2011-2022 走看看