2021 京东最新 Java 面试真题解析,2021Java 开发面试解答
一面问题:MySQL+Redis+Kafka+线程+算法
mysql 知道哪些存储引擎,它们的区别
mysql 索引在什么情况下会失效
mysql 在项目中的优化场景,慢查询解决等
mysql 有什么索引,索引模型是什么
B-树与 B+树的区别?为什么不用红黑树
mysql 主从同步怎么做
乐观锁与悲观锁的区别?
binlog 日志
redis 持久化有哪几种方式,怎么选?
redis 主从同步是怎样的过程?
redis 的 zset 怎么实现的?
redis key 的过期策略
hashmap 是怎样实现的?为什么要用红黑树,而不用平衡二叉树?为什么在 1.8 中链表大于 8 时会转红黑树?HashMap 为什么线程不安全的?
如何实现线程安全的 hashmap?
select 和 epoll 的区别
http 与 https 的区别,加密怎么加的?
raft 算法详细讲解
Kafka 选主怎么做的?
kafka 如何保证生产与消费都是同步的?
kafka 怎么保证不丢消息的
redis 如何保证高可用
算法:剪绳子(贪心或递归解决)
算法:给前序和中序遍历,重建二叉树
二面(volatile+线程+并发+算法+设计模式)
自我介绍
讲讲项目(项目没啥亮点,直接问基础)
volatile 作用?底层实现?禁止重排序的场景?单例模式中 volatile 的作用?
如何构造线程池,它的参数,饱和策略?
公平锁和非公平锁区别?为什么公平锁效率低?
线程都有哪些状态?
线程、进程、协程的区别?
同步队列器 AQS 思想,以及基于 AQS 实现的 lock,。
并发工具类 CountDownLatch、CyclicBarrier、Semaphore 介绍
Execuors 类实现的几种线程池类型,最后如何返回?
手写单例模式
手写消费者生产者模式
算法:反转单链表
算法:给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
三面
这一面,没问啥东西,主要聊人生,和未来 3 年的规划。。。。。。
第二个是字节跳动
一面:算法+数据库+事务+网络
自我介绍
项目介绍(没亮点,还是问基础)
堆排序的原理及时间复杂度,是否稳定,最坏及最坏场景。
Object 类都有哪些方法?
DNS 解析的过程/浏览器输入一个 url,敲下回车后网络的全过程
HTTP 和 HTTPS 的区别
UDP 怎么实现可靠传输
介绍下 https,是如何加密的,加密算法
数据库索引的优缺点,以及什么时候数据库索引失效
事务的隔离级别?
数据库的脏读,不可重复读,幻读
算法:接雨水:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
算法:N 皇后
二面:Kafka+redis+算法
Kafka 的特性?
Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
消费者重平衡(高可用性、伸缩性)
哪些情景下会造成消息漏消费?
如何保证消息不被重复消费(幂等性)
KafkaConsumer 是非线程安全的,那么怎么样实现多线程消费?
Kafka 生产者客户端中使用了几个线程来处理?分别是什么?
消费者与生产者的工作流程:
topic 的分区数可不可以增加?
算法:二叉树中的最大路径和
算法:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
三面:Redis+Spring+Dubbo+算法
redis 的 Zset 怎么实现的?
sentinel 和 cluster 区别和各自适用场景
redis cluster 集群同步过程
redis 单线程为什么快?
mybatis 一级缓存和二级缓存
spring 如何解决循环依赖?
spring AOP 的原理。
spring 的生命周期。
Dubbo 服务暴露和引用过程,负载均衡策略,容错机制在哪里实现的源码
项目中遇到了哪些问题。(抱歉,我的工作就是增删改查,没接触过相关问题)
算法:二叉树的镜像
算法:从上到下打印二叉树
最后瞄一眼腾讯
腾讯这三面下来问的也不少,自求多福吧。
一面
如何设计一个秒杀系统?
一天爬一千万条文章,怎么做设计?怎么并行协调?100 台服务器怎么尽可能负载均衡?
有用过短域名服务吗,能说一下吗?
微服务的特点,如何实现服务发现和负载均衡
如何排查线上问题?(背过,没排过)
贝叶斯的概率学原理
负载均衡的加权轮询算法怎么实现
如果用户量大幅度上涨,如何优化?
paxos 算法(这个算法太难,学的时候就没太理解)
平时都看什么博客,最近看什么书了
二面
自我介绍
项目介绍
redis 的 5 种类型,及其实现原理
如何使用 redis 的 Zset 实现延时队列?
redis 如何实现高可用?
redis 缓存穿透、缓存击穿、缓存雪崩
布隆过滤器的实现
如何保证 mysql 与 redis 的双写一致性?
负载均衡算法有哪些?
服务发现是怎么实现的?
熔断是怎么实现的?
算法:连续子数组的最大和
讲讲分布式 CAP 和 BASE?
什么是强一致性?
分布式事务的解决方案?
TCC(两阶段型、补偿型)
id 生成器如何实现?
如何判断一个图是否有环?
一致性 Hash 算法,及其应用
背包问题
三面
自我介绍
项目介绍
redis 的 zSet 如何实现?
redis 持久化机制。
redis 的 Hash 类型讲解,渐进式 rehash。
HashMap 原理,一个 put 操作,都有什么流程?
nginx 有自己配置过吗(这个是我唯一手动操作过的,这个不是背的)
nginx 的使用场景。
什么是分布式,什么是集群,区别是什么?
在基于 dubbo 的分布式环境中,一般将超时 timeout 设置在 provider 还是 consumer?
dubbo 中负载均衡的策略有哪些?
接口的异步调用?如何设置?运行效果?
谈谈基于 dubbo 的系统中 consumer 集群的解决方案?
mysql 是集群还是单节点?最大连接数,最大的表中数据量大约是多少?
mysql 主从复制主要有哪几种模式?
mysql 索引,B+树,为什么不用红黑树?
数据库垂直与水平拆分怎么做。
分布式 session 设置
IO、BIO、NIO,阻塞与非阻塞的区别?
分布式接口的幂等性设计(不能重复扣付款)
算法:二叉搜索数与双向链表(这个懵了)
算法:最长不含重复字符的子字符串
算法:手写快速排序、插入排序、冒泡排序,并分析时间复杂度和空间复杂度,它们的稳定性
最后我们该如何学习?
1、看视频进行系统学习
这几年的 Crud 经历,让我明白自己真的算是菜鸡中的战斗机,也正因为 Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去 B 站进行学习,B 站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring 源码深度解析:
Mybatis 3 源码深度解析:
Redis 学习笔记:
Spring Boot 核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
评论