2026年携程技术岗位面试问题与答案_第1页
2026年携程技术岗位面试问题与答案_第2页
2026年携程技术岗位面试问题与答案_第3页
2026年携程技术岗位面试问题与答案_第4页
2026年携程技术岗位面试问题与答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2026年携程技术岗位面试问题与答案一、编程基础与算法(共5题,每题10分,总分50分)1.题目实现一个函数,输入一个字符串,返回该字符串中不重复的字符按出现的顺序组成的字符串。例如,输入"abaccdefg",返回"bdfg"。2.题目给定一个链表,判断链表中是否存在环。如果存在环,返回进入环的第一个节点。例如,链表1→2→3→4→2...,返回节点2。3.题目实现快速排序算法,并用Python代码实现。4.题目设计一个LRU(最近最少使用)缓存系统,要求实现get和put方法。get(key)返回键对应的值,如果不存在返回-1;put(key,value)将键值对插入缓存,如果缓存已满则删除最久未使用的元素。5.题目给定一个整数数组,找出三个数,使得这三个数的和最接近给定的目标值。返回这三个数的和。例如,数组[-1,2,1,-4],目标值为1,返回2(-1+2+1)。二、数据库与SQL(共3题,每题15分,总分45分)1.题目携程旅游平台用户表(users)有字段id(用户ID)、name(姓名)、city(城市)、reg_date(注册日期),订单表(orders)有字段order_id(订单ID)、user_id(用户ID)、amount(金额)、order_date(订单日期)。请写SQL查询:-查询最近三个月内每个城市注册用户数量最多的前3个城市及其用户数-查询每个用户的总消费金额,并按消费金额降序排列,只显示消费金额前10的用户2.题目携程酒店预订系统有房间表(rooms)和预订表(bookings)。房间表有room_id(房间ID)、hotel_id(酒店ID)、room_type(房间类型)、price(价格)。预订表有booking_id(预订ID)、room_id(房间ID)、user_id(用户ID)、check_in(入住日期)、check_out(退房日期)。请写SQL:-查询每个酒店类型(room_type)的平均预订价格,并只显示平均价格高于酒店平均价格的所有酒店类型-查询当前日期已预订但尚未入住的房间数量,按酒店ID分组排序3.题目携程点评系统有用户表(users)、酒店表(hotels)、点评表(reviews)。点评表有review_id(点评ID)、user_id(用户ID)、hotel_id(酒店ID)、rating(评分)、comment(评论)、review_date(点评日期)。请写SQL:-查询每个酒店的平均评分,并返回评分最高的前5个酒店及其评分-查询在过去一年中,每个用户点评数量最多的前10个酒店,要求这些酒店的总评分不能低于4.0三、系统设计(共2题,每题25分,总分50分)1.题目设计携程机票预订系统的用户认证模块,需要支持:-用户注册和登录-第三方账号登录(微信、支付宝)-密码找回功能-需要考虑高并发场景下的性能和安全性-绘制系统架构图并说明关键技术选型2.题目设计携程酒店实时价格推荐系统,要求:-输入酒店ID、用户ID、查询时间,返回推荐价格-考虑因素包括:历史价格、实时供需关系、用户偏好、天气、节假日等-系统需要支持毫秒级响应-绘制系统架构图并说明算法设计四、Java/Python编程(共2题,每题25分,总分50分)1.题目(Java)携程旅游平台需要统计用户行为数据,设计一个Java类UserBehavior,包含字段:timestamp(时间戳)、userId(用户ID)、action(行为类型:"click"、"view"、"purchase")、itemId(项目ID)。要求:-实现Comparable接口,按照时间戳降序排序-重写toString方法,格式为"timestampuserIdactionitemId"-实现一个方法,统计过去1小时内每个用户的购买次数2.题目(Python)携程点评系统需要处理用户评论数据,设计一个Python类Review,包含字段:reviewId(点评ID)、userId(用户ID)、hotelId(酒店ID)、rating(评分)、text(文本内容)、date(日期)。要求:-实现一个方法,过滤出评分大于4.0且包含关键词"推荐"的评论-实现一个方法,统计每个酒店的平均评分,并返回评分最高的前5个酒店答案与解析一、编程基础与算法答案与解析1.答案(Python)pythondefunique_chars(s):seen=set()result=[]forcharins:ifcharnotinseen:seen.add(char)result.append(char)return''.join(result)解析:使用集合记录已见字符,列表存储结果。遍历字符串,对于每个字符,如果未在集合中则添加到集合和结果列表。最后连接列表为字符串返回。时间复杂度O(n),空间复杂度O(n)。2.答案(Python)pythonclassListNode:def__init__(self,x):self.val=xself.next=NonedefdetectCycle(head):ifnotheadornothead.next:returnNoneslow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:找到环,确定入口slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone解析:使用快慢指针法。快指针每次走两步,慢指针每次走一步。如果链表有环,快慢指针会相遇。相遇后,将慢指针移到头节点,两个指针每次走一步,再次相遇的节点就是环的入口。时间复杂度O(n),空间复杂度O(1)。3.答案(Python)pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:快速排序分治算法。选择基准值,将数组分为小于、等于、大于三部分,然后递归排序左右两部分。时间复杂度平均O(nlogn),最坏O(n²)。空间复杂度O(logn)。4.答案(Java)javaclassLRUCache{privateintcapacity;privateMap<Integer,Node>map;privateNodehead,tail;classNode{intkey,value;Nodeprev,next;}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode();tail=newNode();head.next=tail;tail.prev=head;}publicintget(intkey){Nodenode=map.get(key);if(node==null)return-1;moveToHead(node);returnnode.value;}publicvoidput(intkey,intvalue){Nodenode=map.get(key);if(node!=null){node.value=value;moveToHead(node);}else{NodenewNode=newNode();newNode.key=key;newNode.value=value;map.put(key,newNode);addToHead(newNode);if(map.size()>capacity){NodetoDel=tail.prev;removeNode(toDel);map.remove(toDel.key);}}}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;}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}}解析:使用双向链表+哈希表实现LRU缓存。链表头为最近使用,尾为最久未使用。get时将节点移到头部,put时如果已存在则更新并移到头部,如果超出容量则删除尾部节点。时间复杂度O(1),空间复杂度O(capacity)。5.答案(Python)pythondefthree_sum_closest(nums,target):nums.sort()n=len(nums)closest=float('inf')foriinrange(n-2):left,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]ifabs(total-target)<abs(closest-target):closest=totaliftotal<target:left+=1eliftotal>target:right-=1else:returntotalreturnclosest解析:排序后固定一个数,使用双指针法在剩余数组中找两个数使三数之和最接近目标。时间复杂度O(n²),空间复杂度O(1)。二、数据库与SQL答案与解析1.答案sql--查询最近三个月内每个城市注册用户数量最多的前3个城市及其用户数SELECTcity,COUNT()asuser_countFROMusersWHEREreg_date>=DATE_SUB(CURDATE(),INTERVAL3MONTH)GROUPBYcityORDERBYuser_countDESCLIMIT3;--查询每个用户的总消费金额,并按消费金额降序排列,只显示消费金额前10的用户SELECT,SUM(o.amount)astotal_spentFROMusersuJOINordersoONu.id=o.user_idGROUPBYu.idORDERBYtotal_spentDESCLIMIT10;解析:第一个查询使用DATE_SUB获取三个月前的日期,然后按城市分组统计用户数并排序。第二个查询连接用户表和订单表,按用户ID分组统计消费总额并排序。MySQL日期函数和窗口函数的使用。2.答案sql--查询每个酒店类型(room_type)的平均预订价格,并只显示平均价格高于酒店平均价格的所有酒店类型WITHHotelAveragesAS(SELECTroom_type,AVG(price)astype_avgFROMroomsGROUPBYroom_type),HotelOverallAS(SELECTAVG(price)asoverall_avgFROMrooms)SELECTha.room_typeFROMHotelAverageshaJOINHotelOverallhoONha.type_avg>ho.overall_avg;sql--查询当前日期已预订但尚未入住的房间数量,按酒店ID分组排序SELECThotel_id,COUNT(room_id)asavailable_countFROMbookingsWHEREcheck_out>CURDATE()ANDcheck_in<=CURDATE()GROUPBYhotel_idORDERBYhotel_id;解析:第一个查询使用公用表表达式(CTE)计算每个酒店类型的平均价格和所有酒店的平均价格,然后连接筛选。第二个查询筛选出当前日期已预订但尚未入住的订单,按酒店ID分组统计。注意日期范围判断。3.答案sql--查询每个酒店的平均评分,并返回评分最高的前5个酒店及其评分SELECThotel_id,AVG(rating)asavg_ratingFROMreviewsGROUPBYhotel_idORDERBYavg_ratingDESCLIMIT5;sql--查询在过去一年中,每个用户点评数量最多的前10个酒店,要求这些酒店的总评分不能低于4.0WITHHotelRatingsAS(SELECThotel_id,AVG(rating)asavg_ratingFROMreviewsWHEREreview_date>=DATE_SUB(CURDATE(),INTERVAL1YEAR)GROUPBYhotel_idHAVINGavg_rating>=4.0),UserActivityAS(SELECTuser_id,hotel_id,COUNT()asreview_countFROMreviewsWHEREreview_date>=DATE_SUB(CURDATE(),INTERVAL1YEAR)GROUPBYuser_id,hotel_id)SELECTha.hotel_id,SUM(ua.review_count)astotal_reviewsFROMHotelRatingshaJOINUserActivityuaONha.hotel_id=ua.hotel_idGROUPBYha.hotel_idORDERBYtotal_reviewsDESCLIMIT10;解析:第一个查询简单分组计算平均评分并排序。第二个查询使用两个CTE:一个计算过去一年每个酒店的平均评分并筛选高于4.0的酒店,另一个统计每个用户对每个酒店的点评数。最后连接并按点评总数排序。三、系统设计答案与解析1.答案系统架构图(文字描述)+-++-++-+|用户界面层|-->|认证服务层|-->|数据存储层||(Web/App)|||||+-++-++-+^|||||+--+--+||+-++-+|第三方登录适配器||安全服务||(微信/支付宝等)||(OAuth2)|+-++-+关键技术选型1.认证服务层:采用JWT(JSONWebToken)实现无状态认证,使用Redis存储token以支持分布式部署。实现OAuth2.0协议支持第三方登录。2.数据存储:用户信息使用MySQL(InnoDB引擎),索引用户ID和第三方账号ID。Redis用于缓存token和会话信息。3.安全设计:-密码使用bcrypt加盐存储-HTTPS强制加密传输-实现CORS跨域资源共享策略-限制登录失败次数(60秒内5次)4.高并发优化:-使用Kafka处理异步认证请求-API网关(如Kong)进行请求路由和限流-负载均衡(Nginx/HAProxy)实现要点-注册时生成UUID作为用户ID-第三方登录时,先验证回调参数,然后查询本地用户是否存在,不存在则创建-密码找回通过邮件发送临时验证码实现-使用分布式锁处理并发注册问题2.答案系统架构图(文字描述)+-++-++-+|用户请求|-->|预处理层|-->|核心推荐引擎||(Web/App)|||||+-++-++-+^|||||+--+--+||+-++-+|数据存储层||缓存层||(MySQL/MongoDB)||(Redis/Memcached)|+-++-+算法设计1.输入特征:-用户特征:历史偏好、会员等级、消费能力-物品特征:酒店位置、设施、价格、评分-上下文特征:时间、天气、节假日2.推荐算法:-基础排序:根据历史价格、评分、销量等静态特征进行初步排序-个性化调整:使用用户历史行为数据,通过协同过滤(User-BasedCF)或内容推荐(Item-BasedCF)调整排序-实时因素:结合实时供需关系,使用线性回归模型预测需求-业务规则:优先推荐符合平台营销策略的酒店(如新上线、特价活动)3.技术实现:-使用Lambda架构处理实时与离线数据-推荐模型使用TensorFlow/PyTorch训练-推荐服务使用gRPC实现高性能API-结果缓存30分钟,热更新时使用雪崩策略4.性能优化:-延迟敏感度分析:90%请求需在200ms内返回-异步处理:使用消息队列处理长时任务-地理位置优化:使用H3索引加速地理位置查询关键挑战-缓存命中率:通过动态调整TTL和预加载策略保持85%以上-新酒店冷启动:使用基于相似物品的初始化策略-业务规则穿透:设计可配置的规则引擎支持快速调整推荐策略四、Java/Python编程答案与解析1.答案(Java)javapublicclassUserBehaviorimplementsComparable<UserBehavior>{privatelongtimestamp;privateintuserId;privateStringaction;privateintitemId;publicUserBehavior(longtimestamp,intuserId,Stringaction,intitemId){this.timestamp=timestamp;this.userId=userId;this.action=action;this.itemId=itemId;}@OverridepublicStringtoString(){returntimestamp+""+userId+""+action+""+itemId;}publicstaticintcountRecentPurchases(List<UserBehavior>behaviors,longdurationMs){longcutoffTime=System.currentTimeMillis()-durationMs;Map<Integer,Integer>purchaseCount=newHashMap<>();for(UserBehaviorbehavior:behaviors){if(behavior.action.equals("purchase")&&behavior.timestamp>=cutoffTime){purchaseCount.put(behavior.userId,purchaseCount.getOrDefault(behavior.userId,0)+1);}}returnpurchaseCount.entrySet().stream().max(Map.EparingByValue()).map(Map.Entry::getValue).orElse(0);}//Gettersandsettersomittedforbrevity}解析:实现了Comparable接口用于排序,toString方法按指定格式返回字符串。countRecentPurchases方法使用HashMap统计每个用户在指定时间内的购买次数,然后返回最多购买次数。时间复杂度O(n),空间复杂度O(n)。2.答案(Python)pythonclassReview:def__init__(self,reviewId,userId,hotelId,rating,text,date):self.reviewId=reviewIdself.userId=userIdself.hotelId=hotelIdself.rating=ratingself.text=textself.date=datedeffilter_high_ratings(self):"""过滤出评分大于4.0且包含关键词'推荐'的评论"""ifself.rating>4.0a

温馨提示

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

评论

0/150

提交评论