从数学转后端,双非研一拿下网易实习:一份可复用的校招找实习全流程攻略
从数学转后端,双非研一拿下网易实习:一份可复用的校招找实习全流程攻略
本文以 InterviewGuide 仓库中 《师弟去网易实习了》 为蓝本整理。作者是阿秀的直系研一师弟:本科数学、硕士转计算机、双非院校,从零开始准备,最终拿到网易后端开发实习生 offer。文章完整还原了他从刷题、背八股、改简历、投递到面试的全过程,并附上网易、字节跳动、涂鸦智能三家的真实面经,可作为校招找实习的一份可复用攻略。
一、背景与整体时间安排:非科班转后端该怎么规划
师弟的个人背景极具代表性:双非研一,本科数学专业,硕士转到计算机。转行的初衷很直白——计算机行业薪资高。他自述开学后先学了一学期人工智能、深度学习、机器学习,"学了,但就是学不会",于是认清自己不适合搞学术,果断抛弃科研幻想,转战后端开发。
值得注意的是,他前期"没有找实习的意识和打算",每天在实验室摸鱼,直到当年 3 月才开始刷算法题,导致整个找实习过程"一波三折、前期很拖延、准备很仓促"。他的具体时间节点如下:
| 时间段 | 任务 | 备注 |
|---|---|---|
| 3-5 月 | 刷算法题 | 到 7 月投简历时仅刷了不到 100 道 |
| 6 月 | 背八股文 | 实际前半个月在摸鱼,投递后才进入高效状态 |
| 7 月初 | 准备简历 | 参考大佬模板 + 多轮点评修改 |
| 7 月中旬 | 投递简历 | 优先内推,心仪公司后置 |
核心教训:凡事预则立,不预则废。DDL 确实是第一生产力("开始投递后的学习力暴增"),但时间短扛不住知识量的缺口,平时就应给自己设定阶段性 DDL,而不是把所有压力堆到投递之后。
二、刷题心得:算法没有速成,分类刷题 + 重复是王道
师弟的刷题策略可以总结为五条,对准备时间有限的同学尤其有参考价值:
- 按题目类别刷:动态规划、查找、排序、二叉树、链表等类别逐一攻破,每个类别先刷简单题,再刷中等题,不碰困难题("不是不屑,是太菜了,刷不动")。
- 念念不忘,必有回响:需要看题解的题,重复多刷几遍,直到能独立写出来。
- 算法没法速成:他 7 月投简历时只刷了不到 100 道,面试手撕代码"写磕磕绊绊",这是他的遗憾。
- 手撕代码动不了手很尴尬:算法在面试中的地位很高,几乎每场都有手撕环节。
- 刷题不要停:保持手感比突击更重要。
关于手撕代码的考察形式,可以从仓库的算法题库看到端倪:InterviewGuide 在 03-hunting_job/03-algorithm 下整理了完整的 剑指 Offer 题解 和 LeetCode 高频题集,覆盖了链表、二叉树、动态规划等面试高频类别,与本文提到的"分类刷题"策略正好对应,可以作为刷题目录参考。
三、八股文学习:知识深度是基本项,知识广度是加分项
关于八股文的准备,师弟总结了 7 条经验:
- 深度是基本项,广度是加分项:面试官原话——会的要深入学,不会的也要了解。
- 先确定知识面:网络 + 操作系统 + 数据库 + 语言基础,先圈定要背的范围。
- 直接背大佬总结的校招笔记,先搭起框架;他起初看知识点总结类资料,效率太低,"只能应付学校考试",看面经时啥都答不上来。
- 面向问题总结的笔记效率最高:秀哥的笔记直接面向问题,虽然前面部分是 C++,但算法、操作系统、数据库、计算机网络这些内容与 Java 技术栈相通。
- 多问几个为什么:边背边查其他资料,积累谈资,面试时才有内容可聊。
- Java 要看一手源码:几乎每场面试都会问到底层实现,他特别点名 HashMap 源码性价比极高。
- 对实习生而言,编程基础远比开发框架重要:基础要往深处学,框架要了解并会简单使用。
关于第 6 条,仓库的面试题库中确实收录了大量基础向的高频考点,比如:
- HashMap / ArrayList 扩容机制:在 01-04-01-STL.md 中讲到 HashMap "什么时候扩容:向容器添加元素时,如果元素个数大于等于当前数组长度乘以加载因子的阈值,就要自动扩容";
resize()就是重新计算容量、扩大数组长度。 - volatile 关键字:01-01-02-basic.md 解释 volatile 是类型修饰符,用于防止编译器优化、保证每次从内存重新读取变量值,多线程中被多个任务共享的变量应定义为 volatile。
- 类加载与构造顺序:01-01-03-basic.md 给出派生类构造函数的执行顺序:虚拟基类构造函数 → 基类构造函数 → 成员对象构造函数 → 派生类自身构造函数。
- 进程调度、并发并行、线程实现、进程通信:均可对应 02-01-os.md 等操作系统章节。
- Redis 中间件:04-02-01-Redis.md 收录了 Redis 作为内存数据库的缓存定位、内存淘汰策略、持久化机制等高频问题。
面试中"基础优先于框架"这一点,也与网易一面大量考察 JVM、并发、网络,而涂鸦智能一面考察 Spring 框架形成对比——两者都有,但基础题是送分题,框架题答不出也不致命。
四、简历修改:简历是给面试官划考察范围的
师弟对简历的定位很清醒:简历除了给 HR 看,也是给面试官划考察范围的。四条经验如下:
- 找一个好模板,直接往里面填内容。他参考了秀哥的 26 版秋招简历。
- 多找几位大佬点评修改,在现有内容基础上尽量写到最好。
- 只写自己会的内容、能讲明白的项目,并做好面试官深挖项目的准备("介绍项目时感觉造了个火箭,问着问着就感觉自己做了道 1+1")。
- 简历迭代是常态,改到满意为止。
关于模板参考,InterviewGuide 仓库中收录了完整的简历方法论,建议延伸阅读:
- 01-00-简历开篇词.md:解释简历关的存在——大厂简历先过算法初筛系统打分,达到及格线才可能被人工看到,简历不合格直接 pass。
- 01-01-一份百投百中的计算机校招简历是如何迭代足足26版的.md:展示了第 1 版、第 15 版、第 26 版简历在个人信息、专业技能、实习经历、项目经验、奖项荣誉上的具体变化,并给出大量细节技巧,例如:应聘岗位要与 JD 一一对应(不要一份简历投天下)、技术栈使用"了解/熟悉/掌握/精通"四级动词且慎写"精通"、技能描述要适当留一手(面试官问拓展点时再亮出藏起来的归并排序)等。
五、投递策略:内推优先,心仪公司后置
投递环节的三条经验非常实用:
- 尽量找内推(师兄师姐、牛客网):流程走得快,还能查询求职进度。
- 心仪公司往后放:没有面试经验时,先投几家"练手"公司,多投多尝试,积累面试经验,后面就不紧张了。
- 多投多试,做好投递记录:特别是面试时间要记录清楚,别迟到。
师弟实际投递中"很多公司一面或二面完就没消息了",值得拿出来说的有三家:网易(后端开发实习生)、字节跳动(测试开发)、涂鸦智能(Java 开发实习生),其中后两家都止步一面,最终拿下网易 offer。
六、三家面经详解:网易、字节跳动、涂鸦智能
6.1 网易(后端开发实习生)——一面 50min
- 自我介绍。
- 介绍一个简历上的项目。
- 手写代码(边写边聊):
- 创建一个 List(JVM 中发生了什么,扩容怎么搞);
- 添加 10 个元素(JVM 又发生了什么;JVM 中父类子类的静态块、方法、构造方法执行流程);
- 删除 ArrayList 中下标为偶数的元素。
- Java 并发知道多少,synchronized 具体实现是什么样的。
- 三次握手、四次挥手,讲一下 TIME_WAIT 状态有什么用。
- 各种八股。
这道"边写边聊"的题很有代表性——从 new ArrayList<>() 到 add() 再到遍历删除,一路追问到 JVM 内存分配与扩容机制。仓库题库中可找到对应的深度素材:
- TCP 连接建立与释放:三次握手建立连接后开始传送数据,结束后四次挥手;03-05-net.md 专门讲解了 FIN_WAIT_2、CLOSE_WAIT 和 TIME_WAIT 三种状态:TIME_WAIT 又叫 2MSL 等待状态,目的是防止最后一次 ACK 丢失后服务端重传 FIN 时客户端已关闭而回 RST;且在 2MSL 时间内同一 socket 不能复用,否则可能和旧连接数据混淆。
- HTTPS 加密流程(字节一面也考到):03-02-net.md 给出 SSL/TLS 的完整握手流程——客户端发起 SSL 连接请求 → 服务器返回证书(含公钥)→ 客户端验证证书并用公钥加密会话密钥 → 服务器用私钥解密,此后双方用会话密钥进行对称加密通信,属于"非对称加密协商 + 对称加密传输"的混合加密机制。
6.2 网易(后端开发实习生)——二面 1h
- 自我介绍。
- 什么时候开始写 Java,估计写了多少行代码。
- 写一个单例模式(要求直接写线程安全的,他写了三种):
- 双重判定锁(DCL)单例中两个 if 能去掉吗?
- 双重判定锁单例中 volatile 关键字是干什么的?
- 单例中的静态内部类是什么时候加载的?
- 写一个线程打印一个随机数(多种实现方式)。
- 写一个线程生成随机数、一个线程打印随机数,如何解决竞争问题。
这几个问题环环相扣,把并发、可见性、类加载时机全串起来了。参考仓库素材:volatile 在多线程中的作用(每次从内存读取、防止编译器优化)见 01-01-02-basic.md;类加载与静态成员初始化时机、构造函数执行顺序见 01-01-03-basic.md。
6.3 字节跳动(测试开发)——一面凉凉,1h
- 自我介绍。
- 项目介绍(深挖项目、遇到的困难、怎么解决的)。
- 手撕代码:版本号比较(LeetCode 165 题),并针对这道算法题写测试用例。
- HTTP 请求方式 POST 和 GET 的区别,POST 的信息数据能保存下来吗?
- HTTP 和 HTTPS 的区别。
- HTTPS 的加密方式及过程。
- 三次握手、四次挥手。
字节这场的难点在于"手撕代码 + 写测试用例"的组合,以及 HTTPS 的连环追问。POST 与 GET 的区别、HTTPS 基于 SSL+HTTP 构建加密传输与身份认证等知识点,见 03-01-net.md。
6.4 涂鸦智能(Java 开发实习生)——一面凉,39min
- 自我介绍。
- 项目介绍。
- 解释 AOP 实现原理。
- 解释 SpringMVC 请求处理过程。
- 解释 SpringMVC 各层。
- 解释 MyBatis 的动态 SQL(
#{}和${}的区别)。 - 解释系统的进程调度(详细说说各个算法)。
- 并发和并行的区别。
- 实现线程的方式(三种)。
- run() 和 start() 的区别和联系。
- 如何进程通信。
- ArrayList 扩容机制。
- HashMap 扩容机制。
- 中间件有了解过吗?Redis?
这家一面更偏框架与基础混合。值得注意的是,即便没有 Spring 相关的专门题库,操作系统(进程调度、进程通信)、Java 集合(ArrayList/HashMap 扩容)、Redis 中间件这些基础考点都能在仓库对应章节找到,例如 02-01-os.md、01-04-01-STL.md、04-02-01-Redis.md。
七、通用方法论与复盘
面试之外,师弟还有几条贯穿全程的心得:
- DDL 就是第一生产力:投递后学习力暴增,但时间太短扛不住,平时要给自己设定 DDL。
- 凡事预则立,不预则废:提前准备非常必要,他自认靠的是师兄师姐帮忙 + 运气。
- 面试完计时复盘,多刷面经:常规问题重复率很高,"养成写面经的好习惯"。
- 保持笑脸、活跃气氛:爱笑的人运气不会太差。
八、总结:非科班、双非、时间紧,依然可以上岸
从师弟的经历可以提炼出一条完整可复制的找实习路径:
- 规划先行:尽早确定方向(后端/算法/测试),尽早开始刷题,不要等到投递前才冲刺;
- 算法按类别刷:简单题打底、中等题攻坚,看题解的题重复刷,保持手感不断档;
- 八股面向问题背:网络、操作系统、数据库、语言基础四块先搭框架,Java 着重看 HashMap 等源码,深度优先、广度兼顾;
- 简历模板 + 多轮修改:只写自己能讲明白的内容,简历是给面试官划考察范围的;
- 内推优先、心仪公司后置:先面练手公司积累经验,做好投递与面试时间记录;
- 每次面试后计时复盘:多刷面经,常规问题高度相似。
就像文末说的:"通过这次找实习面试,我也认识到了自己的很多不足,需要学的还有很多。" 对准备校招的同学,InterviewGuide 仓库中还有更多可延伸阅读的一手经验,例如 一份百投百中的计算机校招简历是如何迭代足足26版的、双非渣硕的秋招之路总结,以及完整的 面试八股文题库,可以作为备战素材按需取用。