版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件工程师面试笔试训练题目一、编程语言基础(5题,每题10分,共50分)题目1:请用Java编写一个方法,接收一个整数数组,返回该数组中所有奇数的和。假设数组长度至少为1,且数组元素均为正整数。题目2:用Python实现一个函数,接收一个字符串,返回该字符串中每个字符出现的次数,并以字典形式返回。例如:输入"hello",输出`{'h':1,'e':1,'l':2,'o':1}`。题目3:用C++编写一个程序,实现一个简单的LRU(最近最少使用)缓存,支持get和put操作。缓存容量为3,get和put操作均需在O(1)时间复杂度内完成。题目4:用JavaScript实现一个函数,接收一个正整数n,返回一个包含1到n的斐波那契数列。例如:输入5,输出[1,1,2,3,5]。题目5:用Go语言编写一个函数,接收一个字符串切片,返回一个新切片,其中仅包含原切片中的非空字符串,并按字典序排序。二、数据结构与算法(5题,每题10分,共50分)题目6:请解释快速排序的工作原理,并用伪代码描述其核心步骤。假设初始数组为`[5,3,8,4,2]`,请展示前两轮的排序结果。题目7:用Java实现二叉搜索树的插入操作。假设树的节点定义如下:javaclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx){val=x;}}题目8:用Python编写一个函数,检测一个字符串是否为回文,忽略大小写和非字母字符。例如:输入"Racecar",输出True。题目9:用C++实现一个最小堆(MinHeap),并编写一个函数,用堆排序算法对数组`[9,3,1,5,13,12]`进行排序,展示每一轮的堆调整过程。题目10:用JavaScript实现一个拓扑排序算法,输入一个有向图的邻接表,输出一个拓扑排序结果。例如:输入`{0:[1],1:[2],2:[]}`,输出[0,1,2]。三、系统设计(3题,每题20分,共60分)题目11:设计一个简单的URL短链接系统。要求:1.支持将任意长度的URL转换为固定长度的短链接。2.支持通过短链接反查原始URL。3.系统需支持高并发访问。题目12:设计一个消息队列系统(如Kafka或RabbitMQ的简化版)。要求:1.支持生产者发送消息、消费者接收消息。2.保证消息至少被传递一次。3.简述如何实现消息的持久化。题目13:设计一个简单的分布式缓存系统。要求:1.支持缓存数据的过期机制。2.当主节点故障时,能快速切换到从节点。3.说明如何避免缓存雪崩问题。四、数据库与SQL(2题,每题20分,共40分)题目14:假设有一个电商订单表`orders`,字段包括`order_id`(主键)、`user_id`、`order_date`、`total_amount`。请写出SQL查询语句:1.查询2025年每月的总订单金额。2.查询每个用户的订单数量,并按订单数量降序排列。题目15:用MySQL编写一个事务操作,实现以下逻辑:1.扣除用户A的账户余额(假设初始余额为1000)。2.增加订单记录(假设订单金额为200)。3.如果第二步失败,则回滚第一步。五、操作系统与网络(3题,每题20分,共60分)题目16:解释进程与线程的区别,并说明在哪些场景下使用多线程比多进程更优。题目17:简述TCP的三次握手过程,并解释为什么不能是两次握手。题目18:设计一个简单的DNS解析流程。假设输入域名"",请说明解析步骤及每一步可能涉及的组件。答案与解析一、编程语言基础题目1(Java):javapublicintsumOdds(int[]arr){intsum=0;for(intnum:arr){if(num%2!=0){sum+=num;}}returnsum;}解析:遍历数组,判断每个元素是否为奇数,如果是则累加。时间复杂度O(n)。题目2(Python):pythondefcount_chars(s):return{char:s.count(char)forcharinset(s)}解析:使用字典推导式,先遍历字符串所有字符,统计每个字符的出现次数。题目3(C++):cppinclude<unordered_map>include<list>usingnamespacestd;classLRUCache{public:LRUCache(intcapacity):cap(capacity){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;freq.splice(freq.begin(),freq,it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){it->second->second=value;freq.splice(freq.begin(),freq,it->second);}else{if(cache.size()==cap){cache.erase(freq.back().first);freq.pop_back();}freq.emplace_front(key,value);cache[key]=freq.begin();}}private:intcap;unordered_map<int,list<pair<int,int>>::iterator>cache;list<pair<int,int>>freq;};解析:使用哈希表记录键到双向链表的映射,双向链表维护访问顺序。题目4(JavaScript):javascriptfunctionfibonacci(n){if(n<=0)return[];letdp=[1];if(n==1)returndp;dp.push(1);for(leti=2;i<n;i++){dp.push(dp[i-1]+dp[i-2]);}returndp;}解析:动态规划,记录前两个斐波那契数并累加。题目5(Go):gofuncfilterAndSort(s[]string)[]string{unique:=make(map[string]bool)for_,v:=ranges{ifv!=""{unique[v]=true}}res:=make([]string,0,len(unique))fork:=rangeunique{res=append(res,k)}sort.Strings(res)returnres}解析:去重后排序。二、数据结构与算法题目6(快速排序):解析:1.选择一个基准值(pivot),通常选择最后一个元素。2.分区操作:将数组分为两部分,左边的元素均小于基准值,右边的均大于。3.递归对左右两部分进行排序。初始数组`[5,3,8,4,2]`:第一轮:基准值5,分区后`[3,4,2]`和`[8]`。第二轮:基准值2,分区后`[3]`和`[4]`。题目7(二叉搜索树插入):javapublicTreeNodeinsert(TreeNoderoot,intval){if(root==null)returnnewTreeNode(val);if(val<root.val){root.left=insert(root.left,val);}else{root.right=insert(root.right,val);}returnroot;}解析:递归插入,左子树小于根节点,右子树大于根节点。题目8(回文检测):pythondefis_palindrome(s):s=''.join(c.lower()forcinsifc.isalnum())returns==s[::-1]解析:忽略大小写和非字母字符后,判断字符串是否对称。题目9(最小堆与堆排序):解析:1.构建最小堆:从最后一个非叶子节点向上调整。2.堆排序:交换堆顶与最后一个元素,调整堆。题目10(拓扑排序):javascriptfunctiontopologicalSort(graph){letinDegree={};for(letnodeingraph){inDegree[node]=0;}for(letnodeingraph){for(letneighborofgraph[node]){inDegree[neighbor]++;}}letqueue=[];for(letnodeininDegree){if(inDegree[node]===0)queue.push(node);}letres=[];while(queue.length){letnode=queue.shift();res.push(node);for(letneighborofgraph[node]){inDegree[neighbor]--;if(inDegree[neighbor]===0)queue.push(neighbor);}}returnres;}解析:基于入度队列的BFS算法。三、系统设计题目11(URL短链接):设计要点:1.使用hash函数(如MD5)生成短码,可加盐避免冲突。2.数据库存储原始URL与短码映射。3.高并发可通过Redis缓存热点短码。题目12(消息队列):设计要点:1.生产者将消息写入磁盘(如Kafka日志)。2.消费者从磁盘读取消息,确保不丢失(可设置重试机制)。3.使用ISR(In-SyncReplicas)保证副本同步。题目13(分布式缓存):设计要点:1.使用TTL机制自动过期。2.主从复制(如RedisCluster)。3.避免缓存雪崩:设置缓存预热、随机过期时间。四、数据库与SQL题目14(SQL查询):sql--查询每月总金额SELECTMONTH(order_date)ASmonth,SUM(total_amount)AStotalFROMordersWHEREYEAR(order_date)=2025GROUPBYMONTH(order_date);--查询用户订单数量SELECTuser_id,COUNT(order_id)ASorder_countFROMordersGROUPBYuser_idORDERBYorder_countDESC;题目15(事务操作):sqlSTARTTRANSACTION;UPDATEusersSETbalance=balance-200WHEREuser_id='A';INSERTINTOorders(user_id,amount)VALUES('A',200);--如果第二条失败,则回滚ROLLBACK;五、操作系统与网络题目16(进程与线程):进程:资源分配单位,独立内存空间。线程:执行单位,共享内存空间。多线程更优场景:I/O密集型任务(如Web服务器)。题目17(TCP三次握手):1.客户端发送SYN=1,seq=x。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中智集团第一季度高速公路收费员招聘5人备考题库(曲靖中建)带答案详解
- 2026河北唐山玉田启臻高级中学招聘教师备考题库及参考答案详解一套
- 2026四川四川九洲电器股份有限公司招聘证券事务岗(总监)2人备考题库及答案详解(新)
- 2026安徽芜湖臻鑫智镁科技有限公司招聘2人备考题库有完整答案详解
- 2026年西安印钞有限公司招聘备考题库(11人)及答案详解(夺冠系列)
- 2026上海师范大学附属官渡实验学校招聘8人备考题库附答案详解
- 道路桥梁维护保养技术方案
- 公司培训计划方案
- 污水管道内窥检测技术方案
- PVC防水卷材施工工艺方案
- 多动症儿童在感统训练
- 环保生产应急预案
- 殡葬礼仪服务创新创业项目商业计划书
- 数据驱动的零售商品陈列优化方案
- 录用通知(入职通知书)offer模板
- 畜禽屠宰加工工国家职业标准(征求意见稿)
- 颅内感染指南解读
- 仓储内部考核管理办法
- 建筑工程交通导改与组织方案
- 医疗器械维修知识考核试题库及答案
- 春天绿化养护知识培训
评论
0/150
提交评论