- 0
- 0
- 约7千字
- 约 23页
- 2026-02-11 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年小米软件工程师面试问题及答案
一、编程基础(5题,每题2分,共10分)
1.题目:
请实现一个函数,输入一个正整数`n`,返回`n`的阶乘。要求使用递归和迭代两种方法实现,并比较时间复杂度。
答案:
递归方法:
java
publicstaticlongfactorialRecursive(intn){
if(n=1){
return1;
}
returnnfactorialRecursive(n-1);
}
迭代方法:
java
publicstaticlongfactorialIterative(intn){
longresult=1;
for(inti=2;i=n;i++){
result=i;
}
returnresult;
}
解析:
-递归方法的时间复杂度为`O(n)`,空间复杂度为`O(n)`(因为递归调用栈的深度为`n`)。
-迭代方法的时间复杂度也为`O(n)`,但空间复杂度为`O(1)`(仅使用常量额外空间)。在`n`较大时(如`n1000`),递归方法可能导致栈溢出,而迭代方法更稳定。
2.题目:
请编写一个函数,判断一个字符串是否为回文串(正读和反读相同)。不使用现成的库函数。
答案:
java
publicstaticbooleanisPalindrome(Strings){
intleft=0,right=s.length()-1;
while(leftright){
if(s.charAt(left)!=s.charAt(right)){
returnfalse;
}
left++;
right--;
}
returntrue;
}
解析:
双指针法从字符串两端向中间遍历,逐个字符比较。若所有字符匹配,则为回文串;否则返回`false`。时间复杂度为`O(n)`,空间复杂度为`O(1)`。
3.题目:
请实现快速排序算法,并用示例说明其工作过程。
答案:
java
publicstaticvoidquickSort(int[]arr,intleft,intright){
if(left=right){
return;
}
intpivot=arr[left+(right-left)/2];
intl=left,r=right;
while(l=r){
while(arr[l]pivot)l++;
while(arr[r]pivot)r--;
if(l=r){
swap(arr,l,r);
l++;
r--;
}
}
quickSort(arr,left,r);
quickSort(arr,l,right);
}
publicstaticvoidswap(int[]arr,inti,intj){
inttemp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
解析:
快速排序的核心是分治思想:
1.选择一个基准值(pivot),通常取中间值;
2.将数组划分为两部分,左边的元素均小于基准值,右边的元素均大于基准值;
3.递归对左右两部分进行排序。
时间复杂度平均为`O(nlogn)`,最坏为`O(n^2)`(当基准值选择不均匀时)。
4.题目:
请解释什么是“线程池”,并说明其优缺点。
答案:
线程池是一组预先创建并管理的线程集合,用于执行异步任务。主要优点:
-减少线程创建开销:避免频繁创建和销毁线程;
-提高性能:重用线程可减少任务切换时间;
-资源控制:限制并发线程数,防止系统过载。
缺点:
-灵活性低:任务必须适配线程池模式;
-异常处理复杂:未正确关闭线程池可能导致资源泄漏。
5.题目:
请实现一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。
答案:
java
classLRUCache{
privateMapInteger,Nodemap;
privateNodehead,tail;
privateintcapacity;
classNode{
intkey,value;
Nodeprev,next;
Node(intkey,intvalue){
this.key=key;
this.value=value;
}
}
publicLRUCache(intcapacity){
this.capacity=capacity;
m
原创力文档

文档评论(0)