滴滴、蚂蚁、高德、字节、美团、亚马逊互联网公司面试总结(Java方向)
作者:互联网
面试大厂多了你会发现一个规律,如果一个公司你一面过的很顺利,后面不管三面四面还是五面,都会比较顺利。因为大家的提问方式,角度都很类似,很多时候都是在跟不同的面试官说同样的话。
多数的公司总体上面试都是以自我介绍+项目介绍+项目细节/难点提问+基础知识点考核+算法题这个流程下来的。有些公司可能还会问几个实际的场景类的问题,这个环节阿里是必问的,这种问题通常没有正确答案,就看个人的理解和积累了。剩下的就没啥了,都是换汤不换药。
这篇我主要把常考的问题po一下,频率出现过高的我都用(必考)标注了,答案我也整理了。同时整理也包括一些LeetCode面试高频题的分类整理。
ZooKeeper
1. CAP定理
2. ZAB协议
3. Leader选举算法和流程
Redis
1. Redis的应用场景
2. Redis支持的数据类型(必考)
3. zset跳表的数据结构(必考)
4. Redis的数据过期策略(必考)
5. Redis的LRU过期策略的具体实现
6. 如何解决Redis缓存雪崩,缓存穿透问题
7. Redis的持久化机制(必考)
8. Redis的管道pipeline
Mysql
1. 事务的基本要素
2. 事务隔离级别(必考)
3. 如何解决事务的并发问题(脏读,幻读)(必考)
4. MVCC多版本并发控制(必考)
5. binlog,redolog,undolog都是什么,起什么作用
6. InnoDB的行锁/表锁
7. myisam和innodb的区别,什么时候选择myisam
8. 为什么选择B+树作为索引结构(必考)
9. 索引B+树的叶子节点都可以存哪些东西(必考)
10. 查询在什么时候不走(预期中的)索引(必考)
11. sql如何优化
12. explain是如何解析sql的
13. order by原理
JVM
1. 运行时数据区域(内存模型)(必考)
2. 垃圾回收机制(必考)
3. 垃圾回收算法(必考)
4. Minor GC和Full GC触发条件
5. GC中Stop the world(STW)
6. 各垃圾回收器的特点及区别
7. 双亲委派模型
8. JDBC和双亲委派模型关系
9. JVM锁优化和锁膨胀过程
Java基础
1. HashMap和ConcurrentHashMap区别(必考)
2. ConcurrentHashMap的数据结构(必考)
3. 高并发HashMap的环是如何产生的
4. volatile作用(必考)
5. Atomic类如何保证原子性(CAS操作)(必考)
6. synchronized和Lock的区别(必考)
7. ThreadLocal的原理和实现
8. 为什么要使用线程池(必考)
9. 核心线程池ThreadPoolExecutor的参数(必考)
10. ThreadPoolExecutor的工作流程(必考)
11. 如何控制线程池线程的优先级
12. 线程之间如何通信
13. Boolean占几个字节
14. jdk1.8/jdk1.7都分别新增了哪些特性
15. Exception和Error
16. Object类内的方法
Spring
1. Spring的IOC/AOP的实现(必考)
2. 动态代理的实现方式(必考)
3. Spring如何解决循环依赖(三级缓存)(必考)
4. Spring的后置处理器
5. Spring的@Transactional如何实现的(必考)
6. Spring的事务传播级别
7. BeanFactory和ApplicationContext的联系和区别
消息队列
- 为什么需要消息队列
- Kafka的文件存储机制
- Kafka 如何保证可靠性
- Kafka消息是采用Pull模式,还是Push模式
- Kafka是如何实现高吞吐率的
- Kafka判断一个节点还活着的两个条件
Dubbo
- Dubbo的容错机制
- Dubbo注册中心挂了还可以继续通信么
- Dubbo提供的线程池
- Dubbo框架设计结构
操作系统
- 进程和线程
- 多线程和单线程
- 进程的组成部分
- 进程的通信方式
- 进程间五种通信方式的比较
- 内存管理有哪几种方式
- 页面置换算法
- 操作系统中进程调度策略有哪几种
- 死锁的4个必要条件
- 如何避免(预防)死锁
计算机网路
- Get和Post区别
- Http请求的完全过程
- 计算机网络的五层模型
- tcp和udp区别
- tcp和udp的优点
- 三次握手
- 为什么不能两次握手
- 四次挥手
- 为什么连接的时候是三次握手,关闭的时候却是四次握手
数据结构与算法
- 排序算法
其他
1. 高并发系统的限流如何实现
2. 高并发秒杀系统的设计
3. 负载均衡如何设计
LeetCode题目分类与面试问题整理
题目分类
Hash相关
- q1_两数之和
- q387_字符串中的第一个唯一字符
链表操作
- q2_两数相加
- q19_删除链表的倒数第N个节点
- q25_k个一组翻转链表
- q61_旋转链表
- q138_复制带随机指针的链表
- q206_反转链表
双指针遍历/滑动窗口
- q3_无重复字符的最长子串
- q11_盛最多水的容器
- q15_三数之和
- q16_最接近的三数之和
- q26_删除排序数组中的重复项
- q42_接雨水
- q121_买卖股票的最佳时机
- q209_长度最小的子数组
快慢指针遍历
- q141_环形链表
- q202_快乐数
- q876_链表的中间结点
区间合并
- q56_合并区间
字符串操作
- q6_Z字形变换
- q14_最长公共前缀
- q763_划分字母区间
数字操作
- q7_整数反转
- q8_字符串转换整数
- q9_回文数
- q43_字符串相乘
- q172_阶乘后的零
- q258_各位相加
数组操作
- q54_螺旋矩阵
- q73_矩阵置零
- q78_子集
- q384_打乱数组
- q581_最短无序连续子数组
- q945_使数组唯一的最小增量
栈相关
- q20_有效的括号
- q32_最长有效括号
- q155_最小栈
- q224_基本计算器
- q232_用栈实现队列
- q316_去除重复字母
堆相关
- q215_数组中的第K个最大元素
- q347_前K个高频元素
递归
- q21_合并两个有序链表
- q101_对称二叉树
- q104_二叉树的最大深度
- q226_翻转二叉树
- q236_二叉树的最近公共祖先
- q1325_删除给定值的叶子节点
分治法/二分法
- q23_合并K个排序链表
- q33_搜索旋转排序数组
- q34_在排序数组中查找元素的第一个和最后一个位置
动态规划
- q5_最长回文子串
- q53_最大子序和
- q62_不同路径
- q64_最小路径和
- q70_爬楼梯
- q118_杨辉三角
- q300_最长上升子序列
- q1143_最长公共子序列
- q1277_统计全为1的正方形子矩阵
回溯法
- q10_正则表达式匹配
- q22_括号生成
- q40_组合总和2
- q46_全排列
字典树(前缀树)
- q648_单词替换
树的遍历
- q94_二叉树的中序遍历
- q102_二叉树的层次遍历
- q110_平衡二叉树
- q144_二叉树的前序遍历
- q145_二叉树的后序遍历
二叉搜索树相关
- q98_验证二叉搜索树
- q450_删除二叉搜索树中的节点
- q701_二叉搜索树中的插入操作
标签:遍历,Java,美团,Redis,必考,链表,二叉树,数组,高德 来源: https://blog.csdn.net/Java_aoe/article/details/120635515