后端开发面试题及数据库知识含答案_第1页
后端开发面试题及数据库知识含答案_第2页
后端开发面试题及数据库知识含答案_第3页
后端开发面试题及数据库知识含答案_第4页
后端开发面试题及数据库知识含答案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

2026年后端开发面试题及数据库知识含答案一、编程语言基础(15分)题目1(5分)请用Java实现一个简单的LRU(最近最少使用)缓存,要求支持以下功能:1.初始化缓存容量为固定值2.`get(key)`:获取键对应的值,如果不存在返回-13.`put(key,value)`:添加或更新键值对,如果超出容量,需要删除最久未使用的键题目2(10分)用Python实现一个线程安全的计数器,要求:1.支持多线程同时读取和写入2.确保计数的一致性3.提供一个方法返回当前计数值二、数据结构与算法(20分)题目1(10分)给定一个整数数组,设计一个算法找到数组中未出现的最小正整数。要求时间复杂度O(n),空间复杂度O(1)。题目2(10分)实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历,要求用递归和非递归两种方式实现。三、数据库知识(25分)题目1(10分)解释ACID特性,并说明在哪些场景下可能需要牺牲某些ACID特性以换取性能。题目2(15分)设计一个简单的电商系统数据库表结构,包含以下功能:1.用户表(id,username,password,email)2.商品表(id,name,price,category)3.订单表(id,user_id,total_amount,order_date)4.订单明细表(id,order_id,product_id,quantity,price)要求:1.设计主外键关系2.添加必要的索引3.编写SQL语句实现:-查询某个用户的消费总额-查询某个分类的商品数量-查询最近一周的订单数量及平均订单金额四、系统设计(20分)题目1(10分)设计一个高并发的短链接生成系统,要求:1.支持高并发访问2.链接具有唯一性3.链接长度尽可能短题目2(10分)设计一个简单的消息队列系统,要求:1.支持消息的发布和订阅2.保证消息的可靠传递3.提供至少两种消费者模式五、分布式系统(20分)题目1(10分)解释CAP理论,并说明在哪些场景下需要采用最终一致性架构。题目2(10分)设计一个分布式锁的解决方案,要求:1.支持高可用2.防止死锁3.能在分布式环境中正常工作答案与解析一、编程语言基础(15分)题目1(5分)答案javaimportjava.util.HashMap;importjava.util.Map;importjava.util.LinkedList;publicclassLRUCache<K,V>{privatefinalintcapacity;privateMap<K,Node<K,V>>cache;privateLinkedList<Node<K,V>>list;publicLRUCache(intcapacity){this.capacity=capacity;this.cache=newHashMap<>();this.list=newLinkedList<>();}publicVget(Kkey){if(!cache.containsKey(key)){return-1;}Node<K,V>node=cache.get(key);moveToHead(node);returnnode.value;}publicvoidput(Kkey,Vvalue){if(cache.containsKey(key)){Node<K,V>node=cache.get(key);node.value=value;moveToHead(node);}else{Node<K,V>newNode=newNode<>(key,value);if(cache.size()>=capacity){Node<K,V>tail=list.removeLast();cache.remove(tail.key);}cache.put(key,newNode);list.addFirst(newNode);}}privatevoidmoveToHead(Node<K,V>node){list.remove(node);list.addFirst(node);}privatestaticclassNode<K,V>{Kkey;Vvalue;Node<K,V>next;Node<K,V>prev;publicNode(Kkey,Vvalue){this.key=key;this.value=value;}}}题目2(10分)答案pythonimportthreadingclassThreadSafeCounter:def__init__(self,initial=0):self.value=initialself.lock=threading.Lock()defincrement(self):withself.lock:self.value+=1defdecrement(self):withself.lock:self.value-=1defget_value(self):withself.lock:returnself.value二、数据结构与算法(20分)题目1(10分)答案pythondeffirst_missing_positive(nums):n=len(nums)foriinrange(n):while1<=nums[i]<=nandnums[nums[i]-1]!=nums[i]:nums[nums[i]-1],nums[i]=nums[i],nums[nums[i]-1]foriinrange(n):ifnums[i]!=i+1:returni+1returnn+1题目2(10分)答案python递归方式classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefpreorder_recursive(root):ifnotroot:return[]return[root.val]+preorder_recursive(root.left)+preorder_recursive(root.right)definorder_recursive(root):ifnotroot:return[]returninorder_recursive(root.left)+[root.val]+inorder_recursive(root.right)defpostorder_recursive(root):ifnotroot:return[]returnpostorder_recursive(root.left)+postorder_recursive(root.right)+[root.val]defbfs(root):ifnotroot:return[]result,queue=[],[root]whilequeue:node=queue.pop(0)result.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)returnresult非递归方式defpreorder_non_recursive(root):ifnotroot:return[]result,stack=[],[root]whilestack:node=stack.pop()result.append(node.val)ifnode.right:stack.append(node.right)ifnode.left:stack.append(node.left)returnresultdefinorder_non_recursive(root):result,stack,current=[],[],rootwhilestackorcurrent:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()result.append(current.val)current=current.rightreturnresultdefpostorder_non_recursive(root):ifnotroot:return[]result,stack=[],[(root,False)]whilestack:node,visited=stack.pop()ifnode:ifvisited:result.append(node.val)else:stack.append((node,True))stack.append((node.right,False))stack.append((node.left,False))returnresult三、数据库知识(25分)题目1(10分)答案ACID特性解释:1.原子性(Atomicity):一个事务中的所有操作要么全部完成,要么全部不做,不会处于中间状态2.一致性(Consistency):事务必须保证数据库从一个一致性状态转换到另一个一致性状态3.隔离性(Isolation):一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的4.持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就是永久性的牺牲ACID的场景:1.性能需求高时可能牺牲隔离性(如使用可重复读隔离级别)2.实时性要求高时可能牺牲一致性(如最终一致性架构)3.大量写入场景下可能牺牲原子性(如本地写入,异步提交)4.分布式事务场景下可能牺牲持久性(如两阶段提交协议)题目2(15分)答案sql--用户表CREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50)NOTNULLUNIQUE,passwordVARCHAR(255)NOTNULL,emailVARCHAR(100));--商品表CREATETABLEproducts(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(255)NOTNULL,priceDECIMAL(10,2)NOTNULL,categoryVARCHAR(100),INDEXidx_category(category));--订单表CREATETABLEorders(idINTAUTO_INCREMENTPRIMARYKEY,user_idINTNOTNULL,total_amountDECIMAL(10,2)NOTNULL,order_dateDATETIMEDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(id));--订单明细表CREATETABLEorder_items(idINTAUTO_INCREMENTPRIMARYKEY,order_idINTNOTNULL,product_idINTNOTNULL,quantityINTNOTNULL,priceDECIMAL(10,2)NOTNULL,FOREIGNKEY(order_id)REFERENCESorders(id),FOREIGNKEY(product_id)REFERENCESproducts(id));--查询某个用户的消费总额SELECTuser_id,SUM(quantityprice)AStotal_spentFROMorder_itemsoiJOINordersoONoi.order_id=o.idGROUPBYuser_id;--查询某个分类的商品数量SELECTcategory,COUNT()ASproduct_countFROMproductsGROUPBYcategory;--查询最近一周的订单数量及平均订单金额SELECTCOUNT()ASorder_count,AVG(total_amount)ASavg_amountFROMordersWHEREorder_date>=NOW()-INTERVAL7DAY;四、系统设计(20分)题目1(10分)答案1.数据结构设计:-使用hash映射存储短链接与长链接的对应关系-使用自增ID生成短码,可映射为62进制字符2.系统架构:-负载均衡的前端接入层-短链接存储服务(可使用Redis或内存缓存)-原始链接存储服务(数据库或分布式文件系统)-错误处理与日志系统3.代码示例:pythonimportbase64importhashlibimportredisclassShortLinkService:def__init__(self):self.redis=redis.Redis()self.base="http://short.url/"self.characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"selfcharacter_len=len(self.characters)defgenerate_short_code(self,length=6):random_bytes=os.urandom(length)hash_digest=hashlib.sha256(random_bytes).hexdigest()short_code=base64.urlsafe_b64encode(hash_digest[:length]).decode().rstrip('=')returnshort_code[:length]defcreate_short_link(self,long_url):short_code=self.generate_short_code()self.redis.setex(short_code,360024365,long_url)returnself.base+short_codedefresolve_short_link(self,short_code):long_url=self.redis.get(short_code)iflong_url:returnlong_url.decode()return"404NotFound"题目2(10分)答案1.消息队列架构:-生产者(Producer)发布消息到主题(Topic)或队列(Queue)-消费者(Consumer)订阅主题/队列接收消息-消息中间件(如RabbitMQ,Kafka)2.实现方案:pythonimportpikaimportuuidclassMessageQueue:def__init__(self,queue_name="task_queue"):self.connection=pika.BlockingConnection(pika.ConnectionParameters('localhost'))self.channel=self.connection.channel()self.channel.queue_declare(queue=queue_name)self.correlation_id=str(uuid.uuid4())defsend_message(self,message,queue_name="task_queue"):self.channel.basic_publish(exchange='',routing_key=queue_name,body=message,properties=pika.BasicProperties(reply_to='response_queue',correlation_id=self.correlation_id))defreceive_message(self,queue_name="task_queue"):result=self.channel.basic_consume(queue=queue_name,auto_ack=True,on_message_callback=self.on_message)self.channel.start_consuming()defon_message(self,channel,method,properties,body):print(f"Receivedmessage:{body}")处理消息response="Messageprocessed"channel.basic_publish(exchange='',routing_key=properties.reply_to,properties=pika.BasicProperties(correlation_id=properties.correlation_id),body=response)五、分布式系统(20分)题目1(10分)答案CAP理论解释:-C(Consistency):一致性-A(Availability):可用性-P(Partitiontolerance):分区容错性当网络分区发生时,系统必须能在以下三个特性中至少满足两个:1.一致性:所有节

温馨提示

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

评论

0/150

提交评论