版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年互联网校招面试题精一、编程能力测试(3题,每题10分,共30分)1.编程题:实现一个LRU(LeastRecentlyUsed)缓存机制请用Python实现LRU缓存,支持get和put操作。要求:-使用链表和哈希表结合的方式实现。-get操作返回键对应的值,若不存在返回-1。-put操作将键值对插入缓存,若键已存在则更新值并移动到链表头部,若缓存已满则删除链表尾部元素。答案与解析:pythonclassListNode:def__init__(self,key=0,value=0,prev=None,next=None):self.key=keyself.value=valueself.prev=prevself.next=nextclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key]self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:tail=self.tail.prevdelself.cache[tail.key]self._remove_node(tail)new_node=ListNode(key,value)self.cache[key]=new_nodeself._add_node(new_node)def_move_to_head(self,node:ListNode)->None:self._remove_node(node)self._add_node(node)def_add_node(self,node:ListNode)->None:node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node:ListNode)->None:node.prev.next=node.nextnode.next.prev=node.prev解析:-哈希表用于O(1)时间复杂度访问节点。-链表用于维护访问顺序,头部为最近访问,尾部为最久未访问。-删除和添加操作需保持链表双向性。2.编程题:实现快速排序算法的非递归版本请用Java实现快速排序的非递归版本,要求:-使用栈来模拟递归过程。-输入数组为`[4,1,3,1,6,9,7]`,输出排序后数组。答案与解析:javaimportjava.util.Stack;publicclassQuickSortIterative{publicstaticvoidquickSort(int[]arr){if(arr==null||arr.length<=1)return;Stack<Integer>stack=newStack<>();stack.push(0);stack.push(arr.length-1);while(!stack.isEmpty()){intend=stack.pop();intstart=stack.pop();intpivotIndex=partition(arr,start,end);if(start<pivotIndex-1){stack.push(start);stack.push(pivotIndex-1);}if(pivotIndex+1<end){stack.push(pivotIndex+1);stack.push(end);}}}privatestaticintpartition(int[]arr,intstart,intend){intpivot=arr[end];inti=start-1;for(intj=start;j<end;j++){if(arr[j]<=pivot){i++;swap(arr,i,j);}}swap(arr,i+1,end);returni+1;}privatestaticvoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}publicstaticvoidmain(String[]args){int[]arr={4,1,3,1,6,9,7};quickSort(arr);for(intnum:arr){System.out.print(num+"");}}解析:-栈存储当前子数组的起始和结束索引。-每次弹出时进行分区,并将左右子数组入栈。-递归终止条件为栈为空。3.编程题:设计一个无重复字符的最长子串请用C++实现,输入字符串`"abcabcbb"`,输出最长无重复字符子串的长度。答案与解析:cppclassSolution{public:intlengthOfLongestSubstring(strings){intn=s.length();intleft=0,right=0;intmax_len=0;unordered_set<char>char_set;while(right<n){if(char_set.find(s[right])==char_set.end()){char_set.insert(s[right]);max_len=max(max_len,right-left+1);right++;}else{char_set.erase(s[left]);left++;}}returnmax_len;}};解析:-使用滑动窗口技术,left和right表示窗口边界。-哈希集合用于检查字符是否重复。-时间复杂度O(n),空间复杂度O(min(m,n)),m为字符集大小。二、系统设计(2题,每题15分,共30分)1.系统设计题:设计一个短链接系统(如tinyURL)要求:-输入长链接,输出短链接。-支持自定义前缀(如`/`)。-支持反向解析,通过短链接获取长链接。-高并发场景下仍能稳定运行。答案与解析:系统架构:-前端服务:接收长链接请求,生成短链接并返回。-数据库:存储长链接与短链接的映射关系。-缓存:Redis缓存热点短链接,加速查询。-负载均衡:Nginx分发请求到多个前端服务。关键点:-短链接生成:-使用Base62编码(a-z、A-Z、0-9)将ID映射为短字符串。-ID可使用自增ID或UUID。-数据存储:-关系型数据库(如MySQL)存储映射关系,索引键。-热点数据用Redis缓存,设置过期时间。-高并发处理:-前端服务用无状态架构,可水平扩展。-分布式锁防止ID冲突(如使用RedisLock)。示例:mermaidgraphLRA[用户请求长链接]-->B{前端服务};B-->C{判断缓存};C--存在-->D[返回短链接];C--不存在-->E{生成短链接};E-->F{存储到数据库};F-->G{缓存到Redis};G-->D;D-->H[用户访问短链接];H-->I{解析短链接};I-->J{查询数据库/缓存};J-->K[返回长链接];2.系统设计题:设计一个微博关注系统要求:-用户可以关注/取消关注其他用户。-支持查看某用户的所有粉丝。-支持查看某用户的关注列表。-支持实时通知关注动态。答案与解析:数据模型:-用户表(User):存储用户基本信息。-关注关系表(Follow):存储一对多关系(用户ID、关注者ID)。-动态表(Post):存储用户发布的动态。-实时通知表(Notification):存储关注动态的通知。架构设计:-关注关系:-Follow表使用自增ID或用户ID+关注者ID作为复合主键。-查询关注列表时使用左连接查询。-实时通知:-使用WebSocket或MQ(如Kafka)推送动态。-Redis订阅关注关系变更事件。-性能优化:-关注列表使用缓存(如Redis)存储,设置过期时间。-动态查询使用分页(如Twitter的12条/24条)。示例:sql--关注关系表CREATETABLEFollow(user_idINT,follower_idINT,created_atTIMESTAMP,PRIMARYKEY(user_id,follower_id),FOREIGNKEY(user_id)REFERENCESUser(id),FOREIGNKEY(follower_id)REFERENCESUser(id));三、数据库与SQL(3题,每题10分,共30分)1.SQL题:查询最近30天活跃用户数表结构:sqlCREATETABLEUserActivity(user_idINT,actionVARCHAR(10),timestampDATETIME);输出:最近30天至少有一条`action='login'`的用户数量。答案与解析:sqlSELECTCOUNT(DISTINCTuser_id)ASactive_usersFROMUserActivityWHEREaction='login'ANDtimestamp>=NOW()-INTERVAL30DAY;解析:-`DISTINCT`确保用户只被统计一次。-`INTERVAL30DAY`计算时间范围。2.SQL题:查询每条订单的平均处理时长表结构:sqlCREATETABLEOrders(order_idINT,created_atDATETIME,processed_atDATETIME);输出:订单ID和平均处理时长(秒)。答案与解析:sqlSELECTorder_id,TIMESTAMPDIFF(SECOND,created_at,processed_at)ASavg_durationFROMOrdersGROUPBYorder_id;解析:-`TIMESTAMPDIFF`计算时间差。-由于每条订单只有一个处理时间,直接返回该值。3.SQL题:查询库存不足的订单表结构:sqlCREATETABLEOrders(order_idINT,product_idINT,quantityINT);CREATETABLEInventory(product_idINT,stockINT);输出:订单ID和商品ID。答案与解析:sqlSELECTo.order_id,duct_idFROMOrdersoJOINInventoryiONduct_id=duct_idWHEREo.quantity>i.stock;解析:-内连接匹配订单和库存。-条件过滤库存不足的订单。四、综合分析(2题,每题15分,共30分)1.综合题:设计一个高并发秒杀系统要求:-用户秒杀成功后,库存立即减1。-防止超卖和恶意刷单。-支持秒杀活动的定时开启/关闭。答案与解析:架构设计:-分布式锁:-使用Redis或ZooKeeper实现分布式锁,防止超卖。-锁值包含商品ID和过期时间。-队列系统:-用户请求先入MQ(如RabbitMQ),批量处理。-消息队列解耦请求和库存操作。-定时任务:-使用Cron或任务调度框架控制秒杀时间。-活动关闭时清空临时订单。关键点:-库存扣减:-使用数据库事务或Redis事务保证原子性。-库存表加锁或使用乐观锁。-防作弊:-限制用户请求频率。-识别异常IP和设备。2.综合题:设计一个实时推荐系统(如淘宝商品推荐)要求:-输入用户ID和当前浏览的商品ID,输出推荐商品列表。-推荐逻辑包括协同过滤和内容推荐。-支持离线计算和在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二节 力的合成说课稿2025学年初中物理沪科版八年级全一册-沪科版2012
- 2026年会计实务考试冲刺题库
- 2026年师范生体育说课稿教案
- 2026年中国恒丰招聘笔试模拟题
- 2026年企业内部管理培训题集大全
- 2026年中学生物实验报告写作指导
- 2026年高盛面试题含行为面试
- 2026年银行理财业务基础知识培训
- 2026年小学语文面试高频考点解析
- 2026年汽车驾驶基础知识
- 2026年大学生志愿服务西部计划题库
- 2026年禁毒人员笔试试题及答案
- 人教版七年级数学下册93一元一次不等式组应用题课件(25张)
- 湖北省鄂州市2025-2026学年九年级下学期4月份中考模拟练习语文试题(含答案)
- 2026云南昆明市五华区国有资产投资经营管理有限公司招聘14人考试模拟试题及答案解析
- 2026八年级劳动国家质量监测考试卷含答案
- 第19课《登勃朗峰》课件 统编版语文八年级下册
- 2026年度“市委书记进校园”引才活动绥化市人才引进254人考试参考试题及答案解析
- 2026年广州铁路职业技术学院单招综合素质考试题库附答案详解(综合卷)
- 2026年希望杯IHC六年级数学竞赛试卷(B卷)(含答案)
- 【答案】《无人驾驶车辆》(北京理工大学)章节期末慕课答案
评论
0/150
提交评论