背景:硕 2 年 Java 开发
之前面试看了不少牛客的面经,这里记录了最近面试的一些问题,回馈下社区。
(不是全部的面试,只记录了部分)
亚马逊二面
- 项目介绍
- 算法题:平衡二叉树
- 算法题:三角形最小路径(下一层长度大于等于上一层长度)
亚马逊一面
- 项目介绍
- 设计 TinyURL
快手商业化二面
- 设计一个定时触发的生产者消费者
- 给定 log 日志,每行代表用户进入的开始时间和离开时间。统计当天最高的同时在线人数。
- 给定 list,表示 id,可能重复。要求用 stream 实现 list -> map 的转换,map 统计 id 出现的次数。
- shutdown 和 shutdownNow 的区别
- 什么状态的线程可以中断
网易有道二面
- 部门介绍
- 系统设计题:假设有 10-100 万的词条。每天定时更新。要求系统高可用,更新完成时间尽量快。
- 系统设计题:假设客户端有一个大文件与服务端同步。已知文件中某处被修改,请设计一个算法更新被修改的部分。
反问:网易的培养体系
一般性培养:
- 技术上独当一面的能力
- 软技能:对结果负责
再进一步: - 结合个人意愿,提高技术影响力
- 发挥大于 1 的价值
快手一面
- JVM 运行时区域
- 常见的堆内存溢出情况
- JVM 内存分配策略
- FullGC 的触发条件有哪些
- 锁升级的过程
- volatile 如何保证可见性的
- 分布式事务的解决方案
- MySQL 聚簇索引与普通索引的区别
- 为什么要建前缀索引
- B 树和 B+ 树的比较
- 联合索引
- Redis 主从复制的过程
- Redis 跳表的实现
- Redis 实现分布式锁
- Linux 打印文件第 10-20 行
- Linux 查看当前目录大小
- Linux 查看网络端口占用
- 算法题:旋转有序数组的最小值(含重复元素)
京东基础架构三面(8.17)
- 简单介绍下 RabbitMQ
- RabbitMQ 如何保证消息一致性的
- 开启 ACK 后的具体流程是怎样的
- RabbitMQ 如何保证高可用的
- RabbitMQ 集群模式下主宕机了如何选主
- 线上机器 CPU 突然增高如何处理
- 接口不定时出现高时延如何处理
- 处理过哪种线上问题
- 如何加速计算 1+2...+100
京东基础架构二面
- 项目介绍(责任链模式和数据一致性)
- 算法题:在一场活动中,已知参加活动的人数先缓慢增加,达到峰值后再逐渐减少,求峰值
- 算法题:假设有一个接口,QPS 在万级别,每次访问均统计了时延,求时延的 TP99
- 为什么选择消息中间件组
- 介绍下 Redis
- 实习或之前还做过什么项目
BIGO 三面
- 自我介绍
- 项目介绍
- 项目中遇到的技术难题有哪些(线上问题排查)
- Spring AOP 底层实现
- Redis 如何进行容灾
- Redis 哨兵是怎样的一个机制
- 如何评估服务的能力?怎么压测你的服务?
- 出于什么考虑想找一份新工作
- 你希望的工作内容或工作方式?
- 算法题:0-n 中缺失的数字
- 算法题:微信红包算法
- 系统设计:每天 100 万微博的存储系统设计
- MySQL 如何平滑扩展
京东物流二面
- 自我介绍
- 项目介绍
- 项目难点(线上问题排查)
- 消息队列的选型
- Spring AOP 原理和应用
- 链路追踪
- 最近在学什么技术
- Kafka 如何做到高性能
网易有道一面
- 如果因为 MQ 引起的发送失败,怎么处理?
- 消息队列和 HTTP 调用的区别是什么?
- 如果 HTTP 调用也失败了怎么办?
- 消息队列消息堆积了几个小时数据怎么处理?
- 为什么不直接扩展消费端呢?而是引入新的消息队列?
- MQ 有哪些应用场景?这里主要用来解决什么问题呢?
- 网关选型 Zuul 和 Spring Cloud Gateway
- Eureka 服务发现的原理
- 服务发现选型应该要考虑的因素有哪些?
- MySQL 性能优化指什么?
- MySQL 优化的经验或知识?
- 为什么使用索引可以加速查询?
- 为什么 B+ 树和 IO 次数有关系?
- 除了我以上问的,其他觉得有擅长但是没有问到的吗?
- Spring IOC 原理
- Spring 如何解决循环依赖的问题
- 比较熟悉的数据结构有哪些?
- 算法题:判断一个链表是否有环
- 系统设计题:准备一批文本,收集用户的录音。用户获取待读文本,然后提交。要求每个文本只能被读一次,以及统计每个用户读了多少条。
建议:了解用到技术的原理
小马智行一面
算法题:
数据流的中位数,要求提供 add、delete、getMedian 三个接口。
BIGO 二面
- 项目中做的工作包括哪些
- 服务治理做的相关工作
- Eureka 服务发现的主要功能
- Eureka 服务有多少个实例
- Eureka 服务同步每次都是全量吗
- Eureka 服务发现的数据一致性
- Eureka 如何保证数据可靠性,如何确认是一致的
- Eureka 如果实例数太多,会面临同步的问题吗
- Zuul 限流是如何实现的
- 限流是这一层起作用还是下一层起作用
- 为什么要在你这一层去做呢?那如何保护自身呢?
- 限流的实现方式,有哪几种算法
- 时间窗口与令牌桶的对比
- 配置管理是如何实现的
- 应用配置的场景
- 为什么选择 zk 做配置管理
- 为什么不用 zk 做服务注册
- 怎么防止雪崩、服务过载这些
- 网络平时有遇到什么问题吗?
- 服务间调用丢包、传输速度慢,怎么去解决?
- 如何查看连接是否丢包
- 大量的连接导致短暂的瘫痪状态,怎么去解决?
- HTTP 1.0 和 HTTP 2.0 的区别
- HTTP 2.0 做了哪些优化
- 同一个域名复用一个连接是如何实现的?
- Redis 在项目中用在哪里
- Redis 常见的数据结构
- Sorted Set 是如何实现的
- 跳表如何实现 log n 的,跳表的实现原理
- 为什么选择跳表来实现 Sorted Set
- 常见的垃圾回收算法有哪些,各自算法的优缺点
- 算法题:一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序
- follow up:输出一个序列的所有可能的弹出顺序
反问:
- 北京负责的业务?直播业务线、视频业务线、社交软件业务线
- 全球产品与国内的区别?运营形态不一样,文化宗教冲突,跨区服务器
BIGO 一面
- 介绍下项目的大体框架
- 你负责哪几部分
- 流量 QPS 估计
- 网关里的限流、黑白名单这些功能是自带的还是自己实现的
- 有了解过 nginx 吗
- nginx 和 网关的关系是什么
- 服务发现的原理
- Eureka 的容灾
- 自我保护期间请求怎么处理
- 订单的数据一致性如何实现的
- 支付没有通知会怎么处理?
- 详细介绍一下本地消息表
- 服务是分布式多节点的,数据呢?
- 假设数据库分散在全国国内,如何处理请求分布到不同地点的数据库中
- 假设在北京下订单,但是跑到广州还款,如果就近原则的话, 连的数据库就不一样了,怎么处理?
- 能不能用一个策略,某个用户的数据指定到一个库去执行
- Java 8 CompletableFuture 的原理
- Future 的实现原理?Future 有哪些不好的地方
- 集合类型的遍历方式有哪些
- 集合 foreach 的 API用过吗
- LinkedHashMap 和 TreeMap 的区别
- TCP 为什么要四次挥手
- 假设客户端断开连接,服务器不停发数据不断开,这是允许的吗
- 客户端收到 FIN 后回的 ACK 丢了怎么办
- 为什么要等待 2 倍的 MSL 时间
- select、poll 和 epoll 的区别
- NIO 模型
- 简单描述下 Redis
- Redis 的几种常用数据结构
- 如何实现一个分布式的栈
- 算法题:给定一个整数数组 a 和一个哈希表 b,b 指定了 a 中的位置,根据 b 调整 a 的位置,如果 b 中的数字 a 不存在,也需要插入。
美团基础架构二面
- 做服务发现时有遇到什么问题吗?
- Eureka 损失了一致性会带来什么问题呢?
- Eureka 有主吗?怎么实现的同步?如果遇到了不一致的问题,谁说了算?
- 如果多个节点同时尝试注册会有问题吗?
- Eureka 内部采用的一致性算法是什么算法?
- 项目历时时间多久?
- 项目中遇到的技术难题是什么?
- 改进前使用的是什么垃圾收集器?
- 用了 CMS 之后配置了哪些参数?
- 列举常见的一致性算法?
- 介绍 Paxos 原理?缺点是什么?
- 本机宕机了怎么办?消息表会丢失的?
- 数据存在哪里?消息表存在磁盘或者内存还是远程的数据库?
- 本地消息表的缺点和优点是什么?
- 消息系统用的是什么组件?有消息重复的现象?
- jdk1.8默认的垃圾收集器是哪个?
- 看过jdk哪方面的源码?
- 常用的container有哪些?
- HashMap 和 HashTable的区别是什么?
- Spring 的原理是什么?
- 介绍切面的底层实现
- 使用 zk 的时候有遇到什么问题吗?
- 研究最深入的组件是哪个?有哪些看过源码?
- IOC 的本质是什么?
- Mysql 的事物隔离级别有哪几种?有什么区别?
- 有看过 Mysql 的源码吗?
- NIO 了解吗?是什么?
- Linux 有多少种IO模型
- 常用的数据结构有哪些?
- 二叉树里了解哪些?
- 平衡树是用来做什么的?
- B+树的特点是什么?
- 多线程并发的类有哪些?
- 信号量主要用来做什么?
- 编程题: 实现一个读写锁
美团基础架构一面
- 介绍下 JVM 堆栈模型,工作机制
- 哪些资源是线程私有/共有?
- 栈具体在做什么事情?
- 介绍java的线程池的原理和调度机制
- 介绍线程池的拒绝策略
- 如何释放线程池中的线程
- 核心线程数如何释放,可以通过线程空闲时间来控制释放吗?
- shutdown, shutdown now 的区别?
锁 - 常用的锁有哪些?
- synchronized 和 ReentrantLock 的区别?他们需要手动的释放吗?
- 介绍一下乐观锁,缺点是什么?如何保证原子性?
- 常用的垃圾回收算法有哪些?
- 描述新生代的回收过程,EMCC的回收过程?
- 怎么确定对象是否应该被释放?
- 描述NIO的概念
- 内核态IO的复用的机制?
- TCP 如何保证可靠性的?
- HashMap 是如何实现的?
- ConcurrentHashMap 是如何实现的?
- kafka的基本原理和架构?
- 不同的 partition 之间如何容灾备份?
- 同步时 high water
- RabbitMQ 如何实现容灾?
- RabbitMQ 发生脑裂怎么处理?
- 项目中遇到的难点是什么?如果解决的?
- 付款过程中的一致性怎么保证的?
滴滴二面
- JVM 分配内存的过程
- TLAB 的工作机制
- TLS
- CMS 并发收集,如何记录未收集的表
- 算法题:合并 K 个链表
- 算法题:火车排队
- 概率题:圆上任意两个弦相交的概率
- MySQL 平滑迁库
- MySQL 索引
- MySQL 如何建索引
滴滴一面
百度 ACG AI商业平台部一面
- API 是 RESTFul 风格的吗?设计的时候有哪些规则?用户 ID 和订单 ID 会在 url 中吗?
- Hadoop、Spark、Docker 技术熟悉吗?
- 如何查看进程 ID 内有多少线程?
- 查看磁盘信息 df 命令卡住了,如何排查问题?
- 如何查看进程所使用的系统调用?
- 分布式事务,两阶段提交,TCC
- 进程、线程、协程的区别
- 虚拟地址如何转到物理地址
- 进程中的堆区和栈区
- 僵尸进程
- HTTP Get 和 Post 的区别
- HTTP API 如何设计幂等接口
- 如何设计 HTTP 长连接
- http2、http3
- 快排的基本原理
- 数组和链表的区别
- 算法题:反转链表
- 算法题:求二叉树深度
- Redis 项目中的使用
- Redis 分布式锁
- 高并发的时候是怎么处理的?(消息队列、多线程)
- ORM 框架的 SQL 注入是如何解决的
- 事务死锁如何排查?
- 并发更新同一条记录如何解决事务死锁?
- MySQL 乐观锁和悲观锁
- Java 单例模式
- Java 原子操作
反问:
商业平台的难点:
对接存储:hadoop、对象存储 boos
大数据计算:k8s、spark,大批量数据处理
算法
京东基础架构一面
- 研究生阶段研究课题是什么?
- 责任链模式,更新的时候有并发怎么办?
- 责任链模式的动态配置时如何修改的?
- RabbitMQ 发送失败怎么办?
- 消息主键 ID 是一样的,如何去重?
- RabbitMQ 发送重复怎么处理?
- Zookeeper 主要使用什么功能?
- Zookeeper 怎么实现命名服务?
- Zookeeper 怎么实现分布式锁?
- Zookeeper 选主过程
- Zookeeper 是如何避免或处理脑裂的?
- 线上 RabbitMQ 积压如何处理?
- 怎么保证数据一致性的?
- Zookeeper 挂了怎么办?
- MySQL 查询慢怎么优化?
- 什么情况下需要加索引?
- 什么情况下不需要加索引?
- 什么情况下索引不生效?
- binlog 是什么?
- Redis 的数据类型有哪些?除了常用的还有什么吗?
- Redis 的持久化机制
- Redis 的哨兵机制,与 Redis 集群有什么区别
- HashMap 的插入一条数据的过程
- HashMap 分别初始化大小 1k 和 10k,分别放 1k 和 10k 的数据,都会触发扩容吗?
- ConcurrentHashMap 的实现方式,跟 HashTable 有什么区别?
- 线程池的参数和每个参数的含义
- 线程池的工作队列有哪些?如何选择?
- RPC 框架有用过吗?
- 有哪几种垃圾回收器?CMS 和 G1 的区别?
- CMS 的优点有哪些?G1 的优点有哪些?
- 方法区的作用
- JVM 编译优化有哪些
- synchronized 和 volatile 的区别
- synchronized 和 ReentrantLock 的区别
- 常用的设计模式
- JDK 有用到哪些设计模式
- 算法题:1-n 数中找第 k 大的数字。follow up:数据流中取第 k 大呢?
京东物流一面
- 项目中用到的技术架构
- 数据一致性是如何保证的?
- Spring Bean 实例化有哪几种方式?
- Spring 注解这种方式如何使用?
- Spring 注入的方式?
- @Autowired 和 @Resource 区别
- Spring MVC 处理请求的过程,用到了什么设计模式
- 责任链模式和策略模式的区别
- Integer 的缓存范围,这是什么设计模式
- a == 1 为什么会报 NullPointerException
- 二分查找与顺序查找、树查找的比较
- Mybatis 二级缓存原理
- Redis 底层数据结构
- Redis String 类型的最大容量
- Redis 如何实现分布式锁
- XA 事务和 TCC 的区别
- 如何解决 XA/TCC 的单点问题(数据分片)
腾讯-广告后台开发工程师一面
- 自我介绍
- 项目介绍
- 为什么使用消息队列?
- 消息队列选型,用 RabbitMQ 为什么不是 Kafka?(没答好)
- 什么时候出现数据不一致的情况?
- 为什么选择本地消息法做分布式事务?
- 什么是TCC,它的工作过程?
- TCC 和 XA 的区别?
- 如果让你优化XA,你会如何优化?
- 你如何理解高可用性?
- 假设RabbitMQ宕机了,怎么保证服务仍然可用?
- 你们是如何做服务监控的?高可用级别?几个9?
- skywalking 的监控原理
- 为什么用微服务架构?有什么优点?
- 拆分服务模块是如何考量的?
- MySQL 的事务隔离级别?为什么选择这个隔离级别?什么是幻读?
- MySQL 是如何实现事务的四大特性的?
- 简单说下 MVCC 的工作原理。
- synchronized 和 ReentrantLock
- 为什么使用 ReentrantLock 而不是 synchronized?
- synchronized 和 ReentrantLock 性能上的差别?
- 锁升级机制?轻量级锁自旋的过程?
- CAS 还需要获取锁吗?
- 写个单例模式,选一种你觉得最合适的。(静态内部类和懒汉模式)
- 为什么用静态内部类?
- 为什么要加在实例前 volatile 关键字?
- 服务发现为什么用 Eureka?还有哪些实现方案?如何选型?
- SpringBoot 的优势在哪?有哪些功能?
- IOC 和 AOP 简单解释一下
- AOP 的实现原理?动态代理是如何实现的?
全部评论
(16) 回帖