Software Engineer 面试题
来自各公司指南的代表性 Software Engineer 面试题,按考察点分组。它们是备考示例,不是任何公司经确认的题库。
行为面 (32)
讲讲你曾在分配任务之外主动承担起某个问题的经历。
你能否描述一次你主动负责解决困难技术问题的经历?
请讲述一次你与队友在技术决策上产生分歧的经历。你是如何解决的?
请讲述一次你与团队成员意见不一致的经历,以及你如何达成决策。
请讲述一次你与他人对某项技术决策存在分歧,并帮助解决分歧的经历。
你会如何设计一项服务,使其能够接收突发请求、保证正确性,并在故障时保持可观测性?
请介绍一个你主动负责解决不明确技术问题的项目。
你如何处理与协作者之间的技术分歧,讨论之后发生了什么变化?
你会如何重构这个函数,使其故障处理和测试更加清晰?
请讲述一次对技术方向存在分歧的经历,以及你如何帮助团队作出决定。
请描述一个由你负责、但遭遇意外故障的项目。此后你作出了哪些改变?
请讲述一项由你负责的技术决策,以及你如何评估相互竞争的方案。
请讲述一次你与队友意见不一致,并最终达成决定的经历。
请讲述一次你与团队成员意见不一致,并最终达成决策的经历。
请讲述一次你与队友意见不一致的经历,以及你如何推动工作继续开展。
请讲述一次你主动承担超出既定任务范围的技术问题的经历。
请讲述一次你与队友在技术决策上意见不一致的经历。你是如何推动工作继续进行的?
请讲述一项由你负责的技术决策,以及为该决策提供依据的证据。
请讲述一个你主动负责解决模糊问题的项目。
请讲述一次你与队友意见不一致,并最终达成决定的经历。
请讲述一次你主动承担棘手工程问题的经历。
请讲述一项依靠不同观点之间的协作才得以完成的成就。
请讲述一次你在需求不明确的情况下仍主动承担责任的挑战。
请讲述一次你与队友意见不一致,以及你如何帮助解决分歧的经历。
请描述一个由你负责,但遭遇意外故障的项目。
你为什么希望以软件工程师的身份加入 Boston Consulting Group?
请讲述一次你不同意某项技术决策的经历,以及你是如何处理的。
请讲述一次你与队友意见不一致,以及你们最终如何作出决定的经历。
请讲述一次技术分歧,以及团队如何达成决策。
说说你和同事之间的一次分歧,以及你是如何解决的。
你为什么想加入这个团队,担任这个软件工程师职位?
你曾如何处理一次关于技术方案的分歧?你个人做了什么来推动问题解决?
编程 (28)
对于一段正确但让其他工程师难以维护的代码,你会如何改进?
你会如何检测链表中的环,并解释所用方法的复杂度?
你会如何实现一种具有可预测淘汰行为的缓存,并解释你的设计选择?
你会如何判断一个链表是否存在环,并如何解释时间和空间方面的权衡?
对于能够运行但难以阅读或测试的代码,你会如何改进?
编写一个合并重叠时间区间的函数,并解释其复杂度。
面对不熟悉的代码,你会如何查找并解释性能下降的原因?
对于处理格式错误、重复或延迟输入的代码,你会编写哪些测试?
你会如何测试一个在边界条件下表现不同的函数?
如果一段代码能够正确运行,但其他工程师难以维护,你会如何改进?
对于功能正常但其他工程师难以维护的代码,你会如何改进?
你会对这段代码进行哪些修改,以提高其可读性、正确性和可维护性?
在编写代码前,你会如何澄清模糊的技术需求?
对于功能正确但难以维护的代码,你会如何测试并重构?
你会如何判断链表是否包含环,并会说明哪些取舍?
给定一个功能正常但命名不清晰且存在重复逻辑的函数,你会如何在不改变其行为的前提下改进它?
你会如何判断一个链表是否包含环,又会如何解释其中的取舍?
你会如何在保持行为不变的前提下,重构一个难以阅读的函数?
如果一段代码能够正确运行,但队友很难理解,你会如何改进它?
对于能够运行但其他工程师难以维护的代码,你会如何改进?
如果代码可以正常运行,但其他工程师难以维护,你会如何改进?
你会如何判断链表中是否存在环,并如何解释你的方法?
请逐步说明你会如何改进一段能够运行但难以维护的代码。
对于一个功能正确但难以阅读和测试的函数,你会如何改进?
如果网络结构会不断变化,你会如何设计算法来求最短路径?
如果一个函数在普通用例下都能通过,但在空输入或重复值的情况下失败,你会怎样排查?
你会如何检测链表中的环?你的方法在时间和空间上的开销分别是多少?
在评审一个偶尔会产生重复记录的函数时,你会如何定位原因并确定修复的优先级?
系统设计 (33)
你会如何设计一个存储并读取高频访问对象、且淘汰策略可预测的服务?
你会如何设计一个能在流量增长时保持可用的服务?
你会如何设计一个支持多种投递渠道并能处理故障的通知服务?
你会如何设计一项能够可靠存储和检索用户通知的服务?
你会如何设计一项在依赖项发生故障时仍须保持可用的服务?
请逐步说明针对同一项服务,较简单的设计与扩展性更强的设计之间有哪些权衡。
你会如何设计一个用于排队和处理大型推理请求的服务?
你会如何在延迟、成本、可靠性和一致性之间作出取舍?
你会如何设计一项服务,将传入的请求与可用的服务提供者进行匹配?
你会如何设计一个既能提供个性化内容,又能妥善应对故障的服务?
你会如何设计一个能在流量增长时仍保持快速响应的职业动态信息流?
你会如何设计一个用于存储和检索频繁变化的用户偏好的服务?
你会如何设计一个能够可靠存储和检索大型创意资产的服务?
请设计一个通知服务,并说明你会如何处理发送失败和需求变化。
设计一项服务,使产品库存能在并发更新期间保持一致。
你会如何设计一项服务,在流量不断变化的情况下提供个性化音频推荐?
随着流量增长,你会如何设计一个仍能快速响应的短视频信息流?
你会如何设计一个供团队搜索和更新共享记录的服务?
你会如何设计一项在依赖项发生故障时仍能保持可用的服务?
你会如何设计一项能够接收任务、可靠处理任务并报告任务状态的服务?
你会如何设计一个能够接收任务、异步处理任务并报告其状态的服务?
如果新信息推翻了你在设计中的某项假设,你会如何应对?
你会如何设计一个在组件发生故障时仍保持可用的通知服务?
请描述一个由你负责的系统或功能,以及你如何处理意外问题。
你会如何诊断请求延迟突然上升的问题?
你会如何设计一个能够可靠处理支付事件并从故障中恢复的服务?
设计一个服务,在处理故障的同时让用户数据在多个设备间保持同步。
说说你设计中的权衡取舍,以及你会如何测试它。
你会如何设计一个服务,用来接收设备事件、存储这些事件,并在流量增长时仍支持查询?
如果事件可能延迟到达或被重复投递,你会对这个设计做哪些改动?
你会如何设计一个支持重试且不会产生重复副作用的 Webhook 投递服务?
你会如何设计一个在收集设备遥测数据的同时控制内存使用的服务?
你会如何设计一个预订服务,防止并发请求预订到同一份库存?
技术 (78)
在连接关系会随时间变化的图中,你会如何寻找最短路径?
描述一次你与队友之间的技术分歧,以及你们是如何做出决定的。
对于必须在并发请求下正确运行的方案,你会如何测试?
在关系型与非关系型存储之间作出选择时,你会考虑哪些权衡?
你如何在保持协作的同时处理技术分歧?
你会如何诊断一个在负载下变慢的服务?
在考虑内存使用的情况下,你会如何从一个大型集合中找出重复值?
请描述一个由你负责的项目,从问题尚不明确到最终交付。你从中学到了什么?
在下一份软件工程师工作中,什么能激励你?
在控制内存使用量的同时,你会如何找出大型集合中的重复值?
你会如何测试依赖不可靠外部服务的组件?
你简历中的哪个项目最能体现担当,你本人具体交付了什么?
你会如何选择一种既能快速查找又能控制内存使用的数据结构?
在多个并行进程之间分配工作时,你会考虑哪些权衡?
请描述一个由你负责的项目、你做出的决策,以及你现在会做出哪些改变。
你会如何找到并解释一种高效检测有向图中环的方法?
你会如何判断一个有向图是否包含环,并如何解释其复杂度?
你会如何从大型数据流中查找并删除重复值,同时说明内存方面的权衡?
请描述你与团队成员的一次分歧,以及你们如何达成可行的决定。
随着流量增长,一项服务的速度变慢时,你会如何诊断?
面对大型集合中的重复查询,你会如何找到并说明一种高效的解决方案?
在一致性与可用性之间做选择时,你会考虑哪些权衡?
请描述一个由你负责,但途中遭遇意外挫折的项目。
哪类工程工作最能激发你的热情?哪段经历最能体现这种兴趣?
你会如何判断一个链式结构中是否存在环,并如何解释该方法的复杂度?
请描述一个由你负责,从需求不明确到最终交付的项目。
在同步处理和异步处理之间作出选择时,你会考虑哪些取舍?
你会如何在一个大型集合中查找并删除重复值,同时解释你对复杂度的取舍?
请描述一个由你负责的项目、你作出的权衡,以及你从中学到了什么。
你会如何找出数据流中第一个不重复的字符,又会考虑哪些权衡取舍?
请描述一次你与队友意见不合,并最终达成决定的经历。
你会如何向非技术领域的利益相关者解释复杂的工程权衡?
请描述一个你在分配任务之外主动承担问题责任的项目。
如果团队正在准备发布时出现生产环境问题,你会怎么做?
请描述你与队友之间的一次分歧,以及团队最终如何达成决定。
当初始症状并不完整时,你会如何调查生产环境中的问题?
在控制内存使用量的同时,你会如何找出大型数据流中的重复项?
请描述一次你与合作者意见不一致的经历,以及你们如何达成决定。
当新信息使你原先的技术方案失效时,你会如何应对?
在控制内存使用量的同时,你会如何找出大型数据流中的重复值?
请逐步讲解你的解决方案、复杂度以及你会测试的边界情况。
假设项目临近交付时需求发生变化,你会如何重新评估计划?
在让协作者及时了解情况的同时,你会如何主动负责处理生产环境问题?
在控制内存占用的同时,你会如何找出大型数据流中的重复值?
对于频繁查找和有序遍历,你会选择哪种数据结构?为什么?
你会如何改进这个已能运行的解决方案,以提升可读性、可测试性和性能?
请描述一个有多种合理解决方案的技术问题。你是如何选择处理方法的?
请描述一次你与队友意见不合,并最终达成决策的经历。
你会如何选择一种数据结构来跟踪频繁变化的优先级?
你会如何找出并解释网络中的最高效路径?
在分析可能的解决方案前,你会如何梳理一个模糊的商业问题?
在控制内存使用的同时,你会如何找出大型集合中的重复值?
在关系型数据库和文档数据库之间做选择时,你会考虑哪些取舍?
你会如何在大型集合中找出重复值,又会考虑哪些取舍?
请逐步说明你会如何测试并改进这一实现。
请描述一个由你负责、但需求并不明确的项目。
你会如何在大型数据流中查找重复记录,同时说明时间与空间方面的取舍?
对于容量有限的缓存,你会测试哪些边界情况?
请描述一个你主动承担超出初始任务范围的问题的项目。
你会如何改进这个方案的时间复杂度和空间复杂度?
在一个有难度的项目中,你负责了哪些部分?如果重来你会做哪些改变?
如果要在保留原始顺序的前提下去除重复的事件标识符,你会怎么做?又会如何测试这个方案?
你曾经如何化解与同事的技术分歧?当时是依据什么证据做出决定的?
当你主动承担一个生产环境问题时发生了什么?你又是如何验证修复方案有效的?
在保持内存占用可控的前提下,你会如何为传入事件的去重选择合适的数据结构?
你会如何调整事件聚合器,以处理乱序到达的更新?
当某个测试仅在输入为空时才失败,你会如何在陌生代码库中定位这个缺陷?
在处理超时、格式错误的响应和重试时,你会如何对接一个分页 API?
在保留现有行为的前提下,你会如何重构一个解析器以支持新的输入格式?
在C++中,当缓冲区在组件之间传递时,你会如何明确其所有权?
在编译器发生变更后,你会如何排查性能回退问题?
你是如何解决与另一个团队在技术决策上的分歧的?
当你主导处理一个生产环境问题时,你收集了哪些证据?又是如何验证你的改动确实解决了问题的?
你会如何合并重叠的可预订时间区间,又会测试哪些边界情况?
你会如何在图中寻找最短路径,如果边的权重不同,你的方法又会有何变化?
如果缓存的可预订结果与预订数据库不一致,你会怎么做?
你能描述一次与同事的分歧,并说明你们是如何达成决定的吗?
你主导的某项改动是否曾引发过意料之外的问题,你当时又是如何应对的?