• 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 类完成。这四个都是抽象类。

  • 相关阅读:
    使用JRadioButton 示例
    使用JTextArea示例
    python与c语言的区别以及python的小小基础
    Linux常用的服务器构建
    在VMware虚拟机软件中安装的Ubuntu虚拟机的窗口不能自动调整大小的解决办法
    Ubuntu 下环境搭建系列 —— 安装 Google Chrome
    Linux命令复习和练习_03
    Android hybrid App项目构建和部分基本开发问题
    Ionic Framework
    node.js代理设置
  • 原文地址:https://www.cnblogs.com/pghcx/p/14657910.html
Copyright © 2020-2023  润新知