- 0
- 0
- 约4.84千字
- 约 15页
- 2026-03-09 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年软件工程师面试流程及常见问题解答
一、编程基础(5题,每题10分,共50分)
1.题目:
请用Python实现一个函数,输入一个正整数`n`,返回其阶乘的值。要求不使用递归或内置的阶乘函数。
答案:
python
deffactorial(n):
result=1
foriinrange(1,n+1):
result=i
returnresult
解析:
阶乘计算可以通过循环实现,从1乘到`n`。递归虽然简洁,但容易导致栈溢出,尤其在`n`较大时。内置函数如`math.factorial`会优化计算,但题目要求不使用这些工具,因此手动实现循环是最直接的方法。
2.题目:
请用Java实现一个方法,判断一个字符串是否是回文(即正读和反读相同)。例如,`madam`是回文,`hello`不是。
答案:
java
publicstaticbooleanisPalindrome(Strings){
intleft=0,right=s.length()-1;
while(leftright){
if(s.charAt(left)!=s.charAt(right)){
returnfalse;
}
left++;
right--;
}
returntrue;
}
解析:
双指针法是判断回文的常用技巧。从字符串两端向中间移动,比较对应字符是否相同。若全部匹配,则为回文;否则提前终止。注意忽略空格和大小写的情况时,需要预处理字符串。
3.题目:
请用C++实现快速排序算法(QuickSort),并说明其时间复杂度。
答案:
cpp
includevector
usingnamespacestd;
intpartition(vectorintarr,intlow,inthigh){
intpivot=arr[high];
inti=low-1;
for(intj=low;jhigh;j++){
if(arr[j]=pivot){
i++;
swap(arr[i],arr[j]);
}
}
swap(arr[i+1],arr[high]);
returni+1;
}
voidquickSort(vectorintarr,intlow,inthigh){
if(lowhigh){
intpi=partition(arr,low,high);
quickSort(arr,low,pi-1);
quickSort(arr,pi+1,high);
}
}
解析:
快速排序是分治算法,时间复杂度平均为`O(nlogn)`,最坏为`O(n^2)`(当选择最左或最右为基准时)。实际应用中可通过随机化基准优化。
4.题目:
请用JavaScript实现一个函数,找出数组中重复次数最多的元素及其出现次数。例如,在`[1,2,2,3,3,3]`中,`3`出现最多,次数为3。
答案:
javascript
functionmostFrequent(arr){
constcount={};
letmaxCount=0;
letresult=null;
for(constnumofarr){
count[num]=(count[num]||0)+1;
if(count[num]maxCount){
maxCount=count[num];
result=num;
}
}
return[result,maxCount];
}
解析:
使用哈希表(对象)统计每个元素的出现次数,同时记录最大值。遍历一次数组,时间复杂度为`O(n)`。
5.题目:
请用Go语言实现一个函数,检查一个数是否为素数(质数)。
答案:
go
funcisPrime(nint)bool{
ifn=1{
returnfalse
}
fori:=2;ii=n;i++{
ifn%i==0{
returnfalse
}
}
returntrue
}
解析:
素数定义为大于1且只能被1和自身整除的数。检查时只需遍历到`sqrt(n)`即可,若无其他因数则为素数。优化点在于避免偶数检查(除2外跳过)。
二、系统设计(3题,每题20分,共60分)
1.题目:
设计一个简单的微博系统,要求支持以下功能:
-用户发布文本微博(限制长度如140字)。
-用户关注/取消关注其他用户。
-用户查看自己关注的人的微博流(最新消息优先)。
答
原创力文档

文档评论(0)