- 0
- 0
- 约6.06千字
- 约 17页
- 2026-01-29 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年软件工程师的常见面试问题解答
一、编程语言与基础算法(共5题,每题10分,总分50分)
1.题目:
请用Python实现一个函数,输入一个整数列表,返回列表中所有大于0且为偶数的元素之和。假设输入列表非空且长度不超过1000。
答案:
python
defsum_positive_even(nums):
returnsum(numfornuminnumsifnum0andnum%2==0)
解析:
-列表推导式高效过滤出符合条件的数字,`sum()`函数直接求和。
-时间复杂度O(n),空间复杂度O(1)。
-实际面试中可能要求处理空列表或异常输入,可补充`ifnotnums:`返回0。
2.题目:
用Java实现快速排序算法,并说明其时间复杂度在不同输入情况下的表现。
答案:
java
publicvoidquickSort(int[]arr,intleft,intright){
if(left=right)return;
intpivot=arr[left];
inti=left,j=right;
while(ij){
while(ijarr[j]=pivot)j--;
arr[i]=arr[j];
while(ijarr[i]=pivot)i++;
arr[j]=arr[i];
}
arr[i]=pivot;
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
解析:
-分治思想,选择基准值(pivot)分区。
-平均时间O(nlogn),最坏O(n2)(如已排序数组),可通过随机化pivot优化。
-面试可能要求手写或讨论稳定性,Java实现需注意边界条件。
3.题目:
解释Java中的泛型擦除机制,并举例说明为什么它不能在运行时获取类型信息。
答案:
Java泛型在编译时被擦除为原始类型(rawtype),如`ListString`变为`List`。
示例:
java
ListStringlist=newArrayList();
list.add(123);//编译时无报错
Integernum=list.get(0);//运行时ClassCastException
解析:类型信息仅用于编译检查,运行时`list.get(0)`返回`Object`。
-面试可能要求对比C#的反射泛型,突出Java的向后兼容性设计。
4.题目:
用C++实现一个单链表节点类(`ListNode`),包含`val`和`next`指针,并添加反转链表的函数。
答案:
cpp
structListNode{
intval;
ListNodenext;
ListNode(intx):val(x),next(nullptr){}
};
ListNodereverseList(ListNodehead){
ListNodeprev=nullptr;
while(head){
ListNodenext=head-next;
head-next=prev;
prev=head;
head=next;
}
returnprev;
}
解析:
-迭代反转,注意`next`临时保存。
-时间复杂度O(n),空间复杂度O(1)。
-可能要求递归版本或检测循环链表。
5.题目:
描述C#中的`async`和`await`关键字的作用,并写出异步获取HTTP请求的伪代码。
答案:
csharp
publicasyncTaskstringFetchDataAsync(stringurl){
using(varclient=newHttpClient()){
returnawaitclient.GetStringAsync(url);
}
}
解析:
-`async`标记方法支持`await`,不阻塞线程。
-`GetStringAsync`是`TaskT`返回型,`await`内联执行。
-面试可能要求对比Java的`CompletableFuture`。
二、系统设计与架构(共4题,每题15分,总分60分)
1.题目:
设计一个支持高并发的短链接系统(如tinyURL),要求说明核心组件和分布式部署方案。
答案:
核心组件:
-短链生成服务:基于62进制(a-z,A-Z,0-9)哈希算法,如SHA256+取前6位。
-分布式缓存:Redis存储`longURL:sh
原创力文档

文档评论(0)