2026年全栈工程师面试题及答案解析_第1页
2026年全栈工程师面试题及答案解析_第2页
2026年全栈工程师面试题及答案解析_第3页
2026年全栈工程师面试题及答案解析_第4页
2026年全栈工程师面试题及答案解析_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

2026年全栈工程师面试题及答案解析一、编程题(共3题,每题30分,总分90分)1.编程题(30分)题目:请用JavaScript实现一个简单的RESTfulAPI接口,支持创建(POST)、读取(GET)、更新(PUT)和删除(DELETE)操作。要求:-使用Node.js和Express框架。-数据存储在内存中(使用数组模拟数据库)。-提供完整的路由处理逻辑和错误处理。答案解析:javascriptconstexpress=require('express');constapp=express();app.use(express.json());letusers=[];//POST:创建用户app.post('/users',(req,res)=>{const{id,name,email}=req.body;if(!id||!name||!email){returnres.status(400).json({error:'Missingfields'});}constuser={id,name,email};users.push(user);res.status(201).json(user);});//GET:获取所有用户app.get('/users',(req,res)=>{res.json(users);});//GET:获取单个用户app.get('/users/:id',(req,res)=>{const{id}=req.params;constuser=users.find(u=>u.id===id);if(!user){returnres.status(404).json({error:'Usernotfound'});}res.json(user);});//PUT:更新用户app.put('/users/:id',(req,res)=>{const{id}=req.params;const{name,email}=req.body;constuserIndex=users.findIndex(u=>u.id===id);if(userIndex===-1){returnres.status(404).json({error:'Usernotfound'});}users[userIndex]={...users[userIndex],name,email};res.json(users[userIndex]);});//DELETE:删除用户app.delete('/users/:id',(req,res)=>{const{id}=req.params;constuserIndex=users.findIndex(u=>u.id===id);if(userIndex===-1){returnres.status(404).json({error:'Usernotfound'});}users.splice(userIndex,1);res.status(204).send();});app.use((req,res,next)=>{res.status(404).json({error:'Notfound'});});app.listen(3000,()=>{console.log('Serverrunningonport3000');});解析:-使用Express框架简化路由处理。-数据存储在`users`数组中,模拟数据库操作。-完整覆盖RESTfulAPI的CRUD操作,并添加错误处理(如缺失字段、用户不存在等)。2.编程题(30分)题目:请用Python实现一个简单的文件上传功能,要求:-使用Flask框架。-支持多文件上传。-上传文件后,需验证文件类型(仅允许上传jpg、png格式图片)。-若验证失败,返回错误提示;若成功,保存文件并返回成功信息。答案解析:pythonfromflaskimportFlask,request,jsonifyimportosapp=Flask(__name__)app.config['UPLOAD_FOLDER']='uploads'app.config['ALLOWED_EXTENSIONS']={'jpg','jpeg','png'}defallowed_file(filename):return'.'infilenameandfilename.rsplit('.',1)[1].lower()inapp.config['ALLOWED_EXTENSIONS']@app.route('/upload',methods=['POST'])defupload_file():if'files[]'notinrequest.files:returnjsonify({'error':'Nofilespart'}),400files=request.files.getlist('files[]')uploaded_files=[]forfileinfiles:iffileandallowed_file(file.filename):filename=file.filenamefile.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))uploaded_files.append(filename)else:returnjsonify({'error':f'Invalidfiletype:{file.filename}'}),400returnjsonify({'message':'Filesuploadedsuccessfully','files':uploaded_files}),200if__name__=='__main__':ifnotos.path.exists(app.config['UPLOAD_FOLDER']):os.makedirs(app.config['UPLOAD_FOLDER'])app.run(debug=True)解析:-使用Flask处理文件上传,`request.files.getlist`支持多文件上传。-通过`allowed_file`函数验证文件扩展名。-若文件类型不合法,返回错误信息;若成功,保存文件并返回文件名列表。3.编程题(30分)题目:请用SQL编写一个查询语句,满足以下需求:-表格名称为`orders`,包含字段:`order_id`(订单ID)、`customer_id`(客户ID)、`order_date`(订单日期)、`status`(订单状态,如'completed'、'pending'等)。-要求查询:1.统计每个订单状态的订单数量。2.仅返回状态为'completed'或'spending'的订单。3.按订单数量降序排列。答案解析:sqlSELECTstatus,COUNT(order_id)ASorder_countFROMordersWHEREstatusIN('completed','pending')GROUPBYstatusORDERBYorder_countDESC;解析:-`WHEREstatusIN('completed','pending')`过滤状态。-`GROUPBYstatus`按状态分组统计订单数量。-`ORDERBYorder_countDESC`按数量降序排列。二、系统设计题(共2题,每题40分,总分80分)1.系统设计题(40分)题目:设计一个高并发的短链接生成系统,要求:-用户访问短链接时,需自动跳转到对应的原链接。-支持高并发访问(如每秒百万请求)。-系统需具备简单的缓存机制,减少数据库压力。-描述核心组件、数据存储方案及负载均衡策略。答案解析:核心组件:1.API网关(Nginx/HAProxy):负责请求分发和负载均衡。2.短链接服务(Node.js/Go):处理请求,生成短链接,查询原链接。3.缓存层(Redis):存储短链接与原链接的映射,加速查询。4.数据库(PostgreSQL/Redis):持久化存储短链接及访问日志。5.反向代理(Nginx):缓存静态资源,加速跳转。数据存储方案:-短链接生成规则:使用哈希算法(如Base62编码)将原链接转换为6位短码。-缓存层:Redis存储热点短链接,TTL设置为1小时。-数据库:存储所有短链接及原链接,索引`short_code`字段。负载均衡策略:-API网关使用轮询或IP哈希算法分发请求。-缓存层采用分片策略,避免单机瓶颈。-数据库读写分离,主库负责写入,从库负责查询。2.系统设计题(40分)题目:设计一个实时消息推送系统(如微信、钉钉),要求:-支持单聊和群聊功能。-能够处理大量用户并发在线(如千万级用户)。-实现消息的离线存储和重连机制。-描述核心架构、消息存储方案及心跳检测策略。答案解析:核心架构:1.WebSocket服务器(Node.js/WebSocket):实现实时消息传输。2.消息队列(Kafka/RabbitMQ):解耦消息生产与消费。3.数据库(MySQL/Redis):存储用户关系、消息记录、离线消息。4.定时任务(Celery/Redis):处理离线消息重推。消息存储方案:-用户关系存储:Redis存储用户ID与WebSocket连接ID的映射。-消息记录:MySQL分表存储消息(`sender_id`,`receiver_id`,`message`),索引`receiver_id`加速群聊查询。-离线消息:Redis存储未送达的消息(`user_id`->消息队列ID),定时重推。心跳检测策略:-客户端每30秒发送心跳包,服务器更新连接状态。-若客户端超时未连接,自动清理WebSocket映射,并推送离线消息。三、综合题(共1题,20分)1.综合题(20分)题目:假设你正在开发一个电商平台的订单管理系统,遇到以下问题:1.如何设计订单数据库表结构,支持高并发查询和更新?2.如何优化订单查询性能,特别是当订单数据量达到千万级时?3.如何处理订单支付失败的场景,确保数据一致性?答案解析:1.订单数据库表结构设计:sqlCREATETABLEorders(order_idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,amountDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','cancelled')DEFAULT'pending',created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,INDEXidx_user(user_id),INDEXidx_product(product_id),INDEXidx_status(status));解析:-使用`order_id`作为主键,确保唯一性。-索引`user_id`、`product_id`、`status`加速查询。-`sta

温馨提示

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

评论

0/150

提交评论