随着 Java 技术的发展,以及从业人员专业知识的不断提升,面试的难度也水涨船高越来越难了,所以八股也要与时俱进不断更新,这就是本篇文章诞生的目的之一。
我凭借自身的面试和被面试的经验,以及人工查阅并整理了牛某今年最新的 200 篇面经,总结了这篇文章,所以希望大家不要吝啬手中免费的赞,给作者点一波赞,谢谢了。
整理的部分面经展示:
一、最常见手撕代码题
- 链表判断是否有环(快手、美团、哈啰)
- 反转(区间)链表(猿辅导、美团)
- 合并两个有序链表(小米、滴滴、美团、蘑菇街)
- 二叉树遍历(快手、小米、小红书)
- 单例模式(快手面经多次出现)
- 手撕 LRU(滴滴、美团、阿里巴巴)
- 合并有序数组(美团)
- 快排(快手、百度)
- 两数之和(快手、滴滴、小米)
- 最长回文子串(小米、美团)
- 二叉树公共祖先(快手)
参考答案
1.链表判断是否有环
核心实现思路:使用快慢指针实现。 参考链接:https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9
2.反转(区间)链表
核心实现思路:使用栈反转链表。 参考链接:https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
3.合并两个有序链表
核心实现思路:使用递归或迭代的方式实现。 参考连接:https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/solution/he-bing-liang-ge-pai-xu-de-lian-biao-by-g3z6g/
4.二叉树遍历
- 二叉树中序遍历:https://leetcode.cn/problems/binary-tree-inorder-traversal/solution/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/
- 二叉树前序遍历:https://leetcode.cn/problems/binary-tree-preorder-traversal/solution/er-cha-shu-de-qian-xu-bian-li-by-leetcode-solution/
- 二叉树后序遍历:https://leetcode.cn/problems/binary-tree-postorder-traversal/solutions/431066/er-cha-shu-de-hou-xu-bian-li-by-leetcode-solution/
5.单例模式
双重效验锁的懒汉实现方式:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
6.手撕 LRU
核心实现思路:哈希表 + 双向链表实现。 参考连接:https://leetcode.cn/problems/lru-cache/solution/lruhuan-cun-ji-zhi-by-leetcode-solution/
7.合并有序数组
核心实现思路:双指针,注意一般情况不能使用 Java 内置的方法,比如 Arrays.sort() 合并之后排序实现。 参考连接:https://leetcode.cn/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetco-rrb0/
8.快排
参考连接:https://leetcode.cn/circle/article/kiHnKs/
9.两数之和
核心实现思路:使用暴力枚举或哈希表实现。 参考连接:https://leetcode.cn/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-solution/
10.最长回文子串
核心实现思路:贪心算法。 参考连接:https://leetcode.cn/problems/longest-palindrome/solution/zui-chang-hui-wen-chuan-by-leetcode-solution/
11.二叉树最近公共祖先
核心实现思路:遍历。 参考连接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof/solution/er-cha-sou-suo-shu-de-zui-jin-gong-gong-0wpw1/
二、较常见手撕代码题
- 判断回文字符串:https://leetcode.cn/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/
- 两个字符串的最大公共子字符串:https://leetcode.cn/problems/maximum-repeating-substring/solution/zui-da-zhong-fu-zi-zi-fu-chuan-by-leetco-r4cp/
- 有序链表转换二叉搜索树(快手):https://leetcode.cn/problems/convert-sorted-list-to-binary-search-tree/solution/you-xu-lian-biao-zhuan-huan-er-cha-sou-suo-shu-1-3/
- 两个栈实现队列(字节):https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/mian-shi-ti-09-yong-liang-ge-zhan-shi-xian-dui-l-3/
- 三个线程交替打印ABC(蔚来):https://www.javacn.site/interview/code/weilai_thread.html
- 二分查找(阿里巴巴):https://leetcode.cn/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode-solution-f0xw/
特殊说明
以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:
加我微信咨询:vipStone【备注:训练营】