「面试」美团

一面(45min)

  • 项目

  • 怎么解决项目中RPC调用失败

  • 线程池创建方式

    • 有了继承Thread方式,为什么还要使用Runnable/Callable 接口呢?
      • Java不支持多继承(淦,没想起来
  • 介绍一下线程池

    • 参数
    • 几种队列的特点及其使用场景
  • 介绍Redis

    • Redis中高可用机制
    • 选举算法Raft和ZK中的ZAB的区别
  • JDK源码看过吗

    • 介绍一下看过的源码
  • 算法题

    1. 最长回文子串 LeetCode.5

      • 写了中心扩散法
      • 要求优化
    2. 多线程

      public class Foo{
          public void foo(){
              for(int i = 0;i < n; i++){
                  sout();
              }
          }
          public void bar(){
              for(int i = 0;i < n; i++){
                  sout();
              }
          }
      }
      // 两个函数: 一个线程执行foo()函数, 一个线程执行bar()函数
      // 怎么保证 sout() 只被执行 n 次
      
      // 我的思路使用 CountDownLatch, 不知道对不对🙄️
      
  1. 实现LRU LeetCode.146

    • 讲了一下思路

问题复盘

  • 项目不熟悉
    • 项目中的工作不能够清晰完整地表述出来
  • 看源码不仔细,思考不深入
    • 线程池各种队列没有仔细思考过
  • 知识面不够广
    • Raft算法和ZAB算法

二面(40min)

  • metaspace什么时候OOM
    • metaspace装的是什么
  • 类什么时候卸载
    • 所有实例都被回收
    • 对应的ClassLoader已经被回收
    • 该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法
  • MySql建索引
    • 有这么几个sql:
      1. where a = xx
      2. where a = xx and b = xx
      3. Where a =xx and b = xx and c = xx
      4. where c = xx
      5. where b = xx and c = xx
    • 如果业务中有 1. 2. 3,怎么建索引
    • 如果业务中有 4. 5 怎么建索引
    • 如果业务中有 1. 2. 3. 4. 5 怎么建索引
  • MySQL读写分离
    • 如果写(修改)业务很多,会有什么影响吗,怎么解决
    • 读写分离适用场景:读多写少,读少写多,读写相当
  • 最近看的书,收获?
  • 算法:LRU

面试     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

「面试」B站 上一篇
Redis入门 下一篇