秋招有感 - Sanarous的博客

秋招有感

都说今年 2020 届秋招是最难的一年,就跟每年考研都说今年是最难的一年、老师说你们是我带过的最差的一届一样,看似是一个调侃,但是我们仔细一想,上半年各大互联网公司裁员的消息还是记忆尤深的,尤其是昨天跟实验室已经就职于某鱼的师兄聊了一下,说他们公司在试用期还裁了一个应届生…也是给我惊呆了。从 8 月初面试到现在,我的秋招已经算是接近尾声了,base 武汉已经拿了几个满意的 offer,虽然都是白菜价,但是换成同等的北上广年薪接近 30w 的白菜我也是拒绝去的。

虽然我是通信工程专业,但是找的还是互联网公司的 Java 开发岗,秋招第一个感觉就是 360 行,行行转计算机。通信在本质上属于半个计算机专业,所以情有可原,但是每次招聘会都有各种自动化、控制,甚至生物化学类专业研究生来投软件开发岗,这就让人感觉到鸭梨山大,但是这种形势也能理解,高薪行业肯定还是非常吸引人的嘛。

首先我就谈谈 Java 岗的应届生应聘要求吧,现在本科生在 Java 开发方面非常弱势,因为投递的绝大多数人都是研究生,甚至很多面试官看到本科生都会觉得很惊讶,不过不排除有些本科生编程能力超过研究生很多,比如某些有 ACM 竞赛拿奖的大佬,但是这种一般都投算法岗去了😂 ,算法岗每年都是人均顶会竞赛满身的神仙打架,所以我这种小菜鸡肯定是没资格掺和的。总体来说,要拿到满意的 offer,还是需要具备扎实的基础知识和至少一个实际落地的项目。基础知识包括:

  1. 数据结构与算法:包括 Leetcode 和剑指 offer
  2. Java 基础知识: JavaSE、容器、I/O、反射、泛型等
  3. Java 进阶知识:Java 多线程、Java 虚拟机、NIO、AIO等
  4. 框架:Spring、SpringMVC、MyBatis、SpringBoot 等
  5. 数据库:MySQL、Redis 等
  6. 中间件:MQ
  7. 计算机基础知识:计算机网络、操作系统等
  8. 其它技能:Linux、Git、SVN等

基础知识

对于基础知识,算法是最不可能短期奏效的,因此备战秋招的话,算法需要提前半年进行准备,我自己是只刷了剑指 offer 所有题和 Leetcode 部分题目,具体见我的另一个笔记总结的算法题,还有一些排序算法,比如快速排序、堆排序、归并排序需要能够手写出来,其中快排在整个秋招中应该手写了不下于 5 次…对于算法思想的话,贪心、动态规划、DFS、BFS 等都比较重要。其中笔试题一般都是 DP(动态规划)、DFS 思想,面试题手写代码一般难度要低很多(可能因为我面的都不算难叭),这个需要自己多练,到后面能够白板写代码 AC 就可以了。

Java 基础知识是核心,推荐多读几遍《Java 核心技术 卷Ⅰ》或者《Java 编程思想》,最好是读前者,后者更适合在思想上更进一步的时机去阅读。其中容器中的 HashMap、ConcurrentHashMap 都被问烂了。然后抽象类与接口、反射等,这些在面经上都有提到。

Java 更重要的应该是并发、虚拟机和 I/O 这一块,并发编程可以看方腾飞的《Java 并发编程的艺术》,虽然这本书有一些缺陷,但是其中有些经典的讲解都是面试会问的知识点,这本书我反复读过三遍,并以博客记录了很多知识点并阅读了 JDK 源码才算是掌握了设计思想和原理。并发编程主要掌握 java.util.concurrent 也就是传说中的 JUC 包下所有体系才能说掌握了。而虚拟机的话,大名鼎鼎的《深入理解 JVM 虚拟机》已经足够了,但是这本书前面探讨的还是 JDK 1.6 的虚拟机,现在已经有一些改进了需要自己进行关注。I/O 的话主要是 NIO 和 AIO 这一块,可以看看相关的博客,把设计思想理解透,或者使用过 Netty 框架更好。

框架的话,Spring 的核心 IoC 和 AOP,SpringMVC 的执行流程、MyBatis 的原理、SpringBoot 的原理以及和 Spring 的区别,这些都需要去掌握,其中最核心的应该是 Spring 相关的知识点。

数据库肯定是必须掌握的,关系型数据库中MySQL 不仅要会写 SQL 语句(面试的时候经常要手写 SQL 语句),还要理解 MySQL 的一些底层原理,比如 MySQL 的索引、数据库的锁、事务、隔离级别等,这些都需要自己去探讨。非关系型数据库比如 Redis,这种需要了解 Redis 的底层数据结构、应用场景等,或者其它的 NoSQL 比如 HBase、Hadoop 等等,需要了解至少一种,最好是项目中用过的。

计算机基础知识,也就是计算机网络和操作系统,这个更不必多说。

其它的话,像 Linux 的常用操作指令(如果能懂内核那更好不过了)、Git 的操作(或者其它工具)也是需要掌握一种的,以及一些设计模式(自己深入挖掘几个)。

以上因为知识体系太过庞大,而且都是需要一点一滴积累理解出来的,所以这里只能做一个简单的概述。

项目经验

对于前些年来说,可能没有实际项目经验,只要基础知识非常扎实,也是可以进一些大厂的,因为大厂愿意培养具备扎实基础知识的小白应届生。但是看今年这情况还是很严峻的,一般面试都是三轮,也就是两轮技术面 + 一轮 HR 面,第一轮技术面更多的是问基础知识,而第二轮往往就是怼项目经验,并且深挖项目中的一些坑和解决办法,如果只有基础知识,那么往往是撑不过二面的,所以需要在这方面下些功夫,在 Github 上其实就有很多优秀的项目,如果是非科班,可以通过牛客网项目课或者慕课网项目课去实战一些项目,然后自己进行改进并且部署到服务器上,这是一种比较合适的方式。今年很多非科班的都会用慕课网的秒杀项目作为项目经验…很多面试官都问吐了,所以不建议使用这类项目。总而言之,至少有一个自己独立完成并且有独立思考的完整项目,而且存在几个项目难点或者亮点,这样写在简历上才有实际意义。

其它

其它方面就是最好有实习经历,因为现在很多厂还是看中是否有实习经历这一块的。以及尽可能参加竞赛等等,让自己的简历显得比较丰富,内容充实且都是干货,这样才能让人眼前一亮。


现在 C++ 和 Java 相对来说需求量大,而且招聘的岗位数量多,很多人会往里面钻(我也是其中之一),所以竞争还是异常激烈的,在牛客网上任意问一个什么岗,很大概率就是 Java 开发,所以如果想要进自己心仪的大厂,还是提前准备好,尽量减少自身短板。最后,我也在此祝愿自己周围的小伙伴都能拿到自己满意的 offer 😜!

如果这篇文章对您很有帮助,不妨
-------------    本文结束  感谢您的阅读    -------------
0%