百度面试 2023.02.13

Riicarus大约 4 分钟面经百度面经

百度面试 2023.02.13

2023.02.13 百度一面

  • 自我介绍/项目经历
  • 项目的背景和主要工作, 梳理项目的实现思路
  • Redis
    • Redis 用了哪些数据类型?
    • Redis 持久化策略选型?
    • RDB/AOF 的优点和区别?
    • Redis 缓存击穿/雪崩的防止?
    • 怎样保证数据一致性?
    • 除了先删后改还有什么保证一致性的方法?
  • Kafka 怎样保证整个链路上消息不丢失?(不能只回答 Kafka 的保证)
    • Kafka 本身
    • 消费者手动 ack
    • 生产方 retry + error log 恢复
  • Java JVM 类加载机制和时机?(忘了回答时机了)
    • 回答了三种 ClassLoader 机制 + 小项目使用 URLClassLoader
  • 数据库
    • MySQL 索引和事务的理解?(事务没答好)
    • 说一下 MVCC 的理解和实现?(没看过基本上)
  • 算法
    • LRU 实现, 数据结构和方法
    • 数组, 有正负元素, 求最大子集合(最大的元素和)(动态规划)

面评: 整体还行, 算法和数据结构 + 数据库可以多看看

2023.02.14 百度二面

  • 自我介绍/项目经历
  • MySQL
    • MySQL 索引类型?
    • B+ 树索引的底层详细设计?
    • 为什么使用 B+ 树而不是 B 树?
    • Count(1) 和 Count(*) 的区别?(没区别)
    • 用过多节点数据库部署吗?
  • Redis
    • 项目中 Redis 怎么用的?
    • 验证码用 Redis 什么结构存的?
    • 如果用户数量过多验证码太多怎么办?(hash 大 key 的解决?)
    • 验证码还能用别的方式存吗?
    • 验证码怎么配置过期时间?
    • Hash 能对每个 HK 进行超时处理吗?
    • 原生命令怎么对每个 HK 设置超时?
    • Redis 应用多还是原理了解多?
    • Redis String 的底层原理?
    • Redis String 类型如果存数字是怎么存的? 和 String 有区别吗?
    • Redis 持久化策略?
    • Redis 集群有一个节点挂掉了, 怎样将挂掉节点的数据同步到新增节点上?
    • 备份过程中新增的数据怎样给到新增节点?
  • SpringBoot
    • SpringBoot 实现单例的方法?
    • Enum 类型可以实现单例吗? 是什么原理?
    • SpringBoot 自动注册的机制?
    • itext 是怎么使用的, 商业化线上使用有经过授权吗?(差点出大问题)
  • MQ
    • 用过哪些消息队列?
    • 用 Kafka 的目的是什么?
    • 项目中怎样保证 Kafka 消息时序性?
    • 怎样保证 MQ 严格的时序性?
    • 高并发怎样保证严格时序性, 不能用单个 Partition?
    • 怎样用 Redis 实现消息队列?
    • 不用发布订阅模式怎样实现消息队列?(呆逼答了 zset)
    • 有没有比 zset 更好的实现方式?(答 list)
    • 为什么 list 消耗比 zset 小?
  • Redis
    • Redis 有事务吗?
    • Redis 怎么实现事务的?
    • 命令行里用过 Redis 的事务命令吗?
    • Redis 怎样实现全局锁? (LUA 原子性更改)
    • 多线程读的时候, 上述的操作还是原子性的吗?
    • 进程和线程的区别?(上面对 Redis 进程和线程的了解不够好)
    • Redis 同一 1ms 多个请求的读是多线程还是单线程?
    • 有了解过 setnx 命令吗?(全局锁用这个, 可以看看)
  • 算法
    • 100w 用户, 按年龄排序, age = [1, 100], 时间复杂度 O(n). (复杂度 O(n), 一眼桶排序)

2023.02.16 百度三面

  • 自我介绍
  • 工作室
    • 工作室分享会分享了什么东西?
    • 分享完之后大家的反馈?
  • 三创赛
    • 创意是什么?
    • 创意是谁想出来的?
    • 分工?
  • 编程学了多久?
  • 编程学习经历?
  • 语言
    • Java 和 Go 更擅长哪个? 更喜欢哪个?
    • 为什么 Go 比 Java 简洁?
    • 为什么觉得 Go 更好不去找 Go 的工作而找 Java 的?
  • 项目
    • 命令行插件的初衷是什么? 解决了什么问题?
    • 为什么选择用 Java 写而不是用 Linux 命令行之类的?
    • 命令行写完之后干了些啥? 是只写完就结束了吗?
    • 开源仓库有多少 Star?
    • 平时关注开源项目吗?
    • 项目都是在学校做的吗?
    • 本科还是研究生? 介绍一下工作室?
    • 参与了哪些项目?
  • 场景题:
    • 商品平台, 购买, 库存扣减的设计?
    • 消息队列异步下单处理真的可以提升用户体验吗?
    • 上面的方案下单失败怎么办?
    • 强一致性场景能这么做吗?
    • 怎么改进? 下单过程真的适合做异步吗?
    • 订单和支付的逻辑保证?
    • 到底是先生成订单还是先支付? (先订单再支付)
    • 下单和支付是一个请求还是两个请求?
    • 微服务无法用事务, 怎么解决? (订单状态字段的状态机)
  • 做项目过程中的难题?
    • Shiro 集成 JWT
    • Redis + LUA 实现原子性库存的查询和扣减, Win redis-cli 命令 bug
  • 反问:
    • 面试评价? (评价都分小问题聊到了, 自己觉得咋样?) (答:真实业务考虑不足, 回复: 理解到位)
    • 面试流程, 一共几面? (三面)