2026年IT面试编程题库含答案_第1页
2026年IT面试编程题库含答案_第2页
2026年IT面试编程题库含答案_第3页
2026年IT面试编程题库含答案_第4页
2026年IT面试编程题库含答案_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年IT面试编程题库含答案一、算法与数据结构(共5题,每题20分)1.题目:给定一个整数数组,返回数组中第三大的数。如果数组中少于三个不同的数,则返回最大的数。示例:输入:[3,2,1,2]输出:1解析:-先去重:[3,2,1]-排序后取第三大:1答案:pythondefthird_largest(nums):unique_nums=sorted(set(nums),reverse=True)returnunique_nums[2]iflen(unique_nums)>=3elseunique_nums[0]示例测试print(third_largest([3,2,1,2]))#输出:12.题目:实现一个LRU(最近最少使用)缓存,支持get和put操作。缓存容量为固定值。示例:LRU缓存容量为2:-put(1,1)→缓存是{1=1}-put(2,2)→缓存是{1=1,2=2}-get(1)→返回1-put(3,3)→去除键2,缓存是{1=1,3=3}-get(2)→返回-1(未找到)解析:-使用哈希表记录键值对,双向链表维护访问顺序。-get时移动节点到链表头部,put时若存在则更新,否则插入头部并删除最久未使用的节点。答案:pythonclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head,self.tail=Node(0,0),Node(0,0)self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeyinself.cache:node=self.cache[key]self._move_to_front(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_front(node)else:iflen(self.cache)==self.capacity:self._remove_last()new_node=Node(key,value)self.cache[key]=new_nodeself._add_to_front(new_node)def_move_to_front(self,node):self._remove_node(node)self._add_to_front(node)def_add_to_front(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_remove_last(self):last=self.tail.prevself._remove_node(last)delself.cache[last.key]示例测试lru=LRUCache(2)lru.put(1,1)lru.put(2,2)print(lru.get(1))#输出:1lru.put(3,3)print(lru.get(2))#输出:-13.题目:给定一个非空字符串,判断它是否可以由其自身旋转得到。例如,"abcde"可以旋转为"bcdea"或"cdeab"。示例:输入:"abcde"→输出:True输入:"abc"→输出:False解析:-旋转后的字符串必定是原字符串的子串。-可以拼接原字符串与自身,检查旋转字符串是否为子串。答案:pythondefis_rotation(s:str)->bool:iflen(s)<2:returnTruereturnsin(s+s)示例测试print(is_rotation("abcde"))#输出:Trueprint(is_rotation("abc"))#输出:False4.题目:实现二叉树的深度优先遍历(前序、中序、后序)。示例:二叉树:1/\23/\45前序:1,2,4,5,3中序:4,2,5,1,3后序:4,5,2,3,1解析:-前序:根-左-右-中序:左-根-右-后序:左-右-根-使用递归或栈实现。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefpreorder_traversal(root):res=[]defdfs(node):ifnode:res.append(node.val)dfs(node.left)dfs(node.right)dfs(root)returnresdefinorder_traversal(root):res=[]defdfs(node):ifnode:dfs(node.left)res.append(node.val)dfs(node.right)dfs(root)returnresdefpostorder_traversal(root):res=[]defdfs(node):ifnode:dfs(node.left)dfs(node.right)res.append(node.val)dfs(root)returnres示例测试root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)print(preorder_traversal(root))#[1,2,4,5,3]print(inorder_traversal(root))#[4,2,5,1,3]print(postorder_traversal(root))#[4,5,2,3,1]5.题目:给定一个包含重复数字的数组,返回所有不重复的全排列。示例:输入:[1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]解析:-使用回溯法,避免重复排列。-通过交换元素实现全排列,并使用集合记录已访问的索引。答案:pythondefpermute_unique(nums):res=[]used=[False]len(nums)defdfs(path):iflen(path)==len(nums):res.append(path.copy())returnforiinrange(len(nums)):ifused[i]:continueifi>0andnums[i]==nums[i-1]andnotused[i-1]:continueused[i]=Truepath.append(nums[i])dfs(path)path.pop()used[i]=Falsenums.sort()dfs([])returnres示例测试print(permute_unique([1,1,2]))#[[1,1,2],[1,2,1],[2,1,1]]二、数据库与SQL(共3题,每题25分)1.题目:假设有表`Orders`:sql++--++--++-+|Field|Type|Null|Key|Default|Extra|++--++--++-+|order_id|int|NO|PRI|NULL|auto_increment||customer_id|int|NO|MUL|NULL|||order_date|date|NO||NULL|||total|decimal(10,2)|NO||NULL||++--++--++-+查询2023年每个客户的订单总数和总金额,按客户ID降序排列。解析:-使用`WHERE`过滤年份。-使用`GROUPBY`按客户ID分组,`SUM()`统计总数和金额。答案:sqlSELECTcustomer_id,COUNT(order_id)ASorder_count,SUM(total)AStotal_amountFROMOrdersWHEREorder_dateBETWEEN'2023-01-01'AND'2023-12-31'GROUPBYcustomer_idORDERBYcustomer_idDESC;2.题目:假设有表`Employees`:sql++--++--++-+|Field|Type|Null|Key|Default|Extra|++--++--++-+|employee_id|int|NO|PRI|NULL|auto_increment||first_name|varchar(50)|YES||NULL|||last_name|varchar(50)|YES||NULL|||department_id|int|NO|MUL|NULL|||salary|decimal(10,2)|NO||NULL||++--++--++-+查询每个部门的平均薪资,只显示平均薪资高于全公司平均薪资的部门。解析:-先计算全公司平均薪资。-使用`HAVING`过滤高于全公司平均薪资的部门。答案:sqlSELECTdepartment_id,AVG(salary)ASavg_salaryFROMEmployeesGROUPBYdepartment_idHAVINGAVG(salary)>(SELECTAVG(salary)FROMEmployees);3.题目:假设有表`Students`:sql++++--++-+|Field|Type|Null|Key|Default|Extra|++++--++-+|student_id|int|NO|PRI|NULL|auto_increment||name|varchar(100)|NO||NULL|||grade|int|NO||NULL|||course_id|int|NO|MUL|NULL||++++--++-+查询每门课程的学生人数,按人数降序排列。解析:-使用`GROUPBY`按课程ID分组,`COUNT()`统计人数。-使用`ORDERBY`降序排列。答案:sqlSELECTcourse_id,COUNT(student_id)ASstudent_countFROMStudentsGROUPBYcourse_idORDERBYstudent_countDESC;三、系统设计(共2题,每题30分)1.题目:设计一个高并发的短链接系统。要求:-输入长链接,输出短

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论