版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年中国市场下:高级工程师面试题及答案解析一、编程与算法(5题,每题20分,共100分)1.题目:请实现一个函数,输入一个整数数组,返回数组中所有三个整数相加等于零的个数。不能重复计算相同的组合。例如,输入`[2,7,11,15,-2,-1,1,-5,0]`,输出为`4`(组合为`[-2,-1,3]`、`[-2,0,2]`、`[-5,1,4]`、`[0,0,0]`)。答案:pythondefthree_sum(nums):nums.sort()n=len(nums)count=0foriinrange(n-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==0:count+=1whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<0:left+=1else:right-=1returncount解析:首先对数组进行排序,以方便使用双指针法。遍历数组时,对于每个`nums[i]`,使用左右指针`left`和`right`分别指向`i+1`和`n-1`。若三数之和等于零,则计数并移动指针以避免重复计算;若小于零,则左指针右移;若大于零,则右指针左移。时间复杂度为`O(n²)`,空间复杂度为`O(1)`。2.题目:请设计一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。缓存容量为`capacity`。例如:-初始化`LRU(2)`,调用`put(1,1)`后缓存为`{1:1}`,调用`put(2,2)`后缓存为`{1:1,2:2}`,调用`get(1)`返回`1`(最近使用`1`),调用`put(3,3)`时容量不足,需删除最久未使用的`2`,缓存变为`{1:1,3:3}`。答案: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:node=ListNode(key,value)self.cache[key]=nodeself._add_node(node)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]def_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_pop_tail(self):res=self.tail.prevself._remove_node(res)returnres解析:LRU缓存通过双向链表和哈希表实现。双向链表维护最近使用顺序,哈希表实现`O(1)`的`get`和`put`。`get`操作将节点移动到头部,`put`操作插入新节点并删除最久未使用的节点(若超出容量)。3.题目:给定一个字符串`s`,返回其中最长的回文子串的长度。例如,输入`"babad"`,输出为`3`("bab"或"aba")。答案:pythondeflongest_palindrome(s:str)->int:ifnots:return0n=len(s)dp=[[False]nfor_inrange(n)]max_len=1foriinrange(n):dp[i][i]=Trueforiinrange(n-1):ifs[i]==s[i+1]:dp[i][i+1]=Truemax_len=2forlengthinrange(3,n+1):foriinrange(n-length+1):j=i+length-1ifs[i]==s[j]anddp[i+1][j-1]:dp[i][j]=Truemax_len=lengthreturnmax_len解析:动态规划解法。`dp[i][j]`表示`s[i..j]`是否为回文。初始化单字符为回文,检查相邻字符,然后扩展子串长度。时间复杂度为`O(n²)`,空间复杂度为`O(n²)`。4.题目:设计一个算法,找到无重复字符的最长子串的长度。例如,输入`"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解析:滑动窗口解法。使用`left`和`right`指针维护窗口,`char_set`记录窗口中的字符。若`right`字符已存在,则移动`left`直到去重。时间复杂度为`O(n)`,空间复杂度为`O(min(n,m))`(`m`为字符集大小)。5.题目:给定一个二叉树,判断其是否为平衡二叉树(左右子树高度差不超过1)。例如:3/\920/\157是平衡二叉树。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool: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]解析:递归解法。`check`函数返回子树高度和是否平衡。若左右子树均平衡且高度差不超过1,则当前树平衡。时间复杂度为`O(n)`,空间复杂度为`O(h)`(`h`为树高度)。二、系统设计(3题,每题30分,共90分)1.题目:设计一个支持高并发的短链接系统。要求:-输入长链接,输出短链接(如`/abc123`)。-支持分布式存储和快速跳转。-具备一定的防攻击能力(如限制访问频率)。答案:1.短链接生成:使用哈希函数(如`hash(url)%10000`)生成6位短码,结合随机前缀避免冲突。2.分布式存储:将短链接与长链接存储在Redis(热点数据)和分布式文件系统(如HDFS)。3.防攻击:Redis设置过期时间,限制短链接访问频率(如每个IP每分钟不超过100次)。4.跳转实现:解析短码,查询Redis,若未命中则查询HDFS,返回长链接。解析:核心在于短码生成、分布式存储和防攻击。Redis用于高并发缓存,HDFS用于持久化存储。2.题目:设计一个实时日志分析系统,要求:-支持每秒百万级别的日志接入。-实时统计词频最高的Top10词。-支持关键词过滤(如禁止"error")。答案:1.日志接入:使用Kafka(分布式队列)接收日志,分批发送到Flume(收集器)。2.词频统计:Flume将日志写入HDFS,MapReduce或Spark进行分词和词频统计,结果存入Redis。3.实时Top10:Redis使用`SortedSet`维护词频,客户端按需查询。4.关键词过滤:Flume配置正则过滤规则,拒绝包含禁止词的日志。解析:Kafka+Flume+Spark+Redis架构。Kafka抗峰值,Spark处理大数据,Redis实时统计。3.题目:设计一个高并发的秒杀系统。要求:-每秒百万请求,库存秒杀完毕。-防止超卖和秒杀作弊。答案:1.库存锁:使用Redis的`SETNX`命令锁定库存,成功则扣减,失败则返回库存不足。2.分布式锁:若单机Redis压力过大,使用Redisson或ZooKeeper实现分布式锁。3.防作弊:用户验证码、手机号绑定,限制IP和用户购买上限。4.结果通知:秒杀成功后,通过WebSocket或MQ推送结果。解析:核心是库存锁和防作弊。Redis`SETNX`保证原子性,分布式锁解决多机问题。三、数据库与中间件(2题,每题20分,共40分)1.题目:数据库分库分表方案设计。假设某电商平台订单表`orders`数据量达10亿,设计分库分表策略。答案:1.分库:按业务线分库,如订单库、商品库。使用ShardingSphere或MyCAT实现分库路由。2.分表:按时间或ID分表,如`orders_2023`、`orders_2024`,或哈希分表`orders_hash`。3.索引优化:分表后重建索引,使用多级索引(如`user_id`+`order_time`)。解析:分库解决单库压力,分表提升查询效率。分表键需保证数据均匀分布。2.题目:设计一个高可用消息队列,要求:-支持毫秒级延迟。-保证消息至少传递一次。答案:1.消息队列:使用RabbitMQ或RocketMQ,集群部署(如RabbitMQ3节点)。2.延迟消息:RabbitMQ使用死信队列+TTL,RocketMQ支持定时消息。3.至少一次传递:开启消息确认机制(ack),客户端手动ACK。解析:核心是集群部署和消息确认。RabbitMQ适合简单场景,RocketMQ支持更复杂特性。四、网络与安全(2题,每题15分,共30分)1.题目:HTTPS协议中,如何保证数据传输的安全性?答案:1.对称加密:TLS握手后使用AES加密数据。2.非对称加密:RSA或ECDHE交换对称密钥。3.完整性校验:HMAC+SHA256防止篡改。4.证书认证:CA签发的证书验证服务端身份。解析:HTTPS通过混合加密保证安全,非对称加密交换对称密钥,HMAC校验完整性。2.题目:设计一个防止DDoS攻击的方案。答案:1.流量清洗:使用Cloudflare或阿里云WAF过滤异常流量。2.限流:Nginx或API网关限制IP请求频率。3.黑白名单:配置禁止IP段,允许正常用户请求。4.弹性伸缩:自动增加服务器应对突发流量。解析:DDoS攻击需多层防御,流量清洗+限流+弹性伸缩是常用方案。五、项目与架构(2题,每题15分,共30分)1.题目:设计一个高并发的秒杀系统架构。答案:1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物标志物在药物临床试验中的医学研究意义
- 生物制剂临床试验中生物样本库管理规范
- 深度解析(2026)《GBT 20529.2-2010企业信息分类编码导则 第2部分:分类编码体系》
- 餐饮业门店经理面试问题集
- 生活质量干预方案
- 深度解析(2026)《GBT 19475.2-2004缩微摄影技术 开窗卡扫描仪制作影像质量的测量方法 第2部分质量要求和控制 》
- 工程项目经理中级职位的答案解析
- 瓣膜性房颤患者卒中预防
- 深度解析(2026)《GBT 19352.4-2003热喷涂 热喷涂结构的质量要求 第4部分基本的质量要求》
- 年产xxx复式水表项目可行性分析报告
- 与认知障碍老年人沟通
- 《成都市智能建造人工智能(AI)应用指南(2025版)》
- 书柜制作安装合同范本
- GB/T 14975-2025结构用不锈钢无缝钢管
- 2025首届电力低空经济发展大会:电力场景具身智能检修机器人技术及应用
- 冬季污水厂防冻知识培训
- 心理因素对创新行为的影响
- 脊髓损伤的膀胱护理
- 高校物业安全培训内容课件
- (正式版)DB33∕T 1430-2025 《海塘安全监测技术规程》
- 医药竞聘地区经理汇报
评论
0/150
提交评论