从Java小白到收获BAT等offer,分享我这两年的经验和感悟

51次阅读

共计 11563 个字符,预计需要花费 29 分钟才能阅读完成。

我写过很多篇秋招总结,这篇文章应该是最后一篇总结,当然也是最完整,最详细的一篇总结。秋招是我人生中一段宝贵的经历,不仅是我研究生生涯交出的一份答卷,也是未来职业生涯的开端。仅以此文,献给自己,以及各位在求职路上的,或者是已经经历过校招的朋友们。不忘初心,方得始终。
前言
在下本是跨专业渣考研的 985 渣硕一枚,经历研究生两年的学习积累,有幸于 2019 秋季招聘中拿到几个公司的研发岗 offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
(在秋招末期,有幸又拿到了滴滴和亚马逊的 offer,那时已经 11 月份了,所以之前的文章里都没有提到过)
一路走来也遇到很多困难,也踩了很多坑,同时我自己也探索了很多的学习方法,总结了很多心得体会,并且,我对校园招聘也做了一些研究和相应的准备。在今年的秋季招聘结束以后,我也决定把这些东西全部都写成文字,做成专题,以便分享给更多未来将要参加校招的同学。
大学时期的迷茫与坚定
我的本科专业是电子信息工程,基本没有接触过计算机专业的课程,只学过 c 语言,然后在大三的时候接触过 java,Android,以及前端开发。这时候我只是一个刚刚入门的菜鸟,还不知道软件开发的水有多深,抱着试一试的态度去应聘了很多公司。结果可想而知,连简历筛选都没有通过。
当年我对游戏开发很有兴趣,特别是对网易游戏情有独钟,但是当我看到网易游戏研发工程师的招聘要求时,我只能望而却步,因为它要求学历至少是 985 的硕士。
也因为这个契机,我在大三的暑假开始准备考研,花了一个月的时间深思熟虑之后,选择了华科作为我的目标院校。
于是,2016 年的下半年,我成为了“两耳不闻窗外事,一心只读圣贤书”的考研党,回想起来那确实是玩命学习的半年时间,每天稳定泡在图书馆 8 个小时以上,有时候学到宿舍都能学到晚上 12 点,那时候感觉自己完全变了一个人似的,可能当一个人为了某个目标而努力时,真的会变得不一样。最终我顺利地考上了,令我意外的是,成绩还挺不错。
研究生时期的方向选择
对于即将读研的同学来说,一般有两件事很重要,一件事是选择导师,一件事是选择方向。
我在刚读研的时候最头疼的也是这两件事情。首先说明一下,我读的是专硕,所以实验室一般不搞科研,有部分导师会带项目,由于我不打算在实验室做项目(因为我更希望去大公司里锻炼几年),所以我当时本着想要找实习的想法选择了导师,事实证明我的选择还是很正确的,我在研二有大段时间去参加实习,让我在大厂里有足够的时间去锻炼和学习。
而选择方向这件事,我倒是折腾了好久。研一期间我做的最多的事情就是看书了,当时自己的方向还不明确,所以找了很多书来看。当别人都在专研数据挖掘和机器学习时,我还在各种方向之间摇摆不定。
我在读研之前想做游戏开发和 Android 开发,但我以前也学过 Java Web 开发。于是我在网上了解对应方向的资讯,发现游戏研发的就业面比较窄。
最后,我综合公司的岗位情况,个人兴趣,以及我之前的学习经历等因素,选定了 Java 开发方向。
于是,我在学校的实训项目中选择了 Java Web 项目,从此也真正意义上地踏上了 Java 的学习之路。
笨鸟先飞,勤能补拙
尽管我的入学成绩是全学院的 top3,但是,我发现,作为非科班出身的我,和很多科班同学相比,还是有一定差距的。
大部分同学本科都上过计算机专业的相关课程,比如计算机网络,操作系统,数据结构等等,而我以前连听都没听过,除此之外,他们一般都会几段比较完整的项目经验,至少在 Java Web 方面已经算是比较熟悉了。而我在当时,只学了数据结构,另外接触过一些 Java 基础,有一部分项目经验,基本上就是入门水平。
于是我痛定思痛,决定好好弥补我的不足,平时一有空就去图书馆找些书来看,不论是操作系统,计算机网络,还是数据库等本科课程,我都会找一些对应的书籍来看,当时不太清楚其实有些课程其实不需要特地去补,以至于我连计算机组成原理,编译原理,软件测试等方面的书都特地找来看,现在想想也是挺逗比的。
由于我们上的课比较水,所以上课时间反而变成了我自学基础课程的大好时光了。所以我平时上课的时候都会带两三本书,一到两周内看完一本,虽然可能吸收的不是特别好,但是对当时的我来说还是有很大帮助的。
除此之外,有时候我还会偷偷去旁听有一些本科生的课程,这也是因为我在自学一些课程的时候遇到了困难,比如《操作系统》,《数据库原理》等等。于是我花时间研究了一下本科生的课表,趁着自己没课的时候赶紧去旁听课程。有时候感觉自己在课堂中显得非常突兀,尴尬地想要逃跑,但总算是坚持地听完了一门数据库的课程。
此外,我还在各种视频网站上看网课,比亦或是看中国 MOOC 的计算机基础课程,里面的操作系统,数据库等课程也让我印象深刻。
就这样,每天我都把自己的时间填满,愣是在研一上学期看了好几本书,当时书的版本现在有的记不清了,主要是计算机网络,操作系统,计算机组成原理,另外还有软件工程,软件测试,设计模式,等书籍。就这样,我靠着这段时间的坚持把计算机基础课程补上来了一些。
历尽艰辛,终得实习
时间来到研一下半页,这时候我刚刚结束了学校的 Java Web 的项目实训课程,在做这个项目期间,我发现自己暴露出了很多问题,技术实践能力不足,Java 基础不扎实。这件事情也给我自己敲响了警钟,因为我计划在春招期间找一份大厂的实习,但是目前看来我的水平还远远不够。
压力之下,只有努力一条出路。于是,从那时候起,我开始了“留守“实验室的学习生活。为什么要在实验室学习,一是因为学习气氛好,二是因为平时大家也可以互相交流问题。
每天早上 9 点到实验室打开电脑,晚上 9 点背电脑回寝室。大部分时间我会花在看书上,这段时间主要看的都是 Java 相关的书籍,借鉴的是江南白衣大佬的“Java 后端书架”,比如《深入理解 JVM 虚拟机》,《Java 并发编程艺术》,《深入分析 Java Web 技术内幕》,《深入剖析 Spring 源码》等等。
另外一部分时间我会用来看一些技术博客,我主要是根据面经上的知识点按图索骥,找到对应讲解该知识点的文章,那时候主要还是通过搜索引擎来找文章,当然有时候看到一些重点难点也会自己写一些博客。不过这个时期并不是我大量写博客的阶段,主要还是看一些讲解面试知识点的技术博客为主。
除此之外在面试前几天我会花时间去看这家公司的面经,搞懂每一个面经上的知识点,并且记录在我的笔记上,光是面经相关的笔记我就记了 100 多篇,这样的学习习惯我一直坚持到了秋招,确保每个面试知识点都能被我记住,消化,直至完全理解。
慢慢的,笔记越来越多,我参加面试的公司也越来越多,于是我开始不断完善自己的简历,总结自己的面试技巧,选择合适的网申时机。从头到尾我大概花了 3 个月的时间在找实习上,期间大大小小参加了 20 多次面试,我也从一开始面试一问三不知的菜鸟,逐渐变成了面霸,到复习末期,我对 Java 常见面试知识点已经了然于胸,同时也越来越自信,不管面什么大厂都不慌不忙。
这样的日子持续了好几个月,所谓世上无难事,只怕有心人。到最后,实验室里每个人都拿到了心仪的实习 offer。
实习路上,我明白了很多
踏出学校大门,我的实习之路才刚刚开始。8 个月左右的实习时间,说长也长,说短也短。但经历过这段实习之后,我才明白了很多事情。
在猪场实习的日子里,我第一次了解大公司的开发流程,亲自参与项目代码的开发,我的导师会和我提需求,会指导我怎么做得更好。在这里的成长无疑是非常快速的,但我很快意识到我的问题所在,不熟悉部门技术栈,对很多 Java Web 的技术原理都不太熟悉,这段时间我意识到了自己的知识深度和广度都可能都有待提高。
不过由于家里的一些事情。我提前离职了,所以在猪场呆的时间很短,以致于我没来得及搞懂部门项目的技术架构就走了,这也让我在离开以后感觉很遗憾,所以我下定决心在下个实习单位要好好做。
离开猪场后我来到了熊厂。部门给我提的需求不算太难,大部分都是一些 CURD 的工作,但是这次很快就意识到了问题所在,就是我不太熟悉部门的整体技术栈,所以在需要借鉴别人代码时偶尔会看不懂。后来部门又给了新的重构需求,此时的我开始焦虑起来,是不是应该做出一些改变呢。
终于,我找到了新的目标,我要搞懂部门的项目架构,了解相关技术栈(我们部门做的是私有云),一开始,我会请教我的导师,尽量去了解项目的架构设计,除此之外,我还会利用一些时间去看其他同事负责的代码,并且通过一些文档和 PPT 去了解这些代码的功能和意义。结合代码和文档,再加上和同时的交流,我对部门项目的架构逐渐熟悉起来,为了更好地理解每一块代码的作用,我还为一些模块的代码写了注释。
当然,光看代码和文档还不能解决所有问题,因为这个项目的重点难点不在 Web 应用,而是在底层技术,这个项目中包含了两套架构,分别是一套 OpenStack 集群和一套 docker 集群。为了学习这两块内容,我先是看了很多博客,然后在平台上跑虚拟机和容器来做实践,最后又看了这方面的一些书籍,主要是《OpenStack 设计与实现》,《docker 技术入门实战》。
但是这还不够,虚拟化技术与 Linux 内核息息相关,又需要学习者对操作系统和计算网络非常熟悉,我自知这些内容我学得还不够深入,于是我花大量时间看这方面的书,当时也遇到了几本确实不错的书,分别是《深入理解计算机系统》,《计算机网络:自顶向下方法》,还有一本没来得及看完的《Linux 内核设计与实现》。虽然以后不一定会作云计算方向的开发,但是学完这些东西我还是非常开心的。
到后来,我工位上的书越来越多,我对部门的技术栈也越来越熟悉,有时候我还会去听公司内各个团队组织的技术分享,有空的时候看看内网的技术课程,真正地实现了自己在技术广度上的拓展。
有时候我觉得,实习生活是会骗人的,你佩戴着和正式员工一样的工牌,和他们做着类似的事情,会让你觉得你的水平已经和他们差不多了,但事实上是,在转正之前,你和他们还差得远,所以不要停下自己前进的脚步,抓紧时间学习吧,把握好你在公司里的机会,合理利用公司给你提供的资源。
秋招前的积累与沉淀
研究生期间我有一件事情一直在坚持,那就是做笔记和写博客。
做笔记,就是记录学习中大大小小的事情,可能是面试问题,可能是一周的学习计划,也可能知识一个知识点,总归都是值得记录的东西,对我来说,就是一种积累。而对于博客,我从一开始只用于记录项目,到后来做转载,再到后来写原创,整理系列文章,则更像是一种沉淀。
但是在春招刚刚结束的这段时间,我发现一个问题,之前学过的东西忘记了很多,特别是那些理解的不够深的知识点,总是特别容易忘记。另外我发现,虽然我在笔记中记录了很多的知识点和面试题,但是往往我只看过一次,不会再去看第二次。
这也意味着,虽然记录的内容很多,但是真正消化吸收的内容很少,脑子里充斥着总是那些零碎的知识点和面试问题,对于完整的知识体系知之甚少。这些问题在春招期间也不断地暴露出来,让我思考了很久。
面对如此窘境,我想做出改变,趁着现在时间充裕,我想要为这些内容做一次减法,并且借此机会,推翻自己原有的知识体系,重建新的知识框架。简单说来,就是重新开始学习 Java 后端,这次我要用一种更高效的方式,避免走之前走的弯路,要用最高效,最合理的方式去复习。由于我之前已经有基础,所以我对完成这一目标有信心,相应地我也为此做出了明确且详细的学习计划。
我打算用几个关键词来形容这三个月的秋招复习。
“具体可靠的学习计划”
在三个月的时间里,我首先按照 Java 后端路线图安排好复习计划,每个知识点都会对应安排一段时间,比如我可能花一天时间复习“Java 反射”,两天时间复习“设计模式”,一周的时间用于复习 ”JVM 虚拟机”。我一般会在月初做好整个月的计划,然后根据进度做一些微调,但是基本上我都可以跟上进度,并且是在复习到位的前提下。
所以我觉得,对于秋招这一场苦战,指定计划尤为重要,一旦计划定下来,战略目标清晰,对应的战术制定也会变得清晰,执行力也会随之变强。
“写博客整合知识点”
至于复习方法,我主要通过看高质量博客,并且结合代码实践的方式巩固这部分知识点,比如今天学习“concurrenthashmap”,我会去找两三篇比较好的博客先看看,主要是源码解读方面的,然后我会把它们进行整合,如果有遗漏的知识点我会再进行补充,有时候我还会自己去看看 JDK 源码,以便更好地理解博客内容,完成知识整合之后,我就会对应地整理出一篇博客出来,发在我的个人博客上。
除此之外,当我完成了一整个专题的复习之后,我会把这些文章整理成一个专题,比如上面说的“concurrenthashmap”,实际上属于 Java 并发包,所以我会专门做一个博客专栏,用来完成 Java 并发系列的文章专题。对于每一个文章专题,我都会先理清这个专题一共有哪些内容,然后再开始整理。比如对于 Java 并发包,我会先写 Java 多线程基础的文章,再写 JMM 内存模型的文章,接着一步步着手写 Java 线程池,阻塞队列,工具类,原子类等等。这样一来这部分内容就复习完毕了,写系列文章的好处就在于,我可以从头到尾理清脉络,并且对于每一部分的知识点都做了比较好的总结。
对于博客的选择,我吸取了之前的教训,宁愿花半小时看一篇高质量文章,也不花 10 分钟看 5 篇烂文章。深度阅读的好处,就是可以让这部分内容更好地融入你脑内的知识体系,而不是像其他快餐文章一样转瞬即逝。
“做项目巩固实践能力”
由于之前在实习期间参加的项目都比较大,我接触的模块也比较单一,没有对整体项目有一个很好的把握,所以我决定趁这段时间再巩固一下我的项目实践能力,这里的能力主要是指的是对项目架构的把握能力,以及对业务开发的熟练度,当然也包括对各种常用后端技术的熟悉程度。
我花了大概一个月的时间完成了两个项目的开发,当然主要也是模仿两个开源项目做了,这两个项目都使用 SpringBoot 快速开发,并且用到一些常用的后端技术比如 redis,云存储,以及一些常见 Web 框架,除此之外还涉及到了 solr,爬虫等技术。虽然项目不算很难,但是我在这段时间里很快地熟悉了完整项目开发的流程,并且每天做迭代,通过 Git 来跟进版本,每个版本都会写清所做的内容,这也让我对项目的架构非常熟悉。
在项目之余,我也找一些常用的后端组件来跑一跑 demo,以便让我对这些技术有一个直观的了解,比如面试常问的 dubbo,zookeeper,消息队列等组件。这些尝试也让我在理解它们的原理时更加得心应手了。
“坚持刷题,注重方法”
算法题是秋招笔试面试中的重头戏,每个研发同学都免不了经历算法题的摧残,对我这么一个非科班同学来说,更是让人头大。正因为如此,我放弃了刷大量 LeetCode 题目的方法,选择了更加行之有效的刷题方式。
首先我重新刷了一遍剑指 offer,并且对每道题目进行总结,尽量保证每一道题都可以记在脑子里,众所周知剑指 offer 中的题是面试时非常喜欢考的,所以先搞定这部分题目是最为关键的。
搞定剑指 offer 之后,当然还要刷 LeetCode 了,LeetCode 题目这么多,怎么选择呢,我没有按照 tag 刷,也没有按照顺序刷,而是参考当时一个大佬的 LeetCode 刷题指南来进行刷题的,他把每个类型的题目都做了归纳,每部分只放一些比较经典的题目。所以我前后大概刷了 100 多道 LeetCode 的题目,并且在第二遍刷题复习的时候,我也对这些题目做了一份总结。
除了上面两个经典题库,我还着重刷了大厂的历年真题,这部分我主要是通过牛客网的历年真题题库来完成刷题的。说实话,真题是非常重要的,因为公司出的题目不像平时的那些算法题,可能会出得非常奇葩,所以你如果不提前适应的话会比较吃亏。完成这部分题目之后,我对算法题的复习也基本告一段落了。
当我完成所有内容的复习时,提前批已经开始了。终于要上战场了,因为战前准备比较充分,所以我对秋招还是比较乐观的,但事实上,秋招不仅是攻坚战,而且是持久战,要笑到最后,确实也不是那么容易的事情。
重建知识体系,对学过的东西做减法
前面提到我在秋招前完成了知识体系重建,那在这里我也想跟大家分享一下我当时大致的知识体系构成。就跟我前面说的一样,我选择重新再学一遍 Java 后端相关的技术内容,因为我知道大致的学习方向,并且有一定的基础,所以看很多文章变得更加得心应手,写文章和做总结也更加有底气了。
首先在 Java 基础方面,我写了 20 多篇原创博客,主要是对 Java 核心技术的解析,比如“Java 反射”,“Java 序列化和反序列化”,“Java 异常体系”等等。
在 Java 集合类方面,我原创了部分文章,另外整合了一些比较好的技术文章,其中最主要的就是关于 hashmap 的文章,当时我整合的文章几乎没有遗漏任何一个知识点。
在 Java 并发编程方面,我主要参考了并发编程网以及一些优质博客的文章,先搞懂了 Java 并发原理,再一步步学习 JUC 并发包的组件,其中重点看了 chm,并发工具类以及阻塞队列等 JDK 源码的解析文章,除此之外,我还会在 IDE 中跑 JUC 相关的 emo,毕竟这方面的内容非常需要实践。
在 Java 网络编程方面,我先从最基础的 socket 入手,再讲到 NIO,AIO,并且加入了几篇对 Linux IO 模型解析的文章,让整个知识体系更加完整(因为 NIO 是基于 Linux Epoll 实现的),接着我又加入了对 Netty 的探讨,以及 Tomcat 中对 NIO 的应用,可以说是把 Java 网络编程一些比较重要的部分都囊括进来了。为了更好理解这部分内容,我也在网上参考了很多客户端和服务端通信的 demo,最后我分别用 Socket,NIO,AIO 以及 Netty 把 C /S 通信的 demo 都写了一遍。
在 JVM 虚拟机方面,我则按照《深入理解 JVM 虚拟机》这本书的行文脉络进行文章的整理。在搞定 JVM 基本原理以后,我着重了解了 JVM 调优和实践中常遇到的问题,并且整理了常用的 JVM 调优工具,场景问题以及调优实践的案例,这也是因为面试中对 JVM 调优实践越来越重视了。
在 JavaWeb 方面,我从 Java Web 相关技术的发展入手,一步步了解了每种技术存在的意义,比如 JSP,Servlet,JDBC,Spring 等等,然后对每种技术进行了比较全面的了解,并且着重地看了 Spring 和 SpringMVC 的源码分析文章,另外一方面,我花了很多时间去研究 Tomcat 的工作原理。除此之外,JavaWeb 项目中常用的 maven,日志组件,甚至是单测试组件,也纳入了我的系列文章里。
在数据库和缓存方面,我主要学习了 MySQL 和 Redis 这两种最常用的数据库。对于 Mysql,我从简单的 sql 开始了解,然后开始了解 sql 优化,MySQL 的存储引擎和索引,事务及锁,还有更复杂的主从复制,分库分表等内容。对于 Redis,我也是从简单的 api 入手,然后去了解每一种数据结构的底层实现原理,接着尝试去学习 Redis 的持久化方式,以及作为缓存常需要考虑的技术点,当然,也包括 Redis 的分布式锁实现,以及它的分布式集群方案。
最后一部分就是分布式相关的理论和技术了,这个也是困扰我很久的一块内容,我主要把这块内容分为两个部分,分别是分布式理论和分布式技术,理论方面,我先了解 CAP,BASE 等基本知识,然后开始学习一致性协议和算法,接着探讨分布式事务。对于分布式技术,涉及的东西就更多了,例如分布式 session,负载均衡,分布式锁等内容,这些知识点我都会用一到两篇文章去总结,对于分布式缓存,消息队列,以及分布式服务等内容,我会花比较多的时间去全面学习,然后总结出一个系列的文章出来。当然,对于这些技术的学习主要还是停留在理论方面,在自己的项目中能用到的比较少。
至此,我的知识体系基本构建完成,这也是我在秋招中能够成功闯过那么多面试的原因。
秋招之路,砥砺前行
不管前期做了多少准备,到秋招的时候也不能掉以轻心,从七月底第一次面试到 9 月基本佛系,中间经历了大大小小的面试。
在完成知识体系重建以后,我把重点转向了另外几件事,一是完善和熟悉我的简历,以便在面试中能够比较好地发挥,二是持续刷题,保持对算法题和笔试真题的手感和熟练度,三则是看面经查缺补漏,我一直认为看面经是很重要的一项复习内容。
就这样,我一边继续复习,以便开始了一场接一场的面试接力。
起初,我面了几家小公司练手,接着阿里的提前批接踵而至,我战战兢兢地参加了阿里中间件部门的面试,面难难度还算适中,一共四轮面试,当时我的表现也还不错,问题基本都答上来了。面完不到一周以后我就收到了通过的消息,当时还有点懵。没想到第一个 offer 这么快就来了。
这段时间内,蚂蚁金服的两个部门也给了我面试机会,我都参加了它们的面试,并且顺利地拿到了其中一个部门的 offer。由于我对蚂蚁这边的业务比较感兴趣,最终选择了蚂蚁金服的 offer。
阿里提前批的胜利确实是意外之喜,但也大大地鼓舞了我,于是我又参加了百度和腾讯的提前批面试,由于百度的提前批不走流程,一共有四个部门面试了我,每个部门都有 2 到 3 轮面试,总计约为 12 次面试,到后来我已经快晕了,看到百度的电话就害怕,由于面试次数太多,有时候发挥确实也不是很好,我也没有特别在意,只当是在锻炼自己了。
百度的面试难度每个部门不一样,但是每次面试必写算法题,一写算法题,时间至少就是一个小时以上,每次面试完都有一种身体被掏空的感觉。
经历了百度面试的摧残以后,我手写算法的速度也变快了,很多坑也被我填上了。接下来面对腾讯的面试,我也是既激动又担心,腾讯的面试难度比较大,对于操作系统和网络的知识喜欢深挖,问的东西也很有深度,面完前三面以后,第四面拖了 3 周才进行。当时三面面试官对我的评价比较好,也让我信心爆棚了好久。
在等待腾讯终面的期间,我参加了今日头条的面试,当时有幸拿到了一个白金码,免去笔试,事实证明白金码作用真的很大。头条的面试难度和腾讯差不多,三轮面试,同样需要写各种算法,由于是视频面试,我可以清楚地看到,头条的面试官真的非常高冷啊。面完头条我的第一感觉就是应该挂了吧。没想到最后还是给了 offer。
结束这几家大厂的面试之后,我觉得我的秋招已经接近尾声了,不过由于之前投的比较多,所以我又面了几家大公司,如网易,华为,快手等。到 9 月上旬的时候,我接连收到了 bat 和头条,网易的意向书,阿里最早,腾讯最晚,每收到一封意向书我都很开心,没想到最后我真的可以集齐 bat 等大厂的 offer。
9 月以后,除了偶尔和同学做几场大厂的笔试,我基本就佛系了。直到后来一些外企例如亚马逊,大摩开始笔试面试,我才又重新回到了状态。
截止目前,我基本上把该拒绝的 offer 都拒绝了,综合各方面因素的考虑,最后应该会签阿里,原因是部门是我自己喜欢的,同时给的评级也比较高。虽然腾讯也给了 sp,但是最后还是忍痛割爱啦。至于百度和头条,给的 offer 并不是很令人满意,所以就没有考虑了。
至此,我的秋招之旅总算圆满结束。

Java 后端技术专栏
对于校园招聘来说,最重要的还是基础知识。下面的博客专栏出自我的技术博客 https://blog.csdn.net/a724888
这些专栏中有一些文章是我自己原创的,也有一些文章是转载自技术大牛的,基本都是是我在学习 Java 后端的两年时间内陆续完成的。
总的来说算是比较全面了,做后端方向的同学可以参考一下。
1. 深入浅出 Java 核心技术
本专栏主要介绍 Java 基础,并且会结合实现原理以及具体实例来讲解。同时还介绍了 Java 集合类,设计模式以及 Java8 的相关知识。
2. 深入理解 JVM 虚拟机
带你走进 JVM 的世界,整合高质量文章以阐述虚拟机的原理及相关技术,让开发者更好地了解 Java 的底层运行原理以及相应的调优方法。
3.Java 并发指南
本专栏主要介绍 Java 并发编程相关的基本原理以及进阶知识。主要包括 Java 多线程基础,Java 并发编程基本原理以及 JUC 并发包的使用和源码解析。
4.Java 网络编程与 NIO
Java 网络编程一直是很重要的一部分内容,其中涉及了 socket 的使用,以及 Java 网络编程的 IO 模型,譬如 BIO,NIO,AIO,当然也包括 Linux 的网络编程模型。
了解这部分知识对于理解网络编程有很多帮助。另外还补充了两个涉及 NIO 的重要技术:Tomcat 和 Netty。
5.JavaWeb 技术世界
从这里开始打开去往 JavaWeb 世界的大门。什么是 J2EE,什么是 JavaWeb,以及这个生态中常用的一些技术:Maven,Spring,Tomcat,Junit,log4j 等等。
我们不仅要了解怎么使用它们,更要去了解它们为什么出现,其中一些技术的实现原理是什么。
6.Spring 与 SpringMVC 源码解析
本专栏主要讲解 Spring 和 SpringMVC 的实现原理。
7.Spring 是最流行的 Java 框架之一。
本专栏文章主要包括 IOC 的实现原理分析,AOP 的实现原理分析,事务的实现源码分析等,当然也有 SpringMVC 的源码解析文章。
8. 重新学习 MySQL 与 Redis
本专栏介绍 MySQL 的基本知识,比如基本架构,存储引擎,索引原理,主从复制,事务等内容。当然也会讲解一些和 sql 语句优化有关的知识。
同时本专栏里也介绍了 Redis 的基本实现原理,包括数据结构,主从复制,集群方案,分布式锁等实现。
9. 分布式系统理论与实践
本专栏介绍分布式的基本理论和相关技术,比如 CAP 和 BASE 理论,一致性算法,以及 ZooKeeper 这类的分布式协调服务。
在分布式实践方面,我们会讲到负载均衡,缓存,分布式事务,分布式锁,以及 Dubbo 这样的微服务,也包括消息队列,数据库中间件等等。
10. 后端开技术杂谈
本专栏涵盖了大后端的众多技术文章,当你在 Java 后端方面有一定基础以后,再多了解一些相关技术总是有好处的。
除了 Java 后端的文章以外,还会涉及 Hadoop 生态,云计算技术,搜索引擎,甚至包括一些数据挖掘和 AI 的文章。
总的来说选取了一些不错的基础类文章,能让你对大后端有一个更直观的认识。

面经分享
具体的面经都比较长,这里大概介绍一下面试的情况,具体的面经请大家关注我的公众号并回复“面经”即可查看。
1 阿里面经
阿里中间件研发面经
蚂蚁金服研发面经
岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。
我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头 offer。
然后我也参加了蚂蚁金服中间件部门的面试,经历了三次面试,但是没有走流程,所以面试中止了。
最后我走的是蚂蚁金服财富事业群的流程,经历了四次面试,包括一次交叉面,最终拿到了蚂蚁金服的意向书,评级为 A。
阿里的面试体验还是比较好的,至少不要求手写算法,但是非常注重 Java 基础,中间件部门还会特别安排 Java 基础笔试。
2 腾讯面经
腾讯研发面经
岗位是后台开发工程师,我没有选择意向事业群。
SNG 的部门捞了我的简历,开始了面试,他们的技术栈主要是 Java,所以比较有的聊。
一共经历了四次技术面试和一次 HR 面试,目前正在等待结果。
腾讯的面试一如既往地注重考查网络和操作系统,并且喜欢问 Linux 底层的一些知识,在这方面我还是有很多不足的。
3 百度面经
百度研发面经
百度研发面经整合版
岗位是研发工程师岗位,部门包括百度智能云的三个分部门以及大搜索部门。
百度的提前批面试不走流程,所以可以同时面试好多个部门,所以我参加百度面试的次数大概有 12 次左右,最终应该是拿了两个部门的 offer。
百度的面试风格非常统一,每次面试基本都要到电脑上写算法,所以那段时间写算法写的头皮发麻。
4 网易面经
网易研发面经
面试部门是网易云音乐,岗位是 Java 开发工程师。
网易是唯一一家我去外地面试的公司,也是我最早去实习的老东家。
一共三轮面试,耗时一个下午。
网易的面试比我想象中的要难,面试官会问的问题都比较深,并且会让你写一些结合实践的代码。
5 头条面经
今日头条研发面经
岗位是后台研发工程师,地点选择了上海。
我参加的是字节跳动的内推面试,当时找了一个牛友要到了白金码,再次感谢这位头条大佬。
然后就开始了一下午的视频面试,一共三轮技术面试,每一轮都要写代码,问问题的风格有点像腾讯,也喜欢问一些底层知识,让我有点懵逼。
后记
秋招结束以后,我就把主要精力花在做公众号【程序员江湖】上了。当然,剩下要处理的事情还有很多,毕业论文,毕业旅行,还有工作前的知识储备等等。果然,人的一生需要不断的修行,刚刚闯过了一关又马上要迎接下一轮挑战,你不能停下脚步,毕竟大家都在往前走。
希望还在求职路上的各位少侠好好加油,在未来也能够顺利地拿到自己想要的 offer!

正文完
 0