从零开始:三无选手的后端校招成功之路

发表时间: 2022-12-15 16:26

众所周知,受疫情影响,互联网迎来了『寒冬』,大厂 HC 骤减,腾讯基本不招人,华为也不再是有手就行,阿里某些部门流传只招 23 所院校,在如此严峻的形势下,上岸大厂变得愈发困难...

1. 个人介绍

大家好,我是一枫。本科末流 211,硕士中流 985,均是电子信息专业,非科班、无实习、无比赛,最终上岸字节跳动,岗位是后端开发。

我是在读研的时候接触到的 Java,在 B 站学习了 Java 基础、MySQL 基础、JavaWeb、SSM、SpringBoot,但是那时候只是懂个皮毛,比如 MySQL 就只会 Insert、Update、Select、Delete,像什么索引、事务、慢查询等都一窍不通。

正式准备秋招是从 2022 年的一月份开始的,经过长达大半年的努力,拿到了字节、美团、携程等 offer,虽然说并不多,但也是很满意了。

在我的面试过程中,基本上技术面都能够通过,很多是在 HR 面或排序中挂掉了,如蚂蚁、OPPO、蔚来等,在这里还是提醒一下大家,如果有机会实习的话,一定要实习,因为现在后端开发比较卷,在大家知识面差不多的情况下,企业肯定还是会倾向于招聘有实习经验的同学,比如我在面京东的时候,面试官就很可惜的说,我虽然基础较好,但是前面的几个竞争者都有美团、华为等公司实习,我这方面比较吃亏,还安慰我说可能还有其他部门捞...

2. 面试经验

下面是对秋招整个过程的一点小建议,希望有所帮助。

  • 在制作简历时,有些自己只懂皮毛的,最好不要写上去,主要写自己比较熟悉的内容,比如之前我在简历上写了 ElasticSearch,但是每次面试官问,我都回答的不太好,反而减分,之后就将它从简历上删掉了。
  • 对于简历投递,建议大家越早越好,因为现在的形式是 HC 较少,而候选人较多,到了后期很可能就没有面试机会了,而且如果投的早,即使挂了,后面也可能被捞。我有些公司就因为投递较晚失去了机会,比如 zoom 二面结束后,公司全面锁了 HC,即使面试表现很好,也无济于事。
  • 建议大家总结一份属于自己的知识点笔记。面试中有很多高频问题,经常会被问到,比如 synchronized 的锁升级过程、Java 运行时区域有哪些、浏览器输入 URL 后回车发生了什么等,大家可以提前准备好一个面试版本,如果面试官问你了,就可以『背诵』笔记上的内容。
  • 建议大家多面试,不要怕,刚开始可以从一些中小厂练起。面试也是有一定技巧的,刚开始面试的时候难免紧张,可能语无伦次,答的很差,但随着面试多了,慢慢的就找到了感觉,不仅能够流畅的回答问题,甚至可以逐步引导面试官问自己懂的部分,彰显出自己的实力。对于不能实习的同学,建议也参加一下暑期实习招聘,主要就是让自己了解面试的过程,总结套路,并知道自己有哪些不足,同时有些公司面试通过了还可能会发放秋招直通车。
  • 在面试过程中,如果遇到自己可能不太懂的知识点,不要立马说自己不会,可以先思考一会,说不定就想起来了。同时即使有些内容不会,也可以说一些与之相关的,比如问 Redis 的字典底层原理,如果不会,可以说自己懂 Java HashMap 的底层原理。并且对于一些自己比较熟的内容,可以适当的延伸,不要总是等着面试官问。比如面试官问 HTTP 和 HTTPS 的区别,除了简单地说几点区别外,还可以主动聊 HTTPS 为什么安全,SSL/TLS 握手的过程等。
  • 因为现在主要是线上面试,大家可以对自己的面试过程录屏,然后进行复盘,一方面是查一下自己不懂的知识点,另一方面是看一下自己在语速、表情、姿态、语言等方面是不是有需要改变的地方。

3. 学习经验

因为我主要准备的是 Java 后端,下面说一下个人的经验。

在一场面试过程中,一般包括三方面的考察:基础知识、项目经历、算法能力,都比较重要!经验中的视频均来自 B 站。

(1)基础知识

这方面涉及的内容比较多,我认为以下内容是较为重要的:Java 基础、JVM、Java 并发、MySQL、Redis、计算机网络、操作系统、Spring。一般情况下,我会先看 B 站上的视频入门,然后再看书籍深入,不懂的或者欠缺的知识点再搜博客看。

  • Java 基础
  • 对于 Java 基础部分,重点是 Java 集合,比如 HashMap,这块我没有看过具体的书籍(《Java 核心技术 卷一》一直在吃灰...),主要是看的博客和源码,也会看一些网上总结的面试指南,如 JavaGuide、CS-Notes、Java 面试小抄等,都是非常全面的。
  • JVM
  • 这块我以前也没了解过,一直感觉比较难,但后来面过几场试后发现,问得问题都比较固定,比如 Java 运行时的五大数据区域、垃圾收集算法&垃圾收集器、类加载过程等。推荐如下:
    • 视频:黑马程序员JVM完整教程,Java虚拟机快速入门,全程干货不拖沓,讲的挺不错的,简短精悍!
    • 书籍:《深入理解 Java 虚拟机 第 3 版》,必读书籍,基本上面试的东西上面都有!
  • Java 并发
  • 这块比较重要,面试高频点,比如 synchronized 锁升级、volatile 原理、ThreadLocal 原理、线程池原理等。推荐如下:
    • 视频:黑马程序员深入学习Java并发编程,JUC并发编程全套教程,和上面 JVM 教程是同一位讲师,非常推荐。
    • 书籍:《实战 Java 高并发程序设计》,偏向于基础入门,通俗易懂。
    • 书籍:《Java 并发编程的艺术》,面试提高。
  • MySQL
  • 这块比较重要,作为后端,我们需要经常和数据库打交道,推荐如下:
    • 视频:黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、
    • 书籍:《MySQL 是怎么运行的》
    • 极客时间:MySQL 实战 45 讲
  • Redis
  • 这块面试题较为固定,比如 Redis 的数据结构、持久化、哨兵、缓存击穿、缓存穿透、缓存雪崩、Mysql 和 Redis 的数据一致性等,推荐如下:
    • 视频:尚硅谷超经典Redis教程,redis实战,阳哥版从入门到精通
    • 视频:黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式...
    • 书籍:《Redis 设计与实现》
  • 计算机网络
  • 这块重点需要掌握以下协议:HTTP、HTTPS、DNS、TCP。推荐如下:
    • 视频:计算机网络微课堂(有字幕无背景音乐版),用动画演示,通俗易懂,而且视频相对不长。
    • 书籍:《网络是怎么连接的》,内容不长,像读小说一样,能够知道计算机网络的一个全貌。
    • 博客:图解网络,小林coding 的文章汇总,应付秋招基本够用,平常会分享一些秋招的面试题,对我帮助蛮大的。
  • 操作系统
  • 这块我被问到的很少,基本也就是问一下为什么要有虚拟内存、进程调度有哪些算法等。推荐如下:
    • 视频:操作系统哈尔滨工业大学李治军老师,前面几节比较枯燥,听不太懂,后面讲的不错。
    • 书籍:《操作系统导论》,简称 OSTEP,GitHub 有在线翻译版本,比《现代操作系统》读起来爽多了,循循善诱,强烈推荐!
  • Spring
  • 对于 Java 开发而言,Spring 肯定是非常重要的,推荐如下:
    • 视频:黑马程序员Spring视频教程,深度讲解spring5底层原理,很不错,通俗易懂。
    • 视频:尚硅谷Spring注解驱动教程(雷丰阳源码级讲解),内容很干,看起来很痛苦,但能增强内功。
  • 其他
    • 目前对于 MQ 的考察慢慢多了起来,我学习的是 RabbitMQ,比较简单,大家也可以学一下 Kafka,用的更多一点。同时可以了解一下 SpringCloud 相关内容(没时间就算了),RabbitMQ 和 SpringCloud 我是看了视频:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud
    • 面试中也可能会出现一些海量数据处理问题以及智力题,我是看到牛客的一些面经后,百度搜了一些常见的,如赛马问题、过桥问题、如何从大量的 URL 中找出相同的 URL 等。
    • 随着后端的不断内卷,现在校招生也可能会被问到设计模式了,这块挺难的,毕竟是思想性的东西,大家需要提前准备一下,不需要了解全部设计模式,只需要熟悉其中的几个能够在面试中说即可,比如单例模式(必会)、代理模式、工厂模式等。
    • 同时目前面试中也出现了越来越多的场景题,这个也是挺困难的,它不像基础知识那样会有固定的答案,属于一种开放性问题,更考察小伙伴们的系统设计能力以及知识的全面性,我是搜了一些经常会出现的场景题,比如秒杀、微博发帖、短地址设计等,然后在面试中如果遇到,就考虑如何引导面试官问一些基础性的问题,比如 MySQL、Redis、RabbitMQ 等。

(2)项目经历

因为没有实习,所以这块我是比较匮乏的,大家能去实习还是要去实习!我简历上一共写了两个项目,分别是牛客网的仿牛客论坛项目以及读研期间做的一个导师横向课题。因为做的横向课题与后端关系不大,基本没有被问过,大部分面试官都是问我仿牛客论坛项目。

仿牛客论坛这个项目涉及的内容挺丰富的,而且技术栈比较多,非常适合练手。我是在跟着敲完这个项目后,对项目进行了重构,比如它原先使用的是 Kafka,我换成了自己熟悉的 RabbitMQ,比如使用 SpringSecurity 和 JWT 重构了登录部分,又比如将项目重构出了一个前后端分离的版本(前端找的实验室同学做的)。本来还想着将私信功能用 WebSocket 进行重构,但是时间不够,我也不想再折腾了...

大家在做项目后,也可以想想能不能利用自己的所学知识点对项目进行重构,同时提前想好如果面试官让介绍项目时应该如何说,问项目的亮点和难点时,应该怎么回答(如果实在没有亮点或难点,也可以说一下自己学到了哪些知识,比如如何限流的、用到了 Redis 的哪些数据结构等)。

(3)算法能力

近些年来,算法是后端面试的重中之重,基本上每场面试都会写至少一道算法题,大家务必重视。

我是先看了《算法 第 4 版》这本书了解了一些基本的知识之后,便开始在力扣刷题了,一共刷了 200 道左右,主要刷的就是 Hot100剑指 Offer,期间也看了一遍代码随想录,学习了挺多做题套路。

在刷题过程中,Hot100 是超级重点,很多面试官都会出上面的题目,基本上 Hot100 能吃透,面试题目问题不大,我整个秋招一共刷了 3 遍 Hot100 和 2 遍剑指 Offer,后期刷的速度越来越快,比如写快排基本都不用怎么想,几分钟就完整写出来了。

4. 碎碎念

在准备秋招过程中,我觉得最重要的一件事就是做笔记了,毕竟后端的知识非常多,某个知识点一旦不回顾,可能很快就忘了,整个过程中,我一共记录了超过二十万字的笔记,有三百多页。


网上总结的知识点笔记一方面可能知识点不全,另一方面可能写的比较难懂,甚至有些错误。而自己整理的笔记,毕竟是写给自己看的,那么肯定是更易于理解的,下次忘了的时候也能够通过看笔记迅速回忆起来。

每隔一段时间,我都会全面复习自己的笔记,甚至『背诵』,而且会经常对自己的笔记进行重新整理,毕竟伴随着学习的深入,很多知识点可能理解的更为透彻。

大家如果需要我的笔记作为参考的话,可以关注或私信『一枫说码』,免费分享哈!

最后,大家要稳住心态,不要放弃任何机会,加油,你一定会找到理想的工作!