版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年后端开发工程师初级面试攻略与预测题一、编程基础题(3题,每题10分)题目1:字符串反转问题描述:写一个函数,输入一个字符串,输出该字符串的反转结果。例如,输入`"hello"`,输出`"olleh"`。答案:javapublicclassStringReversal{publicstaticStringreverseString(Strings){if(s==null||s.length()==0){returns;}char[]chars=s.toCharArray();intleft=0,right=chars.length-1;while(left<right){chartemp=chars[left];chars[left]=chars[right];chars[right]=temp;left++;right--;}returnnewString(chars);}publicstaticvoidmain(String[]args){System.out.println(reverseString("hello"));//输出:olleh}}题目2:判断回文数问题描述:写一个函数,输入一个整数,判断该整数是否为回文数。例如,输入`121`,返回`true`;输入`-121`,返回`false`。答案:javapublicclassPalindromeNumber{publicstaticbooleanisPalindrome(intx){if(x<0||(x%10==0&&x!=0)){returnfalse;}intreversed=0;while(x>reversed){reversed=reversed*10+x%10;x/=10;}returnx==reversed||x==reversed/10;}publicstaticvoidmain(String[]args){System.out.println(isPalindrome(121));//输出:trueSystem.out.println(isPalindrome(-121));//输出:false}}题目3:合并两个有序数组问题描述:给定两个有序数组`nums1`和`nums2`,合并它们为一个有序数组。假设`nums1`的长度为`m`,`nums2`的长度为`n`,且`nums1`的长度足够容纳两个数组的合并结果。答案:javapublicclassMergeSortedArrays{publicstaticvoidmerge(int[]nums1,intm,int[]nums2,intn){intp1=m-1,p2=n-1,p=m+n-1;while(p1>=0&&p2>=0){nums1[p--]=nums1[p1]>nums2[p2]?nums1[p1--]:nums2[p2--];}System.arraycopy(nums2,0,nums1,0,p2+1);}publicstaticvoidmain(String[]args){int[]nums1={1,2,3,0,0,0};int[]nums2={2,5,6};merge(nums1,3,nums2,3);for(intnum:nums1){System.out.print(num+"");//输出:122356}}}二、数据结构与算法题(5题,每题10分)题目1:二叉树的最大深度问题描述:给定一个二叉树,编写一个函数来返回其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。答案:javaclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.left=left;this.right=right;}}publicclassMaxDepthBinaryTree{publicintmaxDepth(TreeNoderoot){if(root==null){return0;}return1+Math.max(maxDepth(root.left),maxDepth(root.right));}publicstaticvoidmain(String[]args){TreeNoderoot=newTreeNode(3);root.left=newTreeNode(9);root.right=newTreeNode(20);root.right.left=newTreeNode(15);root.right.right=newTreeNode(7);MaxDepthBinaryTreesolution=newMaxDepthBinaryTree();System.out.println(solution.maxDepth(root));//输出:3}}题目2:排序算法实现问题描述:实现快速排序算法,输入一个整数数组,返回排序后的数组。答案:javapublicclassQuickSort{publicstaticvoidquickSort(int[]nums,intleft,intright){if(left<right){intpivotIndex=partition(nums,left,right);quickSort(nums,left,pivotIndex-1);quickSort(nums,pivotIndex+1,right);}}privatestaticintpartition(int[]nums,intleft,intright){intpivot=nums[right];inti=left-1;for(intj=left;j<right;j++){if(nums[j]<=pivot){i++;swap(nums,i,j);}}swap(nums,i+1,right);returni+1;}privatestaticvoidswap(int[]nums,inti,intj){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}publicstaticvoidmain(String[]args){int[]nums={4,2,1,5,3};quickSort(nums,0,nums.length-1);for(intnum:nums){System.out.print(num+"");//输出:12345}}}题目3:链表反转问题描述:给定一个单链表,编写一个函数来反转它。例如,输入`1->2->3->4->5`,输出`5->4->3->2->1`。答案:javaclassListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;}ListNode(intval,ListNodenext){this.val=val;this.next=next;}}publicclassReverseLinkedList{publicstaticListNodereverseList(ListNodehead){ListNodeprev=null;ListNodecurrent=head;while(current!=null){ListNodenextTemp=current.next;current.next=prev;prev=current;current=nextTemp;}returnprev;}publicstaticvoidmain(String[]args){ListNodehead=newListNode(1,newListNode(2,newListNode(3,newListNode(4,newListNode(5)))));ListNodereversed=reverseList(head);while(reversed!=null){System.out.print(reversed.val+"->");reversed=reversed.next;}//输出:5->4->3->2->1->}}题目4:查找数组中的重复元素问题描述:给定一个包含`n`个整数的数组,其中`1<=n<=10^4`,数组中的整数范围在`1`到`n`之间。找出数组中所有重复的元素,并返回它们的列表。答案:javaimportjava.util.ArrayList;importjava.util.List;publicclassFindDuplicates{publicstaticList<Integer>findDuplicates(int[]nums){List<Integer>duplicates=newArrayList<>();for(intnum:nums){intindex=Math.abs(num)-1;if(nums[index]<0){duplicates.add(Math.abs(num));}else{nums[index]=-nums[index];}}for(inti=0;i<nums.length;i++){nums[i]=Math.abs(nums[i]);}returnduplicates;}publicstaticvoidmain(String[]args){int[]nums={4,3,2,7,8,2,3,1};List<Integer>duplicates=findDuplicates(nums);for(intnum:duplicates){System.out.print(num+"");//输出:23}}}题目5:树的层序遍历问题描述:给定一个二叉树,返回其层序遍历的结果。层序遍历是从上到下,从左到右遍历树的每一层。答案:javaimportjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.left=left;this.right=right;}}publicclassLevelOrderTraversal{publicstaticList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<>();if(root==null){returnresult;}Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);while(!queue.isEmpty()){intlevelSize=queue.size();List<Integer>level=newArrayList<>();for(inti=0;i<levelSize;i++){TreeNodecurrent=queue.poll();level.add(current.val);if(current.left!=null){queue.offer(current.left);}if(current.right!=null){queue.offer(current.right);}}result.add(level);}returnresult;}publicstaticvoidmain(String[]args){TreeNoderoot=newTreeNode(3,newTreeNode(9),newTreeNode(20,newTreeNode(15),newTreeNode(7)));List<List<Integer>>result=levelOrder(root);for(List<Integer>level:result){for(intval:level){System.out.print(val+"");}System.out.println();}//输出://3//920//157}}三、数据库与SQL题(3题,每题10分)题目1:SQL查询-聚合与分组问题描述:给定一个名为`orders`的表,包含以下列:`order_id`(订单ID),`customer_id`(客户ID),`order_date`(订单日期),`total_amount`(订单总金额)。编写一个SQL查询,返回每个客户的总订单金额,并按总金额降序排列。答案:sqlSELECTcustomer_id,SUM(total_amount)AStotal_spentFROMordersGROUPBYcustomer_idORDERBYtotal_spentDESC;题目2:SQL查询-连接与子查询问题描述:给定两个表:`orders`(包含订单信息)和`customers`(包含客户信息)。`orders`表有`order_id`和`customer_id`列,`customers`表有`customer_id`和`customer_name`列。编写一个SQL查询,返回订单金额超过1000的客户名称。答案:sqlSELECTc.customer_nameFROMcustomerscJOIN(SELECTcustomer_idFROMordersGROUPBYcustomer_idHAVINGSUM(total_amount)>1000)oONc.customer_id=o.customer_id;题目3:SQL查询-更新与条件问题描述:给定一个名为`employees`的表,包含以下列:`employee_id`(员工ID),`name`(员工姓名),`salary`(员工薪水),`department_id`(部门ID)。编写一个SQL语句,将所有部门ID为`5`的员工的薪水增加`10%`。答案:sqlUPDATEemployeesSETsalary=salary*1.10WHEREdepartment_id=5;四、系统设计题(2题,每题10分)题目1:设计一个简单的短链接系统问题描述:设计一个简单的短链接系统。用户输入一个长链接,系统生成一个短链接返回给用户,用户通过短链接可以访问到对应的长链接。答案:1.数据存储:使用数据库存储长链接和短链接的映射关系,包括`long_url`(长链接),`short_url`(短链接),`created_at`(创建时间)等字段。2.短链接生成:使用哈希算法(如MD5或SHA-1)对长链接进行哈希,生成固定长度的短链接。为了提高可读性,可以使用Base62编码(包含大小写字母和数字)。3.路由解析:当用户访问短链接时,系统通过路由解析将短链接转换为对应的长链接,并记录访问日志。4.服务端实现:使用RESTfulAPI提供服务,包括生成短链接和访问长链接的接口。5.高可用性:使用负载均衡和缓存机制(如Redis)提高系统的可用性和性能。题目2:设计一个简单的消息队列系统问题描述:设计一个简单的消息队列系统,支持生产者发送消息和消费者接收消息。答案:1.消息存储:使用数据库或消息中间件(如RabbitMQ或Kafka)存储消息,包括`message_id`(消息ID),`content`(消息内容),`status`(消息状态,如未消费、已消费)等字段。2.生产者:生产者将消息发送到消息队列,消息队列将消息存储到数据库或消息中间件中。3.消费者:消费者从消息队列中读取消息,处理消息后将消息状态更新为已消费。4.高可用性:使用多个消费者节点和负载均衡机制提高系统的并发处理能力。5.消息确认:消费者处理完消息后,向生产者发送确认消息,确保消息不丢失。6.重试机制:如果消费者处理消息失败,可以重新将消息发送到队列中,等待其他消费者处理。五、数据库与SQL题(3题,每题10分)题目1:SQL查询-聚合与分组问题描述:给定一个名为`orders`的表,包含以下列:`order_id`(订单ID),`customer_id`(客户ID),`order_date`(订单日期),`total_amount`(订单总金额)。编写一个SQL查询,返回每个客户的总订单金额,并按总金额降序排列。答案:sqlSELECTcustomer_id,SUM(total_amount)AStotal_spentFROMordersGROUPBYcustomer_idORDERBYtotal_spentDESC;题目2:SQL查询-连接与子查询问题描述:给定两个表:`orders
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47434-2026消防应急救援装备输转装备通用技术条件
- 幼儿园教师职称晋升论文发表数量分析-基于2024年区域内教师职称评审档案
- 法律文书写作
- 人教版(2024)七年级下册英语 Unit 7 A Day to Remember 大单元整体设计(表格式)
- 2025年通信专业技术人员职业水平考试通信专业综合能力试题与答案
- 江苏省徐州市2025年省综合评标专家库新申报专家入库考试及专家续聘考试(交通类)练习题及答案
- 绵阳市2026年广播电视播音员主持人资格考试(广播电视播音主持业务)试题及答案
- 广播电视编辑记者资格考试(广播电视业务)能力提高训练试题库(2025年浙江湖州市)
- 推动科技创新与产业升级融合政策
- 单村供水站建筑外观建设参考要点及参考图册
- 指向思维品质提升的小学英语课堂教学表现性评价设计和实践探索
- 史密斯L1PB26-B1燃气采暖热水炉使用说明书
- 住院精神疾病患者自杀风险护理
- 2024年高考真题-物理(河北卷) 含答案
- 棒球项目可行性实施报告
- 矿井瓦斯抽采培训课件
- 无人机硬件设计与制造
- 侵占公司资金还款协议
- 《支气管激发试验》课件
- 热电半导体器件应用
- 高三高效课堂与尖子生培养课件
评论
0/150
提交评论