版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年互联网行业软件工程师面试问题集一、编程基础与数据结构(共5题,总分25分)题目1(5分)请实现一个函数,输入一个非负整数n,返回它的二进制表示中1的个数。例如,输入5(二进制为101),返回2。答案与解析:pythondefcount_bits(n):count=0whilen:n&=(n-1)count+=1returncount解析:该算法利用了BrianKernighan算法,每次操作会将n最右边的1变为0,直到n变为0。时间复杂度为O(位数),对于32位整数最多32次操作。题目2(5分)给定一个包含n个整数的数组,设计一个算法找出其中多数元素(出现次数超过n/2),要求时间复杂度为O(n)空间复杂度为O(1)。答案与解析:pythondefmajority_element(nums):count=0candidate=Nonefornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)returncandidate解析:Boyer-Moore投票算法。初始化计数器为0,遍历数组时,如果计数器为0则将当前元素设为候选,否则根据当前元素是否等于候选增减计数器。由于多数元素出现次数超过一半,最终候选就是多数元素。题目3(5分)实现一个LRU(最近最少使用)缓存,支持get和put操作,要求get操作时间复杂度为O(1),put操作时间复杂度为O(1)。答案与解析:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)解析:使用哈希表存储键值对,维护一个双向链表记录访问顺序。get操作时将访问的键移动到链表尾部,put操作时如果键已存在则更新值并将键移动到尾部,如果超出容量则删除链表头部元素。题目4(5分)请实现快速排序算法,并说明其时间复杂度和空间复杂度。答案与解析:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:快速排序的平均时间复杂度为O(nlogn),最坏情况为O(n²)。空间复杂度为O(logn),因为递归调用栈的深度。题目5(5分)设计一个算法判断二叉树是否是平衡二叉树(即任意节点的左右子树高度差不超过1)。答案与解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root):defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:使用后序遍历方式,同时计算高度和平衡状态。如果任意节点不平衡,则整个树不平衡。二、算法与设计(共5题,总分30分)题目6(6分)设计一个算法,给定一个字符串,找出其中不重复的最长子串长度。例如,输入"abcabcbb",返回3("abc")。答案与解析:pythondeflength_of_longest_substring(s:str)->int:char_map={}left=0max_len=0forright,charinenumerate(s):ifcharinchar_mapandchar_map[char]>=left:left=char_map[char]+1char_map[char]=rightmax_len=max(max_len,right-left+1)returnmax_len解析:滑动窗口算法。维护一个窗口[left,right]表示当前不重复子串,哈希表记录字符上一次出现位置。如果遇到重复字符且位置大于等于left,则将left移动到重复字符后一位。题目7(6分)设计一个算法实现LRU缓存的高效实现,要求使用Python实现,并说明时间复杂度。答案与解析:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)解析:使用哈希表存储键值对,维护一个双向链表记录访问顺序。get操作将访问的键移动到链表尾部,put操作如果键已存在则更新值并将键移动到尾部,如果超出容量则删除链表头部元素。题目8(6分)设计一个算法,给定一个整数数组,找出其中和为特定值的最长子数组长度。例如,输入[1,-2,3,5,-1,2],和为3,返回4(子数组[1,-2,3,5])。答案与解析:pythondeflength_of_subarray_with_sum(nums,target):sum_map={0:-1}current_sum=0max_len=0fori,numinenumerate(nums):current_sum+=numifcurrent_sum-targetinsum_map:max_len=max(max_len,i-sum_map[current_sum-target])ifcurrent_sumnotinsum_map:sum_map[current_sum]=ireturnmax_len解析:使用前缀和哈希表。记录前缀和第一次出现的位置,如果当前前缀和与target之差在哈希表中,则表示从该位置到当前位置的子数组和为target。题目9(6分)设计一个算法,给定一个包含n个整数的数组,找出其中最长上升子序列的长度。例如,输入[10,9,2,5,3,7,101,18],返回4([2,5,7,101])。答案与解析:pythondeflength_of_lis(nums):tails=[]fornuminnums:left,right=0,len(tails)whileleft<right:mid=(left+right)//2iftails[mid]<num:left=mid+1else:right=midifleft==len(tails):tails.append(num)else:tails[left]=numreturnlen(tails)解析:使用二分查找维护一个tails数组,tails[i]表示长度为i+1的上升子序列的最小末尾元素。遍历数组时,如果当前元素大于tails最后一个元素则添加到tails末尾,否则找到第一个大于等于当前元素的元素并替换。题目10(6分)设计一个算法,给定一个包含n个整数的数组,找出其中和为特定值的最长子数组长度。例如,输入[1,-2,3,5,-1,2],和为3,返回4(子数组[1,-2,3,5])。答案与解析:pythondeflength_of_subarray_with_sum(nums,target):sum_map={0:-1}current_sum=0max_len=0fori,numinenumerate(nums):current_sum+=numifcurrent_sum-targetinsum_map:max_len=max(max_len,i-sum_map[current_sum-target])ifcurrent_sumnotinsum_map:sum_map[current_sum]=ireturnmax_len解析:使用前缀和哈希表。记录前缀和第一次出现的位置,如果当前前缀和与target之差在哈希表中,则表示从该位置到当前位置的子数组和为target。三、系统设计(共5题,总分30分)题目11(6分)设计一个简单的微博系统,需要支持用户发布微博、关注/取消关注用户、获取关注用户的最新微博。说明系统架构和关键组件。答案与解析:系统架构:1.用户服务:管理用户信息、登录认证2.微博服务:处理微博发布、存储、检索3.关注关系服务:管理用户关注关系4.消息队列:处理异步操作5.缓存:缓存热点数据6.数据库:持久化存储关键组件:-微博发布:用户发布微博时,微博服务接收请求,验证用户权限,将微博数据写入数据库,并更新关注用户的缓存数据-关注关系:用户关注/取消关注时,关注关系服务更新数据库,并通知相关用户更新缓存-微博获取:用户获取关注用户的最新微博时,先从缓存中获取,缓存未命中则从数据库查询,并按时间倒序返回题目12(6分)设计一个短URL生成系统,要求:1.支持将长URL转换为短URL2.支持将短URL解析为原始长URL3.系统高可用、高并发答案与解析:系统设计:1.URL转换服务:接收长URL,生成短URL,存储映射关系2.缓存服务:缓存热点URL映射,提高解析效率3.分布式数据库:持久化存储URL映射关系4.负载均衡器:分发请求到不同服务器5.服务发现:动态注册/发现服务实例关键算法:-短URL生成:使用hash算法(如MD5)或自增ID+base62编码生成短标识-URL解析:根据短标识从缓存或数据库查询原始URL高可用设计:-使用Redis等缓存提高解析性能-数据库主从复制和读写分离-异步处理URL转换请求题目13(6分)设计一个高并发的秒杀系统,需要考虑系统架构、数据一致性、防止恶意刷单等问题。答案与解析:系统架构:1.验证服务:校验用户资格、库存2.订单服务:创建订单、处理支付3.库存服务:扣减库存4.消息队列:异步处理订单5.缓存:缓存库存和订单信息关键设计:-分布式锁:使用Redis或Zookeeper实现分布式锁,保证库存扣减和订单创建的一致性-行锁:在数据库层面使用行锁或乐观锁防止超卖-熔断器:防止系统过载-请求去重:使用分布式缓存或布隆过滤器防止重复请求数据一致性:-使用2PC或SAGA模式保证事务一致性-利用消息队列实现最终一致性防止恶意刷单:-限制用户购买频率-人机验证-监控异常行为并限制IP题目14(6分)设计一个简单的消息推送系统,需要支持多种推送渠道(短信、App推送、微信等)。答案与解析:系统架构:1.推送管理服务:管理推送任务、调度2.渠道适配器:封装不同推送渠道的API3.用户服务:管理用户设备信息4.消息队列:异步处理推送任务5.缓存:缓存用户设备信息关键设计:-插件式架构:为每种推送渠道设计适配器,便于扩展-消息模板管理:支持多种消息模板-推送状态跟踪:记录推送状态(待发送、发送中、成功、失败)-定时任务:处理延迟推送高并发设计:-使用消息队列解耦推送服务-负载均衡器分发推送请求-缓存用户设备信息减少数据库访问题目15(6分)设计一个分布式文件存储系统,要求支持文件上传、下载、删除,并保证数据高可用。答案与解析:系统架构:1.文件服务:处理文件上传、下载请求2.元数据服务:存储文件元数据(文件名、大小、存储位置等)3.存储节点:实际存储文件数据4.分布式锁:保证文件操作的一致性5.数据库:持久化存储元数据6.缓存:缓存热点元数据关键设计:-文件分片:将大文件切分成多个分片存储在不同节点-一致性哈希:保证文件分片存储的均衡性-数据冗余:每个文件分片存储多个副本,实现高可用-文件版本控制:支持文件版本管理高可用设计:-元数据服务使用集群部署和主从复制-存储节点定期同步数据-使用心跳检测和自动故障转移-使用分布式锁保证文件操作的原子性四、数据库与存储(共5题,总分25分)题目16(5分)设计一个数据库表来存储用户信息,包括用户基本信息、联系方式和地址信息。要求表结构合理,并说明索引设计。答案与解析:表结构:sqlCREATETABLEusers(user_idBIGINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)NOTNULLUNIQUE,emailVARCHAR(100)NOTNULLUNIQUE,phoneVARCHAR(20),password_hashVARCHAR(255)NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);CREATETABLEuser_profiles(profile_idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,first_nameVARCHAR(50),last_nameVARCHAR(50),addressVARCHAR(255),cityVARCHAR(100),stateVARCHAR(100),zip_codeVARCHAR(10),countryVARCHAR(50),FOREIGNKEY(user_id)REFERENCESusers(user_id));索引设计:-users表:user_id主键,username和email唯一索引-user_profiles表:user_id外键索引,用于快速查找用户地址信息题目17(5分)解释数据库事务的ACID特性,并说明在实际应用中如何保证事务的隔离性。答案与解析:ACID特性:-原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不做-一致性(Consistency):事务必须使数据库从一个一致性状态转移到另一个一致性状态-隔离性(Isolation):一个事务的执行不能被其他事务干扰-持久性(Durability):一旦事务提交,其对数据库的更改就是永久性的保证隔离性:-使用事务隔离级别(读未提交、读已提交、可重复读、串行化)-在高并发场景下,可重复读或串行化能更好地保证隔离性-使用锁机制(行锁、表锁)防止并发冲突-使用乐观锁通过版本号或CAS操作解决冲突题题18(5分)设计一个数据库表来存储订单信息,包括订单基本信息、商品信息和地址信息。要求表结构合理,并说明索引设计。答案与解析:表结构:sqlCREATETABLEorders(order_idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,order_dateTIMESTAMPDEFAULTCURRENT_TIMESTAMP,total_amountDECIMAL(10,2)NOTNULL,statusVARCHAR(20)NOTNULL,FOREIGNKEY(user_id)REFERENCESusers(user_id));CREATETABLEorder_items(item_idBIGINTPRIMARYKEYAUTO_INCREMENT,order_idBIGINTNOTNULL,product_idBIGINTNOTNULL,quantityINTNOTNULL,priceDECIMAL(10,2)NOTNULL,FOREIGNKEY(order_id)REFERENCESorders(order_id));CREATETABLEorder_addresses(address_idBIGINTPRIMARYKEYAUTO_INCREMENT,order_idBIGINTNOTNULL,address_typeVARCHAR(20)NOTNULL,--发货/收货streetVARCHAR(255),cityVARCHAR(100),stateVARCHAR(100),zip_codeVARCHAR(10),countryVARCHAR(50),FOREIGNKEY(order_id)REFERENCESorders(order_id));索引设计:-orders表:order_id主键,user_id索引-order_items表:item_id主键,order_id索引-order_addresses表:address_id主键,order_id索引题目19(5分)解释数据库索引的B+树原理,并说明什么时候应该创建索引。答案与解析:B+树原理:-B+树是一种自平衡树,所有数据都存储在叶子节点,非叶子节点只存储键值信息-叶子节点之间通过指针相连,形成有序链表,便于范围查询-B+树的所有操作(查找、插入、删除)都能保持对数时间复杂度创建索引的时机:-经常作为查询条件的列:如用户表的username、email-经常用于排序的列:如订单表的order_date-经常用于连接的列:如订单项表的order_id-经常用于聚合的列:如商品表的category题目20(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山东传媒职业学院高职单招职业适应性测试备考试题及答案详解
- 2026年潍坊科技学院高职单招职业适应性考试参考题库及答案详解
- 2026年郑州科技学院高职单招职业适应性测试备考试题及答案详解
- 2026年南京视觉艺术职业学院高职单招职业适应性测试备考题库及答案详解
- 2026年四川文轩职业学院单招职业技能笔试备考试题及答案详解
- 电工(高级)资格证考试考试黑钻押题及完整答案详解(夺冠)
- 2026年三亚中瑞酒店管理职业学院高职单招职业适应性考试参考题库及答案详解
- 2026年浙江建设职业技术学院高职单招职业适应性考试模拟试题及答案详解
- 2023年-2024年有害生物防治员考试题库附答案
- 2025年车工工艺试题库含答案
- 2025新疆阿瓦提县招聘警务辅助人员120人参考笔试题库及答案解析
- 贵州国企招聘:2025贵州盐业(集团)有限责任公司贵阳分公司招聘考试题库附答案
- 股东会清算协议书
- 2026年湖南工程职业技术学院单招职业倾向性测试题库及完整答案详解1套
- 2025年春国家开放大学《消费者行为学》形考任务1-3+课程实训+案例讨论参考答案
- 第7课 月亮是从哪里来的 教学课件
- 2025-2026学年小学美术浙美版(2024)二年级上册期末练习卷及答案
- 会所软装合同范本
- 单证主管助理客户服务能力提升方案
- 商用空气能系统应用与维护培训
- 员工的压力与关怀
评论
0/150
提交评论