- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
软件工程师面试题目及答案(贴近实战版)
一、编程思维与实战题
1.题目:写一个函数判断字符串是否是有效的IPv4地址,你在项目里遇到过哪些边界情况?
答案:首先得明确IPv4的规则——4个段,每个段0-255,不能有前导零(比如0不行,但可以),不能有非数字字符。
我之前做网关项目时,一开始只判断了“4个段+每个段小于256”,结果踩了两个坑:一是前导零,比如用户输入192.168.010.1,实际应该是无效的,但最初没处理;二是空段,比如192.168..1这种多了个点的情况。
函数逻辑大概是这样(用Python举例):
defis_valid_ipv4(ip):
parts=ip.split(.)
iflen(parts)!=4:
returnFalse
forpartinparts:
#处理空段、非数字
ifnotpart.isdigit():
returnFalse
#处理前导零(长度大于1且以0开头)
iflen(part)1andpart[0]==0:
returnFalse
#处理范围
ifint(part)0orint(part)255:
returnFalse
returnTrue
后来还加了个扩展判断:如果是项目里的内网IP,还要额外校验是否在/8、/12、/16这些段里,避免外部IP伪装成内网IP访问。
2.题目:项目里需要频繁处理“用户ID对应多个订单号”的映射,你会选什么数据结构?为什么?如果订单号需要按时间排序呢?
答案:最开始用哈希表(比如Java的HashMapString,List,key是用户ID,value是订单号列表),因为查用户的所有订单是O(1),符合频繁查询的需求。
但后来产品加了“显示用户最近3个月的订单,按下单时间倒序”,这时候List就不够用了——每次插入新订单要手动排序,查最近的还要切片,效率低。
后来改成了HashMapString,TreeSet,Order类里存订单号和下单时间,重写compareTo方法按时间倒序。这样插入时TreeSet会自动排序,查最近订单直接取前N个就行。不过要注意TreeSet是有序但不允许重复,所以订单号要作为唯一标识(比如在compareTo里先比时间,再比订单号避免重复)。
实际项目里还优化了一点:如果用户订单超过1000条,会把老订单归档到数据库,内存里只存最近3个月的,避免TreeSet太大影响性能。
二、算法与问题解决题
1.题目:怎么找出10GB日志文件里出现次数最多的10个IP地址?内存只有4GB,不能全加载到内存。
答案:这是典型的“大数据量+内存限制”问题,我之前处理过类似的Nginx访问日志分析。
第一步先哈希分片:用IP的哈希值对10取模(比如hash(ip)%10),把10GB日志分成10个小文件(每个约1GB),这样每个小文件里的IP不会重复出现在其他文件里,因为同一个IP的哈希值固定,只会分到同一个文件。
第二步处理单个小文件:对每个小文件,用哈希表(比如Python的dict)统计每个IP的出现次数(key是IP,value是次数),这时候1GB文件里的IP去重后肯定小于4GB,内存够装。
第三步找Top10:每个小文件统计完后,用小顶堆(大小为10)找该文件里的Top10IP——先把前10个IP放进堆,之后每遇到一个IP,若次数比堆顶大,就弹出堆顶,把新IP加入堆,最后堆里就是这个文件的Top10。
第四步合并结果:把10个小文件的Top10汇总,再用一次小顶堆,就能得到整个日志里的Top10IP。
实际操作时还会注意两点:一是日志里可能有脏数据(比如不是IP的字符串),要先过滤;二是用Linux的awk命令先做初步过滤(比如只保留包含“IP:”的行),减少文件大小,比纯Python处理快很多。
2.题目:线上服务突然出现大量接口超时,怎么排查?说下你的实际排查步骤。
答案:我之前做支付服务时遇到过类似问题,当时的步骤是这样:
第一步先看监控(优先看核心指标):打开Prometheus监控,看三个指标——1.接口响应时间P95/P99(是不是
您可能关注的文档
最近下载
- 第25课《人民解放战争》(共21张ppt).pptx
- T梁预制及架设安全专项施工方案.doc VIP
- 四川省成都市武侯区九年级(上)期中化学试卷.doc VIP
- 《浙江省城市轨道交通100kmh AH型电客车架修技术规范》.pdf VIP
- 2025内蒙古锡林郭勒盟正蓝旗招聘社区工作者18人考试备考题库及答案解析.docx VIP
- 杭州西奥电梯有机房客梯使用维护说明书.docx
- 江西中烟工业公司笔试试题2025.docx VIP
- 《GB/T 40484-2021城市轨道交通消防安全管理》.pdf
- 《我是中国公民》教学设计最终版.docx VIP
- 88J14-4(2006) 北京四合院建筑要素图.docx VIP
原创力文档


文档评论(0)