版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年联想工程师面试题及答案解析一、编程基础(5题,每题10分,共50分)1.题目:编写一个函数,实现字符串的逆序输出。例如,输入`"联想"`,输出`"想联"`。要求不使用额外的字符串变量,原地修改字符串。答案:pythondefreverse_string(s):s=list(s)#将字符串转换为列表left,right=0,len(s)-1whileleft<right:s[left],s[right]=s[right],s[left]left+=1right-=1return''.join(s)示例print(reverse_string("联想"))#输出:"想联"解析:-将字符串转换为列表是因为字符串在Python中是不可变的,直接修改会报错。-使用双指针法,从首尾开始交换字符,直到中间相遇。-时间复杂度:O(n),空间复杂度:O(1)(不计输入转换的额外空间)。2.题目:给定一个数组,找出其中重复次数最多的元素及其重复次数。例如,输入`[1,2,2,3,3,3]`,输出`(3,3)`。答案:pythonfromcollectionsimportCounterdefmost_frequent(arr):count=Counter(arr)max_count=0result=Noneforkey,valueincount.items():ifvalue>max_count:max_count=valueresult=keyreturn(result,max_count)示例print(most_frequent([1,2,2,3,3,3]))#输出:(3,3)解析:-使用`collections.Counter`统计数组中每个元素的频率。-遍历计数器,记录最高频率的元素及其次数。-时间复杂度:O(n),空间复杂度:O(n)。3.题目:实现一个简单的LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。LRU缓存最多存储`capacity`个元素,超出时删除最久未使用的元素。答案: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)示例cache=LRUCache(2)cache.put(1,1)cache.put(2,2)print(cache.get(1))#返回1cache.put(3,3)#去除键2print(cache.get(2))#返回-1解析:-使用字典`cache`存储键值对,列表`order`记录访问顺序。-`get`操作时,将访问的键移动到末尾表示最近使用。-`put`操作时,若键已存在则更新顺序,若超出容量则删除最久未使用的元素(列表开头)。-时间复杂度:O(1)。4.题目:编写一个函数,判断一个整数是否为完全平方数。例如,输入`16`,返回`True`;输入`14`,返回`False`。答案:pythondefis_perfect_square(num:int)->bool:ifnum<0:returnFalseleft,right=0,numwhileleft<=right:mid=(left+right)//2square=midmidifsquare==num:returnTrueelifsquare<num:left=mid+1else:right=mid-1returnFalse示例print(is_perfect_square(16))#输出:Trueprint(is_perfect_square(14))#输出:False解析:-使用二分查找法,从`0`到`num`查找平方等于`num`的整数。-若找到则返回`True`,否则返回`False`。-时间复杂度:O(logn)。5.题目:实现一个函数,合并两个排序的链表,返回合并后的排序链表。例如,输入`[1,2,4]`和`[1,3,4]`,输出`[1,1,2,3,4,4]`。答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmerge_two_lists(l1:ListNode,l2:ListNode)->ListNode:dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextifl1:current.next=l1ifl2:current.next=l2returndummy.next示例构建链表l1=ListNode(1,ListNode(2,ListNode(4)))l2=ListNode(1,ListNode(3,ListNode(4)))merged=merge_two_lists(l1,l2)打印合并后的链表whilemerged:print(merged.val,end='')输出:112344解析:-使用虚拟头节点`dummy`简化操作。-遍历两个链表,按顺序将较小值节点添加到合并链表。-时间复杂度:O(n+m),空间复杂度:O(1)。二、系统设计(2题,每题25分,共50分)1.题目:设计一个高并发的短链接生成系统。要求:-支持分布式部署,可水平扩展。-链接生成快速,短链接长度尽量短。-支持自定义前缀和自定义域名。答案:核心设计思路:1.短链接生成算法:-使用Base62编码(`0-9,a-z,A-Z`),将长链接转换为6位短链接(理论上可支持2^36个链接)。-例如:`/abc123`对应长链接。2.分布式存储:-使用Redis作为分布式锁和计数器存储。-每个节点维护一个全局计数器,避免冲突。3.自定义前缀和域名:-用户可传入前缀(如`abc`)和域名(如``),生成`/abc123`。4.缓存优化:-使用CDN缓存短链接请求,降低服务器压力。5.高可用性:-使用多副本存储,防止单点故障。伪代码示例:pythondefencode_base62(num):base62="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"ifnum==0:returnbase62[0]encoded=""whilenum>0:encoded=base62[num%62]+encodednum//=62returnencodeddefgenerate_short_link(long_url,prefix="abc",domain=""):获取全局唯一ID(分布式计数器)global_id=get_global_id()encoded=encode_base62(global_id)short_link=f"http://{domain}/{prefix}{encoded}"returnshort_link解析:-Base62编码可将长链接压缩为短格式,如`abc123`。-分布式计数器确保全局唯一性,可用Redis实现原子操作。-自定义前缀和域名提升用户体验,如企业可使用``。-CDN缓存可显著提升响应速度。2.题目:设计一个实时数据监控平台,要求:-支持百万级设备接入,每秒上报大量数据。-支持按设备ID、时间范围、指标类型查询数据。-支持数据异常告警,如温度超过阈值时自动通知管理员。答案:核心设计思路:1.数据采集层:-使用MQTT协议(轻量级,支持发布/订阅)。-每个设备为发布者,平台为订阅者。2.数据存储层:-使用Kafka作为消息队列,缓冲高并发数据。-使用InfluxDB存储时序数据(支持时间索引)。3.数据处理层:-使用Flink或SparkStreaming实时计算指标(如平均温度)。-异常检测:若温度>80°C则触发告警。4.查询层:-使用Elasticsearch提供全文检索和聚合查询。-用户可通过API查询特定设备的历史数据。5.告警系统:-使用RabbitMQ推送告警消息(如邮件或短信)。架构图伪示:设备-->MQTT-->Kafka-->InfluxDB||vv|vFlinkElasticsearch||vvRabbitMQ用户查询API解析:-MQTT+Kafka解决高并发接入问题,Kafka可缓冲突发流量。-InfluxDB专为时序数据优化,查询效率高。-Flink实时计算异常值,如温度超标自动告警。-Elasticsearch提供灵活的查询能力,支持多维度过滤。三、数据库(3题,每题15分,共45分)1.题目:解释数据库事务的ACID特性,并说明在实际场景中如何保证事务的一致性。答案:ACID特性:-原子性(Atomicity):事务要么全部完成,要么全部回滚。-实现:使用数据库的`BEGINTRANSACTION`和`COMMIT/ROLLBACK`。-一致性(Consistency):事务必须保证数据库从一致状态到另一致状态。-实现:通过约束(主键、外键)、触发器、日志记录。-隔离性(Isolation):并发事务互不干扰。-实现:隔离级别(读未提交、读已提交、可重复读、串行化)。-持久性(Durability):事务提交后数据永久保存。-实现:磁盘写入和事务日志(RedoLog)。保证一致性的方法:-外键约束:确保数据引用完整性。-触发器:在插入/更新/删除时校验业务规则。-断言:强制数据满足特定条件。解析:-事务日志记录所有操作,确保故障恢复时一致性。-隔离级别平衡性能和一致性,如`InnoDB`默认可重复读。2.题目:设计一个订单表(`orders`),包含以下字段:-`order_id`(主键,自增)-`user_id`(用户ID,关联用户表)-`total_amount`(订单总金额)-`status`(订单状态,如`pending`,`paid`,`shipped`)-`created_at`(创建时间)-`updated_at`(更新时间)写出创建表的SQL语句,并说明索引优化策略。答案:sqlCREATETABLEorders(order_idINTAUTO_INCREMENTPRIMARYKEY,user_idINTNOTNULL,total_amountDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','shipped')NOTNULLDEFAULT'pending',created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,INDEXidx_user_id(user_id),INDEXidx_status(status),FOREIGNKEY(user_id)REFERENCESusers(user_id));索引优化策略:-主键索引
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学影像技术专业介绍
- 柳州八中高考试卷及答案
- 2024译林版四年级英语上册Unit 7 Seasons每课时学习任务单汇编(含三个任务单)
- 光伏机械设备安全培训课件
- 光伏培训教学课件
- 先进软件介绍
- 2024统编版八年级道德与法治下册期末学情评估卷(含答案)
- 分解因式题目及答案
- 法律法规考试题及答案
- 13类应用文写作架构+高阶模板+经典范文+语料储备(解析版)-2026年高考英语一轮复习知识清单
- 力的合成与分解说课课件-高一上学期物理人教版
- 小分子药物的肝毒性风险早期识别
- 2025年超星尔雅学习通《临床医学研究方法》考试备考题库及答案解析
- 2025食品行业专利布局分析及技术壁垒构建与创新保护策略报告
- 2025四川省教育考试院招聘编外聘用人员15人考试笔试模拟试题及答案解析
- 渣土运输消纳合同范本
- 公司贷款走账合同范本
- 2025版骨髓增生异常综合征中国诊断与治疗指南(全文版)
- 操作系统原理(慕课版)-教学课件全套
- 水产品速冻能效优化-洞察与解读
- 会议纪要标准化撰写格式及案例参考
评论
0/150
提交评论