2026年计算机专业招聘笔试编程题库_第1页
2026年计算机专业招聘笔试编程题库_第2页
2026年计算机专业招聘笔试编程题库_第3页
2026年计算机专业招聘笔试编程题库_第4页
2026年计算机专业招聘笔试编程题库_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2026年计算机专业招聘笔试编程题库一、算法设计题(共3题,每题15分)题目1(15分):背景:某电商公司需要统计用户购买商品的频率,以优化商品推荐算法。给定一个用户购买记录的列表,其中每个记录包含用户ID、商品ID和购买时间(格式为"YYYY-MM-DD"),请设计一个算法,统计每个用户的购买商品数量,并按购买数量降序排列,若购买数量相同,则按用户ID升序排列。输入:pythonrecords=[("user1","item1","2026-01-01"),("user2","item2","2026-01-02"),("user1","item3","2026-01-01"),("user3","item1","2026-01-03"),("user2","item1","2026-01-04"),("user1","item2","2026-01-05"),("user3","item3","2026-01-06")]输出:python[("user1",3),("user2",2),("user3",2)]答案:pythonfromcollectionsimportdefaultdictdefcount_purchases(records):user_purchases=defaultdict(int)foruser,item,_inrecords:user_purchases[user]+=1sorted_purchases=sorted(user_purchases.items(),key=lambdax:(-x[1],x[0]))returnsorted_purchases测试records=[("user1","item1","2026-01-01"),("user2","item2","2026-01-02"),("user1","item3","2026-01-01"),("user3","item1","2026-01-03"),("user2","item1","2026-01-04"),("user1","item2","2026-01-05"),("user3","item3","2026-01-06")]print(count_purchases(records))解析:1.使用`defaultdict`统计每个用户的购买次数。2.遍历输入列表,每条记录中,用户ID作为键,购买次数作为值,进行累加。3.使用`sorted`函数对结果进行排序,排序规则为购买次数降序(`-x[1]`),若购买次数相同,则按用户ID升序(`x[0]`)。4.返回排序后的结果。题目2(15分):背景:某外卖平台需要优化配送路线,以减少配送时间。给定一个配送点的坐标列表(每个坐标表示为`(x,y)`),请设计一个算法,计算所有配送点之间的最短路径总和(即旅行商问题,TSP),假设从第一个配送点开始,最后回到第一个配送点。输入:pythonpoints=[(0,0),(1,2),(3,1),(5,4),(2,3)]输出:最短路径总和(浮点数,保留两位小数)。答案:pythonimportitertoolsimportmathdefdistance(p1,p2):returnround(math.sqrt((p1[0]-p2[0])2+(p1[1]-p2[1])2),2)deftsp(points):min_path=float('inf')forperminitertools.permutations(points[1:]):path=[points[0]]+list(perm)+[points[0]]total_distance=sum(distance(path[i],path[i+1])foriinrange(len(path)-1))min_path=min(min_path,total_distance)returnround(min_path,2)测试points=[(0,0),(1,2),(3,1),(5,4),(2,3)]print(tsp(points))解析:1.定义`distance`函数计算两点之间的欧氏距离。2.使用`itertools.permutations`生成所有可能的配送点排列(除了第一个点)。3.对每种排列,计算路径的总距离,包括从第一个点到最后一个点再回到第一个点。4.找到最短路径的总距离,并保留两位小数。题目3(15分):背景:某社交平台需要检测用户评论中的敏感词,以防止违规内容传播。给定一个敏感词列表和一个用户评论,请设计一个算法,统计评论中包含的敏感词数量,并返回所有敏感词及其出现次数。输入:pythonsensitive_words=["敏感词1","敏感词2","敏感词3"]comment="这是一个敏感词1的评论,其中包含敏感词2和敏感词1。"输出:python{"敏感词1":2,"敏感词2":1}答案:pythonfromcollectionsimportCounterdefcount_sensitive_words(sensitive_words,comment):words=comment.split()sensitive_counts=Counter(wordforwordinwordsifwordinsensitive_words)returndict(sensitive_counts)测试sensitive_words=["敏感词1","敏感词2","敏感词3"]comment="这是一个敏感词1的评论,其中包含敏感词2和敏感词1。"print(count_sensitive_words(sensitive_words,comment))解析:1.将评论按空格分割成单词列表。2.使用列表推导式和`Counter`统计敏感词出现的次数。3.返回一个字典,包含所有敏感词及其出现次数。二、数据结构题(共3题,每题15分)题目1(15分):背景:某公司需要设计一个高效的数据结构,存储用户信息,并支持快速插入、删除和查找操作。请设计一个类`UserManager`,包含以下方法:-`add_user(user_id,user_info)`:添加用户信息,`user_info`为字典,包含用户详细信息。-`remove_user(user_id)`:删除指定ID的用户。-`get_user(user_id)`:获取指定ID的用户信息。要求:-使用哈希表实现,确保插入、删除和查找操作的时间复杂度为O(1)。-提供测试代码验证功能。答案:pythonclassUserManager:def__init__(self):self.users={}defadd_user(self,user_id,user_info):self.users[user_id]=user_infodefremove_user(self,user_id):ifuser_idinself.users:delself.users[user_id]defget_user(self,user_id):returnself.users.get(user_id,None)测试user_manager=UserManager()user_manager.add_user("user1",{"name":"Alice","age":25})user_manager.add_user("user2",{"name":"Bob","age":30})print(user_manager.get_user("user1"))#{"name":"Alice","age":25}user_manager.remove_user("user1")print(user_manager.get_user("user1"))#None解析:1.使用字典`self.users`存储用户信息,键为用户ID,值为用户信息字典。2.`add_user`方法直接将用户信息插入字典。3.`remove_user`方法通过键删除用户信息。4.`get_user`方法通过键获取用户信息,若不存在则返回`None`。题目2(15分):背景:某公司需要设计一个任务调度系统,任务按优先级排列,高优先级的任务优先执行。请设计一个类`TaskScheduler`,包含以下方法:-`add_task(task_id,priority)`:添加任务,`priority`为整数,优先级越高越先执行。-`remove_task(task_id)`:删除指定ID的任务。-`get_next_task()`:获取下一个要执行的任务ID。要求:-使用最小堆实现优先级队列,确保添加和删除操作的时间复杂度为O(logn)。-提供测试代码验证功能。答案:pythonimportheapqclassTaskScheduler:def__init__(self):self.tasks=[]defadd_task(self,task_id,priority):heapq.heappush(self.tasks,(priority,task_id))defremove_task(self,task_id):self.tasks=[(p,t)forp,tinself.tasksift!=task_id]defget_next_task(self):returnself.tasks[0][1]ifself.taskselseNone测试scheduler=TaskScheduler()scheduler.add_task("task1",3)scheduler.add_task("task2",1)scheduler.add_task("task3",2)print(scheduler.get_next_task())#"task2"scheduler.remove_task("task2")print(scheduler.get_next_task())#"task3"解析:1.使用`heapq`模块实现最小堆,优先级高的任务存储在堆的底部。2.`add_task`方法将任务插入堆中。3.`remove_task`方法通过遍历堆删除指定ID的任务。4.`get_next_task`方法返回堆顶的任务ID。题目3(15分):背景:某公司需要设计一个LRU(最近最少使用)缓存系统,缓存有限的空间,当缓存满时,最久未使用的缓存项被移除。请设计一个类`LRUCache`,包含以下方法:-`put(key,value)`:添加或更新缓存项。-`get(key)`:获取缓存项的值,若不存在则返回-1。要求:-使用哈希表和双向链表实现,确保`put`和`get`操作的时间复杂度为O(1)。-提供测试代码验证功能。答案:pythonclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.head=Node(0,0)self.tail=Node(0,0)self.head.next=self.tailself.tail.prev=self.headdef_remove_node(self,node):node.prev.next=node.nextnode.next.prev=node.prevdef_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedefget(self,key):node=self.cache.get(key,None)ifnotnode:return-1self._remove_node(node)self._add_node(node)returnnode.valuedefput(self,key,value):node=self.cache.get(key)ifnode:self._remove_node(node)new_node=Node(key,value)self.cache[key]=new_nodeself._add_node(new_node)iflen(self.cache)>self.capacity:lru=self.tail.prevself._remove_node(lru)delself.cache[lru.key]测试cache=LRUCache(2)cache.put(1,1)cache.put(2,2)print(cache.get(1))#1cache.put(3,3)#去除键2print(cache.get(2))#-1cache.put(4,4)#去除键1print(cache.get(1))#-1print(cache.get(3))#3print(cache.get(4))#4解析:1.使用双向链表和哈希表实现LRU缓存。2.双向链表头部为最近使用的节点,尾部为最久未使用的节点。3.哈希表存储键和链表节点的映射,确保O(1)时间复杂度。4.`get`方法通过哈希表查找节点,并将其移动到链表头部。5.`put`方法添加或更新节点,若缓存已满,则移除链表尾部节点。三、编程实现题(共3题,每题15分)题目1(15分):背景:某公司需要统计每日销售数据,数据存储在一个CSV文件中,格式如下:date,product_id,quantity2026-01-01,p001,102026-01-01,p002,52026-01-02,p001,82026-01-02,p003,3任务:请编写Python代码,读取CSV文件,统计每天每种产品的总销量,并按日期降序排列,日期相同时按产品ID升序排列。答案:pythonimportcsvfromcollectionsimportdefaultdictdefcount_daily_sales(file_path):sales_data=defaultdict(lambda:defaultdict(int))withopen(file_path,'r')asfile:reader=csv.DictReader(file)forrowinreader:date=row['date']product_id=row['product_id']quantity=int(row['quantity'])sales_data[date][product_id]+=quantitysorted_sales=sorted(((date,product_id,total)fordate,productsinsales_data.items()forproduct_id,totalinproducts.items()),key=lambdax:(-x[0],x[1]))returnsorted_sales测试file_path="sales_data.csv"withopen(file_path,'w')asfile:writer=csv.writer(file)writer.writerow(["date","product_id","quantity"])writer.writerow(["2026-01-01","p001","10"])writer.writerow(["2026-01-01","p002","5"])writer.writerow(["2026-01-02","p001","8"])writer.writerow(["2026-01-02","p003","3"])print(count_daily_sales(file_path))解析:1.使用`csv.DictReader`读取CSV文件,按列名解析每行数据。2.使用嵌套`defaultdict`统计每天每种产品的总销量。3.使用生成器表达式和`sorted`函数对结果进行排序,排序规则为日期降序(`-x[0]`),日期相同时按产品ID升序(`x[1]`)。4.返回排序后的结果。题目2(15分):背景:某公司需要生成一个身份证号码验证工具,身份证号码格式为18位,前17位为数字,最后一位为校验码,校验码计算方法如下:-前17位分别乘以系数[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],然后求和。-和除以11,余数对应校验码[1,0,X,9,8,7,6,5,4,3,2]。任务:请编写Python代码,验证给定的身份证号码是否有效。答案:pythondefis_valid_id(id_number):iflen(id_number)!=18ornotid_number[:-1].isdigit()ornotid_number[-1].isdigit()andid_number[-1]!='X':returnFalsecoefficients=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]checksum=[1,0,'X',

温馨提示

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

最新文档

评论

0/150

提交评论