版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年京东笔试高频考点总结一、编程基础与算法(共5题,每题8分,总分40分)题目1(8分)题目:给定一个未排序的整数数组,请实现一个函数,找出数组中未出现的最小正整数。例如,输入[3,4,-1,1]时,输出2。答案:javapublicintfirstMissingPositive(int[]nums){intn=nums.length;//将正数放在数组前面,负数和0放在后面for(inti=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){//交换nums[i]和nums[nums[i]-1]inttemp=nums[nums[i]-1];nums[nums[i]-1]=nums[i];nums[i]=temp;}}//遍历数组找出第一个不满足条件的索引for(inti=0;i<n;i++){if(nums[i]!=i+1){returni+1;}}returnn+1;}解析:1.首先将所有正数移动到数组前面,负数和0移动到后面2.然后遍历数组,对于每个元素nums[i],如果它在[1,n]范围内且不在正确的位置(即nums[nums[i]-1]不等于nums[i]),就交换它到正确的位置3.最后遍历数组,第一个不满足nums[i]==i+1的索引i+1就是答案4.如果所有位置都正确,则答案为n+1题目2(8分)题目:实现一个LRU(最近最少使用)缓存,支持get和put操作。缓存容量为capacity,get(key)返回key对应的值,如果不存在返回-1;put(key,value)将键值对插入缓存,如果缓存已满,则删除最久未使用的缓存项。答案:javaclassLRUCache{classNode{intkey;intvalue;Nodeprev;Nodenext;Node(intkey,intvalue){this.key=key;this.value=value;}}privateintcapacity;privateMap<Integer,Node>cache;privateNodehead,tail;publicLRUCache(intcapacity){this.capacity=capacity;cache=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){Nodenode=cache.get(key);if(node==null)return-1;moveToHead(node);returnnode.value;}publicvoidput(intkey,intvalue){Nodenode=cache.get(key);if(node!=null){node.value=value;moveToHead(node);}else{NodenewNode=newNode(key,value);cache.put(key,newNode);addToHead(newNode);if(cache.size()>capacity){NodetoDel=tail.prev;removeNode(toDel);cache.remove(toDel.key);}}}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;}}解析:1.使用双向链表+哈希表实现LRU缓存2.双向链表维护访问顺序,最近访问的节点放在头部3.哈希表实现O(1)时间复杂度的get操作4.get操作时将节点移动到头部5.put操作时如果节点已存在则更新值并移动到头部6.如果缓存已满,则删除尾部节点(最久未使用)题目3(8分)题目:给定一个二叉树,判断它是否是平衡的二叉树。平衡二叉树是指一个二叉树中任意节点的左右子树的高度差不超过1。答案:javaclassSolution{publicbooleanisBalanced(TreeNoderoot){returnhelper(root)!=-1;}privateinthelper(TreeNodenode){if(node==null)return0;intleft=helper(node.left);if(left==-1)return-1;intright=helper(node.right);if(right==-1)return-1;if(Math.abs(left-right)>1)return-1;returnMath.max(left,right)+1;}}解析:1.使用后序遍历(左-右-根)的递归方法2.对于每个节点,计算左右子树的高度3.如果任意节点的左右子树高度差大于1,则不是平衡树4.如果某个子树不是平衡的(返回-1),则整棵树也不是平衡的5.返回当前节点的高度(如果平衡)题目4(8分)题目:实现一个函数,检查一个字符串是否是有效的括号组合。例如,输入"()"返回true,输入"()[]{}"返回true,输入"(]"返回false。答案:javapublicbooleanisValid(Strings){Stack<Character>stack=newStack<>();Map<Character,Character>map=newHashMap<>();map.put(')','(');map.put('}','{');map.put(']','[');for(charc:s.toCharArray()){if(map.containsKey(c)){if(stack.isEmpty()||stack.pop()!=map.get(c)){returnfalse;}}else{stack.push(c);}}returnstack.isEmpty();}解析:1.使用栈来匹配括号2.创建一个哈希表将闭括号映射到对应的开括号3.遍历字符串:-如果是闭括号,检查栈顶是否是对应的开括号-如果不是,将开括号压入栈4.最后如果栈为空,则所有括号都正确匹配题目5(8分)题目:给定一个非空字符串s,最多删除一个字符,使字符串成为回文。判断是否能成为回文。答案:javapublicbooleanvalidPalindrome(Strings){intleft=0,right=s.length()-1;while(left<right){if(s.charAt(left)!=s.charAt(right)){//尝试跳过左边或右边的字符returnisPalindrome(s,left+1,right)||isPalindrome(s,left,right-1);}left++;right--;}returntrue;}privatebooleanisPalindrome(Strings,intleft,intright){while(left<right){if(s.charAt(left)!=s.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:1.双指针从两端向中间遍历2.当遇到不匹配的字符时,尝试跳过左边或右边的字符3.检查跳过后的子串是否是回文4.如果任一情况成立,则可以成为回文5.如果所有字符都匹配,则本来就是回文二、数据库与SQL(共4题,每题10分,总分40分)题目6(10分)题目:表Student有字段id(学号),name(姓名),gender(性别),age(年龄),Course_id(课程编号)。表Course有字段id(课程编号),course_name(课程名称),teacher(教师姓名)。查询每个学生的姓名、年龄、课程名称和教师姓名。答案:sqlSELECTAS学生姓名,s.ageAS年龄,c.course_nameAS课程名称,c.teacherAS教师姓名FROMStudentsJOINCoursecONs.Course_id=c.id;解析:1.使用INNERJOIN连接Student和Course表2.连接条件是Student表的Course_id等于Course表的id3.选择需要的字段:-Student表的name和age-Course表的course_name和teacher题目7(10分)题目:表Orders有字段order_id(订单号),customer_id(客户号),order_date(订单日期),total_amount(订单金额)。表Customer有字段customer_id(客户号),customer_name(客户姓名),city(城市)。查询每个城市的客户数量以及订单总金额。答案:sqlSELECTc.city,COUNT(DISTINCTc.customer_id)AS客户数量,SUM(o.total_amount)AS订单总金额FROMCustomercJOINOrdersoONc.customer_id=o.customer_idGROUPBYc.city;解析:1.使用INNERJOIN连接Customer和Orders表2.连接条件是Customer表的customer_id等于Orders表的customer_id3.使用GROUPBY按城市分组4.计算每个城市的客户数量(去重)5.计算每个城市的订单总金额题目8(10分)题目:表Products有字段product_id(产品编号),product_name(产品名称),category(类别),price(价格)。表Sales有字段sale_id(销售编号),product_id(产品编号),quantity(数量),sale_date(销售日期)。查询2025年每个类别的产品总销售额(销售额=数量×价格)。答案:sqlSELECTp.categoryAS类别,SUM(s.quantityp.price)AS总销售额FROMProductspJOINSalessONduct_id=duct_idWHEREs.sale_dateBETWEEN'2025-01-01'AND'2025-12-31'GROUPBYp.category;解析:1.使用INNERJOIN连接Products和Sales表2.连接条件是Products表的product_id等于Sales表的product_id3.使用WHERE子句筛选2025年的销售记录4.计算每个类别的总销售额(数量×价格)5.使用GROUPBY按类别分组题目9(10分)题目:表Employees有字段employee_id(员工编号),name(姓名),department(部门),salary(工资)。表Departments有字段department_id(部门编号),department_name(部门名称)。查询每个部门的平均工资,只显示平均工资大于5000的部门。答案:sqlSELECTd.department_nameAS部门名称,AVG(e.salary)AS平均工资FROMEmployeeseJOINDepartmentsdONe.department=d.department_idGROUPBYd.department_nameHAVINGAVG(e.salary)>5000;解析:1.使用INNERJOIN连接Employees和Departments表2.连接条件是Employees表的department等于Departments表的department_id3.使用GROUPBY按部门名称分组4.计算每个部门的平均工资5.使用HAVING子句筛选平均工资大于5000的部门三、系统设计(共3题,每题20分,总分60分)题目10(20分)题目:设计一个简单的微博系统,需要支持以下功能:1.用户注册和登录2.发布微博(包含文本内容,可@其他用户)3.关注/取消关注用户4.浏览关注列表的用户最新微博5.限制每个用户每天最多发布10条微博要求:1.描述主要的数据表结构2.说明核心功能的实现思路3.分析系统的性能瓶颈和可能的优化方案答案:1.数据表结构:-Users(用户表):user_id(主键),username,password_hash,email,register_date-Follows(关注表):follower_id,followee_id(外键),follow_date-Tweets(微博表):tweet_id(主键),user_id(外键),content,publish_time,likes_count-Likes(点赞表):like_id(主键),user_id(外键),tweet_id(外键),like_time-UserQuotas(用户配额表):user_id(外键),daily_limit,current_count,last_updated2.核心功能实现思路:-用户注册:检查用户名是否已存在,生成密码哈希后存入Users表-用户登录:验证用户名和密码哈希-发布微博:-检查UserQuotas表中的current_count是否小于daily_limit-创建新的Tweets记录-更新UserQuotas表中的current_count和last_updated-解析@其他用户,在Tweets表中记录@的用户信息-关注/取消关注:在Follows表中插入或删除记录-浏览关注列表:查询Follows表获取关注列表,然后查询Tweets表获取最新微博-点赞:在Likes表中插入记录3.性能瓶颈和优化方案:-性能瓶颈:-浏览关注列表时微博数据量大-发布微博时@用户解析-点赞操作频繁-优化方案:-为Tweets表的publish_time建立索引-使用缓存(如Redis)存储用户关注列表和最新微博-对@用户进行索引优化-使用分页加载微博数据-使用布隆过滤器快速检测用户是否已关注某用户题目11(20分)题目:设计一个短链接系统,需要支持以下功能:1.将长链接转换为短链接2.通过短链接跳转到对应的长链接3.统计每个短链接的访问次数4.支持自定义短链接(如果用户指定,则使用用户指定的短链接)要求:1.描述系统的数据结构设计2.说明短链接生成算法3.分析系统的高可用性和扩展性设计答案:1.数据结构设计:-Links(链接表):id(主键),long_url(长链接),short_code(短链接码),created_at,updated_at,click_count-CustomShortcuts(自定义短链接表):id(主键),user_id(外键),short_code,long_url,is_active2.短链接生成算法:-使用随机算法生成6位短码,可使用base62编码(a-z,A-Z,0-9)-确保生成的短码唯一,可使用自增id或随机生成后检查是否重复-如果用户指定自定义短码,则检查其唯一性3.高可用性和扩展性设计:-高可用性:-使用分布式缓存(如RedisCluster)存储短链接码与长链接的映射-使用负载均衡器分发请求到多个后端服务实例-数据库使用主从复制和读写分离-扩展性:-将短链接生成和解析功能设计为微服务-使用消息队列处理异步任务(如日志记录)-使用限流策略防止系统过载-使用CDN缓存热点短链接题目12(20分)题目:设计一个消息推送系统,需要支持以下功能:1.用户订阅不同类型的消息(如新闻、促销、通知)2.管理员可以发布消息到特定类型的订阅用户3.消息可以支持富文本格式(图片、视频等)4.需要统计消息的推送状态(已推送、未推送、已读)要求:1.描述主要的数据表结构2.说明消息推送流程3.分析系统的可扩展性和容错性设计答案:1.数据表结构:-Users(用户表):user_id(主键),device_id,register_date-UserSubscriptions(用户订阅表):subscription_id(主键),user_id(外键),subscription_type,subscribe_date-Messages(消息表):message_id(主键),type,content(JSON格式存储富文本),sent_at,sent_to_type-MessageRecipients(消息接收者表):id(主键),message_id(外键),user_id(外键),device_id,status(已推送/未推送/已读),received_at,read_at2.消息推送流程:-用户订阅:在UserSubscriptions表中插入记录-发布消息:创建Messages记录,并在MessageRecipients表中插入需要接收消息的用户-推送消息:根据用户订阅的类型筛选MessageRecipients表中的用户-推送成功后更新状态为"已推送"-用户阅读后更新状态为"已读"并记录read_at时间3.可扩展性和容错性设计:-可扩展性:-使用消息队列(如Kafka)处理消息推送任务-将不同类型的消息推送服务拆分为独立的微服务-使用分布式缓存存储消息状态-支持多渠道推送(应用、短信、邮件等)-容错性:-消息推送失败时重试机制-推送状态定期同步到备份系统-使用幂等设计防止重复推送-异常监控和告警系统四、行业与地域相关性(共2题,每题30分,总分60分)题目13(30分)题目:设计一个针对京东物流的路径优化系统。要求考虑以下因素:1.实际路网情况(考虑拥堵、高速、普通道路)2.京东物流的特点(多仓库、多配送点、时效要求)3.异常情况处理(如天气影响、道路封闭)4.可扩展性设计(支持新仓库、新配送点的快速接入)要求:1.描述系统的核心架构2.说明路径优化的算法思路3.分析系统的数据存储和计算优化方案答案:1.核心架构:-路网数据服务:存储道路网络数据,包括道路类型、限速、长度、拥堵指数等-仓储管理服务:管理仓库和配送点信息-路径优化服务:提供路径计算API-异常管理服务:处理天气、道路封闭等异常情况-监控服务:监控系统运行状态和路径计算效率2.路径优化算法思路:-使用改进的Dijkstra算法或A算法计算最短路径-考虑道路权重:-普通道路:按实际距离计算-高速道路:按实际距离计算,但考虑高速通行费-拥堵道路:按拥堵指数增加权重-考虑时效要求:-加快计算优先选择高速道路-考虑配送时间窗口-异常情况处理:-当检测到异常时,重新计算路径-提供备用路线建议3.数据存储和计算优化方案:-数据存储:-使用图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管线迁改方案
- 2026学年浙江省江山市五年级语文期末模考基础巩固题(详细参考解析)详细答案和解析
- 论行政诉讼调解机制的引入:理论、实践与展望
- 论股东派生诉讼:制度剖析、实践困境与完善路径
- 论经营者安全保障义务:法理、实践与完善路径
- 2026年全国二级建造师之二建矿业工程实务考试培优拓展题(附答案)753
- 2026年质量管理员岗前培训试题及答案
- 机电设备和管道安装施工方案
- 论盗窃网络虚拟财产行为的法律属性:基于法理与实践的双重审视
- 论用户自定义服务链:从理论到实践的深度剖析
- 安全教育好玩的皮球
- 《电力建设工程施工安全管理导则》(NB∕T 10096-2018)
- 橙色插画风安全生产月知识竞赛模板
- 2026年全年日历表带农历(A4可编辑可直接打印)预留备注位置
- 2024年高考英语训练动词(谓语、非谓语)单句语法填空50题
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
- 2024届陕西省延安市黄陵县小升初语文综合练习卷含答案
- 《三国志》曹操传完整攻略大全及宝物获取
- 金属丝绳的电导与电磁性能分析
- 《广播电视编导》课件
- 四川省成都市武侯区2023年部编版小升初考试语文试卷答案
评论
0/150
提交评论