百度 · 百度云

后端开发一面、二面、三面面经

完整信息

63 条问法 · 56 道题

本篇目录
一面(放松版) 实习 LRU(下来后发现一摸一样的代码在本地可以运行,在如流的编译器不行,下次遇到这种可以申请本地试试) LRU为啥不用单向链表(删除保证o1) 多线程如何改进(syc,reentrantlock,currenthashmap) reentrantlock比起syc的有点在哪(获取线程失败不卡死也就是不会死锁,更灵活可配置,锁中断,锁状态) cas聊聊(乐观锁的实现,重点在于无锁原子化操作) cas出现的问题(aba,单一变量原子性) aba问题有没有什么解决办法呢(版本号/时间戳,比较并且交换的过程不止比较目标值,还比较版本号) update...where name=a,update...where name=b,一个全表扫描,一个走了二级索引原因(a多) 如果这两条update并发执行,发生死锁,什么原因(全表扫描是一行一行锁,锁主键就会隐式锁该行二级索引, 二级索引更新是先锁索引再锁主键) openclaw和agent的区别在哪(前者是后者的实现,本地文件系统操作,im接入,skill优先) 二面(燃尽版)-------------------------------------分割线-------------------------------------------- 实习 explain可以看什么(key,type,row,extra) 走了索引还是慢,什么原因(表太大,回表查询,orderby/groupby没走索引) extra可以看什么(这是个补充信息,看是不是走了索引,索引下推,还是说Using filesort) sql优化手段(建索引,小表驱动大表,分库分表,覆盖索引,关联字段索引) 超大分页怎么解决(利用主键的范围查询,禁止跳超大页码) b+树(层高,范围查询) 如果一个表没有主键id,它有聚簇索引吗(有,默认寻找非空唯一索引,没有的话会创建一个隐藏字段作为聚簇索引) 唯一索引是主键索引吗(nope) 索引下推是啥(走索引的时候顺带着筛选符合要求的结果,避免回表) 索引合并是啥(走多次的单列索引进行交合操作) 索引合并和联合索引哪个效果好(一般是联合索引) 索引失效(最左前缀,计算,优化器判断走全表效果更优) 什么情况下优化器判断走全表效果更优(表的数据量太小,查询数据占比太大需要大量回表,索引选择性不佳) 数据库的隔离性怎么保证(锁,mvcc,隔离级别) 数据库有什么锁(共享锁,排他锁,临键锁,元数据锁,表锁,页锁,行锁) 乐观锁和悲观锁的使用场景(乐观锁读多写少,悲观锁读少写多) 为啥乐观锁适合读多写少(写多的时候,会造成大量的cpu自旋) aba怎么解决(版本号,时间戳) 元数据锁是啥(保护表结构的锁) 元数据锁啥时候用到(修改表结构,执行select/update都会,防止查询的时候表结构改变) 意向锁知道吗(表级别的锁,要加表锁的时候可以快速判断有没有行锁,不需要遍历整个表数据) 临键锁怎么实现的知道吗(锁一般是mysql中定义的结构体实现,由于索引是有序的,直接锁住上一条记录和当前记录的间隙,左开右闭) java垃圾收集器(cms,g1) cms说说(从名字也看的出来标记清除算法,追求最短stw,也容易有内存碎片) g1说说(分Region,标记复制算法,可预测停顿,一般是堆内存>=45%开始标记) g1工作流程(初识标记stw,并发标记,最终标记也就是stw,筛选回收stw) 如果线上服务出现延时比较高的现象,你怎么排查(全局->sql,同步,redis,单点->GC,锁竞争,网络) 访问慢可能会排查线程阻塞,那你怎么排查线程阻塞(jstack打印堆栈线程信息) java的两个集合类的根接口(单列collection,双列map) List下面的实现类(arraylist,linkedlist) ArrayDeque的底层数据结构(数组加上双指针) ConcurrentHashMap里什么时候会用CAS,什么时候会用synchronized(cas在目标桶为空的的时候尝试原子无锁插入,如果不为空那么就syc) java对象的组成结构有哪些(对象头,实例数据,对齐字段) mark word存的啥(hashcode,gcage,锁状态,类型指针) 你刚才说对象头里有哈希值,那是不是每一种锁状态下,对象头里都会存哈希值?(不是,只有无锁才有,才有空间存储) 那你说一说Java锁升级的完整过程。(无锁->单线程获取锁偏向锁,出现竞争升级为轻量级锁,当线程自旋次数过多或者竞争太大改为重量级锁) 对象的哈希值是怎么计算的?(直接生成一个随机数) cpu飙到100%(top,top -hp,jastck配合grep,找到对应的代码) k组反转(秒了) 三面(写题目被拷打版,一个没写对该死)-----------------------------------分割线------------------------------------ 个人情况 mysql的索引锁在哪里(锁在叶子节点的索引字段) 你刚刚说的是逻辑实现,物理实现呢(锁的内存结构体+全局的哈希索引表) 这个全局索引表干嘛的(记录挂在当前索引的锁有哪些) 输入url到返回结果的过程(1 解析URL,2 dns解析获取ip层数据可能是cdn的服务ip,3 arp获取mac地址,4 tcp三次握手,5 tls握手,6 发送根据网络模型构建的http请求报文,按照上述过程反向注意这个步骤cdn的命中, 8 浏览器解析html,如果是接口库数据,交给框架渲染) arp获取的mac地址是服务器的地址吗(下一跳的路由器mac地址) tcp有什么字段(妈的,当时脑子蒙了,一下没答出来。源端口,目标端口,序列号,确认号,标志位) socket的四元组和上面的关系是啥(四元组由tcp头部的端口字段和ip头部的ip字段标识) dns解析一定是基于udp的吗(不一定) 流式传输的实现方式有哪些(websocket,sse,streamablehttp) mysql一定要开启事务才会死锁吗(是的,否则单条sql执行完就释放,不会长时间持有锁) 写一个mysql的死锁(怎么开启事务给忘了。。。) 给个代码优化(其实是写个策略模式,不会) 去掉链表中的重复数(傻逼了有个地方当时没调好) 反问:我都没反问,心态有点炸了,下次面试一定要语速慢一点镇定一点,反问可以问一下万能的ai取代问题
本篇目录
  1. 01
    LRU(下来后发现一摸一样的代码在本地可以运行,在如流的编译器不行,下次遇到这种可以申请本地试试)
  2. 02
  3. 03
  4. 04
    reentrantlock比起syc的有点在哪(获取线程失败不卡死也就是不会死锁,更灵活可配置,锁中断,锁状态)
  5. 05
  6. 06
  7. 07
    aba问题有没有什么解决办法呢(版本号/时间戳,比较并且交换的过程不止比较目标值,还比较版本号)
  8. 08
  9. 09
  10. 10
    openclaw和agent的区别在哪(前者是后者的实现,本地文件系统操作,im接入,skill优先)
  11. 11
  12. 12
  13. 13
    追问
    extra可以看什么(这是个补充信息,看是不是走了索引,索引下推,还是说Using filesort)
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
    如果一个表没有主键id,它有聚簇索引吗(有,默认寻找非空唯一索引,没有的话会创建一个隐藏字段作为聚簇索引)
  19. 19
  20. 20
    索引下推是啥(走索引的时候顺带着筛选符合要求的结果,避免回表)
  21. 21
  22. 22
  23. 23
  24. 24
    什么情况下优化器判断走全表效果更优(表的数据量太小,查询数据占比太大需要大量回表,索引选择性不佳)
  25. 25
  26. 26
    数据库有什么锁(共享锁,排他锁,临键锁,元数据锁,表锁,页锁,行锁)
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
    追问
    元数据锁啥时候用到(修改表结构,执行select/update都会,防止查询的时候表结构改变)
  32. 32
    意向锁知道吗(表级别的锁,要加表锁的时候可以快速判断有没有行锁,不需要遍历整个表数据)
  33. 33
  34. 34
  35. 35
    cms说说(从名字也看的出来标记清除算法,追求最短stw,也容易有内存碎片)
  36. 36
    g1说说(分Region,标记复制算法,可预测停顿,一般是堆内存>=45%开始标记)
  37. 37
  38. 38
    如果线上服务出现延时比较高的现象,你怎么排查(全局->sql,同步,redis,单点->GC,锁竞争,网络)
  39. 39
    访问慢可能会排查线程阻塞,那你怎么排查线程阻塞(jstack打印堆栈线程信息)
  40. 40
  41. 41
  42. 42
  43. 43
    ConcurrentHashMap里什么时候会用CAS,什么时候会用synchronized(cas在目标桶为空的的时候尝试原子无锁插入,如果不为空那么就syc)
  44. 44
  45. 45
  46. 46
    你刚才说对象头里有哈希值,那是不是每一种锁状态下,对象头里都会存哈希值?(不是,只有无锁才有,才有空间存储)
  47. 47
    那你说一说Java锁升级的完整过程。(无锁->单线程获取锁偏向锁,出现竞争升级为轻量级锁,当线程自旋次数过多或者竞争太大改为重量级锁)
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
    你刚刚说的是逻辑实现,物理实现呢(锁的内存结构体+全局的哈希索引表)
  53. 53
  54. 54
  55. 55
    arp获取的mac地址是服务器的地址吗(下一跳的路由器mac地址)
  56. 56
  57. 57
    socket的四元组和上面的关系是啥(四元组由tcp头部的端口字段和ip头部的ip字段标识)
  58. 58
  59. 59
  60. 60
    mysql一定要开启事务才会死锁吗(是的,否则单条sql执行完就释放,不会长时间持有锁)
  61. 61
  62. 62
  63. 63

同作者面经

相关公司