2026年软件工程师面试全攻略与答案详解.docxVIP

  • 0
  • 0
  • 约6.11千字
  • 约 17页
  • 2026-01-21 发布于福建
  • 举报

2026年软件工程师面试全攻略与答案详解.docx

第PAGE页共NUMPAGES页

2026年软件工程师面试全攻略与答案详解

一、编程能力测试(5题,每题10分,共50分)

考察点:Java基础、算法设计、代码规范、异常处理。

1.题目:

请实现一个方法,判断一个字符串是否是回文字符串(正序和倒序相同)。例如,madam是回文字符串,hello不是。

答案:

java

publicbooleanisPalindrome(Strings){

if(s==null)returnfalse;

s=s.replaceAll([^a-zA-Z0-9],).toLowerCase();

intleft=0,right=s.length()-1;

while(leftright){

if(s.charAt(left)!=s.charAt(right)){

returnfalse;

}

left++;

right--;

}

returntrue;

}

解析:

-首先处理特殊情况(null字符串),然后去除非字母数字字符并统一为小写,避免大小写敏感问题。

-使用双指针法从两端向中间遍历,若字符不匹配则返回false,否则继续。

-时间复杂度O(n),空间复杂度O(1)(若忽略去除非字母数字字符的空间)。

2.题目:

给定一个整数数组,返回其中和为特定值的三元组数量。例如,输入`[1,2,3,4]`,和为`7`的三元组有`[1,2,4]`和`[1,3,3]`。

答案:

java

publicListListIntegerthreeSum(int[]nums,inttarget){

ListListIntegerres=newArrayList();

Arrays.sort(nums);

for(inti=0;inums.length-2;i++){

if(i0nums[i]==nums[i-1])continue;//去重

intleft=i+1,right=nums.length-1;

while(leftright){

intsum=nums[i]+nums[left]+nums[right];

if(sum==target){

res.add(Arrays.asList(nums[i],nums[left],nums[right]));

while(leftrightnums[left]==nums[left+1])left++;//去重

while(leftrightnums[right]==nums[right-1])right--;//去重

left++;

right--;

}elseif(sumtarget){

left++;

}else{

right--;

}

}

}

returnres;

}

解析:

-先排序数组,便于使用双指针法。

-固定第一个数,用双指针遍历剩余部分,若和等于目标值则记录并去重。

-时间复杂度O(n2),空间复杂度O(1)。

3.题目:

请实现一个LRU(最近最少使用)缓存,支持get和put操作。LRU缓存容量为3,例如:

-put(1,1)→缓存是{1=1}

-put(2,2)→缓存是{1=1,2=2}

-get(1)→返回1

-put(3,3)→缓存是{1=1,2=2,3=3}(驱逐最久未使用的1)

-get(4)→返回-1(未找到)

答案:

java

classLRUCache{

classNode{

intkey,value;

Nodeprev,next;

Node(intk,intv){key=k;value=v;}

}

MapInteger,Nodemap=newHashMap();

Nodehead=newNode(0,0),tail=newNode(0,0);

intcapacity;

publicLRUCache(intcap){

capacity=cap;

head.next=tail;

tail.prev=head;

}

publicintget(intkey){

Nodenode=map.get(key);

if(node==null)return-1;

moveToHead(node);

returnnode.value;

}

publicvoidput(intkey,intval

文档评论(0)

1亿VIP精品文档

相关文档