2026年互联网大厂软件开发岗位面试题精讲_第1页
2026年互联网大厂软件开发岗位面试题精讲_第2页
2026年互联网大厂软件开发岗位面试题精讲_第3页
2026年互联网大厂软件开发岗位面试题精讲_第4页
2026年互联网大厂软件开发岗位面试题精讲_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2026年互联网大厂软件开发岗位面试题精讲一、编程基础与算法(共5题,每题15分,总分75分)1.题目:请实现一个函数,输入一个非负整数`n`,返回其二进制表示中`1`的个数。例如,输入`11`(二进制为`1011`),返回`3`。2.题目:给定一个字符串`s`,请判断它是否是一个有效的括号字符串(只包含`'('`和`')'`,且括号匹配)。例如,输入`"()[]{}"`,返回`true`;输入`"(]"`,返回`false`。3.题目:设计一个LRU(最近最少使用)缓存,支持`get`和`put`操作。`get(key)`返回键对应的值,如果不存在返回`-1`;`put(key,value)`插入或更新键值对,如果缓存已满,则删除最久未使用的项。4.题目:给定一个未排序的整数数组,请实现`topKFrequent(nums,k)`,返回出现频率最高的`k`个元素。例如,输入`[1,1,1,2,2,3]`和`k=2`,返回`[1,2]`。5.题目:请实现一个函数,检查一个链表是否包含环。如果存在环,返回`true`;否则返回`false`。答案与解析1.二进制中`1`的个数答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:使用位运算,每次判断`n`的最低位是否为`1`(`n&1`),然后右移一位(`n>>=1`)。时间复杂度`O(logn)`。2.有效的括号字符串答案:pythondefisValid(s):stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top=stack.pop()ifstackelse'#'ifmapping[char]!=top:returnFalseelse:stack.append(char)returnnotstack解析:使用栈,遍历字符串,遇到右括号时检查栈顶是否匹配。时间复杂度`O(n)`。3.LRU缓存答案: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:self.cache.pop(self.order.pop(0))self.cache[key]=valueself.order.append(key)解析:使用字典存储键值对,列表维护访问顺序。`get`时移动键到末尾,`put`时先删除最久未使用项(如果满)。4.频率最高的k个元素答案:pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):count=Counter(nums)return[numfornum,_incount.most_common(k)]解析:使用`Counter`统计频率,`most_common(k)`返回频率最高的`k`个元素。5.检查链表环答案:pythonclassListNode:def__init__(self,x):self.val=xself.next=NonedefhasCycle(head:ListNode)->bool:slow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:returnTruereturnFalse解析:快慢指针,如果存在环,快指针会追上慢指针。时间复杂度`O(n)`。二、系统设计(共3题,每题25分,总分75分)1.题目:设计一个高并发的短链接系统。输入长链接,输出短链接;访问短链接时解析为长链接。2.题目:设计一个微博系统,支持用户发布、关注、点赞、获取时间线等功能。要求说明数据结构、接口设计及扩展性。3.题目:设计一个分布式限流系统,支持全局限流(如每秒1000次请求),并要求低延迟和高可用。答案与解析1.短链接系统答案:-数据结构:-使用`hash`函数将长链接映射为短链接(如`6位随机字母`),存储在内存(Redis)中。-关联关系:短链接→长链接(数据库或Redis)。-接口设计:httpPOST/shorten?url=LONG_URL→返回SHORT_URLGET/{SHORT_URL}→返回LONG_URL-扩展性:-使用分布式`hash`函数(如Ketama)避免冲突。-监控短链接命中率,定期清理无效链接。2.微博系统答案:-数据结构:-用户:`users`表(`id`,`name`,`follows`)。-微博:`tweets`表(`id`,`user_id`,`content`,`time`)。-关注关系:`follows`表(`follower_id`,`followee_id`)。-接口设计:httpPOST/tweets→发布微博POST/follow/{user_id}→关注用户GET/timeline/{user_id}→获取时间线(分页+关注关系)GET/like/{tweet_id}→点赞微博-扩展性:-微博分页加载(Redis缓存热门用户)。-实时推送:WebSocket或MQ(如Kafka)。3.分布式限流系统答案:-方案:-使用Redis的`RateLimiter`(令牌桶算法)。-每个请求分配`token`,每秒生成1000个`token`。-实现:httpGET/rate_limit→检查token-高可用:-Redis集群部署。-超时处理:请求失败自动重试(如`2次/30s`)。三、数据库与存储(共3题,每题25分,总分75分)1.题目:设计一个电商订单表,包含订单号、用户ID、商品ID、数量、金额、下单时间等字段,并说明索引设计。2.题目:为什么数据库需要主键?如果使用自增ID,会有什么问题?3.题目:设计一个消息队列系统,支持消息发布、订阅、延迟消息和重试机制。答案与解析1.电商订单表设计答案:-字段:sqlCREATETABLEorders(idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINT,product_idBIGINT,quantityINT,amountDECIMAL(10,2),order_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(id),FOREIGNKEY(product_id)REFERENCESproducts(id));-索引设计:-主键索引(`id`)。-聚合索引(`user_id`,`order_time`)用于查询用户订单。-分区索引(按`order_time`分月)。2.主键与自增ID问题答案:-主键作用:-唯一标识记录。-加速JOIN操作。-自增ID问题:-高并发下可能超限。-容易泄露业务逻辑(如订单号)。-分库分表时可能不适用。3.消息队列系统设计答案:-数据结构:-消息:`messages`(`id`,`topic`,`payload`,`delay_time`,`status`)。-订阅:`subscriptions`(`topic`,`consumer_id`)。-功能实现:-发布:写入`messages`,设置延迟时间(如使用RedisTTL)。-订阅:轮询`messages`,匹配`subscriptions`。-重试:失败消息标记,定时重发。四、网络与分布式(共3题,每题25分,总分75分)1.题目:简述TCP三次握手和四次挥手过程,并说明为什么需要重传机制?2.题目:设计一个分布式事务解决方案,支持“两阶段提交”(2PC)或“本地消息表”。3.题题:如何优化分布式缓存的命中率?答案与解析1.TCP握手与挥手答案:-三次握手:1.客户端发送SYN=1,等待服务器确认。2.服务器发送SYN=1,ACK=1,等待客户端确认。3.客户端发送ACK=1。-四次挥手:1.客户端发送FIN=1,进入`FIN_WAIT_1`。2.服务器发送ACK=1,进入`CLOSE_WAIT`。3.服务器发送FIN=1,进入`LAST_ACK`。4.客户端发送ACK=1,进入`TIME_WAIT`后关闭。-重传机制:-可靠传输需要超时重传(ACK丢失时)。2.分布式事务答案:-2PC:1.准备阶段:协调者询问所有参

温馨提示

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

评论

0/150

提交评论