大三、研二的秋招备战路线(Java、大数据)

一、写作背景

1.分享经验。从去年五月份到今年五月份,我面试了n家公司,也收了(n/2+10)家的offer,经历了两个春招一个秋招,其中有腾讯、今日头条、京东等offer。通过这篇文章分享一些经验,让后面的同学少走弯路。

2.解决问题。我有自己的学习群和知识星球,秋招快到了,避免不了被问关于秋招备战的问题。通过这篇文章把我自己能想到的路线和方法系统化先输出出来,以便于精细化提问,也为我自己节省时间。

二、秋招的意义

1.秋招对于大企业是一场人才储备的战役,只有相对较大的企业才有秋招这个概念,它们有资本和资源花费大量精力进行宣传面试,可以提前发offer,坐等你毕业来上班。

2.对于学生来说,秋招是一场大型的招聘会,可能是这辈子离大厂最近的,机会最多的,也是唯一一次有精力面对这么多大厂的面试。

3.秋招offer在手,毕业时间我有。秋招拿了offer之后,对于你后面的面试也好,玩也好,都是起到非常关键的作用。至少心理负担不会那么大,面试起来也会更上手一次,不急不躁,玩起来也嗨,没有就业压力,毕业之前的时间随意安排。

三、不同的同学备战秋招的策略

想要在秋招拿到offer,记住以下三点,接下去的案例都围绕这三点:

1.拿到足够多的面试机会, 别让自己的才华无处施展。

2.根据自己的简历形成系统性的知识,在面试中占据主动地位。

3.成不骄,败不馁。不断地从面试中总结经验,补自己的知识盲区。

案例1


有小公司Java实习经验,参与过两个项目的开发,算法不太行,基础一般,有大数据基础,自己做了个大数据项目。



目标:秋招想收到大数据offer,最好大厂。



分析:项目是长板,算法是短板,其他正常。所以要用最短时间把项目补扎实,成为优势,算法逐渐拉上来,其他时间扑理论基础上。



学习路线:

1.先把自己手头上的Java分布式项目弄明白,对其中的技术栈以及业务进行深入了解,并自己整理项目中的难点和亮点,最终能漂漂亮亮的写在简历上。先熟悉手头项目,一方面项目是面试的敲门砖,没有项目的简历会显得空洞,有项目可以避免项目经验不足被刷。另一方面,项目在面试中也占着很大比重,面试官比较喜欢从项目场景切入到理论知识。



2.每天安排时间刷算法,剑指offer、牛客leetcode148题,容易的先刷,刷一题整理一题到博客,先懂思路后懂代码,一天至少1题,争取重复刷几遍到会手写。大厂必问算法,而且大都剑指offer或者leetcode原题或变形题,有些只问思路。所以算法必刷,先刷思路,要整理起来,避免刷过即忘。



3.补Java集合源码、JVM、多线程。不看书,直接去网上搜面试题,最后把高频的整理了下来,直接刚面试题,借助博客辅助理解。同样,懂一题整理一题到博客。(整理的面经我学习群公告有)大数据岗位也要求Java知识,就算到时大数据面不上,面大厂Java还是妥妥的,会大数据知识可以加分。



4.熟悉大数据项目里的技术栈和流程,理解并整理常见大数据面试题。



5.对数据库、操作系统、计算机网络常见面试题进行熟悉。因为这些在面试中不会占很大比例,而且问来问去也是那几题,所以放到最后。



6.有时间再看相关书籍,系统梳理。因为准备时间有限,而我的目的又是通过秋招面试,所以都是从面试题开始刷起,零散整理,最后有时间再通过看书系统梳理。



7.投递小厂练手。当准备差不多的时候我就开始投递简历面试小公司,通过这样去补缺补漏。



案例2


目前正在公司实习,但已经确定不留在这家公司,打算秋招前夕辞职全身心备战。



目标:大厂的Java或者大数据offer



路线:

1.针对目前还在公司实习或者即将去公司实习的同学,如果已经确定不留在该公司,那么可以「面向简历实习」。面向简历实习,顾名思义,简历上需要什么就学什么。公司可以提供的资源就是项目,有文档给你看,不懂的还有老员工可以帮你讲解。你需要快速地了解项目所用的技术栈,以及应用的业务场景,尽可能多地去搜集相关资料和看源码。多听听老员工在探讨什么技术难点,以及解决方案是怎么实施的,不懂的就多问。



2.在实习期间估计也只有精力学习项目了,在职期间去刷算法或者补理论基础不太现实。当把你实习的项目有目的性地吃透之后,就可以全身而退,开始刷算法和补基础。



3.如果要找大数据相关,可以通过基础视频入门,自己做一两个项目,把简历写好。其余的可以参考案例1的学习路线



案例3


懂点Java基础,有学校课设的管理系统项目,懂基本的数据结构。



目标:秋招能进一个知名的大厂做Java。



规划路线:

1.先用一些时间补1到2个项目,技术栈要相对好一些,这样能保证有面试大公司的机会和进小公司的机会。



2.当你能把相对较好的项目写在简历上,并且懂一部分技术栈的原理,那么先暂停对项目的学习,转战Java。先从Javase开始,到JVM,最后并发编程。se和JVM理论较多,先记住能理解的,再就是理解性的背,面试前才机械性记忆。并发编程可以从常见的多线程实现开始熟悉,自己敲敲常见的多线程实现demo,以及常用的几个线程池,再去比较每个实现方法的优缺点,参数。再由此切入到线程安全,并发锁等等。记得整理!



3.由于数据结构算法基础不是很扎实,可以先从常见的7大选择,8大排序开始熟悉,尽量能手写代码。再就是刷剑指offer,统一先刷实现思路,遇到能理解的代码实现也可以记住,不然只记思路也可以。每天刷,记得整理!



4.回过头深入理解项目的技术栈,常见的技术栈面试题,项目的业务场景怎么样,技术栈怎么和业务关联,可以找出哪些实现难点,有哪些可以当亮点。



5.投递小公司,收到面试通知之后刷数据库、操作系统等面试题。



案例4


非科班零基础。



目标:秋招尽量找份开发工作。



先看看Java基础视频入门,然后补项目、适当地补点Java基础,懂一些基本的JVM和多线程,数据结构和算法只看基本的排序和选择。当达到案例二的水平之后可以走它的学习路线进行进阶。



案例5

大三或研究生,机器学习或者其他方向,技术栈主要是Python,算法基础还行,有个Python小项目。由于机器学习竞争激烈,但自己又没核心竞争力,走Python后台或者爬虫岗位需求少。

目标:秋招找份大厂大数据开发或者后台开发

学习路线:

1.由于已经会Python语言了,所以学Java会比较快。可以快速地过一遍Java基础。

2.根据想走的方向针对性去准备1至2个项目,然后熟悉。可以参考案例1的学习路线去准备算法和基础。

3.把你的Python项目也写上,做大数据或者Java会Python也是加分的。

总结

秋招 = 项目 + 语言基础 + 计算机基础 + 算法 + 软实力

争取在项目中有:

微服务:SpringCloud、SpringBoot、Dubbo等

分布式服务框架:Zookeeper等

消息队列:Kafka、RabbitMQ、RocketMQ等

内存数据库:Memcached、Redis等

分布式搜索引擎:Solr、Lucene、ES等

大数据框架:Hadoop、Hive、Spark等

语言基础:

Javase、集合源码、JVM、多线程、IO等

计算机基础:

数据库、计算机网络、操作系统

算法:

基本的排序和选择算法、剑指offer、牛客148题Leetcode等

四、部分面试题整理

Java

Java散列表,树对应的容器类,hashmap如何解决冲突

Java实现生产者和消费者的三种方法

init方法与clinit方法的区别

Java中的引用

Java对象的创建过程

Java中创建子类实例时会创建父类实例?

Java的类加载机制 为什么会出现锁机制?

抽象类和接口的区别

双亲委派模型:启动加载器、扩展加载器、应用程序加载器

重载与重写

Java的类型擦除

简述Java Object类中的方法有哪些

char可以存储汉字嘛?

抽象类和接口的区别

静态分派与动态分派

HashMap与HashTable的区别

什么时候使用HashMap?它有什么特点?

HashMap的基本原理及内部数据结构

HashMap的put和get操作

简述Java中的深拷贝与浅拷贝,C++中的浅拷贝和深拷贝

解释一下static块和static变量的执行顺序

equals()的重写规则

Java中如何创建线程?

JDK1.8新特性

JVM

JVM内存布局

JVM垃圾回收机制

JVM垃圾回收算法

哪些对象在老年代?

从年轻代到老年代执行的时间以及发生转移的场景

为什么存在GC?

简单可达性分析

Minor GC安全检查

垃圾回收器

引用记数法和可达性算法

类加载机制过程

双亲委派模型

双亲委派机制

Java集合

排序算法比较

Hashmap是线程安全的吗?为什么?

ArrayList与LinkedList区别

HashMap、LinkedHashMap和TreeMap

冒泡排序的优化以及快排过程及优化

红黑树

JDK7与JDK8中hashmap的区别

hashmap的初始容量为什么设置为16?

平衡二叉树的插入删除操作

并发编程

锁分段技术、ConcurrentHashMap、扩容

Java同步线程有哪些方式?

volatile 和 synchronized的区别

讲一下同步异步(进程和IO)

synchronized和volatile的区别?

线程安全

对象的内存布局

哪些是线程安全的容器?

ConcurrentHashMap介绍

线程启动start和run

HashMap为什么线程不安全?

简述Java内存模型的happen before原则

volatile的原理和实现机制 || volatile到底如何保证可见性和禁止指令重排序的?

volatile关键字的两层语义 || 可见性

volatile保证原子性吗?

volatile能保证有序性吗?

Zookeeper

Dubbo简介及以Zookeeper为注册中心

Zookeeper的leader选举过程

2PC and 3PC

简述Zookeeper。。。watcher

简介ZAB

简述paxos算法

Zookeeper如何保证数据的一致性?

叙述ZAB集群数据同步的过程

Zookeeper中的ACL

Zookeeper底层实现数据一致性

Zookeeper在yarn框架中如何实现避免脑裂的?

大数据

Kylin:

简介Kylin

Kylin的工作原理

Kylin的技术框架

Cube、Cuboid 和 Cube Segment

Kylin 对维度表的的要求

Cube的构建过程

全量构建和增量构建的区别

流式构建原理

Hive

Hive内部表与外部表的区别

Hive与传统数据库的区别

Hiverc文件

Hive分区

Hive分区过多有何坏处以及分区时的注意事项

Hive中复杂数据类型的使用好处与坏处

hive分桶?

Hive元数据库是用来做什么的,存储哪些信息?

为何不使用Derby作为元数据库?

Hive什么情况下可以避免进行mapreduce?

Hive连接?

Hive MapJoin?

Hive的sort by, order by, distribute by, cluster by区别?

Hadoop计算框架特性

Hive优化常用手段

数据倾斜整理(转)

使用Hive如何进行抽样查询?

Storm

Storm的可靠性如何实现?包括spout和bolt两部分

怎么提高Storm的并发度?

Storm如何处理反压机制?

Storm中的Stream grouping有哪几种方式?

Storm的组件介绍

Storm怎么完成对单词的计数?

简述Strom的计算结构

Spark

Spark的运行模式

RDD是如何容错的?

Spark和MapReduce的区别

说一下Spark的RDD

自己实现一个RDD,需要实现哪些函数或者部分?

MapReduce和Spark的区别

Spark的Stage是怎么划分的?如何优化?

宽依赖与窄依赖区别

Spark性能调优

Flink、Storm与Spark Stream的区别(未)

说下spark中的transform和action

RDD、DataFrame和DataSet的区别

Spark执行任务流程(standalone、yarn)

Spark的数据容错机制

Spark技术栈有哪些组件,每个组件都有什么功能,适合什么应用场景?

Spark master使用zookeeper进行HA的,有哪些元数据保存在Zookeeper?以及要注意的地方

driver的功能是什么?

spark端口

RDD有哪几种创建方式

map和flatmap的区别

Spark的基本工作流程

Hadoop

MR的Shuffle过程

Yarn的工作机制,以及MR Job提交运行过程

MapReduce1的工作机制和过程

HDFS写入过程

Fsimage 与 EditLog定义及合并过程

HDFS读过程

HDFS简介

在向HDFS中写数据的时候,当写某一副本时出错怎么处理?

namenode的HA实现

简述联邦HDFS

HDFS源码解读–create()

NameNode高可用中editlog同步的过程

HDFS写入过程客户端奔溃怎么处理?(租约恢复)

Kafka

kafka介绍

Kafka与传统消息队列的区别?

kafka的零拷贝

kafka消息持久化和顺序读写?

网络

简述TCP和UDP的区别

七层协议每一层的任务及作用

简述http状态码

简述http协议与https协议

简述SSL协议

解析DNS过程

三次握手,四次挥手的过程??为什么三握??

剑指offer常问

字符串转换成整数

链表中倒数第K个结点

二维数组中的查找

替换空格

从尾到头打印链表

重建二叉树

用两个栈实现队列

斐波那契数列及变形题

二进制中1的个数

在O(1)时间删除链表结点

调整数组顺序使奇数位于偶数前面

反转链表

合并两个排序的链表

树的子结构

二叉树的镜像

顺时针打印矩阵

栈的压入、弹出序列

二叉搜索树的后序遍历序列

二叉树中和为某一值的路径

数组中出现次数超过一半的数字

最小的k个数

连续子数组的最大和

第一个只出现一次的字符

两个链表的第一个公共结点

链表中环的入口结点

二叉树的镜像

跳台阶

变态跳台阶

矩形覆盖

从上往下打印二叉树

二叉搜索树的第K个结点

五、准备过程中的注意事项

1.心理压力大。怕面试,面试怕被怼,一直逃避。面试是一个会上瘾的东西,刚开始几场会比较难受,但不用怕,一个优秀的面试官会让你有一个舒适的面试体验,而且面试是一个检验自己水平的过程。刚开始可以选择小公司,即使面的不好也没事,面上了也不一定去,放轻松。

2.沉迷学习,无法自拔。秋招已经开始了,自己总想着还没准备好,想把所有的东西都学完之后再去投。参考过秋招的人都知道,知识是永远学不完的,永远没有准备好的那一刻,当你能把简历写出来的时候就开始投吧。面试不是你很厉害就一定能过的,也有运气成分在里面,而且边面试边总结会成长很快的。

3.无论学习理论,项目,还是算法,一定要边学边总结。光输入看似都会了,输出才是王道,不然脑子依然一盘散沙,东拼西凑。面试之前这些平时总结的内容就是你的杀手锏。

4.怕理论懂太多,实操太少。通过以上内容,你会发现我一直强调理论性的东西,无论是项目的学习或者是语言。在校生本来就是以理论分高低,大家都知道面试问这些,但为什么总有人回答不上来。实操的话自己在学校敲的跟公司比起来都是小儿科,都得重新学,重要的是先拿到offer。学会把面试和日常学习区分开。

5.一定要注重简历上的项目。前面提到,简历没有相关项目去支撑你求职的岗位,即使简历写自己的理论多么强,基础多么扎实都是很苍白无力的。这点我在面阿里的时候吃过亏,前几天学习群的一个小兄弟也吃了这个亏。企业说注重理论基础是建立在有项目的基础上,而不是只有理论基础。

6.在简历的排版和内容上要好好做文章。正常的面试都是从自我介绍开始,然后面试从上到下浏览简历,所以你要把你的优点尽量往前面放,而不是把兴趣爱好,个人技能这种比较虚的东西放第一第二模块,而实习经历,项目经验放最后。

7.实习经历是否影响秋招?理论上是的,有实习经历尤其是大厂实习都会在秋招中有优势的,但这种优势不是绝对性优势。实习的目的也是锻炼你的动手能力,提高你的工程能力,所以只要能把项目搞定,问题不是很大。但是建议你还是多面试,项目经历可以补,面试经验补不了,终归要出去试试水的,所以要多面试。

8.为什么零基础的人学完基础就马上学习项目?我在校园招聘的时候,打印了10个简历,投了10家,全都拿了offer,当然都是小公司。面试问什么呢?面向对象的概念,Java的特点等等这些极其基础的,剩下的都是围绕着项目问。有些公司面试都没有直接说有项目那就好办了,接着问什么时候能上班,要现场给offer。案例1的人就是我,简历有两个分布式项目和一个大数据项目。所以我经常跟那些担心找不到工作的同学说,只要你把项目鼓捣明白,总有公司会要你的,就是大和小的问题。

六、针对简历复习

一直强调把简历写好,那么怎么针对简历去复习

1.面试前夕,打开简历,拿一张白纸,把自己当成面试官,手撸思维导图。从自我介绍开始,然后就是项目介绍,其次就是自己负责的部分以及项目难点。

2.技术面试正常两个部分,一个基础,另一个项目技术栈。基础就是网络,数据结构,算法这些,这些是无论你简历上写不写都问的。其次就是你简历描述的技术栈。

3.正常面试官会问你在项目中做了什么,然后以这个为点切入进去。

举个例子:我在项目中用了多线程,提高了读取效率。那么项目官肯定接着,你如何创建多线程的?我回答:线程池。那你知道创建线程有哪些方法吗?有哪些线程池吗?怎么保证线程安全呢?等等。

如果你项目中的问题会把自己问死,也就是挖坑,那我建议你换个。这部分写的好就是给自己开路,弄不好就自己填坑了。

4.项目技术栈来不及复习怎么办?打开谷歌搜索一下对应技术栈常问面试题,或者平时多刷牛客网,你就知道哪些题目是高频的。

5.扬长避短。对于不熟的框架,尽量不写简历上,如果写了并且被面试官问到就直接跟他说这个正在学,用的比较少。正常面试官也有数,你负责的部分用到的技术栈他会问的深一些,这块自己掂量一下。

7.针对基础,平时多积累。多整理博客也是为了临时突击,像网络,数据库,操作系统,问来问去也是那几题。多看面经几十遍,不懂原理也能吟。

8.针对技术框架,除了基本原理之外,也要准备应用场景。这块对应届生来说要求不会很高,社招的话要整理每个原理的应用场景,相对来说会细一点,源码加分。

9.针对算法。算法是贯彻在日常学习的,我刷算法的策略就是理论先上,其次代码,最后优化。是把所有的算法先刷一遍理论,第二遍再回头代码哦,也都有整理思路的。当然,也要准备常用算法,快排,冒泡的手撸代码

大部分还是吹吹思路就可以了,所以我先前面提到了先刷实现思路。

10.公司面试题优先。去牛客、看准或拉钩查对应公司的面试题,这个命中概率比较大。

11.公司产品业务准备,最好也看看竞品,让面试官刮目相看。之前面了一家腾讯系的,从它的融资开始讲。

12.面试官正常从上到下看简历,记得布好局。自己面试自己的时候多想想怎么把上面的知识点不经意的串到你熟悉的知识点。

为什么说不经意呢?要是你直接跟面试官说,我这个框架不熟,对***比较熟,有点尴尬的。所以要不经意的。

当面试官问你hashmap原理的时候,比如说你多线程比较熟,你最后一句提一下它是线程不安全的。又或者你数据结构比较厉害,那就说它是红黑树。又或者你对Lambda,JDK1.8一些特性比较熟,那就可以说它是在JDK1.8优化的。

平时还是得多整理,面试之前复习一手博客,一手面经,一手面试的思维导图。

最后说一句:抓住学生红利期,无论机会还是精力都有可能在巅峰时期。

来源:大数据肌肉猿(ID:BigData-BigMuscle)

(完)
谢谢你请我吃糖果!
0%