微软技术面试常见问题及答案.docxVIP

  • 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)

1亿VIP精品文档

相关文档