一线大厂面试常见Java岗,笔试题+面试题(附答案、避坑指南)

248 阅读5分钟

前言

最近刚结束大厂Java开发岗的面试,从初筛笔试题到终面技术问答,一路踩了不少坑也攒下了满满干货。想着很多同学都在备考Java岗,干脆把回忆版题目+标准答案整理出来,帮大家少走弯路,文末还有面试高频考点总结,建议收藏!

先跟大家说下一些大厂的Java考核特点:笔试题重基础+算法应用,面试则侧重项目实战与底层原理,尤其爱追问JVM、Spring源码和分布式问题。下面直接上干货,题目按“笔试+面试”分类,答案都标好了重点,方便大家针对性复习。

一、常见Java笔试题(含答案)

1. 选择题:下列关于Java中HashMap与ConcurrentHashMap的说法,错误的是?(单选)

◦ A. HashMap线程不安全,ConcurrentHashMap线程安全

◦ B. JDK1.8后,HashMap采用“数组+链表+红黑树”结构

◦ C. ConcurrentHashMap在JDK1.7中使用分段锁,JDK1.8改用CAS+synchronized

◦ D. 两者都允许key为null

答案:D。HashMap允许key为null,而ConcurrentHashMap的key和value都不允许为null,否则会抛出NullPointerException。

2. 编程题:给定一个整数数组,找出数组中两个数之和等于目标值的索引(假设数组中只存在一对符合条件的数,且同一个元素不能使用两次)。 示例:输入nums = [2,7,11,15],target = 9,输出[0,1]

答案

public int[] twoSum(int[] nums, int target) {
    // 用HashMap存储“数值-索引”,避免双重循环,时间复杂度O(n)
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        // 若补数已在map中,直接返回索引;否则存入当前数值和索引
        if (map.containsKey(complement)) {
            return new int[]{map.get(complement), i};
        }
        map.put(nums[i], i);
    }
    // 题目规定存在一对解,此处仅为满足语法
    throw new IllegalArgumentException("No two sum solution");
}

解析:暴力解法(双重循环)时间复杂度O(n²),用HashMap优化后可降至O(n),是面试中推荐的最优解,面试官可能会追问HashMap的containsKey方法底层逻辑。

二、常见Java面试题(高频题+答案)

1.基础原理题:JVM的内存模型分为哪几部分?垃圾回收主要回收哪些区域?

答案:

◦ JVM内存模型(JDK1.8后)分为5部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区(元空间)。

◦ 垃圾回收(GC)主要回收堆区和方法区(元空间),因为这两个区域是线程共享的,内存分配和回收具有动态性;而程序计数器、虚拟机栈、本地方法栈是线程私有,随线程生命周期销毁,无需GC。

2.框架题:Spring中的IOC和AOP分别是什么?AOP的实现原理是什么?

答案

◦IOC(控制反转):将对象的创建、依赖注入交给Spring容器管理,而非手动new对象,降低代码耦合度。比如通过@Autowired注解注入依赖。

◦AOP(面向切面编程):在不修改原有代码的前提下,为方法添加通用功能(如日志、事务、权限校验),核心是“横向切入”。

◦AOP实现原理:基于动态代理。若目标类有接口,用JDK动态代理(生成接口实现类代理对象);若目标类无接口,用CGLIB动态代理(生成目标类的子类代理对象)。

3.项目实战题:你项目中用Redis解决了什么问题?Redis的缓存穿透、缓存击穿怎么解决?

答案

◦ 项目应用:主要用Redis做热点数据缓存(如商品详情)、分布式锁(解决并发下单问题)、计数器(如接口限流)。

◦ 缓存穿透(查询不存在的数据,导致请求直达数据库):①用布隆过滤器过滤不存在的key;②缓存空值(设置短期过期时间)。

◦ 缓存击穿(热点key过期,大量请求同时打向数据库):①热点key永不过期;②加互斥锁(如Redis的setNx),保证同一时间只有一个请求查数据库并更新缓存。

三、面试避坑&备考建议

1. 避坑点:回答问题时别只说“是什么”,要结合“为什么”和“怎么用”。比如被问HashMap,别只说结构,要提线程安全问题、扩容机制,最好能举项目中用HashMap的场景。

2. 备考重点:某某公司对“底层原理”考察很深,建议重点复习:JVM(GC算法、类加载机制)、集合(HashMap/ConcurrentHashMap源码)、Spring(IOC/AOP源码、事务传播机制)、分布式(Redis缓存问题、分布式事务)。

3. 算法准备:笔试题常考数组、链表、哈希表相关算法,LeetCode上可以刷“热题100”中的对应题型,保证写代码时能bug-free。

篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题& 宫中 hao 小琪码料库

需要全套面试笔记及答案【sou】  【小琪码料库】 供中hao         即可免费获取

image.png image.png image.png

最后想说,一线大厂的Java面试不只是考知识储备,更看重解决问题的思路。大家刷题时别死记答案,要理解背后的逻辑,面试时才能从容应对追问。祝大家都能拿到心仪的offer!