抖音服务端开发工程师面试

  1. 为什么会选择8作为链表转红黑树的阈值?
  2. 说说TCP 协议,三次握手、四次挥手,详细一些,握手过程中可能出什么问题?
  3. 主键索引和普通索引
  4. JVM 垃圾回收机制?CMS 收集器?
  5. 线程池的五种状态,结合例子说明在什么情况下或使用什么方法进入什么状态
  6. 介绍spring的IOC和AOP,分别如何实现(classloader、动态代理)
  7. 假设现在一个学生类,有学号和姓名,我现在hashcode方法重写的时候,只将学号参与计算,会出现什么情况?
  8. get 和post的区别
  9. 说一下快排的过程,写一下伪代码
  10. 如果让你来设计秒杀系统,你的设计思路是什么,为什么要这样设计?
  11. 如果建立一张微博表,该如何建立,主键使用什么类型,微博内容使用什么类型,如何存放表情?如何快速找到一个用户在某个时间段发出的微博?
  12. 微服务架构:dubbo 和 springcloud 的区别,以及各自对应的使用场景。
  13. 简述tcp的三次握手与四次挥手?以及为什么四次挥手会有time_wait状态?
  14. java每改一点都需要重新编译打包部署,有没有更好的方法
  15. 集群和负载均衡的算法与实现?
  16. 简单阐述一下,什么是横向分表,什么是纵向分表,各有什么优缺点?
  17. Netty 的优势在哪?有什么问题吗?
  18. 如果说有一个操作需要创建一个对象,这个对象很大,需要消耗很多资源,如果说每调用一次方法就创建一个对象的话,开销太大,如果把它定义成一个静态变量,又会产生并发问题,那么多线程并发操作的时候就需要加锁,降低效率。怎么优化才能既不用加锁又能提高并发访问的效率?
  19. 线程的程序计数器是干什么用的?

编程题

  • 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

示例 1:

输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]