2026年互联网企业面试经验_第1页
2026年互联网企业面试经验_第2页
2026年互联网企业面试经验_第3页
2026年互联网企业面试经验_第4页
2026年互联网企业面试经验_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年互联网企业面试经验一、编程能力测试(共3题,每题10分,总分30分)考察点:基础算法、数据结构、编码能力1.题目:编写一个函数,实现字符串的压缩。输入一个字符串,统计其中连续字符出现的次数,并按“字符+次数”的格式返回压缩后的字符串。如果压缩后的字符串没有比原字符串短,则返回原字符串。示例:输入`"aabcccccaaa"`,输出`"a2b1c5a3"`。答案:pythondefcompress_string(s:str)->str:ifnots:return""compressed=[]count=1foriinrange(1,len(s)):ifs[i]==s[i-1]:count+=1else:compressed.append(s[i-1]+str(count))count=1compressed.append(s[-1]+str(count))compressed_str=''.join(compressed)returncompressed_striflen(compressed_str)<len(s)elses解析:-双指针法:遍历字符串时,记录当前字符的连续出现次数。当遇到不同字符时,将前一个字符和次数追加到结果中,并重置计数器。-时间复杂度:O(n),其中n为字符串长度。-边界处理:空字符串直接返回,单字符字符串压缩后长度不变。2.题目:给定一个无重复元素的数组`nums`和一个目标值`target`,找出数组中和为`target`的三个数,并返回它们的数组。要求返回所有可能的组合,不重复。示例:输入`nums=[2,7,11,15],target=9`,输出`[[2,7]]`。答案:pythondefthree_sum(nums:list,target:int)->list:nums.sort()result=[]n=len(nums)foriinrange(n-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:result.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnresult解析:-排序+双指针:首先排序数组,固定第一个数,然后用双指针查找剩余两个数使和为`target`。-去重技巧:跳过重复的数以避免重复组合。-时间复杂度:O(n²),排序O(nlogn),双指针O(n²)。3.题目:实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。`get(key)`返回键对应的值,如果不存在返回-1;`put(key,value)`插入或更新键值对,如果缓存已满,则删除最久未使用的项。示例:-初始化`capacity=2`-`put(1,1)`→缓存{1:1}-`put(2,2)`→缓存{1:1,2:2}-`get(1)`→返回1-`put(3,3)`→缓存{2:2,3:3}(删除1)答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)==self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)解析:-哈希表+双向链表:哈希表存储键值对,双向链表记录访问顺序。-get操作:找到键后将其移到链表末尾(表示最近使用)。-put操作:如果键已存在则更新,否则判断是否需要删除最久未使用的项。-时间复杂度:O(1)。二、系统设计测试(共2题,每题15分,总分30分)考察点:分布式系统、高并发、数据库设计1.题目:设计一个高并发的短链接生成服务。要求:-支持秒级生成短链接(如`/abc123`)。-高并发下仍能快速响应。-支持链路跳转和统计(点击量、创建时间)。-系统可用性99.9%。答案:核心方案:1.短链接生成:使用自增ID+哈希算法(如Base62编码)将ID转换为短字符串。2.分布式ID生成器:使用Redis或Snowflake算法生成全局唯一ID。3.缓存层:Redis缓存热点短链接,减少数据库查询。4.数据库设计:sqlCREATETABLEshort_links(idBIGINTAUTO_INCREMENTPRIMARYKEY,short_codeVARCHAR(10)UNIQUE,target_urlVARCHAR(2048),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,click_countBIGINTDEFAULT0);5.链路跳转:根据`short_code`查询数据库,更新`click_count`后重定向到`target_url`。6.高可用:使用负载均衡(如Nginx)和多副本部署(如Kubernetes)。解析:-Base62编码:将ID转换为`a-z`、`A-Z`、`0-9`的6位字符串,减少位数。-Redis缓存:热点数据优先加载到内存,降低数据库压力。-分布式ID:避免单点瓶颈,Snowflake算法可生成有序ID。-容灾设计:数据库读写分离,异地多活部署。2.题目:设计一个实时消息推送系统,支持:-用户订阅/退订话题。-新消息时,多用户同时在线时能批量推送。-支持消息离线存储(用户不在线时)。-系统需支持百万级用户。答案:核心方案:1.数据存储:-用户订阅关系:Redis哈希表`subscribers:topic`存储订阅者ID。-消息队列:Kafka或RabbitMQ存储待推消息。-离线消息:Redis列表或数据库表存储未送达的消息。2.推送流程:-用户订阅:向Redis订阅列表追加话题。-发布消息:写入Kafka,生产者按话题分组。-消息消费:消费者组拉取消息,判断用户是否在线:-在线:WebSocket直接推送给客户端。-离线:写入Redis离线列表。-离线重试:定时任务清理过期离线消息,重新入队。3.性能优化:-消息去重:Redis事务保证消息唯一性。-批量推送:按用户群组合并WebSocket消息。解析:-Kafka优势:高吞吐量支持百万级消息分发。-WebSocket长连接:减少HTTP轮询开销。-离线策略:避免消息丢失,但需控制存储时间(如24小时)。-负载均衡:多个消费节点分摊压力。三、综合能力测试(共5题,每题5分,总分25分)考察点:面试技巧、行业认知、问题解决1.题目:你如何评估一个自动化测试用例的有效性?请举例说明。答案:评估指标:-覆盖率:是否覆盖核心业务场景(如支付、登录)。-缺陷检出率:用例失败时是否能定位到实际Bug。-执行效率:执行时间与维护成本是否合理。举例:-无效用例:测试用户名输入emoji字符(边缘场景,低优先级)。-有效用例:测试密码复杂度校验(高频操作,易出错)。解析:自动化测试的核心是“投入产出比”,优先覆盖高价值场景。2.题目:为什么互联网公司喜欢用Redis缓存,而不是直接依赖数据库?答案:Redis优势:-内存存储:读写延迟<1ms,数据库需毫秒级。-原子操作:支持Lua脚本避免并发问题。-数据类型丰富:适用计数、排行榜等场景。数据库适用场景:事务性数据(如订单记录)。解析:缓存是性能优化的关键,但需结合业务场景选择。3.题目:如果发现线上系统响应变慢,你会如何排查?答案:排查步骤:1.监控告警:查看CPU/内存/网络曲线。2.分层定位:-应用层:日志分析(如SQL慢查询)。-中间件:Redis/MQ延迟。-基础设施:负载均衡流量分布。3.工具辅助:-`top`/`dstat`(Linux)。-`zipkin`(分布式链路追踪)。解析:分层排查能快速缩小问题范围。4.题目:假设你负责一个电商秒杀活动,如何避免超卖?答案:技术方案:1.数据库锁:使用`SELECT...FORUPDATE`锁定库存。2.分布式锁:RedisLua脚本保证原子性。3.幂等设计:拦截重复请求(如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论