版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年互联网公司常见岗位招聘题目解析一、编程与算法题(共5题,每题10分,总分50分)针对行业:-前端开发(React/Vue性能优化)-后端开发(高并发解决方案)-数据工程师(ETL流程设计)题目1(10分):题目:给定一个包含重复元素的数组`arr`,请设计一个算法,找出数组中不重复的元素,并返回它们的数量。要求时间复杂度O(n),空间复杂度O(1)。示例:输入:`arr=[1,2,2,3,4,4,5]`输出:`5`(不重复元素为1,2,3,4,5)答案:pythondefcount_unique_elements(arr):ifnotarr:return0arr.sort()#排序后重复元素相邻count=1#至少有一个唯一元素foriinrange(1,len(arr)):ifarr[i]!=arr[i-1]:count+=1returncount解析:1.排序法:先对数组排序,重复元素会相邻,然后遍历统计唯一元素数量。时间复杂度O(nlogn),但题目要求O(n),需优化。2.哈希表法:使用哈希集合统计元素出现次数,但空间复杂度O(n),不满足要求。3.位运算优化:对于整数数组,可使用位运算标记已遍历的元素(仅适用于特定范围整数),但通用性差。4.正确解法:排序后双指针法,时间O(nlogn),空间O(1)。若题目允许修改原数组,可使用原数组记录状态(如将重复元素置为特殊值),但需明确约束。题目2(10分):题目:实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。缓存容量为`capacity`,当缓存满时,最久未使用的元素将被移除。示例:pythonLRUCache=LRUCache(2)LRUCache.put(1,1)#缓存是{1:1}LRUCache.put(2,2)#缓存是{1:1,2:2}LRUCache.get(1)#返回1LRUCache.put(3,3)#去除键2,缓存是{1:1,3:3}LRUCache.get(2)#返回-1(未找到)答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache=OrderedDict()defget(self,key:int)->int:ifkeynotinself.cache:return-1self.cache.move_to_end(key)#标记为最近使用returnself.cache[key]defput(self,key:int,value:int)->None:ifkeyinself.cache:self.cache.move_to_end(key)#更新位置self.cache[key]=valueiflen(self.cache)>self.capacity:self.cache.popitem(last=False)#移除最久未使用解析:1.哈希表+双向链表:哈希表记录键值对,双向链表维护使用顺序。`get`操作将元素移至队尾,`put`时若已存在则更新,满时删除队首。2.Python内置`OrderedDict`:简化实现,`move_to_end`自动调整顺序。若需严格O(1)可使用`collections.OrderedDict`。3.错误实现:仅使用哈希表,不维护顺序,会导致`get`操作仍需遍历链表,性能下降。题目3(10分):题目:给定一个字符串`s`,找到其中最长的无重复字符的子串长度。示例:输入:`s="abcabcbb"`输出:`3`(最长子串为"abc")答案:pythondeflength_of_longest_substring(s:str)->int:char_set=set()left=0max_len=0forrightinrange(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_len解析:1.滑动窗口法:使用双指针维护无重复字符的子串。`right`扩展窗口,`left`收缩窗口。2.哈希表记录字符上一次出现位置:避免重复遍历,但需额外空间。3.错误实现:暴力枚举所有子串,时间复杂度O(n²),效率低。题目4(10分):题目:实现快速排序(QuickSort)算法,要求使用递归方式,并选择合适的基准点(pivot)策略。示例:输入:`arr=[3,6,8,10,1,2,1]`输出:`[1,1,2,3,6,8,10]`答案: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)解析:1.基准点选择策略:-中位数:避免最坏情况(已排序数组)。-随机数:进一步减少最坏概率。-三数取中:中位数、首元素、尾元素的平均值。2.原地分区法:可优化空间复杂度至O(logn),但代码更复杂。3.错误实现:若选择首元素为基准,在已排序数组中效率极低。题目5(10分):题目:实现一个函数,判断一个字符串是否是有效的括号组合(只考虑`()`、`[]`、`{}`)。示例:输入:`s="()[]{}"`输出:`True`答案:pythondefisValid(s:str)->bool:stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:1.栈结构:左括号入栈,右括号与栈顶匹配。2.映射表加速匹配:避免重复查找。3.错误实现:使用哈希集合判断,无法记录括号配对顺序。二、系统设计题(共3题,每题15分,总分45分)针对行业:-后端架构师(分布式系统设计)-高级开发(微服务拆分)题目6(15分):题目:设计一个高并发的短链接系统,要求:1.输入长链接,输出短链接(如6位随机字母)。2.支持快速跳转(短链接解析为长链接)。3.具备分布式扩展能力。约束:-短链接长度不超过6位。-QPS要求>10万。答案:1.短链接生成:-使用62进制(a-z,A-Z,0-9)编码,如`1`编码为`abc`。-映射表存储`short->long`,如`abc`对应`/abc`。pythonimportbase64importrandomclassShortLinkService:def__init__(self):self.base="/"self.characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"self.id_map={}self.reverse_map={}def_encode(self,num:int)->str:encoded=""whilenum:num,rem=divmod(num,62)encoded=self.characters[rem]+encodedreturnencoded.zfill(6)#补足6位defget_short_link(self,long_url:str)->str:iflong_urlinself.id_map:returnself.base+self.id_map[long_url]id_=random.randint(1,1012)short_code=self._encode(id_)self.id_map[long_url]=short_codeself.reverse_map[short_code]=long_urlreturnself.base+short_codedefget_long_link(self,short_code:str)->str:returnself.reverse_map.get(short_code,"Notfound")2.分布式扩展:-使用Redis/ZooKeeper实现`id_map`分布式存储。-负载均衡分配短链接ID生成器。解析:1.编码方式:62进制可生成大量短链接。2.冲突处理:随机数+映射表,概率极低冲突。若冲突则重新生成。3.分布式挑战:-ID生成器:可使用TwitterSnowflake算法生成全局唯一ID。-缓存层:Redis缓存热点短链接,减少DB查询。题目7(15分):题目:设计一个支持高并发的实时推荐系统,要求:1.用户访问时,需根据其历史行为和实时行为推荐商品。2.支持毫秒级响应。3.可水平扩展。约束:-用户数千万级。-商品数百万级。答案:1.系统架构:-数据层:HBase/Redis存储用户行为日志、商品特征、用户画像。-计算层:-实时计算:Flink/SparkStreaming处理实时行为流,更新用户兴趣向量。-离线计算:每日使用ALS/GBDT计算用户-商品相似度矩阵。-服务层:-推荐API:基于实时兴趣向量+离线相似度,使用LRU缓存热点推荐。-缓存策略:Redis缓存用户实时推荐结果。2.核心算法:python简化伪代码defget_recommendations(user_id,real_time_actions,cache):ifcache.exists(user_id):returncache.get(user_id)real_time_score=compute_real_time_score(real_time_actions)offline_score=get_offline_score(user_id)final_score=real_time_score0.3+offline_score0.7top_items=rank_items_by_score(final_score)cache.set(user_id,top_items,expire=300)#缓存300秒returntop_items3.扩展性设计:-微服务拆分:按用户分片(如`user_id%100`),每个服务独立扩容。-异步更新:离线计算结果通过消息队列(Kafka)推送到实时服务。解析:1.实时性优化:-冷启动:新用户使用离线推荐,待行为积累后切换实时推荐。-增量更新:仅处理新行为,而非全量重算。2.扩展性挑战:-数据倾斜:热门用户需单点扩容或动态路由。-消息队列:保证计算链路异步不阻塞API。题目8(15分):题目:设计一个支持海量用户地理位置共享的实时社交系统(如微信位置共享),要求:1.用户可实时更新位置,并查看附近其他用户。2.支持地理围栏(如仅显示5km内用户)。3.具备高可用和低延迟。约束:-用户数亿级。-地理位置更新频率高。答案:1.数据结构:-用户位置存储:RedisGEO数据结构(`GEOADD`、`GEORADIUS`)。-内存维护:热点用户位置使用LRU缓存,避免频繁DB查询。2.核心逻辑:python伪代码defupdate_location(user_id,lat,lng):redis.geoadd("user_locations",lng,lat,user_id)redis.expire("user_locations",600)#10分钟过期defget_nearby_users(user_id,lat,lng,radius=5000):ifcache.exists(user_id):returncache.get(user_id)result=redis.georadius("user_locations",lng,lat,radius,withdist=True,withcoord=True)nearby_users=parse_radius_result(result)cache.set(user_id,nearby_users,expire=60)#缓存1分钟returnnearby_users3.高可用设计:-分布式Redis集群:使用哨兵或RedisCluster。-位置分片:按经纬度范围分片,如`lat/lng`的模运算。解析:1.性能优化:-空间换时间:GEO索引牺牲空间存储坐标,但查询快。-批量更新:用户批量移动时,先缓存再异步批量`GEOADD`。2.延迟问题:-预加载:用户进入区域前预加载附近用户,使用WebSocket推送实时更新。-异步更新:位置变更通过消息队列异步同步,API直接返回缓存结果。三、综合能力题(共2题,每题20分,总分40分)针对行业:-产品经理(需求分析)-运维工程师(故障排查)题目9(20分):题目:假设你是某短视频平台的用户增长产品经理,需要设计一个“好友推荐”功能。请回答:1.如何定义“好友推荐”的标准?2.如何保证推荐结果的相关性和多样性?3.若推荐效果不达标,你会如何优化?答案:1.推荐标准:-共同兴趣:关注相同话题/创作者的用户。-社交关系:共同好友/粉丝数/互动历史。-地理位置:附近用户(用于线下活动)。-活跃度:优先推荐活跃用户。2.相关性+多样性平衡:python伪代码示例defrecommend_friends(user_id,graph,interests,nearby_users):common_interests=get_common_interests(user_id,interests)mutual_friends=get_mutual_friends(user_id,graph)nearby=get_top_n(nearby_users,10)candidates=set(common_interests+mutual_friends+nearby)diversity=add_diverse_users(candidates,user_id,graph)returnrank_by_score(candidates,user_id)3.优化策略:-A/B测试:对比不同推荐算法的效果。-用户反馈:允许用户反馈不感兴趣的人,动态调整模型。-冷启动:新用户先推荐系统管理员推荐的人。解析:1.社交推荐难点:-信息茧房:过度推荐相似用户导致体验单一。-冷启动:新用户缺乏足够数据。2.数据驱动优化:-CTR/CVR:用点击率/互动率评估推荐效果。-用户画像:结合年龄/性别/话题偏好进行推荐。题目1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大师工作室对外培训制度
- 政务大厅教育培训制度
- 用字规范培训制度
- 后勤员工安全培训制度
- 妇联培训管理制度
- 供电培训制度
- 大连工程咨询培训制度
- 2026年世界五百强企业管理人员竞聘试题解析
- 电锅炉岗位培训制度
- 公司实习培训学习制度
- 第四单元地理信息技术的应用课件 【高效课堂+精研精讲】高中地理鲁教版(2019)必修第一册
- 鲁科版高中化学必修一教案全册
- 管理养老机构 养老机构的服务提供与管理
- 提高隧道初支平整度合格率
- 2022年环保标记试题库(含答案)
- 2023年版测量结果的计量溯源性要求
- 建筑能耗与碳排放研究报告
- GB 29415-2013耐火电缆槽盒
- 中国古代经济试题
- 真空采血管的分类及应用及采血顺序课件
- 软件定义汽车:产业生态创新白皮书
评论
0/150
提交评论