版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件开发面试技术难题及解答一、算法与数据结构(共5题,每题20分,总分100分)题目1(20分)问题描述:给定一个包含重复元素的数组,请找出数组中所有出现超过一半的数字。要求时间复杂度为O(n),空间复杂度为O(1)。示例输入:[1,2,2,3,3,3,4,3,3,3]示例输出:[3]提示:可以使用摩尔投票算法解决此问题。题目2(20分)问题描述:实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。LRU缓存应该按照最近最少使用顺序删除元素。要求get和put操作的时间复杂度均为O(1)。示例输入:-put(1,1)//缓存是{1=1}-put(2,2)//缓存是{1=1,2=2}-get(1)//返回1-put(3,3)//去除键2,缓存是{1=1,3=3}-get(2)//返回-1(未找到)-put(4,4)//去除键1,缓存是{4=4,3=3}示例输出:1,-1题目3(20分)问题描述:给定一个二叉树,判断它是否是高度平衡的二叉树。一棵高度平衡二叉树满足每个节点的左右两个子树的高度差的绝对值不超过1。示例输入:3/\920/\157示例输出:true题目4(20分)问题描述:实现快速排序算法,要求在最好、平均、最坏情况下都能保持较高的效率。请描述你的实现思路并给出代码。题目5(20分)问题描述:给定一个字符串,找到其中不重复的最长子串的长度。例如,输入"abcabcbb",输出"abcbb"的长度3。二、系统设计与架构(共4题,每题25分,总分100分)题目6(25分)问题描述:设计一个支持百万级用户的短链接系统。请说明系统架构、主要组件、数据存储方案以及如何处理高并发请求。题目7(25分)问题描述:设计一个微博系统的用户关注功能。要求支持:1.用户关注/取消关注其他用户2.获取用户的关注列表和粉丝列表3.支持批量操作以提高性能4.说明如何处理数据一致性问题题目8(25分)问题描述:设计一个高可用、可扩展的分布式消息队列系统。请说明系统架构、如何保证消息不丢失、如何处理消息积压问题。题目9(25分)问题描述:设计一个秒杀系统。要求支持高并发请求,防止超卖,并保证系统稳定运行。三、数据库与SQL(共5题,每题20分,总分100分)题目10(20分)问题描述:假设有一个订单表orders(id,user_id,product_id,price,order_time),请写SQL查询最近一个月内每个用户的总消费金额,并按消费金额降序排列。题目11(20分)问题描述:假设有一个学生表students(id,name,age,grade)和一个成绩表scores(student_id,subject,score),请写SQL查询每个学生的平均成绩,只显示平均分大于80的学生。题目12(20分)问题描述:假设有一个商品表products(id,name,category,price)和一个订单明细表order_items(order_id,product_id,quantity),请写SQL查询每个商品类别的总销售额,并按销售额降序排列。题目13(20分)问题描述:请解释数据库事务的ACID特性,并说明在实际应用中如何保证事务的原子性。题目14(20分)问题描述:假设有一个用户表users(id,username,email)和一个订单表orders(id,user_id,order_date),请写SQL查询2025年每个用户的订单数量,并显示订单数量最多的前5个用户。四、编程语言与框架(共5题,每题20分,总分100分)题目15(20分)问题描述:在JavaScript中,请解释事件循环机制,并说明Promise和async/await的区别和使用场景。题目16(20分)问题描述:在Java中,请解释线程池的工作原理,并说明如何创建一个固定大小的线程池以及如何处理拒绝的请求。题目17(20分)问题描述:在Python中,请解释装饰器的原理,并给出一个自定义装饰器的示例,该装饰器可以记录函数执行时间。题目18(20分)问题描述:在Go中,请解释goroutine和channel的用法,并给出一个使用goroutine和channel实现生产者消费者模式的示例。题目19(20分)问题描述:在React中,请解释组件的生命周期方法,并说明在React18中新的并发特性和Hooks的使用优势。五、网络安全(共3题,每题33分,总分99分)题目20(33分)问题描述:请解释常见的跨站脚本攻击(XSS)类型及其防御方法。请给出一个实际场景中如何防止XSS攻击的示例。题目21(33分)问题描述:请解释SQL注入攻击的原理及其防御方法。请给出一个实际场景中如何防止SQL注入攻击的示例。题目22(33分)问题描述:请解释HTTPS的工作原理,包括TLS握手过程和证书验证机制。说明在实际应用中如何配置安全的HTTPS连接。答案与解析答案1(算法与数据结构)摩尔投票算法:1.初始化candidate为0,count为02.遍历数组:-如果count为0,将当前元素设为candidate,count设为1-否则如果当前元素等于candidate,count加1-否则count减13.验证candidate是否为超过一半的数字pythondefmajority_element(nums):candidate=Nonecount=0fornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)验证count=0fornuminnums:ifnum==candidate:count+=1returncandidateifcount>len(nums)//2elseNone答案2(LRU缓存)使用双向链表和哈希表的组合:-哈希表用于O(1)时间复杂度的get操作-双向链表用于记录访问顺序,最近访问的元素在链表头部pythonclassListNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node):添加到头部node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):删除节点prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnotnode:newNode=ListNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]else:node.value=valueself._move_to_head(node)答案3(高度平衡二叉树)递归判断每个节点的左右子树高度差不超过1,且左右子树都是高度平衡的:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool:defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)ifnotleft_balanced:return0,Falseright_height,right_balanced=check(node.right)ifnotright_balanced:return0,Falsereturnmax(left_height,right_height)+1,abs(left_height-right_height)<=1returncheck(root)[1]答案4(快速排序)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)优化版本使用原地分区:pythondefquick_sort_inplace(arr,low,high):iflow<high:pivot_index=partition(arr,low,high)quick_sort_inplace(arr,low,pivot_index-1)quick_sort_inplace(arr,pivot_index+1,high)defpartition(arr,low,high):pivot=arr[high]i=low-1forjinrange(low,high):ifarr[j]<=pivot:i+=1arr[i],arr[j]=arr[j],arr[i]arr[i+1],arr[high]=arr[high],arr[i+1]returni+1答案5(不重复最长子串)滑动窗口方法:pythondeflength_of_longest_substring(s:str)->int:char_set=set()left=0max_length=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_length=max(max_length,right-left+1)returnmax_length答案6(短链接系统)系统架构:1.前端服务:接收用户请求,转发到后端2.后端服务:处理业务逻辑,包括生成短链接、查询短链接3.数据库:存储短链接映射关系4.缓存:缓存热点短链接,提高查询效率5.负载均衡器:分发请求到多个后端服务数据存储方案:-使用自增ID生成短链接-哈希算法将ID映射到短链接-使用Redis缓存热点短链接高并发处理:-使用消息队列异步处理创建短链接的请求-使用分布式锁防止并发创建相同的短链接答案7(用户关注功能)系统设计:1.数据模型:-用户表:user_id,username,...-关注关系表:follower_id,followee_id,follow_time2.主要接口:-关注/取消关注:POST/follow/{user_id}-获取关注列表:GET/users/{user_id}/followees-获取粉丝列表:GET/users/{user_id}/followers3.批量操作:-使用事务保证数据一致性-使用批量插入提高性能4.数据一致性问题:-使用分布式锁防止并发关注同一个用户-使用消息队列异步处理关注关系变更答案8(分布式消息队列)系统架构:1.生产者:发送消息到队列2.消费者:从队列获取消息3.队列服务:存储消息,处理路由4.缓存:缓存热点消息5.监控系统:监控队列状态保证消息不丢失:-生产者确认机制-消息持久化到磁盘-消息重复消费处理处理消息积压:-调整队列容量-使用优先级队列-扩展消费者数量答案9(秒杀系统)系统设计:1.前端:-预减库存,防止超卖-防止重复提交2.后端:-使用分布式锁-使用Redis缓存库存3.数据库:-使用事务保证数据一致性-使用乐观锁或悲观锁4.负载均衡:-分散请求到多个服务器关键点:-使用Redis设置分布式锁-使用事务保证库存更新和订单创建的一致性-设置请求超时时间防止恶意操作答案10(SQL查询)sqlSELECTuser_id,SUM(price)AStotal_spentFROMordersWHEREorder_time>=DATE_SUB(CURRENT_DATE,INTERVAL1MONTH)GROUPBYuser_idORDERBYtotal_spentDESC;答案11(SQL查询)sqlSELECTs.id,,AVG(sc.score)ASavg_scoreFROMstudentssJOINscoresscONs.id=sc.student_idGROUPBYs.id,HAVINGAVG(sc.score)>80;答案12(SQL查询)sqlSELECTp.category,SUM(p.priceoi.quantity)AStotal_salesFROMproductspJOINorder_itemsoiONp.id=duct_idGROUPBYp.categoryORDERBYtotal_salesDESC;答案13(数据库事务)ACID特性:-原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不做-一致性(Consistency):事务必须使数据库从一个一致性状态转移到另一个一致性状态-隔离性(Isolation):一个事务的执行不能被其他事务干扰-持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就是永久性的保证原子性:-使用事务隔离级别-使用数据库提供的事务管理机制-使用锁机制答案14(SQL查询)sqlSELECTu.username,COUNT(o.id)ASorder_countFROMusersuJOINordersoONu.id=o.user_idWHEREYEAR(o.order_date)=2025GROUPBYu.usernameORDERBYorder_countDESCLIMIT5;答案15(JavaScript事件循环)事件循环机制:1.主线程执行同步代码2.将异步任务放入任务队列3.当主线程空闲时,将任务队列中的任务移到执行栈4.执行异步任务,执行完毕后释放资源Promise和async/await:-Promise是异步编程的解决方案,可以链式调用-async/await是基于Promise的语法糖,使异步代码更像同步代码javascript//Promisefetch(url).then(res=>res.json()).then(data=>console.log(data));//async/awaitasyncfunctionfetchData(){constres=awaitfetch(url);constdata=awaitres.json();console.log(data);}答案16(Java线程池)线程池工作原理:1.线程池维护一个线程队列2.当提交任务时,线程池会先检查核心线程是否都在工作3.如果核心线程都在工作,则将任务放入任务队列4.如果任务队列已满,则创建新的线程执行任务5.非核心线程会在执行完任务后返回线程池等待新任务创建线程池:javaThreadPoolExecutorexecutor=newThreadPoolExecutor(5,//核心线程数10,//最大线程数60,//空闲线程存活时间TimeUnit.SECONDS,newArrayBlockingQueue<>(100),//任务队列newThreadPoolExecutor.CallerRunsPolicy()//拒绝策略);答案17(Python装饰器)装饰器原理:pythondefdecorator(func):defwrapper(args,kwargs):print("Beforefunctioncall")result=func(args,kwargs)print("Afterfunctioncall")returnresultreturnwrapper@decoratordeftest_func(x):returnxx记录函数执行时间的装饰器:pythonimporttimedeftime_decorator(func):defwrapper(args,kwargs):start_time=time.time()result=func(args,kwargs)end_time=time.time()print(f"Function{func.__name__}took{end_time-start_time}seconds")returnresultreturnwrapper@time_decoratordeftest_func(x):time.sleep(1)returnxx答案18(Gogoroutine和channel)goroutine和channel:gopackagemainimport("fmt""time")funcproducer(chchan<-int){fori:=0;i<10;i++{ch<-itime.Sleep(time.Second)}close(ch)}funcconsumer(ch<-chanint){fornum:=rangech{fmt.Println("Received",num)time.Sleep(time.Second2)}}funcmain(){ch:=make(chanint)goproducer(ch)consumer(ch)}答案19(React生命周期)React生命周期:javascriptclassMyComponentextendsReact.Component{constructor(props){super(props);this.state={count:0};}componentDidMount(){//组件挂载后}componentDidUpdate(prevProps,prevState){//组件更新后}componentWillUnmount(){//组件将要卸载}}//React18并发特性functionMyComponent(){const[count,setCount]=useState(0);React.useEffect(()=>{//挂载时执行},[]);return<buttononClick={()=>setCount(c=>c+1)}>Count:{count}</button>;}Hooks使用优势:-代码更简洁-逻辑可重用-状态管理更清晰答案20(XSS攻击)XSS攻击类型:1.存储型XSS:攻击payload存储在服务器,每次请求都会展示2.反射型XSS:攻击payload在响应中,需要用户主动触发3.DOM型XSS:攻击payload修改DOM,无需服务器参与防御方法:1.输入验证:限制输入长度、类型、特殊字符2.输出编码:对用户输入进行HTML编码3.使用CSP:限制脚本来源4.使用X-XSS-Protection头示例:javascript//输出编码functionescapeHTML(str){returnstr.replace(/&/g,'&').replace(/</
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026吉安市新供商贸物流有限公司招募就业见习人员2人笔试参考题库及答案解析
- 2026年西安市莲湖第一学校招聘笔试备考题库及答案解析
- 2026浙江丽水莲都区投资促进中心招募见习生1人考试参考题库及答案解析
- 2026上半年安徽事业单位联考合肥市巢湖市招聘22人笔试备考试题及答案解析
- 2026湖南邵东市城区第五完全小学春季见习教师招聘考试参考题库及答案解析
- 2026山东淄博文昌湖省级旅游度假区面向大学生退役士兵专项岗位招聘1人笔试模拟试题及答案解析
- 2026年家族办公室运营培训
- 2026浙江大学医学院附属第一医院江西医院(江西省心血管神经肿瘤医学中心)高层次人才招聘27人(9)考试参考题库及答案解析
- 首都师大附中科学城学校教师招聘考试备考题库及答案解析
- 2026年甘肃嘉峪关市人力资源和社会保障局招聘公益性岗位考试参考题库及答案解析
- DB5101∕T 214-2025 公园城市立体绿化技术指南
- 基本药物培训课件资料
- 汪金敏 培训课件
- 物流公司托板管理制度
- 医疗护理操作评分细则
- 自考-经济思想史知识点大全
- 银行资金闭环管理制度
- 2024年山东省胸痛中心质控报告
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- dlt-5161-2018电气装置安装工程质量检验及评定规程
- 学习无人机航拍心得体会1000字
评论
0/150
提交评论