news 2026/9/12 22:48:15

27届温州小厂Java后端实习一面复盘:快排、大数相加、链表判环 + Spring核心原理全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
27届温州小厂Java后端实习一面复盘:快排、大数相加、链表判环 + Spring核心原理全解析

27届温州小厂Java后端实习一面复盘:快排、大数相加、链表判环 + Spring核心原理全解析

面试时长:约40分钟
岗位方向:Java 后端开发实习生(温州本地企业)
关键词:快速排序、大数相加、链表判环、SQL TOP N、ArrayList vs LinkedList、Spring AOP/IOC、Bean 生命周期、Redis 数据类型、项目介绍


作为一名27届在校生,我在近期参加了一家温州本地企业的 Java 后端实习面试。虽然公司规模不大,但面试内容却非常扎实——既考察基础编码能力(三道算法题),又深入 Spring 核心机制与常用中间件原理,充分体现了“小厂重基础、重动手”的特点。

本文将以真实模拟对话 + 专业解析的形式,完整还原这场面试,并提供高质量回答思路,特别适合准备中小型公司实习面试的同学参考!


一、算法三连击:快排、大数相加、链表判环

面试官提问:

“手写一个快速排序。”

我的回答:
“好的,我用递归 + 双指针分区的方式实现:

publicvoidquickSort(int[]arr,intleft,intright){if(left>=right)return;intpivotIndex=partition(arr,left,right);quickSort(arr,left,pivotIndex-1);quickSort(arr,pivotIndex+1,right);}privateintpartition(int[]arr,intleft,intright){intpivot=arr[right];// 选最右为基准inti=left;for(intj=left;j<right;j++){if(arr[j]<=pivot){swap(arr,i++,j);}}swap(arr,i,right);// 将 pivot 放到正确位置returni;}privatevoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}

时间复杂度:平均 O(n log n),最坏 O(n²)(已有序时);
空间复杂度:O(log n)(递归栈)。

💡优化点:可随机选择 pivot 或三数取中,避免最坏情况。


面试官追问:

“两个超大整数(超出 long 范围)相加,怎么实现?”

我的回答:
“用字符串模拟竖式加法,从低位到高位逐位相加,处理进位:

publicStringaddStrings(Stringnum1,Stringnum2){StringBuilderres=newStringBuilder();inti=num1.length()-1,j=num2.length()-1;intcarry=0;while(i>=0||j>=0||carry>0){intx=i>=0?num1.charAt(i--)-'0':0;inty=j>=0?num2.charAt(j--)-'0':0;intsum=x+y+carry;res.append(sum%10);carry=sum/10;}returnres.reverse().toString();}

关键点

  • 从字符串末尾开始遍历;
  • carry记录进位;
  • 最后反转结果。

适用场景:金融系统、高精度计算。


面试官再问:

“如何判断链表是否有环?”

我的回答:
“经典解法是快慢指针(Floyd 判圈算法)

publicbooleanhasCycle(ListNodehead){if(head==null||head.next==null)returnfalse;ListNodeslow=head,fast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;if(slow==fast)returntrue;// 相遇即有环}returnfalse;}

原理

  • 快指针每次走 2 步,慢指针走 1 步;
  • 若有环,快指针必在环内追上慢指针;
  • 时间复杂度 O(n),空间 O(1)。

🔁扩展:相遇后可进一步求环入口(让一个指针回到头,同步走)。


二、SQL 实战:查成绩最高的前三个学生

面试官提问:

“有一张 student 表(id, name, score),查询成绩最高的前三个学生。”

我的回答:
“使用ORDER BY + LIMIT即可:

SELECTid,name,scoreFROMstudentORDERBYscoreDESCLIMIT3;

注意点

  • 如果有并列分数(如第3名有两人),可能需要RANK()DENSE_RANK()
  • 但在大多数业务场景中,LIMIT 3已满足需求。

📌MySQL 特有语法:其他数据库用TOP 3(SQL Server)或FETCH FIRST 3 ROWS ONLY(Oracle)。


三、集合框架:ArrayList vs LinkedList

面试官提问:

“ArrayList 和 LinkedList 有什么区别?”

我的回答:

维度ArrayListLinkedList
底层结构动态数组双向链表
随机访问O(1)(支持下标)O(n)(需遍历)
插入/删除O(n)(需移动元素)O(1)(已知节点时)
内存占用少(仅数组)多(每个节点存 prev/next 指针)
线程安全否(可用Collections.synchronizedList

使用建议

  • 频繁查询 → 选ArrayList
  • 频繁首尾增删 → 选LinkedList(但实际很少用,因缓存局部性差)。

⚠️误区:很多人以为 LinkedList 插入快,但若需先get(index)再插入,总复杂度仍是 O(n)。


四、Spring 核心:AOP、IOC 与 Bean 生命周期

面试官提问:

“说说 AOP 和 IOC 是什么?”

我的回答:

  • IOC(Inversion of Control,控制反转)
    把对象的创建和依赖管理交给 Spring 容器,而不是程序员手动new。通过@Component@Service等注解声明 Bean,容器自动注入依赖(DI)。

  • AOP(Aspect-Oriented Programming,面向切面编程)
    在不修改源码的情况下,统一处理横切逻辑(如日志、事务、权限)。Spring AOP 基于动态代理(JDK Proxy 或 CGLIB)实现。

关系:IOC 是 AOP 的基础——只有 Bean 被 Spring 管理,才能被代理。


面试官追问:

“什么是 Spring Bean?它的生命周期是怎样的?”

我的回答:
Spring Bean是由 Spring 容器管理的对象,通过配置或注解定义。

Bean 生命周期(简化版):

  1. 实例化:调用构造器或工厂方法;
  2. 属性赋值:通过 setter 或字段注入依赖;
  3. Aware 接口回调:如BeanNameAwareApplicationContextAware
  4. BeanPostProcessor 前置处理postProcessBeforeInitialization
  5. 初始化方法@PostConstructinit-method
  6. BeanPostProcessor 后置处理postProcessAfterInitialization
  7. 就绪使用
  8. 销毁:容器关闭时调用@PreDestroydestroy-method

🔄图示记忆:实例化 → 注入 → 初始化 → 使用 → 销毁。


五、Redis 基础:五大数据类型

面试官提问:

“Redis 常见数据类型有哪些?”

我的回答:
Redis 有 5 种基本数据类型:

类型典型应用场景
String缓存、计数器(INCR)、分布式锁
Hash存储对象(如用户信息)
List消息队列、最新 N 条记录
Set标签、共同好友(交集/并集)
ZSet(Sorted Set)排行榜、延迟队列

💡底层实现:String 用 SDS,List 用 quicklist,ZSet 用跳表 + 哈希表。


六、项目介绍:突出技术栈与个人贡献

面试官提问:

“介绍一下你的项目。”

我的回答:
“我做了一个校园二手交易平台,主要功能包括商品发布、搜索、下单、聊天。

  • 技术栈:Spring Boot + MyBatis + MySQL + Redis + WebSocket;
  • 我的工作
    • 用 Redis 缓存热门商品,QPS 提升 3 倍;
    • 基于 WebSocket 实现实时聊天;
    • 用 JWT 实现登录鉴权;
    • 通过@Async异步发送通知,降低主链路延迟。

虽然项目不大,但让我完整体验了从前端交互到后端接口、从数据库设计到缓存优化的全流程。”

小厂建议:项目不求大,但要能讲清“你做了什么”和“为什么这么做”。


总结:小厂面试的核心逻辑

温州这家小厂的面试风格非常典型:

  • 重基础:算法、集合、SQL 必考;
  • 重原理:Spring、Redis 问到底层;
  • 重实践:项目要能说出细节。

给读者的建议:

  1. 算法题必须手写:快排、链表、字符串是高频;
  2. 八股文要理解,不要死记:比如 Bean 生命周期,能画流程图最好;
  3. 项目哪怕简单,也要包装清楚:突出你的思考和技术选型理由。

最后:无论大厂小厂,扎实的基础 + 清晰的表达 = 实习 Offer!
从小厂起步,积累经验,未来冲击大厂更有底气!

📌觉得有帮助?欢迎点赞 + 收藏 + 关注!持续更新 Java 实习面经与学习路线!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 6:52:52

携程后端开发日常实习二面深度复盘:SpringBoot原理、Protobuf压缩机制、Feign RPC调用、MySQL主从同步 + JVM分代与AI时代程序员的思考

携程后端开发日常实习二面深度复盘&#xff1a;SpringBoot原理、Protobuf压缩机制、Feign RPC调用、MySQL主从同步 JVM分代与AI时代程序员的思考面试时长&#xff1a;约60分钟 岗位方向&#xff1a;Java 后端开发&#xff08;日常实习&#xff09; 关键词&#xff1a;SpringBo…

作者头像 李华
网站建设 2026/9/10 6:53:32

电商系统中的Python排序实战:从基础到高级

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商商品排序系统&#xff0c;功能包括&#xff1a;1. 基础价格排序 2. 多条件排序&#xff08;销量评分价格&#xff09;3. 自定义排序规则&#xff08;如促销商品优先&a…

作者头像 李华
网站建设 2026/9/12 7:05:06

VSCode调试模式下敏感数据保护方案(企业级安全实践曝光)

第一章&#xff1a;VSCode调试模式下敏感数据保护方案&#xff08;企业级安全实践曝光&#xff09;在企业级开发环境中&#xff0c;VSCode作为主流代码编辑器&#xff0c;其调试功能极大提升了开发效率。然而&#xff0c;调试过程中变量值的自动显示可能暴露数据库凭证、API密钥…

作者头像 李华
网站建设 2026/9/10 10:53:28

CYGWIN实战:Windows下的Linux开发环境搭建指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 在快马平台生成一个CYGWIN环境配置脚本&#xff0c;自动安装GCC、Make、Git等开发工具&#xff0c;并设置环境变量。脚本需包含安装进度显示、依赖检查功能&#xff0c;支持自定义…

作者头像 李华
网站建设 2026/9/3 14:42:52

【MCP远程考试必看】:考前72小时倒计时 checklist 全公开

第一章&#xff1a;MCP远程考试概述Microsoft Certified Professional&#xff08;MCP&#xff09;远程考试为IT从业者提供了灵活、便捷的认证路径。考生无需前往指定考点&#xff0c;只需在符合要求的环境中通过官方授权平台完成身份验证与考试流程&#xff0c;即可获得微软认…

作者头像 李华
网站建设 2026/9/10 10:53:28

游戏开发者必看:正确处理Visual C++运行库依赖

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个游戏安装包示例项目&#xff0c;展示如何正确打包和部署Visual C 2015-2022 Redistributable (x64)。要求&#xff1a;1) 使用Inno Setup或NSIS制作安装程序&#xff1b;2…

作者头像 李华