[面试准备]JAVA基础

129 阅读4分钟

对象序列化

  1. 什么是序列化
    序列化就是把对象转化为字节序列的过程,实质上就是一个byte[]数组。

  2. 为什么需要序列化 网络传输用,包括文本、图片、音频和视频等,在网络上都是以字节序列的形式传输。

  3. 怎么序列化
    实现serializable接口或者Externalizable,区别是前者是自动序列化,后者是手动序列化。

    1. 什么是serialVersionUID常数
      唯一标识可序列化类的版本。
    2. transient
      修饰无需序列化的属性(只可以修饰属性不可以修饰方法和类)

反射机制

  1. 反射的原理

    反射机制详解

  2. 反射如何打破单例模式,如何防止这种情况

    单例模式大全

  3. 单例模式有哪几种写法

    单例模式大全

代理

  1. 反向代理

    正向代理和反向代理的区别

  2. Nginx(反向代理服务器)

    8分钟带你深入浅出搞懂Nginx

  3. 代理模式
  4. 静态代理和动态代理

    动态代理机制详解

  5. 负载均衡

    几种简单的负载均衡算法及其Java代码实现

JAVA基础

  1. java对象在内存的结构

    Java对象在内存的结构

  2. 装箱和拆箱

    深入剖析Java中的装箱和拆箱
    需要注意,Integer装箱的时候,在value处于[-128,127]时,会直接取IntegerCache缓存的数据。

  3. Integer的取值范围

    Integer的取值范围

  4. java中负数的表示方式

    java原码、补码、反码总结

  5. byte的取值范围为什么是-128~127

    byte的取值范围为什么是-128~127

  6. ArrayList相关

    1. 初始容量:10,在new的时候只是创建一个空数组,在第一次插入时,才分配空间。
    2. 扩容容量:当前容量 1.5 倍,如果扩容1.5倍不够,那么扩容到预计容量。
    3. 先扩容,再插入
    4. 适用于查询多的场景,插入头部时,性能没有linkedlist好,如果每次都插入尾部或者中后部,其实插入性能也尚可。
    5. failFast机制:用modCount记录修改的次数,在迭代器里使用,起到了乐观锁的作用,如果不匹配的话,抛出异常。
  7. LinkedList相关

    1. 保留了head和tail节点
    2. 插入和删除比较方便
    3. 但是整体内容空间大于数组,因为保存了pre和next节点
    4. 同样支持failFast机制
    5. 无需考虑扩容
    6. 支持Deque,支持队列,队列的方法,offer、peek、poll等
  8. ArrayList和LinkedList的异同

    一篇文章搞定ArrayList和LinkedList所有面试问题

    • ArrayList:底层是Object数组实现的:由于数组的地址是连续的,数组支持O(1)随机访问;数组在初始化时需要指定容量;数组不支持动态扩容,像ArrayList、Vector和Stack使用的时候看似不用考虑容量问题(因为可以一直往里面存放数据);但是它们的底层实际做了扩容;数组扩容代价比较大,需要开辟一个新数组将数据拷贝进去,数组扩容效率低;适合读数据较多的场合
    • LinkedList:底层使用一个Node数据结构,有前后两个指针,双向链表实现的。相对数组,链表插入效率较高,只需要更改前后两个指针即可;另外链表不存在扩容问题,因为链表不要求存储空间连续,每次插入数据都只是改变last指针;另外,链表所需要的内存比数组要多,因为他要维护前后两个指针;它适合删除,插入较多的场景。另外,LinkedList还实现了Deque接口。
  9. hashMap原理

    1. 初始容量:16,如果传入的不足16,取最近的2的幂

    2. hash和rehash

    3. 多线程下死锁问题

      hashmap为啥使用尾插

    4. 和hashtable的区别

    5. 和concurrentHashMap的区别

    6. DOS攻击

      hash Collision DoS 攻击

    7. 解决hash冲突的方法

      数据结构与算法:hash冲突解决

      • 开放定址
      • 再hash
      • 拉链
      • 建立公共溢出区
  10. concurrentHashMap从1.7到1.8的演进
    从ConcurrentHashMap的演进看Java多线程核心技术

  11. B/B+树
    平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了
    B树和B+树的插入、删除图文详解
    为什么Mongodb索引用B树,而Mysql用B+树