知识体系和面试常见问题解析

技术专家全面讲解知识体系,面试常见问题经验总结,并提供辅导和咨询。

助理老师QQ

服务端面试题

分布式系统

  • 讲讲一致性协议 2PC/3PC/Paxos/Raft/ZAB 的基本原理。
  • 谈谈 CAP 理论以及分布式一致性算法。
  • 谈谈在网络分区情况下的一致性解决方案。
  • 谈谈远程过程调用的缺点。
  • 什么场景下适合在两个系统中采用异步通信机制?
  • 在分布式系统中,如何处理故障?
  • 配置中心如何保证一致性?
  • 什么时候使用 Request/Response 模式,什么时候使用 Publish/Subscribe 模式?
  • 谈谈 MapReduce 的基本原理,写一个简单的 map 和 reduce 的程序。
  • 如何测试一个分布式系统?

Golang

  • Golang GC 的触发时机是什么?
  • Golang 里的逃逸分析是什么?怎么避免内存逃逸?
  • 谈谈 Golang 的 GC 算法。
  • Goroutine 和 kernel thread 之间是什么关系?
  • Goroutine 是怎么调度的?
  • 谈谈 Golang 与 Java 的比较。
  • 对比一下 Golang 和 Java 的 GC。

设计模式

  • 谈谈项目中用到的设计模式和使用场景。
  • 谈谈设计模式的作用。
  • 介绍一下什么是好莱坞原则。
  • 如何处理依赖关系地狱?
  • 介绍一下常见的设计模式。
  • 对比一下组合和继承的优缺点。
  • 谈谈几种常见的工厂模式以及它们的用法。
  • 谈谈对原型模式的理解。
  • 谈谈观察者模式、责任链模式。
  • 谈谈策略模式及其应用场景。
  • 谈谈常用的设计模式,例如装饰者模式、适配器模式、迭代器模式。
  • 谈谈静态代理和动态代理的区别,什么场景使用?
  • 手写单例模式,包括双重检验锁以及静态内部类。
  • 手写工厂模式。
  • 讲讲空对象模式的目的是什么?
  • 谈谈 Reactor 和 Proactor 模式的区别和联系。
  • 结合 Spring 中的 AOP,谈谈代理模式。
  • 结合 SpringMVC,谈谈对 MVC 的理解。

架构设计

  • 什么情况下缓存是没用的,甚至是危险的?
  • 发布/订阅模式有什么缺点?
  • 谈谈对异步化编程的了解。
  • 谈谈紧耦合适合的使用场景。
  • 如何设计一个可扩展性高的系统?
  • 横向扩展和纵向扩展有什么区别?分别在什么场景下使用?
  • 为什么 CGI 的扩展性不好?
  • 为什么事件驱动的架构能提高可扩展性?
  • 性能和可扩展性之间有什么关系?
  • 怎么实现一个限流功能?
  • 限流要做成分布式的,如何实现?
  • 谈谈 CQRS(Command Query Responsibility Segregation),和 CQS(Command-Query Separation)有什么区别?
  • 除了恶意攻击造成的拒绝服务之外,还有哪些设计或者架构上的问题会导致拒绝服务?
  • 谈谈对 Serverless 的理解。
  • 一个业务系统中需要生成全局唯一的递增 ID,并且并发量非常大,可以怎么设计?

Spring

  • 谈谈对 Spring AOP 的理解。
  • 谈谈对 Spring IOC 的理解。
  • 讲讲 Spring Bean 的作用域。
  • Spring 里用了单例 Bean,怎么保证访问 Bean 字段时的并发安全?
  • 讲讲 Spring 事务中的隔离级别。
  • 讲讲 Spring 事务中的事务传播行为。
  • 谈谈 Spring 里的循环依赖问题,以及解决的方案。

Netty

  • 介绍一下 Netty 的核心组件有哪些?分别有什么作用?
  • 讲讲 Netty 的执行流程。
  • NIOEventLoopGroup 默认会起多少线程?
  • 讲一下 Netty 的线程模型。
  • 讲讲 Netty 发送消息的方式。
  • 讲讲 Netty 的粘包/拆包是如何处理的。
  • 讲讲 Netty 支持的心跳类型。
  • 讲一下 Netty 的零拷贝。
  • 讲一下 Netty 的优势。
  • 谈谈 Netty 跟 Java NIO 有什么不同,为什么不直接使用 NIO 库?
  • 讲讲 Netty 的高性能表现在哪些方面?
  • 谈谈 Netty 的应用场景。
  • 讲一下 Netty 和 Tomcat 的区别。

Kafka

  • 谈谈 Kafka 的基本原理和实现要点。
  • 使用 Kafka 和消息队列可以带来哪些好处?
  • 讲讲零拷贝技术,以及在 Kafka 中的使用场景。
  • Kafka 如何判断一个节点还活着?
  • 谈谈 Kafka 保证数据一致性的原理,简单介绍一下 AR、ISR、LEO、HW 的概念。
  • 讲一下 Kafka 文件存储设计的特点。
  • 讲讲分区 Leader 的选举策略。
  • Kafka 数据传输的事务有哪几种?
  • Kafka 消息是采用 Pull 模式,还是 Push 模式?
  • 讲一下 Kafka 的消费者组。
  • 讲讲 Kafka 生产数据时数据的分组策略。
  • Kafka 怎么保证消息的顺序性?
  • 什么情况下会导致消息丢失?什么情况下会导致消息重复消费?
  • Kafka 的消费者如何做消息去重?
  • 谈谈 Kafka 为什么不支持读写分离?
  • ZooKeeper 在 Kafka 中的作用是什么?
  • 如何设置 Kafka 能接收的最大消息大小?
  • 如何设置 Broker 的 Heap Size?
  • 谈谈在哪些场景下选择 Kafka。
  • 谈谈估算 Kafka 集群机器数量的方法。
  • 讲讲监控 Kafka 的框架。
  • 谈谈 Kafka 的调优。

其他常见问题

  • 讲一下 Protobuf 协议的简单原理和使用。
  • 使用哪些原则确定缓存的大小?
  • 实现一个基于 LRU 的本地缓存。
  • 谈谈缓存雪崩和缓存穿透问题,解决方案有哪些?
  • 设计一个缓存系统,以及缓存击穿的解决方案。
  • 谈谈 C10K 和 C10M 问题,以及实现思路。
  • 实现一个可以完成 C10K+ 的 TCP 网络框架。
  • 基于 epoll 实现一个高并发网络框架。
  • 谈谈对微服务架构的理解。
  • 微服务不能做得太“微”,关于这点如何做评估和判断?
  • SOA 和微服务有什么区别?
  • 谈谈微服务架构的优劣。
  • 谈谈对服务治理和服务发现的理解。
  • 介绍一下常用的 MQ,以及各自的使用场景。
  • RPC 框架对比:Netty/gRPC/brpc/Dubbo/Thrift/JSON-RPC。
  • 对比一下 gRPC 和 Thrift,什么时候应该选择 gRPC?什么时候应该选择 Thrift?
  • 讲讲 libevent、libev、libuv 的基本原理和使用。
  • 讲讲微信协程库 libco 的基本原理和使用。
  • 谈谈 Nginx 的基本原理以及负载均衡实现方法。
  • 是否了解惊群问题?Nginx 是如何解决这个问题的?
  • 谈谈 LVS 实现负载均衡的原理。
  • 介绍一下 Prometheus,是否对 prometheus 做过改动?