- 0
- 0
- 约6.33千字
- 约 19页
- 2026-02-13 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年微软技术面试常见问题及答案
一、编程基础与算法(共5题,每题10分)
1.题目:
实现一个函数,输入一个非负整数,返回它的二进制表达式中1的个数。例如,输入`5`,输出`2`(因为`5`的二进制是`101`,有2个`1`)。
答案:
python
defcount_bits(n):
count=0
whilen:
count+=n1
n=1
returncount
解析:
使用位运算,每次右移一位并检查最低位是否为`1`。时间复杂度为`O(logn)`。
2.题目:
给你一个排序数组,其中重复元素可能存在,请找出数组中未出现的最小正整数。例如,输入`[1,2,0]`,输出`3`。
答案:
python
deffirst_missing_positive(nums):
n=len(nums)
foriinrange(n):
ifnums[i]=0ornums[i]n:
continue
ifnums[i]!=i+1:
ifnums[nums[i]-1]==nums[i]:
nums[i]=0
else:
nums[nums[i]-1],nums[i]=nums[i],nums[nums[i]-1]
foriinrange(n):
ifnums[i]!=i+1:
returni+1
returnn+1
解析:
利用数组索引映射,将数字放到其正确的位置(如`1`放到索引`0`),最后遍历未在正确位置的数字。
3.题目:
实现一个无重复字符的最长子串查找函数。例如,输入`abcabcbb`,输出`abc`(长度为3)。
答案:
python
deflength_of_longest_substring(s):
char_set=set()
left=0
max_len=0
forrightinrange(len(s)):
whiles[right]inchar_set:
char_set.remove(s[left])
left+=1
char_set.add(s[right])
max_len=max(max_len,right-left+1)
returnmax_len
解析:
使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界,遇到重复字符时移动`left`。时间复杂度为`O(n)`。
4.题目:
给定一个字符串`s`,判断它是否是`palindrome`(回文字符串)的排列。例如,输入`aabb`,输出`True`(可以重新排列为`abba`)。
答案:
python
defcan_reorder_palindrome(s):
fromcollectionsimportCounter
count=Counter(s)
odd=0
forchar,cntincount.items():
ifcnt%2:
odd+=1
ifodd1:
returnFalse
returnTrue
解析:
回文字符串允许最多一个字符出现奇数次。统计字符频率,检查奇数频率的字符是否超过1个。
5.题目:
实现快速排序算法,并分析其时间复杂度。
答案:
python
defquick_sort(arr):
iflen(arr)=1:
returnarr
pivot=arr[len(arr)//2]
left=[xforxinarrifxpivot]
middle=[xforxinarrifx==pivot]
right=[xforxinarrifxpivot]
returnquick_sort(left)+middle+quick_sort(right)
解析:
快速排序的平均时间复杂度为`O(nlogn)`,最坏为`O(n^2)`(当选择最左或最右为枢轴时)。采用分治策略。
二、系统设计与架构(共3题,每题15分)
1.题目:
设计一个简单的URL短链接服务(如`tinyurl`)。需要支持:
-输入长URL,返回短URL。
-输入短URL,返回长URL。
答案:
核心组件:
1.短ID生成器:使用`base62`编码(`a-z`、`A-Z`、`0-9`),如`100`编码为`1L`。
2.数据库:存储短ID与长URL的映射(如Redis)。
3.API接口:
-`POST/shorten`:接收长URL,生成短ID,存入数据库,返回短URL。
-
原创力文档

文档评论(0)