- 1
- 0
- 约6.3千字
- 约 18页
- 2026-02-06 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年互联网工程师面试题及答案
一、编程基础(15分,共5题)
1.1编程题(8分)
题目:请实现一个函数,输入一个正整数n,返回所有小于或等于n的质数的列表。要求时间复杂度不超过O(nloglogn)。
答案:
python
defsieve_of_eratosthenes(n):
ifn2:
return[]
is_prime=[True](n+1)
is_prime[0]=is_prime[1]=False
foriinrange(2,int(n0.5)+1):
ifis_prime[i]:
forjinrange(ii,n+1,i):
is_prime[j]=False
return[ifori,primeinenumerate(is_prime)ifprime]
解析:
采用埃拉托斯特尼筛法,时间复杂度为O(nloglogn)。首先初始化一个布尔数组标记所有数是否为质数,然后从2开始遍历,将每个质数的倍数标记为非质数。最后返回所有标记为质数的数。
1.2编程题(7分)
题目:给定一个字符串s,请找到其中最长的回文子串的长度。可以假设字符串长度不超过1000。
答案:
python
deflongest_palindrome(s):
ifnots:
return0
n=len(s)
dp=[[False]nfor_inrange(n)]
max_len=1
foriinrange(n):
dp[i][i]=True
foriinrange(n-1):
ifs[i]==s[i+1]:
dp[i][i+1]=True
max_len=2
forlengthinrange(3,n+1):
foriinrange(n-length+1):
j=i+length-1
ifs[i]==s[j]anddp[i+1][j-1]:
dp[i][j]=True
max_len=length
returnmax_len
解析:
使用动态规划方法,dp[i][j]表示s[i..j]是否为回文。初始时所有单个字符都是回文,然后检查两个字符的回文情况,最后逐步检查更长的子串。当s[i]==s[j]且s[i+1..j-1]为回文时,s[i..j]也是回文。
二、系统设计(20分,共4题)
2.1系统设计题(5分)
题目:设计一个简单的微博系统,需要支持用户发布微博、关注/取消关注、查看关注列表的动态。
答案:
1.数据模型:
-用户(User):用户ID、昵称、密码、关注列表
-微博(Post):微博ID、用户ID、内容、时间戳、点赞数、转发数
-关注(Follow):用户ID、关注者ID
2.核心功能:
-发布微博:用户可以发布不超过2000字符的微博
-关注/取消关注:用户可以关注或取消关注其他用户
-查看动态:显示用户自己的微博和所有关注用户的最新微博
3.技术选型:
-数据库:MySQL(关系型数据库存储用户和关系),MongoDB(存储微博内容,适合非结构化数据)
-缓存:Redis(缓存用户关注列表、热门微博等)
-API:RESTfulAPI设计
4.性能考虑:
-发布微博时,先写入MongoDB,然后异步更新MySQL
-查看动态时,先从Redis获取关注列表,然后按时间倒序查询微博
-使用分页机制限制单次加载的微博数量
2.2系统设计题(5分)
题目:设计一个高并发的短链接系统,要求生成短链接的请求需要快速响应。
答案:
1.核心功能:
-生成短链接:将长链接转换为固定长度的短链接
-重定向:访问短链接时,将用户重定向到对应的长链接
2.数据模型:
-链接表(Link):主键ID、长链接、短链接、创建时间
3.技术实现:
-短链接生成:使用自增ID的哈希(如base62编码)
-缓存:Redis缓存热点链接,减少数据库查询
-负载均衡:使用Nginx分发请求到多个后端服务
4.高并发方案:
-使用消息队列(如Kafka)处理高并发请求
-数据库读写分离,使用分库分表
-设置分布式锁保证短链接唯一性
2.3系统设计题(5分)
题目:设计一个实时数据监控平台,需要支持百万级设备的数据上报和实时查询。
答案:
1.数据架构:
-数据采集层:使用MQTT协议收集设备数据
-数据存储层:使用Kafka作为消息队列,缓冲数据流
-数据处理层:使用Flink或Spark进行实时计算
-数据存储层:使用InfluxDB或Timesc
原创力文档

文档评论(0)