版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件开发实习生技术面试问题集一、编程语言基础(共5题,每题6分)1.题目:请用Python编写一个函数,实现将输入的十进制数转换为二进制数,并返回二进制字符串。如果输入不是正整数,则返回"输入错误"。pythondefdecimal_to_binary(n):pass答案:pythondefdecimal_to_binary(n):ifnotisinstance(n,int)orn<0:return"输入错误"returnbin(n)[2:]解析:`isinstance(n,int)`检查输入是否为整数,`n<0`排除负数,`bin(n)[2:]`将十进制转为二进制并去掉前缀`0b`。2.题目:请用Java实现一个方法,判断一个字符串是否为回文(正读反读相同),例如"madam"是回文。javapublicstaticbooleanisPalindrome(Strings){//方法实现}答案:javapublicstaticbooleanisPalindrome(Strings){intleft=0,right=s.length()-1;while(left<right){if(s.charAt(left)!=s.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:双指针法,从两头向中间遍历,若字符不匹配则不是回文。3.题目:请用C++实现一个函数,计算两个正整数的最大公约数(GCD),要求使用辗转相除法。cppintgcd(inta,intb){//方法实现}答案:cppintgcd(inta,intb){while(b!=0){inttemp=b;b=a%b;a=temp;}returna;}解析:辗转相除法(欧几里得算法),不断用较小数替换较大数,直到余数为0,最后的大数即为GCD。4.题目:请用JavaScript编写一个箭头函数,实现数组去重,返回新的数组。例如`[1,2,2,3]`去重后为`[1,2,3]`。javascriptconstunique=arr=>{//方法实现};答案:javascriptconstunique=arr=>[...newSet(arr)];解析:`Set`自动去重,展开运算符转换为数组。5.题目:请用Go语言实现一个函数,接收一个字符串,返回其所有子串(不重复)。例如输入"abc",返回`["a","ab","abc","b","bc","c"]`。gofuncsubstrings(sstring)[]string{//方法实现}答案:gofuncsubstrings(sstring)[]string{n:=len(s)varres[]stringfori:=0;i<n;i++{forj:=i+1;j<=n;j++{res=append(res,s[i:j])}}returnres}解析:双层循环,外层固定起始位置,内层扩展子串,避免重复。二、数据结构与算法(共5题,每题8分)1.题目:请用Python实现一个函数,检查括号字符串是否有效,例如`"()"`和`"()[]{}"`有效,`"(]"`无效。pythondefisValid(s):pass答案:pythondefisValid(s):stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top=stack.pop()ifstackelse'#'ifmapping[char]!=top:returnFalseelse:stack.append(char)returnnotstack解析:用栈匹配括号,左括号入栈,右括号与栈顶匹配,栈空且无剩余字符则有效。2.题目:请用Java实现快速排序(QuickSort)算法,对整数数组进行升序排序。javapublicstaticvoidquickSort(int[]arr,intleft,intright){//方法实现}答案:javapublicstaticvoidquickSort(int[]arr,intleft,intright){if(left<right){intpivotIndex=partition(arr,left,right);quickSort(arr,left,pivotIndex-1);quickSort(arr,pivotIndex+1,right);}}privatestaticintpartition(int[]arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;j++){if(arr[j]<=pivot){i++;swap(arr,i,j);}}swap(arr,i+1,right);returni+1;}privatestaticvoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}解析:选择右端点为基准,将小于基准的移到左边,大于的移到右边,递归排序左右子区间。3.题目:请用C++实现二叉树的层序遍历(BFS),返回节点值的列表。例如:cppstructTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(NULL),right(NULL){}};cppvector<int>levelOrder(TreeNoderoot){//方法实现}答案:cppvector<int>levelOrder(TreeNoderoot){vector<int>res;if(!root)returnres;queue<TreeNode>q;q.push(root);while(!q.empty()){TreeNodenode=q.front();q.pop();res.push_back(node->val);if(node->left)q.push(node->left);if(node->right)q.push(node->right);}returnres;}解析:队列实现BFS,逐层遍历节点,将子节点入队。4.题目:请用JavaScript实现一个函数,找出数组中和为特定值的三元组,例如输入`[1,2,-2,-1]`和目标`0`,返回`[[-2,-1,3],[-1,2,-1]]`。javascriptconstthreeSum=(nums,target)=>{//方法实现};答案:javascriptconstthreeSum=(nums,target)=>{nums.sort((a,b)=>a-b);constres=[];for(leti=0;i<nums.length-2;i++){if(i>0&&nums[i]===nums[i-1])continue;letleft=i+1,right=nums.length-1;while(left<right){consttotal=nums[i]+nums[left]+nums[right];if(total===target){res.push([nums[i],nums[left],nums[right]]);while(left<right&&nums[left]===nums[left+1])left++;while(left<right&&nums[right]===nums[right-1])right--;left++;right--;}elseif(total<target){left++;}else{right--;}}}returnres;};解析:排序后双指针,外层固定一个数,内层双指针找另外两个数,跳过重复值。5.题目:请用Python实现一个函数,找出链表的中间节点,假设链表长度为奇数或偶数。例如:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextpythondefmiddleNode(head):pass答案:pythondefmiddleNode(head):slow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextreturnslow解析:快慢指针,快指针每次走两步,慢指针走一步,快指针到末尾时慢指针在中间。三、数据库与SQL(共4题,每题7分)1.题目:请写SQL查询,找出员工工资高于其所在部门平均工资的所有员工信息(假设表名`employees`和`departments`,包含字段`id`,`name`,`salary`,`dept_id`)。sqlSELECTe.FROMemployeeseINNERJOINdepartmentsdONe.dept_id=d.idWHEREe.salary>(SELECTAVG(salary)FROMemployeesWHEREdept_id=e.dept_id);解析:子查询计算每个部门平均工资,外层查询筛选高于平均工资的员工。2.题目:请写SQL查询,找出在2023年入职且工作满1年的员工名单(假设表名`employees`,包含字段`id`,`name`,`hire_date`)。sqlSELECTnameFROMemployeesWHEREhire_dateBETWEEN'2023-01-01'AND'2023-12-31'ANDhire_date<=DATE_SUB(CURDATE(),INTERVAL1YEAR);解析:筛选2023年入职且当前日期距离入职日期大于等于1年的员工。3.题目:请写SQL查询,将所有订单金额按降序排列,并显示订单号和金额,如果金额相同,则按订单号升序排列(假设表名`orders`,包含字段`order_id`,`amount`)。sqlSELECTorder_id,amountFROMordersORDERBYamountDESC,order_idASC;解析:`ORDERBY`多字段排序,先按金额降序,金额相同则按订单号升序。4.题目:请写SQL查询,统计每个部门的员工数量和平均工资,只显示员工数量大于2的部门(假设表名`employees`和`departments`,包含字段`id`,`name`,`salary`,`dept_id`)。sqlSELECTASdepartment,COUNT(e.id)ASemployee_count,AVG(e.salary)ASavg_salaryFROMemployeeseJOINdepartmentsdONe.dept_id=d.idGROUPBYHAVINGCOUNT(e.id)>2;解析:连接表统计部门员工数和平均工资,`HAVING`筛选员工数大于2的部门。四、系统设计基础(共3题,每题10分)1.题目:设计一个简单的短链接服务,用户输入长链接,系统返回短链接,点击短链接后自动跳转回长链接。请说明主要组件和数据结构。答案:-主要组件:1.URL缩短服务:接收长链接,生成短ID,存储映射关系。2.数据库:存储长链接与短ID的映射(主键为短ID,索引为长链接)。3.路由器:将短链接请求转发到URL解析服务。4.URL解析服务:根据短ID查找长链接,返回跳转指令。-数据结构:sqlCREATETABLEurl_mapping(short_idCHAR(6)PRIMARYKEY,long_urlVARCHAR(2048),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-生成短ID:使用随机算法或Base62编码(a-z,A-Z,0-9)。2.题目:设计一个简单的微博关注系统,用户可以关注/取消关注其他用户,请说明数据表设计、核心逻辑和可能的优化。答案:-数据表设计:sqlCREATETABLEfollows(follower_idINT,followee_idINT,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(follower_id,followee_id),FOREIGNKEY(follower_id)REFERENCESusers(id),FOREIGNKEY(followee_id)REFERENCESusers(id));-核心逻辑:-关注:插入一条`(follower_id,followee_id)`记录。-取消关注:删除一条`(follower_id,followee_id)`记录。-查询关注列表:`SELECTfollowee_idFROMfollowsWHEREfollower_id=?`。-优化:-使用索引加速查询。-使用缓存(如Redis)存储关注列表,减少数据库压力。3.题目:设计一个简单的秒杀系统,用户在指定时间点点击购买按钮,系统需要保证秒杀成功。请说明主要组件和防作弊策略。答案:-主要组件:1.前端:展示商品和秒杀按钮,发送请求。2.网关/限流:防止恶意请求,如令牌桶算法。3.秒杀服务:处理请求,验证库存,记录订单。4.库存服务:实时扣减库存,使用Redis锁避免超卖。5.数据库:存储商品信息、库存数据和订单记录。-防作弊策略:-分布式锁:使用Redis锁或ZooKeeper保证并发时库存正确。-验证码:防止机器人刷单。-幂等性:确保同一请求只处理一次(如使用请求ID记录已处理请求)。-库存预扣:在高并发时先预扣库存,成功后才扣减。五、项目与系统问题(共3题,每题8分)1.题目:你在实习项目中负责开发一个用户登录模块,使用了JWT(JSONWebToken)进行身份验证。请说明JWT的工作原理、优缺点,以及如何处理JWT过期问题。答案:-工作原理:1.用户登录成功后,服务器生成JWT(包含用户ID、权限等信息,并签名)。2.将JWT返回给客户端,客户端存储在`localStorage`或`cookie`中。3.客户端每次请求时携带JWT。4.服务器验证签名和过期时间,通过则放行。-优缺点:-优点:无状态、可扩展、跨域。-缺点:不能存储敏感信息(签名后无法修改)、过期时间有限。-处理过期问题:-设置合理的过期时间(如5-10分钟)。-使用刷新令牌(RefreshToken)机制,过期后用RefreshToken获取新的JWT。2.题目:你在项目中使用了MySQL数据库,遇到一个性能问题:查询某个表的特定列时非常慢。请说明可能的原因和优化方法。答案:-可能原因:1.缺少索引:查询列未建立索引。2.全表扫描:查询条件无效导致全表扫描。3.锁竞争:高并发写入导致锁等待。4.慢查询:SQL语句复杂或参数不合适。-优化方法:1.添加索引:为查询列创建索引。2.优化SQL:避免`SELECT`,使用`EXPLAIN`分析查询计划。3.分表分库:数据量过大时进行水平/垂直拆分。4.缓存:使用Redis缓存热点数据。3.题目:你在项目中使用了Git进行代码管理,你和另一个同事同时修改了同一个文件,提交后导致冲突。请说明如何解决冲突。答案:-解决步骤:1.合并冲突:-使用`gitdiff`查看冲突区域。-手动编辑文件,删除`<<<<<<<`、`=======`、`>>>>>>>`标记
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自查报告护理质量检查及整改措施
- 医患关系综治例会内容
- 电联合作协议书
- 血清检测协议书
- 员工找公司借钱协议书
- 发电企业安全环保课件
- 发电企业安全培训宣传稿课件
- 未来五年资本投资科技服务企业县域市场拓展与下沉战略分析研究报告
- 未来五年金融商品转让企业数字化转型与智慧升级战略分析研究报告
- 未来五年婚姻服务企业县域市场拓展与下沉战略分析研究报告-20251125-082947
- 危废仓库储存安全培训课件
- 企业能源管理节能方案模板
- 校长考核管理办法
- 电厂固废管理办法
- 消防队伍廉政教育课件
- 梅毒防治知识讲座课件
- 石油化工安装工程概算指标说明(2019版)
- 2025年中考数学二轮专项复习【最值问题-瓜豆原理专题训练】-讲义
- T-ZJICA 1101-2024 算力中心智慧物业服务规范
- 签订劳动合同的注意事项
- 体育赛事组织团队职责分配
评论
0/150
提交评论