SDE八股文背熟就是Offer收割机
北美SDE面试八成都是固定套路,掌握这些八股文就能稳过技术关。
Q: What is the time complexity of HashMap operations? A: 平均情况下get、put、remove都是O(1),最坏情况是O(n)。HashMap用数组加链表实现,当hash collision太多时链表会转成红黑树来优化查找性能。load factor默认是0.75,超过这个值会触发resize操作。
Q: Explain the difference between ArrayList and LinkedList A: ArrayList底层是动态数组,随机访问是O(1),但插入删除中间元素需要移动其他元素所以是O(n)。LinkedList是双向链表,插入删除是O(1),但访问特定位置需要遍历所以是O(n)。内存使用上ArrayList更紧凑,LinkedList每个节点都有额外的指针开销。
Q: How does garbage collection Work in Java? A: Java的GC主要有三个步骤:标记、清除、压缩。标记阶段从GC roots开始遍历所有可达对象,清除阶段回收不可达对象的内存,压缩阶段整理内存碎片。常见的GC算法有Serial GC、Parallel GC、G1 GC等,每种都有不同的适用场景。
Q: What is the difference between process and thread? A: Process是操作系统资源分配的基本单位,每个process都有独立的内存空间。Thread是CPU调度的基本单位,同一个process内的threads共享内存空间。Process间通信需要IPC机制,thread间通信可以直接访问共享内存但需要考虑同步问题。
Q: Explain Database ACID properties A: Atomicity保证事务要么全部成功要么全部失败,Consistency保证数据库从一个一致状态转换到另一个一致状态,Isolation保证并发事务不会互相干扰,Durability保证已提交的事务永久保存。实现方式包括undo/redo log、锁机制、MVCC等。
Q: What is the difference between SQL and NoSQL databases? A: SQL数据库使用关系模型,支持ACID事务,适合复杂查询和数据一致性要求高的场景。NoSQL数据库包括document、key-value、column-family、graph等类型,通常牺牲一致性换取可扩展性和性能,适合大数据和高并发场景。
Q: How does TCP ensure reliable data transmission? A: TCP通过序列号、确认应答、重传机制、流量控制、拥塞控制来保证可靠传输。每个数据包都有序列号,接收方发送ACK确认,发送方没收到ACK会重传。滑动窗口控制流量,慢启动和拥塞避免算法控制网络拥塞。
Q: What is the difference between HTTP and HTTPS? A: HTTPS是HTTP over SSL/TLS,在HTTP基础上加了加密层。SSL/TLS提供数据加密、身份认证、数据完整性校验。握手过程包括证书验证、密钥交换、加密算法协商。HTTPS默认使用443端口,HTTP使用80端口。
Q: Explain the concept of RESTful API A: REST是一种架构风格,强调资源、统一接口、无状态、可缓存。RESTful API使用HTTP方法(GET、POST、PUT、DELETE)对应CRUD操作,URL表示资源,状态码表示操作结果。设计原则包括资源命名、版本控制、错误处理等。
Q: What is the difference between synchronous and asynchronous programming? A: 同步编程按顺序执行,一个操作完成后才执行下一个,简单但可能阻塞。异步编程可以并发执行多个操作,不会阻塞但复杂度更高。实现方式包括callback、Promise、async/await等。
Q: How does load balancing work? A: Load balancer在多个服务器间分发请求,常见算法有round robin、least connections、weighted round robin、IP hash等。可以在不同层实现:L4基于IP和端口,L7基于应用层内容。还需要考虑健康检查、session affinity、故障转移等。
Q: What is microservices architecture? A: 微服务把大型应用拆分成多个小服务,每个服务独立开发、部署、扩展。优点是技术栈灵活、团队独立、故障隔离。缺点是分布式复杂性、网络延迟、数据一致性。需要考虑服务发现、配置管理、监控、链路追踪等。
Q: Explain caching strategies A: 常见缓存策略有Cache-Aside、Write-Through、Write-Behind、Refresh-Ahead。Cache-Aside应用负责缓存管理,Write-Through同时写缓存和数据库,Write-Behind异步写数据库,Refresh-Ahead主动刷新即将过期的数据。还要考虑缓存穿透、雪崩、击穿等问题。
Q: What is database indexing? A: 索引是数据结构,用来快速定位数据。B+树索引适合范围查询,Hash索引适合等值查询。聚簇索引数据按索引顺序存储,非聚簇索引存储指向数据的指针。索引加快查询但占用空间,影响写入性能。
Q: How does MapReduce work? A: MapReduce分为Map和Reduce两个阶段。Map阶段并行处理输入数据,输出key-value对。Shuffle阶段按key分组排序。Reduce阶段对相同key的values进行聚合。适合大数据批处理,但延迟较高,现在更多使用Spark等框架。
Q: What is the difference between stack and heap memory? A: Stack存储局部变量和函数调用信息,LIFO结构,分配释放很快但空间有限。Heap存储动态分配的对象,空间大但分配释放较慢,需要垃圾回收。Stack overflow通常是递归太深,heap overflow是内存泄漏。
Q: Explain the concept of Big O notation A: Big O描述算法时间或空间复杂度的上界。常见复杂度从低到高:O(1)、O(log n)、O(n)、O(n log n)、O(n²)、O(2^n)、O(n!)。分析时关注最高次项,忽略常数和低次项。用来比较算法效率,选择合适的数据结构和算法。
Q: What is dependency injection? A: 依赖注入是控制反转的实现方式,对象不直接创建依赖,而是通过外部注入。好处是降低耦合、便于测试、提高可维护性。实现方式有构造函数注入、setter注入、接口注入。Spring、Guice等框架提供DI容器。
Q: How does database sharding work? A: 分片是水平分割数据库,把数据分布到多个数据库实例。分片策略有range-based、hash-based、directory-based等。好处是提高性能和可扩展性,缺点是增加复杂性,跨分片查询困难,需要考虑数据重平衡。
Q: What is the CAP theorem? A: CAP定理说分布式系统不能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。网络分区不可避免,所以只能在CP和AP间选择。CP系统保证一致性,AP系统保证可用性。实际系统通常在不同场景下做不同权衡。
