Java面试 汇总-补充

本文详细探讨了Java中的核心概念,包括HashMap、ConcurrentHashMap与HashTable的比较,以及Collections.sort和Array.sort的排序原理。文章还涉及线程安全、数据结构和算法,如归并排序和TimSort,以及String、StringBuilder与StringBuffer的区别。此外,讨论了数据库的范式、索引结构以及TCP与UDP协议的区别。面试中常见的Java基础、网络、数据库和数据结构问题也在文中进行了阐述。
摘要由CSDN通过智能技术生成

Java基础以及多个比较

  1. Collections.sort排序内部原理
    在Java 6中Array.sort()和Collections.sort()使用的是MergeSort(),而在Java 7中,内部实现变成了TimSort,其对对象间比较的实现要求更加严格。
    MergerSort():归并排序
    TimSort():起源于归并排序和插入排序的混合排序算法
  2. HashMap原理,Java 8 做的改变
    一文读懂HashMap
    从实现结构来讲,HashMap的实现是数据+链表+红黑树(JDK1.8增加了红黑树部分)。
    HashMap最多只允许一条记录的键为null。HashMap为非线程安全。
    ConcurrentHashMap为线程安全。解决碰撞,出现冲突是运用拉链法,将关键词为同义词的节点链接在一个单链表中,散列表长m,则定义一个由m个头指针组成的指针数组T,地址为i的节点插入以T(i)为头指针的单链表中。Java8中冲突的元素超过限制(8),用红黑树替换链表。
    HashMap:数组的默认长度为16,HashTable数组的默认长度是11
    新的Entity插入位置永远在链表的最前面
    null key总是存在放Entity[]数组的第一个位置
    线程安全:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
    链表法
  3. String 和 StringBuilder的区别
    1)可变与不可变:String不可变,每一次执行‘+’都会形成一个新的对象,所以频繁改变字符串的情况中不用String,以节省内存。
    2)是否多线程安全:StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
    StringBuffer和String均是线程安全的。
  4. Vector和ArrayLIst的区别
    1)ArrayList在内存不够时默认是扩展50%+1个,Vector是默认扩展1倍。
    2)Vector是属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。
  5. HashMap与HashTable的区别
    1)历史原因:HashTable继承于Dictonary类,HashMap继承于abstractMap
    2)HashMap允许空的键值对,但最多只有一个空对象,而HashTable不允许。
    3)HashTable同步,而HashMap非同步,效率上比HashTable要高。
  6. ConcurrentHashMap和HashTable的比较(两个线程并发访问map中同一条链,一个线程在尾部
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值