探探

一面

项目相关

算法

  1. 输入一个不含相同整数的整数集合,输出所有子集
    输入:[1,2,3]
    输出:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]

  2. 有三十瓶水,十个桶,每个桶能放0-10瓶水,有多少种方案

  3. 一个整数数组,只有一个数字出现一次,其余都是出现两次,找出只出现一次的数字

Java基础

  1. HashMap实现,扩容机制
  2. ConcurrentHashMap 如何实现线程安全

MySQL

  1. B树和B+树区别
  2. 聚簇索引和非聚簇索引的区别
  3. MySQL主从同步如何实现
  4. MVCC有什么作用
  5. 数据库组合索引,最左匹配原则,组合索引B,C,D 查询D,where条件使用B是否会回表

Redis

  1. Redis单线程为何能支撑高并发
  2. Redis string 和 zset的实现
  3. Redis I/O多路复用如何实现

Kafka

  1. Kafka数据索引如何实现
  2. Kafka如何保证高可用

设计题

  1. 设计一个FIFO队列的数据结构(数据类型为整数),有三种操作:push(往队列末位插入一个整数),pop(从队列前面获取一个整数),getMax(查询队列里面最大的整数)
  2. 设计一个朋友圈点赞功能的数据表(不限于MySQL,Redis等)

知乎

一面

项目相关

算法

  1. 给你一个 n * m 的二维整数数组,数字都是大于等于0,现在要你对数组做一种操作,对于所有0,将0所在的行和列全部变为0。要求使用尽量少的空间和时间。

Redis

  1. Redis的数据结构和对应的实现
  2. 跳跃表的底层实现

计算机网络

  1. TCP 的三次握手和四次挥手

二面

算法

  1. 给你一个整数数组,数组中的元素定义一种距离 d[i] 为将数组排序后,该元素移动的距离,现在给你一个K数组,即数组中所有元素的距离d <= k,对这个K数组排序,希望尽量小的时间复杂度。
  1. 给你一个单向链表,给这个链表做K反转,例如 k=3
    1 -> 2 -> 3 -> 4 -> 5 -> 6 反转后为: 3 -> 2 -> 1 -> 6 -> 5 -> 4
    链表长度保证为K的倍数

JVM

  1. JVM内存区域模型,那些为线程私有,线程共享
  2. JVM如何判断对象是否需要回收
  3. 有哪些GC Root
  4. 常见GC收集器
  5. 分代收集是怎么做的,为什么要使用分代收集
  6. 有这样一个场景: 在一个系统中发现CPU飙升到100%,服务一直在运行。如何进行分析