美团外卖服务端开发工程师线上面经

  1. 数据库索引了解不,最左前缀原则,行锁,表锁,行锁,间隙锁,怎么实现的,语句
  2. Redis Cluster 是如何进行扩容的?
  3. 如何实现线程调度算法
  4. 让你自己来实现一个带权重的轮询负载均衡,能说说你的思路或者写个伪代码也行。(放弃治疗了,我太菜了)
  5. 数据库中存储密码是怎么存的(MD5加密),还知道其他加密方式吗
  6. 服务提供方不稳定,频繁变动如何提升自身稳定性
  7. redis如何处理分布式服务器并发造成的不一致
  8. 线程池了解吗 线程池大于核心线程的线程怎么销毁的?(然后又扯了半天怎么设计 什么死信队列什么的 开始瞎扯....)
  9. 线程池的五种状态,结合例子说明在什么情况下或使用什么方法进入什么状态
  10. MySQL的ACID讲一下,延伸到隔离级别
  11. 判断是否存在线程竞争,为什么没有,synchronize锁优化
  12. JDK1.7中HashMap的put方法全过程
  13. mysql,接口优化方法,mysql字段默认值不能设置为null,为什么?
  14. 同步IO和异步IO的区别?
  15. HashMap 如果一直 put 元素会怎么样?hashcode 全都相同如何?equals 方法都相同如何?
  16. 讲讲你对 CDN 的了解,与分布式缓存和本地缓存的区别
  17. 线程的状态
  18. dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。
  19. 如何查看服务器负载?

编程题

给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。

返回该 最大总和 。

  • 示例 1: ``` 输入:nums = [1,4,3,2] 输出:4 解释:所有可能的分法(忽略元素顺序)为:
  1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
  2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
  3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4 所以最大总和为 4 ```
  • 示例 2:
    输入:nums = [6,2,6,5,1,2]
    输出:9
    解释:最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9