java后端面试题(常用集合极简)

目录

1、Java常用集合分类

Java集合分两大类:单列Collection、双列Map。常用:ArrayList、LinkedList、HashSet、HashMap、ConcurrentHashMap。

2、ArrayList底层原理

底层是动态数组,无参创建默认空数组,首次添加元素初始化容量10;扩容为原容量1.5倍,需数组拷贝,查询快、中间增删慢。

3、new ArrayList(10) 会扩容几次

0次。手动指定初始容量10,直接初始化对应大小数组,不会触发扩容。

4、数组和List的相互转换

数组转List:Arrays.asList();List转数组:集合自带toArray()方法。

5、数组与List转换的相互影响

数组转List:共用内存地址,修改原数组,List会跟着变;List转数组:底层是拷贝新数组,二者相互独立,修改互不影响。

6、ArrayList和LinkedList的区别

  1. 底层:ArrayList是动态数组、内存连续;LinkedList是双向链表、内存不连续。
  2. 效率:ArrayList下标查询快,中间增删慢;LinkedList头尾增删快,随机查询慢。
  3. 内存:ArrayList更省内存;LinkedList需存储双向指针,占用内存多。
  4. 线程:两者均非线程安全。

7、HashMap底层结构(JDK1.8 极简必考)

底层为数组+链表+红黑树。发生哈希冲突挂链表,链表过长且数组容量足够时,转红黑树提升查询速度。

8、HashMap 1.7和1.8核心区别(只背考点)

1.7:只有数组+链表,头插法,并发扩容易死循环;1.8:新增红黑树,改为尾插法,解决死循环问题,性能更好。

9、HashMap默认参数与扩容规则

默认初始容量16,加载因子0.75;元素数量超过容量*0.75触发扩容,每次扩容翻倍。

10、HashMap数组长度为什么是2的幂次

方便用位运算计算下标,效率比取模高;同时让扩容后元素位置计算更简单,减少哈希冲突。

11、HashMap线程安全问题

HashMap全程非线程安全。1.7有死循环、数据覆盖问题;1.8修复死循环,但仍会数据覆盖,并发场景不能用。

12、HashMap和HashTable的区别

  1. HashTable线程安全、HashMap不安全;
  2. HashTable不允许空键值,HashMap允许一个null键;
  3. HashTable扩容2倍+1,HashMap扩容翻倍;
  4. HashMap效率更高。

13、并发安全的Map解决方案

业务并发场景优先使用ConcurrentHashMap,安全且高效;不使用HashTable,锁粒度大、性能极差。

14、HashMap和HashSet的区别

HashMap是键值对集合;HashSet是单值集合,底层依托HashMap实现,存值相当于HashMap的key,自动去重。

15、集合线程不安全的解决方式

  1. 优先定义为方法局部变量,天然安全;
  2. 并发场景使用ConcurrentHashMap等线程安全集合;
  3. 不推荐同步工具类转换,性能差。
相关推荐
杨杨杨大侠8 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
破茧蝴蝶8 小时前
Python分布式爬虫完整教程
开发语言·python
狗凯之家源码网8 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
远离UE49 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience9 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ9 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
栈帧之外10 小时前
【C++】STL之set
开发语言·c++
霸道流氓气质10 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路10 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
catchadmin10 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
开发语言·php