福建电子口岸Java开发面试
《面试题目》
- 项目介绍
- 2 核 4G 的服务器 JVM 该怎么调,调多少?
- 垃圾回收的英文是什么,GC 是什么?
- Java 的集合都有哪几种?
- LinkedList 的底层数据结构是什么?
- 开发中什么场景下需要选择 List 这种数据结构?
- HashMap 的扩容因子、扩容机制是怎样的?
- 什么是 IoC 和 AOP?
- 线程池都有哪些配置参数?
- 跨线程要怎么通信?
- 数据库索引都有哪几种?
- 一张表里面一定要有哪几种索引?
- RabbitMQ 是怎么保证消息可靠的?
- ELK 是什么东西,有搭过吗?
- 你是怎么做幂等的?
- 有没有接触过 OLAP?模型是部署到云上还是自己的电脑?
《参考解析》
-
2核4G JVM调优:建议堆内存
-Xms1g -Xmx2g(留 2G 给 OS 和非堆),新生代约 512m(-Xmn512m)。垃圾回收器选 G1(JDK 9+默认)或 CMS(老项目)。线程数设为 2×CPU核数,设-XX:+HeapDumpOnOutOfMemoryError便于 OOM 排查。 -
HashMap 扩容机制:初始容量 16,负载因子 0.75,当
size > capacity × 0.75时触发扩容,容量翻倍并 rehash(JDK 1.8 优化:高低位拆分,不需重新计算 hash)。扩容是 O(n) 操作,频繁扩容影响性能,初始化时应预估容量(new HashMap<>(expectedSize / 0.75 + 1))。 -
RabbitMQ 消息可靠性:三个环节保障:①生产者确认(publisher confirm + return 机制,确保消息到达 Exchange 和 Queue);②持久化(Exchange、Queue、Message 均设 durable/persistent);③消费者确认(手动 ACK,消费成功后
basicAck,失败后basicNack重回队列或入死信队列)。 -
幂等设计:常见方案:①唯一索引(DB 层面 insert ignore);②Redis
SET key NX EX分布式锁;③业务状态机(检查状态是否已处理);④Token 机制(客户端先获取 token,提交时带 token,服务端原子验证并删除)。选择依据:操作频率低→DB 唯一索引;高并发→Redis;支付类→状态机 + 幂等表。 -
ELK 架构:Elasticsearch(存储与搜索)+ Logstash(日志采集与过滤)+ Kibana(可视化)。实践中常用 Filebeat 替换 Logstash 做采集(轻量),Logstash 做聚合过滤。应用日志通过 Filebeat → Kafka 缓冲 → Logstash → ES → Kibana 监控。