2025软件工程师面试真题及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

2025软件工程师面试练习题及答案

一、技术基础题

问题1:Java中ZGC如何实现低延迟?与G1相比有哪些关键改进?

ZGC(ZGarbageCollector)是JDK11引入的低延迟垃圾收集器,目标是将停顿时间控制在10ms以内,即使堆内存达到TB级别。其核心实现机制包括:

1.着色指针(ColoredPointers):ZGC将对象地址(64位)的高4位用于存储标记信息(Marked0、Marked1、Remapped、Finalizable),这样标记和重定位操作可以直接在指针上完成,无需额外的记忆集(RememberedSet)或卡表(CardTable)。这种设计使得ZGC在标记和转移阶段无需扫描整个堆,仅需处理活跃对象的指针。

2.并发标记-转移-重定位:ZGC的收集周期分为初始标记(STW,极短)、并发标记、并发预转移、并发转移、并发重定位等阶段。其中,标记、转移、重定位均为并发执行,仅初始标记和最终的引用修正(可能优化为并发)需要STW。与G1的混合收集(部分STW)相比,ZGC的并发程度更高。

3.分页管理(Page):ZGC将堆划分为小页(2MB)、中页(32MB)、大页(动态,用于大对象),通过页级别的转移减少对象移动的开销。而G1基于Region(通常2MB),但需要维护RememberedSet来记录跨Region引用,这会增加写屏障的开销。

关键改进对比G1:

-消除RememberedSet:G1的RememberedSet占用约10%-20%的堆内存,且写屏障复杂度高(需要更新卡表);ZGC通过着色指针避免了这一开销。

-更细粒度的并发控制:G1的混合收集阶段仍有部分STW(如evacuationpause),而ZGC的大部分阶段并发执行,停顿时间与堆大小无关(仅与根集合大小相关)。

-支持更大堆内存:ZGC通过分页和着色指针的地址映射(多重映射),理论上支持4TB甚至更大的堆(取决于操作系统地址空间),而G1在堆超过几十GB时停顿时间会显著增加。

问题2:TCP三次握手时,若第二次握手(SYN+ACK)丢失,会发生什么?如何优化重传机制?

假设客户端(C)向服务端(S)发起连接请求(第一次握手:SYN=1,seq=x),服务端回复SYN+ACK(第二次握手:SYN=1,ACK=1,seq=y,ack=x+1),但该报文丢失。此时:

-客户端未收到ACK,会触发SYN重传(根据RTO,初始RTO通常为1s,指数退避,重传次数默认6次,总时间约1+2+4+8+16+32=63s)。

-服务端在发送SYN+ACK后,会为该连接分配TCP控制块(TCB),并启动超时重传(重传次数默认5次,总时间约1+2+4+8+16=31s)。若超时未收到客户端的ACK(第三次握手),服务端会释放TCB。

优化重传机制的常见方法:

1.动态调整RTO(RetransmissionTimeOut):传统RTO基于往返时间(RTT)的指数加权平均(EWMA),但在高延迟或抖动网络中可能不够准确。现代TCP实现(如Linux的TCPProbe)通过采样多个RTT样本,结合方差计算更精确的RTO,减少不必要的重传。

2.SYNCookie:服务端在第一次收到SYN时不立即分配TCB,而是通过哈希算法(基于源IP、端口、seq等)生成一个“Cookie”作为SYN+ACK的seq值。客户端发送ACK时,服务端验证Cookie有效性后再分配资源,避免SYNFlood攻击,同时减少服务端资源浪费。

3.快速重传与选择确认(SACK):虽然三次握手阶段不涉及数据传输,但SACK机制可应用于后续数据传输,通过接收方告知发送方已接收的字节范围,减少重复重传。例如,若接收方收到乱序报文,可通过SACK通知发送方哪些部分已接收,避免发送方因单个报文丢失而重传大量数据。

问题3:MySQL中,一条慢查询的执行时间为2s,如何定位并优化?

定位与优化步骤如下:

步骤1:确认慢查询基础信息

-开启慢查询日志(slow_query_log=ON),设置long_query_time=1(记录执行时间超过1s的查询),并确保log_queries_not_using_indexes=ON(记录未使用索引的查询)。

-通过EXPLAIN分析该SQL的执行计划,重点关注:

-type:是否为ALL(全表扫描)或range(范围扫描),理想情况为ref或eq_ref。

-key:实际使用的索引,若为NULL说明未使用索引。

-rows:预估扫描的行数,数值越大性能越差。

文档评论(0)

小陈同学 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档