2026年网易校招笔试历年仿真题分享_第1页
2026年网易校招笔试历年仿真题分享_第2页
2026年网易校招笔试历年仿真题分享_第3页
2026年网易校招笔试历年仿真题分享_第4页
2026年网易校招笔试历年仿真题分享_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

2026年网易校招笔试历年仿真题分享一、编程基础(共5题,每题4分,总计20分)1.题目:请编写一个Python函数,输入一个正整数n,返回其所有因子(不包括n本身)的和。例如,输入12,返回1+2+3+4+6=16。要求:不能使用除法,只能使用循环和取余操作。2.题目:给定一个字符串s,统计其中最长的不重复子串的长度。例如,输入"abcabcbb",输出3("abc")。要求:使用滑动窗口方法,时间复杂度不超过O(n)。3.题目:实现一个二叉树的层序遍历(按从上到下、从左到右的顺序)。要求:使用队列实现,不能使用递归。4.题目:请编写一个函数,判断一个字符串是否为有效的括号组合(只考虑'('、')'、'{'、'}'、'['、']')。要求:使用栈实现,时间复杂度O(n)。5.题目:给定一个数组nums和一个目标值target,返回数组中和为target的三个数的组合数量。要求:不能使用重复的组合,例如[1,1,2]和target=4,只能算作一种组合(1+1+2)。二、算法设计(共4题,每题5分,总计20分)1.题目:设计一个LRU(最近最少使用)缓存,支持get和put操作。get返回键对应的值,put插入或更新键值对。要求:容量为固定值,超出时删除最久未使用的项。使用哈希表和双向链表实现。2.题目:给定一个字符串s,删除其中的所有重复字符(保留最后出现的字符)。例如,输入"abccba",输出"ccba"。要求:时间复杂度O(n),空间复杂度O(1)。3.题目:设计一个算法,判断一个无向图是否是二分图(可以分成两个集合,使得集合内无相邻边)。要求:使用DFS或BFS,时间复杂度O(V+E)。4.题目:给定一个数组nums,找到其中和最大的连续子数组的和。例如,输入[-2,1,-3,4,-1,2,1,-5,4],输出6(4+(-1)+2+1)。要求:使用动态规划,时间复杂度O(n)。三、系统设计(共3题,每题10分,总计30分)1.题目:设计一个简单的短链接系统,输入一个长URL,返回一个短URL,并支持通过短URL跳转回长URL。要求:短URL长度尽量短,可使用Base62编码(a-z、A-Z、0-9)。需要考虑URL的唯一性和缓存。2.题目:设计一个高并发的计数器服务,支持多线程同时调用increment接口,返回当前计数。要求:使用Redis或分布式锁实现,保证原子性。3.题目:设计一个消息队列系统,支持生产者发送消息、消费者接收消息,并保证消息的至少一次传递。要求:考虑消息的持久化、顺序性、重试机制。四、数据库与SQL(共3题,每题10分,总计30分)1.题目:假设有一个用户表users(id,name,age,city),编写SQL查询:-查询每个城市年龄最大的用户信息。-查询年龄在20-30岁之间的用户数量,按城市分组排序。2.题目:假设有一个订单表orders(id,user_id,amount,order_time),编写SQL查询:-查询每个用户的订单总金额,只显示总金额大于1000的用户。-查询最近30天内每个用户的订单数量,按数量降序排列。3.题目:设计一个分库分表的方案,针对用户表和订单表,说明如何避免跨分片JOIN,并支持高并发写入。要求:考虑数据倾斜和查询性能。五、综合应用(共3题,每题10分,总计30分)1.题目:网易游戏需要设计一个用户行为分析系统,输入用户行为日志(时间戳、用户ID、行为类型),输出每个用户的活跃时长(单位:小时)。要求:假设日志可能乱序,需要去重和按时间排序。2.题目:网易新闻需要设计一个新闻推荐系统,输入用户的历史阅读记录,推荐与当前阅读新闻相似的其他新闻。要求:说明如何计算新闻相似度(如余弦相似度),并设计缓存机制。3.题目:网易云音乐需要设计一个歌曲推荐算法,输入用户的听歌历史,推荐可能喜欢的歌曲。要求:考虑协同过滤或基于内容的推荐,说明如何处理冷启动问题。答案与解析一、编程基础1.答案:pythondefsum_factors(n):total=0foriinrange(1,n):ifn%i==0:total+=ireturntotal2.答案:pythondeflength_of_longest_substring(s):left=0max_len=0char_set=set()forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len3.答案:pythonfromcollectionsimportdequedeflevel_order(root):ifnotroot:return[]queue=deque([root])result=[]whilequeue:node=queue.popleft()result.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)returnresult4.答案:pythondefisValid(s):stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top=stack.pop()ifstackelse'#'ifmapping[char]!=top:returnFalseelse:stack.append(char)returnnotstack5.答案:pythondefthreeSum(nums,target):nums.sort()result=0n=len(nums)foriinrange(n):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:result+=1left+=1right-=1whileleft<rightandnums[left]==nums[left-1]:left+=1whileleft<rightandnums[right]==nums[right+1]:right-=1eliftotal<target:left+=1else:right-=1returnresult二、算法设计1.答案:pythonclassLRUCache: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.headclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=Nonedefget(self,key):ifkeyinself.cache:node=self.cache[key]self._move_to_front(node)returnnode.valuereturn-1defput(self,key,value):ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_front(node)else:iflen(self.cache)==self.capacity:self._remove_last()new_node=self.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):node.prev.next=node.nextnode.next.prev=node.prevdef_remove_last(self):last=self.tail.prevself._remove_node(last)delself.cache[last.key]2.答案:pythondefremove_duplicates(s):char_map={}start=0max_len=0max_start=0forendinrange(len(s)):ifs[end]inchar_mapandchar_map[s[end]]>=start:start=char_map[s[end]]+1char_map[s[end]]=endifend-start+1>max_len:max_len=end-start+1max_start=startreturns[max_start:max_start+max_len]3.答案:pythondefis_bipartite(graph):color={}fornodeingraph:ifnodenotincolor:stack=[node]color[node]=0whilestack:current=stack.pop()forneighboringraph[current]:ifneighbornotincolor:color[neighbor]=1-color[current]stack.append(neighbor)elifcolor[neighbor]==color[current]:returnFalsereturnTrue4.答案:pythondefmax_subarray(nums):max_sum=nums[0]current_sum=nums[0]fornuminnums[1:]:current_sum=max(num,current_sum+num)max_sum=max(max_sum,current_sum)returnmax_sum三、系统设计1.答案:-短链接生成:使用Base62编码,例如将URL的hash值取模62,映射到a-z、A-Z、0-9。-缓存设计:使用Redis存储短链接和长链接的映射,设置过期时间。pythonimporthashlibimportstringbase62=string.ascii_letters+string.digitsdefencode_base62(num):ifnum==0:returnbase62[0]base=len(base62)result=[]whilenum>0:result.append(base62[num%base])num//=basereturn''.join(reversed(result))defshort_link(url):hash_val=int(hashlib.md5(url.encode()).hexdigest(),16)short_code=encode_base62(hash_val%1000000)#6位Base62returnf"https://short.ly/{short_code}"defresolve_link(short_code):查询Redis,返回长链接pass2.答案:-Redis实现:使用Redis的INCR命令实现原子性计数。pythonimportredisr=redis.Redis()defincrement():returnr.incr("counter")-分布式锁实现:使用Redis的SETNX命令。pythondefincrement_with_lock():lock_key="counter_lock"withredis.Lock(r,lock_key,timeout=5):current_value=r.get("counter")ifcurrent_valueisNone:r.set("counter",1)else:r.incr("counter")returnint(current_value)+13.答案:-消息队列设计:-生产者:将消息写入Kafka或RabbitMQ,并确认写入成功。-消费者:从队列中读取消息,使用幂等性保证至少一次传递(如添加消息ID到Redis,处理失败时重试)。pythondefproduce_message(queue_name,message):写入Kafka或RabbitMQpassdefconsume_message(queue_name):whileTrue:message=get_message_from_queue(queue_name)ifmessage:message_id=message["id"]ifnotredis.exists(message_id):redis.set(message_id,"processed")try:process_message(message)except:重试逻辑pass四、数据库与SQL1.答案:sql--查询每个城市年龄最大的用户SELECTname,age,cityFROMusersu1WHEREage=(SELECTMAX(age)FROMusersu2WHEREu2.city=u1.city)--查询年龄在20-30岁之间的用户数量,按城市分组排序SELECTcity,COUNT()asuser_countFROMusersWHEREageBETWEEN20AND30GROUPBYcityORDERBYuser_countDESC2.答案:sql--查询每个用户的订单总金额,只显示总金额大于1000的用户SELECTuser_id,SUM(amount)astotal_amountFROMordersGROUPBYuser_idHAVINGSUM(amount)>1000--查询最近30天内每个用户的订单数量,按数量降序排列SELECTuser_id,COUNT()asorder_countFROMordersWHEREorder_time>=DATE_SUB(CURDATE(),INTERVAL30DAY)GROUPBYuser_idORDERBYorder_countDESC3.答案:-分库分表方案:-用户表:按城市hash分库,每个库内按id分表(水平分表)。-订单表:按用户id的hash分表,支持高并发写入。-避免跨分片JOIN:使用分布式SQL或先聚合再JOIN。五、综合应用1.答案:pythondefanalyze_user_activity(logs):log_dict={}forloginlogs:user_id=log["user_id"]timestamp=log["timestamp"]ifuser_idnotinlog_dict:log_dict[user_id]=[]log_dict[user_id].append(timestamp)result={}foruser_id,timestampsinlog_dict.items():timestamps.sort()total_seconds=0foriinrange(1,len(timestamps)):total_seconds+=timestamps[i]-timestamps[i-1]total_hours=total_seconds/3600result[user_id]=total_hoursreturnresult2.答案:-新闻相似度计算:使用TF-IDF+余弦相似度。pythonfromsklearn.feature_extra

温馨提示

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

评论

0/150

提交评论