版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年华为研发部面试题目及高分秘籍一、编程与算法(共5题,每题10分,总分50分)1.题目:实现一个函数,输入一个正整数`n`,返回`n`的汉明重量(即二进制表示中`1`的个数)。要求时间复杂度为O(logn)。答案:cppinthammingWeight(intn){intcount=0;while(n!=0){count+=n&1;n>>=1;}returncount;}解析:通过位运算逐位检查`n`的二进制表示,每次右移一位并统计`1`的数量。时间复杂度为O(logn),因为每次右移都会减少一位。2.题目:给定一个字符串`s`,返回其中不重复字符的最长子串的长度。例如,输入`"abcabcbb"`,输出`"abc"`的长度3。答案:cppintlengthOfLongestSubstring(strings){unordered_map<char,int>last;intleft=0,maxLen=0;for(intright=0;right<s.size();++right){if(last.find(s[right])!=last.end()){left=max(left,last[s[right]]+1);}last[s[right]]=right;maxLen=max(maxLen,right-left+1);}returnmaxLen;}解析:使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界。通过哈希表记录每个字符上一次出现的位置,当重复字符出现时,将`left`移动到重复字符的下一个位置。3.题目:设计一个LRU(最近最少使用)缓存,支持容量`capacity`。操作包括`get(key)`和`put(key,value)`,要求时间复杂度为O(1)。答案:cppclassLRUCache{public:structNode{intkey,value;Nodeprev,next;Node(intk,intv):key(k),value(v),prev(nullptr),next(nullptr){}};unordered_map<int,Node>cache;Nodehead=newNode(0,0),tail=newNode(0,0);intcapacity;LRUCache(intcap):capacity(cap){head->next=tail;tail->prev=head;}intget(intkey){if(cache.find(key)==cache.end())return-1;Nodenode=cache[key];moveToHead(node);returnnode->value;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){Nodenode=cache[key];node->value=value;moveToHead(node);}else{Nodenode=newNode(key,value);cache[key]=node;addToHead(node);if(cache.size()>capacity){NodetoDel=tail->prev;removeNode(toDel);cache.erase(toDel->key);deletetoDel;}}}voidmoveToHead(Nodenode){removeNode(node);addToHead(node);}voidaddToHead(Nodenode){node->prev=head;node->next=head->next;head->next->prev=node;head->next=node;}voidremoveNode(Nodenode){node->prev->next=node->next;node->next->prev=node->prev;}};解析:使用双向链表和哈希表实现。链表头部表示最近使用,尾部表示最少使用。哈希表记录键到链表节点的映射,确保O(1)时间复杂度。4.题目:给定一个`nxn`的二维矩阵,原地旋转矩阵90度。例如,输入`[[1,2,3],[4,5,6],[7,8,9]]`,输出`[[7,4,1],[8,5,2],[9,6,3]]`。答案:cppvoidrotate(vector<vector<int>>&matrix){intn=matrix.size();for(inti=0;i<n/2;++i){for(intj=0;j<(n+1)/2;++j){inttemp=matrix[i][j];matrix[i][j]=matrix[n-j-1][i];matrix[n-j-1][i]=matrix[n-i-1][n-j-1];matrix[n-i-1][n-j-1]=matrix[j][n-i-1];matrix[j][n-i-1]=temp;}}}解析:通过分层旋转,每次旋转四个角的元素。外层旋转完成后,继续旋转内层,直到所有层完成。时间复杂度为O(n²)。5.题目:实现一个函数,判断一个链表是否为回文链表。例如,输入`1->2->2->1`,返回`true`。答案:cppboolisPalindrome(ListNodehead){if(!head||!head->next)returntrue;ListNodeslow=head,fast=head;while(fast->next&&fast->next->next){slow=slow->next;fast=fast->next->next;}ListNodesecondHalf=reverseList(slow->next);ListNodefirstHalf=head;while(secondHalf){if(firstHalf->val!=secondHalf->val)returnfalse;firstHalf=firstHalf->next;secondHalf=secondHalf->next;}reverseList(secondHalf);//还原链表returntrue;}ListNodereverseList(ListNodehead){ListNodeprev=nullptr;while(head){ListNodenext=head->next;head->next=prev;prev=head;head=next;}returnprev;}解析:通过快慢指针找到链表中间位置,反转后半部分,然后比较前后半部分是否相同。最后还原链表。时间复杂度为O(n),空间复杂度为O(1)。二、系统设计(共3题,每题15分,总分45分)1.题目:设计一个高并发的短链接系统。用户输入长链接,系统返回短链接,点击短链接后自动跳转到长链接。要求:-短链接长度不超过6位,使用字母和数字组合。-支持高并发访问,秒级响应。-可靠的短链接生成与映射。答案:系统架构:1.短链接生成:使用哈希函数(如CRC32+Base62编码)将长链接映射为6位短链接。-例如,CRC32长链接->Base62编码->6位短链接。2.存储层:使用Redis作为缓存,存储短链接到长链接的映射,TTL设为24小时。若Redis命中则直接返回,否则查询数据库(MySQL)。3.数据库设计:sqlCREATETABLEshortlinks(idINTAUTO_INCREMENTPRIMARYKEY,long_urlVARCHAR(2048),short_codeCHAR(6),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);4.高并发处理:-使用Nginx做负载均衡,水平扩展应用服务器。-应用层使用无锁数据结构(如原子操作)生成短链接,避免锁竞争。解析:-短链接生成:CRC32保证唯一性,Base62减少长度(a-z,0-9)。-缓存策略:Redis降低数据库压力,TTL防止长链接过期。-高并发:Nginx分摊请求,原子操作确保短链接生成效率。2.题目:设计一个实时消息推送系统(如微信、抖音)。用户订阅主题,系统将相关消息推送给订阅者。要求:-支持海量用户和消息,延迟低(毫秒级)。-可靠的消息分发,不丢失。-支持主题订阅和退订。答案:系统架构:1.消息队列:使用Kafka作为消息中间件,处理高吞吐量的消息分发。2.订阅管理:-用户表存储用户ID和订阅的主题列表。-使用Redis发布/订阅(Pub/Sub)实现实时通知。3.消息分发:-用户订阅主题时,将用户ID加入Redis频道。-消息到达时,Kafka推送至所有订阅该主题的消费者(Nginx负载均衡)。4.可靠性保障:-消息持久化到磁盘,确保不丢失。-消息确认机制(ACK),重试策略。解析:-Kafka:高吞吐量、持久化,适合大规模消息分发。-RedisPub/Sub:实时通知,避免长轮询。-可靠性:持久化和ACK机制确保消息不丢失。3.题目:设计一个分布式限流系统,防止API被过度调用。要求:-支持按IP或用户ID限流。-限流规则可配置(如每秒最多100次请求)。-低延迟,不影响正常访问。答案:系统架构:1.滑动窗口:-每个用户/IP使用一个滑动窗口计数器(如Redis的HyperLogLog)。-窗口分为固定大小的时间段(如每100ms一个窗口),统计请求次数。2.限流逻辑:-请求时,检查当前窗口的请求次数是否超过阈值。-若超过,拒绝请求;否则,记录请求并允许通过。3.配置中心:-使用Nacos或Zookeeper动态调整限流阈值。解析:-滑动窗口:避免固定窗口的冷热数据问题。-RedisHyperLogLog:高效统计请求次数。-动态配置:适应不同业务场景。三、数据库与中间件(共2题,每题10分,总分20分)1.题目:设计一个高并发的订单系统数据库表。订单ID自增,包含用户ID、商品ID、金额、状态(待支付、已支付、已取消),要求支持高并发写入。答案:表设计:sqlCREATETABLEorders(idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,amountDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','cancelled')NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,INDEXidx_user_id(user_id),INDEXidx_product_id(product_id),INDEXidx_status(status));优化:-使用InnoDB引擎,支持行级锁。-主键自增,分布式ID生成器(如TwitterSnowflake)。-索引覆盖`user_id`、`product_id`、`status`,加速查询。解析:-InnoDB:支持事务和行级锁,适合高并发写入。-索引:加速常用查询,如按用户或商品查订单。2.题目:比较RabbitMQ和Kafka的优缺点,说明在哪些场景下选择哪个。答案:RabbitMQ:-优点:-支持多种消息协议(AMQP)。-可靠的消息投递,确保消息不丢失。-提供工作队列、发布/订阅等模式。-缺点:-延迟相对较高(毫秒级)。-单节点性能瓶颈明显。Kafka:-优点:-低延迟(微秒级),适合实时数据处理。-高吞吐量,单集群支持TB级数据。-分区设计,支持水平扩展。-缺点:-不支持事务消息(需结合其他方案)。-配置复杂,运维成本高。场景选择:-RabbitMQ:顺序消息、消息确认场景(如订单处理)。-Kafka:实时日志、流处理场景(如用户行为分析)。解析:-RabbitMQ:适合可靠性要求高的业务。-Kafka:适合高吞吐、低延迟的场景。四、网络与分布式(共2题,每题10分,总分20分)1.题目:解释TCP的三次握手过程,为什么不能省略任何一次?答案:三次握手:1.SYN:客户端发送SYN=1,随机初始化seq=x,请求建立连接。2.SYN+ACK:服务器回复SYN=1,ACK=1,seq=y,ack=x+1。3.ACK:客户端回复ACK=1,seq=x+1,ack=y+1,连接建立。为什么不能省略:-防止历史连接重放:-若省略SYN+ACK,服务器可能收到旧的SYN请求,导致误连接。-确保双方时钟同步:-ACK确认防止发送方超时重发,保证双方状态一致。解析:-时序同步:三次握手确保双方都确认连接状态。-防止重放:随机seq+ack避免历史连接干扰。2.题目:解释CAP理论,为什么分布式系统通常选择CA(一致性、可用性、分区容错性)?答案:CAP理论:-一致性(Consistency):所有节点在同一时间具有相同数据。-可用性(Availability):
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川成都郫都西汇三九八医院招聘8人(医师、药师、护理)参考考试题库及答案解析
- 2025广西百色市西林县民族高级中学招聘后勤工作人员1人参考考试试题及答案解析
- 2025年福建师大泉州附中顶岗合同教师招聘3人备考考试试题及答案解析
- 2025广东广州医科大学附属第五医院人才招聘3人(十)备考考试试题及答案解析
- 2025广西桂林产业发展集团有限公司招聘2人参考考试题库及答案解析
- 首都医科大学附属北京朝阳医院石景山医院派遣合同制职工招聘2人备考笔试试题及答案解析
- 2026广西医科大学附属口腔医院人才招聘35人考试备考题库及答案解析
- 2025西藏山南市第三高级中学学生食堂厨师招聘3人参考笔试题库附答案解析
- 2025河北唐山一中教育集团金枫叶学校招聘教师1人备考笔试试题及答案解析
- 2025广西南宁市兴宁区恩湖路小学招聘5人参考考试题库及答案解析
- 手卫生执行率PDCA案例实施分析
- 病理学考试练习题库及答案
- 2025年新高考1卷(新课标Ⅰ卷)语文试卷
- 2025-2030中国女鞋行业市场现状供需分析及投资评估规划分析研究报告
- 2025至2030中国物理气相沉积(PVD)设备行业行情监测与发展动向追踪报告
- 2025年中国EP级蓖麻油行业市场前景预测及投资价值评估分析报告
- 散酒采购合同协议
- 工控网管理制度
- 大学英语四级考试2024年12月真题(第一套)Part II Listening Comprehension
- 测量年终工作总结
- 第1课“北京双奥”荣耀中华 课件 2024-2025学年人教版(2024)初中体育与健康七年级全一册
评论
0/150
提交评论