版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年京东软件开发测试面试题集一、编程基础与算法(共5题,每题8分,总分40分)题目1:请实现一个函数,输入一个非负整数`n`,返回`n`的二进制表示中`1`的个数。要求不使用内置函数,时间复杂度不超过O(1)。答案与解析:javapublicintcountBits(intn){intcount=0;while(n!=0){count+=n&1;n>>>=1;}returncount;}解析:-使用位运算`n&1`判断最低位是否为`1`,然后右移一位(无符号右移`>>>`避免负数问题)。-时间复杂度为O(1)是不准确的,实际为O(logn),但题目允许使用简单位运算。-更优的O(1)方法是利用`BrianKernighan`算法:`n=n&(n-1)`,直到`n`为0。题目2:给定一个字符串`s`,找到其中最长的回文子串的长度。例如,输入`"babad"`,输出`3`("bab"或"aba")。答案与解析:javapublicintlongestPalindrome(Strings){if(s==null||s.length()<1)return0;intstart=0,end=0;for(inti=0;i<s.length();i++){intlen1=expandAroundCenter(s,i,i);intlen2=expandAroundCenter(s,i,i+1);intlen=Math.max(len1,len2);if(len>end-start){start=i-(len-1)/2;end=i+len/2;}}returnend-start+1;}privateintexpandAroundCenter(Strings,intleft,intright){while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){left--;right++;}returnright-left-1;}解析:-通过遍历每个字符,以它为中心向两边扩展,分别处理奇数长度和偶数长度的回文。-时间复杂度为O(n²),空间复杂度为O(1)。题目3:实现一个`LruCache`类,支持`get`和`put`操作,容量为`capacity`。例如:javaLRUCachecache=newLRUCache(2);cache.put(1,1);//cacheis{1=1}cache.put(2,2);//cacheis{1=1,2=2}cache.get(1);//return1cache.put(3,3);//evictskey2,cacheis{1=1,3=3}cache.get(2);//returns-1(notfound)答案与解析:javaclassLRUCache{classNode{intkey;intvalue;Nodeprev;Nodenext;Node(intkey,intvalue){this.key=key;this.value=value;}}Map<Integer,Node>map;intcapacity;Nodehead,tail;publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){if(map.containsKey(key)){Nodenode=map.get(key);moveToHead(node);returnnode.value;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.value=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}NodenewNode=newNode(key,value);map.put(key,newNode);addToHead(newNode);}}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}privatevoidaddToHead(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}}解析:-使用双向链表维护LRU顺序,哈希表快速查找。-`get`操作将节点移到头部,`put`操作先判断是否需要淘汰。题目4:给定一个包含`0`和`1`的二维矩阵,找出只包含`1`的最大正方形的大小。例如:10100101111111100010输出`4`(四个`1`组成的正方形)。答案与解析:javapublicintmaximalSquare(char[][]matrix){if(matrix==null||matrix.length==0)return0;introws=matrix.length,cols=matrix[0].length;intmax=0;int[][]dp=newint[rows][cols];for(inti=0;i<rows;i++){for(intj=0;j<cols;j++){if(matrix[i][j]=='1'){if(i==0||j==0){dp[i][j]=1;}else{dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;}max=Math.max(max,dp[i][j]);}}}returnmaxmax;}解析:-动态规划解法,`dp[i][j]`表示以`(i,j)`为右下角的最大正方形边长。-时间复杂度为O(mn),空间复杂度为O(mn)。题目5:实现快速排序算法,要求使用原地(不额外分配数组)方式。答案与解析:javapublicvoidquickSort(int[]nums,intleft,intright){if(left<right){intpivotIndex=partition(nums,left,right);quickSort(nums,left,pivotIndex-1);quickSort(nums,pivotIndex+1,right);}}privateintpartition(int[]nums,intleft,intright){intpivot=nums[right];inti=left-1;for(intj=left;j<right;j++){if(nums[j]<=pivot){i++;swap(nums,i,j);}}swap(nums,i+1,right);returni+1;}privatevoidswap(int[]nums,inti,intj){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}解析:-选择右端点为基准,将小于等于基准的数移到左侧,大于的移到右侧。-时间复杂度平均为O(nlogn),最坏为O(n²)。二、系统设计(共3题,每题20分,总分60分)题目6:设计一个简单的微博系统,要求支持以下功能:1.用户发布微博(限制长度不超过280字)。2.用户可以关注/取消关注其他用户。3.用户可以查看自己的关注者列表和被关注列表。4.用户可以查看自己的微博时间线(最新的10条)。答案与解析:plaintext1.数据模型:-User:id,name,followers,followees-Post:id,user_id,content,timestamp-Follow:from_user_id,to_user_id2.发布微博:-将Post插入数据库,使用user_id关联用户。-更新该用户的最新时间线。3.关注/取消关注:-插入/删除Follow记录。-触发实时通知。4.时间线:-查询该用户所有关注者的Post,按timestamp降序取前10条。-可优化:使用MaterializedView存储。解析:-关键点:关注关系维护、时间线聚合。-可扩展性:支持分页、实时更新(WebSocket)。题目7:设计一个高并发的短链接生成系统,要求:1.输入长链接,输出6位短链接(如`/a1b2c3`)。2.支持高并发访问(每秒百万级请求)。3.短链接唯一且可快速解析回原链接。答案与解析:plaintext1.数据模型:-ShortLink:id(自增),original_url,short_code,timestamp2.生成短码:-使用Base62编码(a-z,A-Z,0-9),如`id%62`映射为字符。-缓存热点短码(Redis),减少数据库查询。3.高并发:-使用分布式锁或CAS生成唯一id。-预分配短码池,避免实时生成冲突。解析:-关键点:高并发生成、快速解析、缓存优化。-可扩展性:分布式部署、限流降级。题目8:设计一个京东物流路径规划系统,输入起点和终点,输出最优路径(考虑路况、时效等)。答案与解析:plaintext1.数据模型:-Node:id,location-Edge:from_node,to_node,weight(距离/时间)2.算法:-Dijkstra或A算法。-实时路况:动态调整权重(Redis存权重)。3.高并发:-路径请求缓存(本地/分布式)。-地图切片,热点区域预计算。解析:-关键点:实时路况、缓存优化。-可扩展性:多路径选择(如最快/最便宜)。三、数据库与存储(共3题,每题15分,总分45分)题目9:京东的商品评论数据量大,如何设计数据库表结构存储评论信息,并支持高效查询?答案与解析:plaintext1.表结构:-Comment:id(PK),product_id(FK),user_id(FK),content,rating,created_at,updated_at,parent_id(自评回复)2.索引:-product_id,user_id,created_at-GIN索引支持全文检索(Elasticsearch)。3.分区:-按created_at分区,每日一个分区。解析:-关键点:外键约束、全文检索、分区优化。-可扩展性:冷热数据分离。题目10:设计一个数据库方案,存储京东商品的多级分类(如一级分类>二级分类>三级分类)。答案与解析:plaintext1.表结构:-Category:id(PK),name,parent_id(FK),level-parent_id为空表示一级分类。2.查询优化:-WITHRECURSIVE递归查询多级路径。-缓存热门分类路径(Redis)。解析:-关键点:递归查询、缓存优化。-可扩展性:支持动态分类调整。题目11:京东秒杀活动需要高并发存储用户抢购记录,如何设计数据库表和事务?答案与解析:plaintext1.表结构:-SeckillRecord:id(PK),user_id,product_id,timestamp,status(0:未支付,1:已支付)2.事务:-使用数据库锁(行锁)保证原子性。-预减库存(乐观锁/悲观锁)。3.高并发:-Redis预减库存+数据库确认。解析:-关键点:事务隔离级别、预减库存。-可扩展性:熔断限流。四、网络与中间件(共2题,每题10分,总分20分)题目12:京东支付流程中,如何保证订单状态的同步(如支付成功后更新订单状态)?答案与解析:plaintext1.消息队列:-支付系统发送消息到Kafka/RabbitMQ。-订单系统订阅消息,更新状态。2.幂等性:-消息去重(Redis签名)。-支付系统确认状态后发送补偿消息。解析:-关键点:消息队列解耦、幂等性设计。-可扩展性:异步补偿机制。题目13:京东商品详情页需要缓存商品信息,如何设计缓存策略?答案与解析:plaintext1.缓存层级:-Redis(热点数据):商品基本信息(过期时间5分钟)。-Memcached(低频数据):商品推荐(永不过期,定期清理)。2.缓存穿透:-使用布隆过滤器或空值缓存。解析:-关键点:多级缓存、缓存穿透解决方案。-可扩展性:缓存预热、主动更新。五、测试与质量保障(共4题,每题7分,总分28分)题目14:京东
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论