软件开发岗位面试题及解析.docxVIP

  • 1
  • 0
  • 约5.58千字
  • 约 17页
  • 2026-03-06 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年软件开发岗位面试题及解析

一、编程语言与数据结构(共5题,每题10分,总分50分)

1.题目:

请用Python实现一个函数,输入一个非空字符串,返回该字符串中第一个不重复的字符。如果所有字符都重复,返回`None`。

2.题目:

给定一个链表,实现一个函数,删除链表中的所有重复元素,只保留不重复的元素。返回修改后的链表头节点。

3.题目:

用Java实现快速排序算法,并说明其时间复杂度和空间复杂度。

4.题目:

请解释什么是“线程安全”,并举例说明两种实现线程安全的方法(如锁机制、原子类)。

5.题目:

给定一个整数数组,返回其中第三大的数。如果数组中少于三个不同的数,返回最大的数。

答案与解析

1.Python实现第一个不重复字符(10分)

python

deffirst_unique_char(s:str):

char_count={}

forcharins:

char_count[char]=char_count.get(char,0)+1

forcharins:

ifchar_count[char]==1:

returnchar

returnNone

解析:

-使用哈希表统计字符出现次数,遍历一次字符串(O(n)时间复杂度)。

-第二次遍历时返回第一个计数为1的字符,否则返回`None`。

-空间复杂度为O(1),因为字符集固定(如ASCII)。

2.删除链表重复元素(10分)

python

classListNode:

def__init__(self,val=0,next=None):

self.val=val

self.next=next

defdelete_duplicates(head:ListNode):

dummy=ListNode(0,head)

current=dummy

whilecurrent.next:

ifcurrent.next.val==current.next.next.val:

val=current.next.val

whilecurrent.nextandcurrent.next.val==val:

current.next=current.next.next

else:

current=current.next

returndummy.next

解析:

-使用虚拟头节点简化边界处理。

-遍历链表,当发现重复节点时,通过`while`循环删除所有重复值。

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

3.Java快速排序(10分)

java

publicclassQuickSort{

publicstaticvoidquickSort(int[]arr,intleft,intright){

if(leftright){

intpivotIndex=partition(arr,left,right);

quickSort(arr,left,pivotIndex-1);

quickSort(arr,pivotIndex+1,right);

}

}

privatestaticintpartition(int[]arr,intleft,intright){

intpivot=arr[right];

inti=left-1;

for(intj=left;jright;j++){

if(arr[j]=pivot){

i++;

swap(arr,i,j);

}

}

swap(arr,i+1,right);

returni+1;

}

privatestaticvoidswap(int[]arr,inti,intj){

inttemp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

}

解析:

-快速排序是分治算法,时间复杂度平均O(nlogn),最坏O(n2)(当数组已有序时)。

-空间复杂度O(logn),递归栈深度决定。

4.线程安全(10分)

定义:

线程安全是指一个方法或对象在多线程环境下能正确执行,不会因并发操作导致数据错乱或崩溃。

实现方法:

1.锁机制(如`synchronized`、`ReentrantLock`):

-互斥访问共享资源,确保同一时间只有一个线程能执行特定代码块。

-示例:Java中的`synchronized`关键字。

2.原子类(如`AtomicInteger`):

-

文档评论(0)

1亿VIP精品文档

相关文档