- 0
- 0
- 约5.33千字
- 约 16页
- 2026-03-03 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年微软工程师面试题目
一、编程题(共5题,每题10分,总分50分)
1.题目:
实现一个函数,输入一个字符串,返回该字符串中所有唯一字符的列表(不区分大小写)。例如,输入Hello返回[e,l],输入Program返回[g,m,r,a]。
要求:时间复杂度O(n),空间复杂度O(n)。
2.题目:
给定一个链表,判断链表是否存在环。如果存在,返回环的入口节点;如果不存在,返回null。
要求:不使用额外的空间。
3.题目:
实现一个无重复字符的最长子串查找函数。输入一个字符串,返回其最长无重复字符的子串长度。例如,输入abcabcbb返回3(对应子串abc),输入bbbbb返回1。
要求:时间复杂度O(n)。
4.题目:
设计一个LRU(最近最少使用)缓存系统。支持get和put操作。get返回键对应的值,如果不存在返回-1;put插入或更新键值对,如果缓存容量已满,则删除最近最少使用的项。
要求:get和put操作的时间复杂度均为O(1)。
5.题目:
给定一个非负整数数组,返回一个数组,其中每个元素是原数组中比它大的元素的数量。例如,输入[3,1,4,2]返回[2,3,1,0]。
要求:时间复杂度O(n)。
二、系统设计题(共2题,每题25分,总分50分)
1.题目:
设计一个高并发的短链接生成服务。要求:
-支持高并发访问,每秒处理数千次请求。
-链接长度尽可能短(如6位或8位短码)。
-支持自定义前缀(如`/abc123`)。
-需考虑分布式部署和缓存优化。
-提供幂等性保证(同一请求多次访问返回相同结果)。
2.题目:
设计一个分布式消息队列系统(如Kafka的简化版)。要求:
-支持至少1000个节点的水平扩展。
-保证消息的顺序性(同一生产者发送的消息按发送顺序存储和消费)。
-支持至少一次投递(不保证按序,但至少投递一次)。
-提供消费者确认机制(如ACK)。
-考虑数据持久化和故障恢复方案。
三、数据库与算法题(共3题,每题15分,总分45分)
1.题目:
假设有两个表:
-Users(id,name,city)
-Orders(id,user_id,amount,order_date)
编写SQL查询:返回每个城市的用户平均订单金额(只显示城市和平均金额,金额保留两位小数,城市按字母顺序排列)。
2.题目:
给定一个二维矩阵,其中每个单元格可能是0或1。设计一个算法,找到矩阵中最大面积的“岛屿”(由1组成的连通区域)。例如:
输入:
[
[1,0,1,1,0],
[1,1,0,1,1],
[1,0,0,0,0],
[0,0,0,0,1]
]
输出:4(对应左上角的岛屿)。
3.题目:
实现一个函数,输入一个字符串,返回该字符串的所有排列组合(不重复)。例如,输入abc返回[abc,acb,bac,bca,cab,cba]。
要求:不使用递归。
答案与解析
编程题答案与解析
1.唯一字符列表:
答案:
python
defunique_chars(s):
s=s.lower()
seen=set()
unique=set()
forcharins:
ifcharnotinseen:
seen.add(char)
unique.add(char)
returnlist(unique)
解析:
-将字符串转为小写统一处理。
-使用`seen`记录已遍历的字符,`unique`记录唯一的字符。
-最终返回`unique`的列表。
时间复杂度O(n),空间复杂度O(n)。
2.判断链表环:
答案:
python
classListNode:
def__init__(self,x):self.val=x;self.next=None
defdetectCycle(head):
ifnothead:returnNone
slow,fast=head,head
whilefastandfast.next:
slow=slow.next
fast=fast.next.next
ifslow==fast:
ptr=head
whileptr!=slow:
ptr=ptr.next
slow=slow.next
returnptr
returnNone
解析:
-使用快慢指针判断是否存在环(快指针每次走两步,慢指针走一步,相遇则存在环)。
-相遇后,将慢指针或头节点移动到头,再次相遇的节点即为环入口。
不使用额外空间。
3.最长无重复子串:
答案:
python
deflengthOfLonges
原创力文档

文档评论(0)