当前位置: 首页 > 面试经验 >

百度后端提前批一面凉经

优质
小牛编辑
64浏览
2024-08-08

百度后端提前批一面凉经

项目拷打

  • 项目中主要负责的模块,在这个项目开发的过程中,你遇到的难点是什么?然后你是怎么解决的?

说了维护设备在线状态,用的redis

疯狂拷打redis

  • 那你们的 Redis 是用的集群还是用的什么?还是自维护的一个?线上使用也是 Redis 单实例这种吗?

单体架构,说的一个

  • 线上用单实例不怕崩了整个服务没法用吗?

就是存在这个问题,但是就是以后就是改成分布式

  • 那你说一下如果让你来改造的话,你如何实现整个服务的高可用?

  • 那是什么原因导致你们想把这个设备在线状态从数据库改到 Redis

  • 那Redis,假如我 Redis 服务挂了 Redis 服务,就如果你用集群或者说涉及到我 Redis 实例迁移,就是需要对 Redis 进行一定时间的停服处理,那在停服这段时间里的这些在线离线状态如何处理呢?

停服处理的话, Redis 它是有那个持久化策略的就可以,如果停服的话就可以通过嗯, RDB 或者是 AOF 来进行恢复。

如果 Redis 不可用的话,就直接通过数据流来判断。就是可以在本地再加一个缓存,然后缓存设备在线状态

  • 你们的设备量大概有多大呀?

mysql拷打

  • 你刚才说你们的 MySQL 会搭了个集群,嗯,处理上亿的数据这块你有哪些了解?就例如说我 MySQL 一个表合理的存储数据量大概是多大

2, 000 万条的样子

  • 一张表,那如果多了应该怎么做呢?

水平分表,说了两个优化

- 联合索引

- 自定义基于时间的分片算法

  • 你刚才说到了你们的优化,那对于例如说我现在 MySQL 有一个 SQL 语句,我知道它比较慢。然后我现在要优化它,那你会怎么去?看应该从哪些方面进行优化。

开始八股烤打

Mysql

1. 手写sql,用户表,然后里边有主键id,有name、有age

  • 表里边所有的用户,他的平均年龄是多大?
  • 统计每个年龄段,按每个年龄分组,然后每个年龄的人数大于 50 个的年龄是哪些

2. 拷打锁和事务

  • 先开启了事务A,在事物 A 里边执行 delete user 里边这个 id = 1 的这条数据我没有提交事务,然后我又开启了事务b,在事务 b 里边我执行update id=1的数据, set name 等张三改成李四,提交事务,这个 update 能不能执行成功?

锁忘得一干二净!!!

说错了,进而引导,问我知道mysql的哪些锁

3. MVCC

  • 我先开启了事务a,开启了之后我什么都没有执行,然后我又开启了事务b,在事务 b 里边更新了id=1的数据,把name从张三改成了李四,然后在事物 b 里边提交了,提交之后回到了事物A。事物 A执行了 select id=1 的数据,他查到的是新数据还是旧数据?

说错了,进而问我MVCC的原理

  • 追问readView的生成时机?
  • 你觉得是哪个隔离级别?是在事务开启的时候生成readView

Redis

  • Redis 这么快的原因?

  • Redis 的数据类型

  • 缓存一个类似于京东、淘宝那种购物车的用户信息,嗯,你会考虑用哪种结构?
  • 具体怎么存储
  • 怎么用redis命令更新购物车

  • 如果我囤这个购物车的数据的这个哈希这个表它满了,需要扩容。如果让你来设计 Redis 的哈希数据类型的扩容,你会怎么考虑?

redis的hash底层是可以用dict和ziplist

其实是想问这两个底层数据结构是怎么扩容的

我说的是dict的渐进式rehash

dict的渐进式rehash的find,insert,update,delete分别先操作新旧哪个hashtable

这里面试官说错了,update/find/delete都会先去看h0,给我绕晕了 redis7.0是这样的

JUC

  • 构建一个线程池,可以指定哪些参数?
  • 现在我创建了一个线程池,核心线程数是 10 个, 最大线程数是 20 个,堵塞队列是 100 个,我现在提交过来 105 个请求。 105 个有哪些任务会被执行?
  • 如果再来 10 个任务呢?

  • 多线程都会遇到线程不安全的问题,一般是怎么解决的?
  • sync的关键字它可以用在哪些地方?
  • synchronize和reentranLock区别

JVM

  • 垃圾回收算法?
  • 垃圾回收器你用过哪些?
  • 你有进行过调优吗?

我说没有!!!!

  • 那假如让你来设置它的几个核心参数,你知道哪些?

我说了堆

  • 你知道堆的大小怎么指定吗?指定的参数?
  • 你们服务中指定的是多大的?

回答默认的大小

  • 默认的大小是多大?
  • 你们的垃圾回收器服务里用的是哪个?

手撕

打家劫舍

复盘总结

  • 底层看是看了,但是还不够细
  • mysql的锁太久没复习了,忘得一干二净
  • 项目问redis崩了怎么办,以后就说做了集群化部署,虽然项目架构还是单体
  • jvm实战调参数,实践一下
  • redis和mysql的底层!!
  • 这个面试官的风格就是全是实际的场景问题,需要真正理解底层才能答出来
  • 不过面试官很有耐心,知道我答错了,会问我原理,慢慢引导,面试体验感还是很不错,也学到了不少
#百度提前批##百度2025校招##秋招##提前批#
 类似资料: