2026年互联网公司技术面试笔试题目_第1页
2026年互联网公司技术面试笔试题目_第2页
2026年互联网公司技术面试笔试题目_第3页
2026年互联网公司技术面试笔试题目_第4页
2026年互联网公司技术面试笔试题目_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年互联网公司技术面试笔试题目一、编程语言基础(共3题,每题10分,合计30分)题目1(Java面向对象编程)给定一个`Person`类,包含`name`(姓名,字符串)、`age`(年龄,整数)和`gender`(性别,枚举:`MALE`/`FEMALE`)三个属性,以及一个带参构造方法。请实现以下功能:1.重写`toString()`方法,格式为`"姓名-年龄-性别"`。2.定义一个静态方法`findOldest(List<Person>people)`,返回年龄最大的`Person`对象,若并列则返回第一个。答案:javapublicclassPerson{enumGender{MALE,FEMALE}privateStringname;privateintage;privateGendergender;publicPerson(Stringname,intage,Gendergender){=name;this.age=age;this.gender=gender;}@OverridepublicStringtoString(){returnname+"-"+age+"-"+gender;}publicstaticPersonfindOldest(List<Person>people){if(people==null||people.isEmpty())returnnull;Personoldest=people.get(0);for(Personp:people){if(p.age>oldest.age)oldest=p;}returnoldest;}}解析:1.`toString()`方法需符合格式要求,使用`+`拼接字符串。2.`findOldest()`通过遍历列表比较年龄,时间复杂度O(n),符合面试常见设计题。题目2(Python数据结构)请实现一个`LRUCache`类,支持以下操作:-`__init__(capacity:int)`:初始化容量为`capacity`的缓存。-`get(key:int)->int`:返回键对应的值,若不存在返回-1;同时将该键值对移动到最近使用(MRU)。-`put(key:int,value:int)`:若缓存已满,先删除最久未使用(LRU)的键值对,再插入新键值对。答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeynotinself.cache:return-1self.order.remove(key)self.order.append(key)returnself.cache[key]defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:lru_key=self.order.pop(0)delself.cache[lru_key]self.cache[key]=valueself.order.append(key)解析:-使用字典存储键值对(O(1)查找),列表维护使用顺序。-`get()`时移动元素到列表末尾,`put()`先判断是否需要删除LRU,再插入新元素。题目3(JavaScript闭包与异步)现有以下代码:javascriptfunctioncreateCounter(){letcount=0;return{increment:function(){count++;returncount;},reset:function(){count=0;}};}constcounter1=createCounter();console.log(counter1.increment());//输出1请修改`createCounter`,使其支持异步操作(使用`async/await`),并在`increment`返回Promise。答案:javascriptfunctioncreateCounter(){letcount=0;return{increment:asyncfunction(){returnnewPromise(resolve=>{setTimeout(()=>{count++;resolve(count);},100);//模拟异步});},reset:function(){count=0;}};}constcounter1=createCounter();(async()=>{console.log(awaitcounter1.increment());//输出1console.log(awaitcounter1.increment());//输出2})();解析:-`Promise`配合`setTimeout`模拟异步操作。-使用`async/await`使代码更易读,符合前端面试趋势。二、算法与数据结构(共4题,每题10分,合计40分)题目4(动态规划)给定一个字符串`s`和一个字典`wordDict`,判断`s`是否可以由字典中单词的组合而成(可重复使用)。例如:`s="leetcode"`,`wordDict=["leet","code"]`,返回`true`("leet"+"code")。答案:pythondefwordBreak(s:str,wordDict:list)->bool:dp=[False](len(s)+1)dp[0]=Trueforiinrange(1,len(s)+1):forwordinwordDict:ifi>=len(word)anddp[i-len(word)]ands[i-len(word):i]==word:dp[i]=Truebreakreturndp[-1]解析:-`dp[i]`表示`s[:i]`是否可拆分,遍历每个位置检查以`word`结尾的子串是否匹配。题目5(二叉树遍历)给定二叉树根节点`root`,返回其层序遍历(BFS)结果。例如:3/\920/\157输出:`[[3],[9,20],[15,7]]`答案:pythonfromcollectionsimportdequedeflevelOrder(root):ifnotroot:return[]result=[]queue=deque([root])whilequeue:level=[]for_inrange(len(queue)):node=queue.popleft()level.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)result.append(level)returnresult解析:-使用队列实现BFS,按层收集节点值。题目6(贪心算法)有`n`个活动,每个活动有开始时间`start`和结束时间`end`。返回最多可参加的活动数量。例如:`activities=[(1,4),(2,3),(3,5),(0,6),(5,7),(5,9)]`,输出`4`(选(1,4),(3,5),(5,7),(0,6))。答案:pythondefactivitySelection(activities):按结束时间排序activities.sort(key=lambdax:x[1])count=0last_end=-1forstart,endinactivities:ifstart>last_end:count+=1last_end=endreturncount解析:-贪心策略:每次选最早结束的活动,确保剩余时间最大化。题目7(字符串匹配)实现KMP算法,返回模式串`pattern`在主串`s`中的起始索引(未找到返回-1)。答案:pythondefkmp(s:str,pattern:str):ifnotpattern:return0lps=[0]len(pattern)j=0foriinrange(1,len(pattern)):whilej>0andpattern[i]!=pattern[j]:j=lps[j-1]ifpattern[i]==pattern[j]:j+=1lps[i]=ji=j=0whilei<len(s):ifs[i]==pattern[j]:i+=1j+=1ifj==len(pattern):returni-jelifi<len(s)ands[i]!=pattern[j]:ifj>0:j=lps[j-1]else:i+=1return-1解析:-KMP通过前缀表`lps`避免无效回溯,时间复杂度O(n)。题目8(图算法)给定无向图邻接矩阵`graph`,判断是否包含环。例如:graph=[[0,1,0,0],[1,0,1,1],[0,1,0,0],[0,1,0,0]]输出:`True`(1-2-4-1成环)。答案:pythondefhasCycle(graph):visited=[False]len(graph)parent=[-1]len(graph)defdfs(v):visited[v]=Trueforiinrange(len(graph)):ifgraph[v][i]:ifnotvisited[i]:parent[i]=vifdfs(i):returnTrueelifparent[v]!=i:returnTruereturnFalseforiinrange(len(graph)):ifnotvisited[i]anddfs(i):returnTruereturnFalse解析:-DFS检测环:若访问到已访问的相邻节点且非父节点,则存在环。三、系统设计(共2题,每题20分,合计40分)题目9(短链接系统设计)设计一个短链接系统,要求:1.用户输入长链接,系统返回短链接(如`/abc123`)。2.点击短链接后,解析为原始长链接并重定向。3.支持高并发访问(如每秒百万请求)。要求:-列出核心模块(数据库、缓存、API等)。-说明数据存储方案(URL映射)。答案:核心模块:1.URL映射表(数据库):存储映射关系(`short_id<->long_url`),使用UUID或Base62编码短ID。2.缓存层(Redis):缓存热点短链接,降低数据库压力。3.API网关:分流请求,负载均衡。4.反向代理(Nginx):高并发转发,HTTPS加密。数据存储方案:-短ID生成:随机6位Base62(a-z,A-Z,0-9)。-数据库使用索引优化查找,Redis设置过期时间(如24小时)。题目10(消息队列选型)某电商系统需异步处理订单消息(如下单、支付、发货),要求:1.支持至少100万TPS。2.若消费者宕机,消息不丢失。3.如何保证消息最终一致性?要求:-选型(RabbitMQ/Kafka/Redis等),说明理由。-处理消费者宕机方案。答案:选型:Kafka-优势:-高吞吐(单节点百万TPS),分区扩容。-消息持久化(磁盘存储),支持重复消费。消费者宕机方案:1.幂等性设计:消息处理前检查订单状态(如支付状态),避免重复处理。2.重试机制:消费端定时重试失败消息。3.死信队列(DLQ):持久化无法处理的消息供人工排查。最终一致性:-通过时间戳/版本号校验消息状态,事务补偿机制(如TCC)。四、综合应用(共1题,20分)题目11(分布式事务)设计一个分布式下单系统(订单、库存、支付需原子性),要求:1.列出至少两种解决方案(2PC/本地消息表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论