面试一个月,要自闭了...

点赞再看,养成习惯,微信搜索【敖丙】关注这个互联网苟且偷生的工具人。

本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

前言

本文主要是敖丙读者春招的硬核总结,我主要是后期的一些排版和润色,大家也可以积极投稿(稿酬丰厚得一匹),我创作不过来了,我北大研究生的面试视频就剪辑了2个礼拜,然后还有人在那天天说我不发技术文章,后台都被骂烂了,我太难了。

丙其实在大家看不到的时候几乎贡献了自己所有的业余时间了,周末和平时的晚上,所以轻点碰,么么。

正文

2020年是一个开头就没开好的年份,但实习却依旧要开始,而且今年实习似乎比往常都显得难了,在经历了春招大战后的我,最后拿到美团、腾讯、京东、360、搜狗等等offer(均为java后端开发)。

在结束了大混战以后,感觉需要写写总结,一来是对自己的总结,留下一个印记,二来也是希望将我自己的经历分享给大家,能够帮助大家。

本人本科双非计算机科班,考研去了还可以的211,属于最最普通的一名计算机研究生,而且没有任何实习经历,底子说实话很一般,因此我觉得还是具有一些普遍的参考意义,当然经验只是用来参考的,最后还是要选择最适合自己的方式来学习。

接下来我将分七个部分来分享我的此次春招经历:

  1. 如何准备面试
  2. 如何投递简历和选择岗位
  3. 面试中需要注意的内容
  4. java面试高频知识点
  5. offer的选择
  6. 一些其他感想
  7. 总结

以下全程手码,全程干货,全程高能!

第一部分:如何准备面试

我本人是从2月份开始准备面试的。我个人建议准备的战线不用太久,在2-3个月左右最为合适,当然如果你认为自己需要更长的时间来准备,也是没有问题的,这取决于个人的基础。

首先,面试准备主要分两大块:通用板块,专业板块。

所谓的通用板块,一般就是基础算法,没有什么复杂的技巧,leetcode、牛客刷起来就可以了。现在大厂的招聘流程都有在线手撕代码的模块(尤其是字节),所以这个板块需要重视。

所谓的专业板块,一般就是开发或者算法,适用于你想去的领域,例如java开发,C++开发、前端、移动端、机器学习等等。

我个人的经验,除了部分对于算法有莫名执念的公司,专业板块的重要程度要大于通用板块,大家务必要把重心放在专业板块上。

其次,准备面试不等于简单的背诵!

在准备知识点的时候,你需要自己做好笔记,做好自己的理解(有自己的理解很重要)、并且形成体系,因为如果你只是简单的背诵、你没有办法把知识点串联起来,就无法形成体系,效果会很差。

比如你要知道技术的使用场景(不结合场景谈技术都是耍流氓)、优劣、和同类型的技术的对比。

例1:

面试官问:我现在需要对某个系统进行某些关键操作的记录,并且用于做大数据分析,你会怎么设计这个功能?

(2020京东面试题)

你如果在复习的时候有全局视野,有体系。你就能马上知道,面试管问这个问题的核心就是在问,对于横向业务,你是否懂得要用AOP的思想。如果你只是背诵AOP可以用于记录日志,可以用来进行权限检查,而没有理解他的核心,没有建立体系,这种问题就容易答偏。

例2:

有一个static变量,初始值是0,现在有2个程序同时修改这个值,每个程序都是进行自增操作,请问这个变量最后的取值可能有多少?如果这个变量加上volatile,取值可能有多少?

(2020美团面试题)

如果你只是背诵了多线程的一些概念,而没有理解具体是怎么回事,这种题目就变成,知道一点,但就是答不出来。因此需要理解,成体系,且懂得应用与分析。

例3:

如果请你设计一个缓存,你觉得你会考虑哪些问题?

(2020阿里面试题)

同样的道理,如果你没有对缓存有一个完整的体系认知,那么回答这种问题只是东答一点,西答一点,具体缓存知识点可以参考敖丙公众号。

还有很多诸如此类的面试题,不再一一列举,说这个是想强调,大厂要的不是会背书的机器人,而是真正能理解问题,解决问题的人。

总结一下,复习面试的重点在于专业板块,但也要重视通用板块,在复习的时候切记不能成为背书的机器人,要懂得建立体系,这样的复习才更加高效和有序。

第二部分:如何投递简历和选择岗位

基本上,互联网企业的简历投递途径就是内推(校园bbs、或者学长学姐)、牛客网、官网投递、一些招聘软件等等,都大同小异。岗位选择的话,大类就是技术、产品、运营等等。

我这里主要想说的是几个可能相对特殊的问题。

  1. 提前批的选择

在如今金三银四的春招中,时间显然成为了一个重要的战场,所谓投的越早中的概率越大。其实这里需要有一个trade off 的考量的。当你没有准备好的时候,不适合投的太早。因为很有可能就会直接沉到池子。因此你需要自己衡量一下自己的状态,再做决定。

  1. 有关池子的问题

所谓的池子就是当你的第一次投递面试挂了,然后你的简历就会进入这个公司的大池子。

一旦进入池子,就开始等待反复被捞的过程。除了个别公司,大部分公司都会有捞人的情况。

  1. 一些大厂的流程

阿里:

阿里的流程最为复杂,相对周期较长。基本流程有一面、二面、三面、交叉面、HR面,以及在HR面前,可能会有加面,平均面试数量为5面。

另外有测评以及在线笔试(2道编程题),必须参加,一般不会筛人,一个部门挂了,可以转部门,但需要重新完成测评与笔试,存在HR筛人的情况,面试以电话面试为主,另外面试基本都是突然袭击,时间基本在2月-5月。

腾讯:

腾讯的流程相对简单,效率较高,分为提前批与常规批,一般来说提前批是主要战场,基本流程有初试、复试、GM面试、HR面试。

是否通过该轮面试24h内就会有反馈(是否变灰),总体效率较高,提前批无笔试,常规批有笔试(但不是必须参加,但参加会有更高的概率发起面试)。

一个部门挂了,可以被其他部门捞起,HR面试基本不筛人。面试以电话面试以及视频面试为主。面试均会提前预约,时间基本在2月-5月底。

字节跳动:

字节的流程效率相当高,效率相当高,基本上一面二面三面可以在一天完成,有统一的在线笔试,也有提前批,但字节的实习招聘属于全年招聘,因此日常与暑期基本没有区别,HR面基本不筛人。

一个部门挂了,可以重新投递。面试以视频面试为主(牛客在线面试,必有手撕代码),面试均会提前预约。时间基本全年招聘。

美团:

美团的流程相对简单,效率相对较高。基本流程有一面、二面、三面、HR面。有统一的在线笔试(5道编程题),一个部门挂了,可以被其他部门捞起。HR面试几乎不筛人,面试以电话面试以及视频面试为主。面试均会提前预约,时间基本在2月-4月底。

京东:

京东流程相对简单,效率一般。基本流程是一面、二面、HR面。有统一在线的笔试,基本不存在提前批,都是统一的进度流程,先笔试,再面试,面试以电话面试为主,面试均会提前预约。时间基本在3月-4月底。

网易:

网易的流程相对简单,效率较高。基本流程是一面、二面、HR面。有统一在线的笔试,基本不存在提前批,都是统一的进度流程,先笔试,再面试(笔试会筛人),面试以电话面试与视频面试为主,面试均会提前预约,且可以自己选时间段,时间基本在3月-4月底。

百度:

百度的流程相对简单,效率较高。基本就是一面,二面,三面,HR面。一周一面的节奏,有统一在线的笔试,基本不存在提前批,都是统一的进度流程,先笔试。再面试(笔试会筛人),面试以电话面试与视频面试为主,面试均会提前预约。且可以自己选时间段,时间基本在3月-4月底。

华为:

华为流程相对简单,相对周期较长。基本就是技术面。主管面。两次面试中的间隔时间,整体较长,有统一的在线笔试,基本不存在提前批,都是统一的进度流程,先笔试。再面试,面试以视频面试为主,面试均会提前预约。时间基本在3月-5月。

360:

360流程相对简单,相对周期较长。基本就是初试、复试、HR面。基本一周一面,有统一的在线笔试,基本不存在提前批,都是统一的进度流程,先笔试。再面试,面试以视频面试为主,面试均会提前预约。时间基本在3月-5月。

搜狗:

搜狗流程相对简单,相对周期较长。基本就是初试、复试、HR面。整体周期较长,基本不存在提前批,都是统一的进度流程,面试以电话面试为主,面试均会提前预约。时间基本在3月-5月。

其余企业也大同小异,不一一列举了。

具体面试的流程,大家可以多问问内推人,以及同届的小伙伴,或者去牛客网上多关注面试动态。

总结一下,简历投递一般来说,可以多投几个试试,根据个人情况来做选择,以及投递前最好对该岗位有一定的了解,第一次投递很关键,以及有些公司存在笔试或者简历筛人的情况,因此也要重视简历的书写以及在线笔试或者测评。

总的来说,金三银四是铁律,大家要做好规划。

第三部分:面试中需要注意的内容

一般来说,面试部分基本分为4个板块:自我介绍、简历提问、专业吊打、反转提问。

首先先来说说自我介绍,个人感觉自我介绍没有什么好多啰嗦了。简明扼要即可,但有一点需要注意,自我介绍需要突出两个方面:第一个是对于技术的热情,第二个是要引导面试官往自己熟悉的领域提问。

曾和一个阿里面试官聊天,以阿里为例,阿里主要看重的学生的三个方面:

  1. 学习成绩要前列,基础知识扎实
  2. 喜欢折腾,对于技术有极大的热情
  3. 有无实习经历,有无参赛经历,有无论文经历。

因此,在自我介绍的部分,尽量突出以上的方面。

其次,我们再来谈谈简历提问,这一块主要是面试官对于你的简历中的技术项目会进行刨根式提问。

因此,对于你写在简历上的项目,你必须要做到非常非常熟悉,否则一提问就像没有做过的,很尴尬。

所以你可以适当的对于你的工作进行包装,但要是只是为了包装而包装,反而得不偿失。

另外,对于简历中的项目,你需要有一个完整的准备,从项目背景、项目介绍、项目角色、项目技术栈等等来进行回答,而不要随便说说我做了一个什么功能的项目。

接下来就是最紧张刺激的吊打环节了!这个环节就是刀光剑影的环节了,过不过就看这个环节了。

这个环节就是考察你的基本功的时候了,具体的知识点我就不赘述了,可以参考接下来的一部分。

我主要提醒3点:

  1. 对于回答任何问题都要有逻辑,有条理。

例4:

是否了解synchronized关键词?

(2020美团面试题)

我相信任何一个java面试者都被问过这个问题,这是一个经典问题,对于这个回答,我相信大部分人就开始了锁升级那一套的东西。

但我觉得更好的回答方式是有系统,有体系的回答:

例如: synchronized关键字是java解决并发问题一种重要方案。

我将从以下4个层面回答:

  • synchronized关键字在使用层面的理解

  • synchronized关键字在字节码中的体现

  • synchronized关键字在JVM中的实现

  • synchronized关键字在硬件方面的实现

首先,synchronized关键字可以作用在代码块或者.....

以这种有逻辑的方面回答,可以让面试管觉得你是一个专业的人,而且会让它眼前一亮,可以参考敖丙的文章,那逼写的真的通俗易懂。

  1. 对于面试官的问题如果有暂时回答不出来的,或者不懂的。可以表示能否让我思考一下,或者老实的说我不知道。而不要不说话,卡着,这样大家都很尬尴,毕竟最怕突然的安静。

  2. 你要主动引导面试官的提问,尽可能能突出自己的强项,以及多回答自己的理解,而不是千篇一律的背诵。

总之,这个环节,是一个需要技术基本功、有逻辑的表达而且看命的环节哈哈哈。如果大家有条件,可以去参加参加一些模拟面试,熟悉一下流程,比如敖丙的模拟面试。

最后。就是反转提问环节,就是所谓的你有什么想问我的?

这个部分见仁见智,一般可以参加的提问有:

  • 对于刚刚面试环节的评价,有哪些不足之处可以改进的

  • 对于技术业务的了解

  • 其他问题

总之这块中规中矩即可。

以上就是面试的全部经验。

总结一下,面试缘分很重要,俗称看命。在面试中,尽可能引导面试官往你的强项提问,以及要有条理的回答问题,而不是想到什么说什么。最后,对于自己简历上所提到过的任何一个字都要负责。

第四部分:java面试高频知识点

其实面多了,就会发现核心就这些,我例举几个我认为的高频知识点。(怎么感觉和期末考试提纲一样哈哈哈)

讲道理是不太想写一块的,因为网上一搜一大把,但感觉大家特别喜欢看这块面经,还是稍微写一下。

  1. 集合类组合拳(尤其是HashMap)

我觉得这个已经问烂了,应该熟到条件反射的回答,

提醒一下一些冷门知识:Arrays.asList有什么特点、fail-fast与fail-safe、以及hashmap的一些参数(以及为什么)、hashmap是否可以存null值,concurrenthashmap是否可以存null值等等。

  1. 并发编程组合拳

例如:synchronized 的锁升级、对象头、字节码层面、openJDK层面的实现(3个队列),硬件层面的实现,

volatile的底层原理,DCL(Double Check Lock),CAS底层原理以及ABA问题,各种类型的锁,

Reentrantlock,AQS的底层源码(特别是理解设计思想),runnable和callable的区别

java中的同步工具(CountDownLatch/CyclicBarrier/Semaphore)的使用场景以及原理,

线程池(ThreadPoolExecutor核心的7个参数,4种拒绝策略,1个使用原则),写时复制等等。

  1. 线程与进程

这个我觉得也是老生常谈的问题。提醒一下:wait()与sleep() 方法的区别。

如果你能知道什么时候用线程,什么时候用进程就能加分了。比如你知道nginx底层的用到了什么。

  1. JVM组合拳

这个板块绝对是可以问到死的板块,大家适度复习就好。以hotspot为例:

例如你要知道JVM内存结构,如果还知道不同版本的区别加分。

类加载与双亲委派机制,如果知道tomcat打破双亲委派加分。

GC Roots、JVM常用参数(请拿出白纸默写)、常见的OOM、四大引用,以及经典的案例(localthread)、

四大垃圾收集算法(标记整理、标记清除、复制算法、分代收集算法)

十大垃圾收集器、JVM默认垃圾收集器、各种垃圾收集器的优劣、使用场景

如果你能聊聊CMS、G1、ZGC,面试官会开始眼前一亮

如果你能说出CMS的7个阶段(其实不止)、还能说说concurrent model failure、background & foreground collector ,增量更新+写屏障等等,面试官开始内心波动。

如果你能说出G1中的,Remembered Set、Card Table、Collect Set、young gc和Mix GC的完整流程、SATB+写屏障、Marking bitmaps和TAMS、Pause Prediction Model,面试官开始扶眼镜,流口水。

如果你还能说说ZGC中的color point,面试开始高潮

最后。对于JVM的调优的各种参数,各种命令(例如100%cpu的排查、死锁的检查)以及常用的JVM的监测的工具(例如 Arthas 等等),还能聊聊对象的分配过程(栈上分配)、JIT、逃逸分析等等,面试官彻底高潮,不能自拔。

总之,JVM这块是无底洞,大家自行把握尺度。

  1. 设计模式

这块主要核心理解思想,以及不同的设计模式的具体案例(这个很重要,否则只知道概念有p用)

比如。不要只会回答单例模式(当然单例模式也是核心,5种实现方式要会)

适配器模式(Callable)、代理模式(Aop)、装饰器模式(I/O)、责任链模式 (handlerchain)、模板方法模式(tryAcquire)等等不再一一列举。

  1. BIO/NIO/AIO

这块也属于高频出境。知识点一搜一大把,注意NIO底层的实现,以及使用场景、如果能知道Netty,加分。

  1. 源码拷问灵魂(主打Spring framework,当然还有springboot、dubbo、springcloud、zookeeper等等数不清的源码 )

业界流传,不会spring就不要做java开发了。你说这块是不是要问到死?

以spring为例,(说实话我都不知道应该怎么写这些知识点,因为系统实在太庞大),我举一些基础部分:

一些非技术的问题(例如对spring的理解。这个没有标准答案,但绝对能听出你的功底)

先来Spring-Aop

比如:Spring-Aop的底层原理(开启注解的原理),如何实现的,为什么jdk代理要用接口(不要告诉我这是规范)、aop失效场景以及原因,spring是用哪个后置处理器完成aop的,aop与aspectj有什么关系,aop在spring中的流程(这个绝的可以加分,不要简单认为spring就实例化bean以后做aop这么简单)、Spring中如何设置aop暴露,aop的使用场景、如果你还能说说cglib底层用的asm,面试官直接高潮。aop相对于还是比较简单的入门,一般也比较喜欢问aop

接下来就是无底洞的Spring-context、spring-bean、spring-core的版块了。也就是传说中的IOC

比如:IOC的生命周期(这个可以回答到死、从this()方法开始到refresh()方法结束,好像这么说后面的问题都在里面了。当然百度糊弄一下说个大概面试官也懂)、说说spring的常见扩展点(这个可以直接问穿,大家自行学习,什么你不知道扩展点?)、spring的 ConfigurationClassPostProcessor 干了一些什么事情(可以直接问穿,比如@configuration注解的底层、@Import三种情况的处理、spring如何解析bean的等等,什么你不知道这个类?)、Spring中的@Autowired和 @Resource(别告诉我什么bytype,一看就是百度的)、Spring中的循环依赖(为什么要这样设计)、Spring中的bean的创建流程、Spring中的生命周期的回调、Spring中的5个核心后置处理器都做了什么、说说Spring中的factorybean等等。不再一一列举。

你以为Spring IOC结束了?不好意思。Mybatis是如何和Spring整合的(核心@MapperScan底层原理)

在接下来是Spring-webmvc、spring-tx、spring-cache、spring schedule

比如:说说Springmvc中父子容器(什么你写了这么多@controller@service@MapperScan还不知道父子容器?)、springMVC的请求流程等等、spring的事务的7种传播方式、底层的实现、Spring事务失效的场景以及原因、spring中的定时任务原理、spring中的缓存用过吗?等等

在接下来是Springboot,

比如Springboot中的watch机制了解吗?springboot自动装配了解吗?Springboot启动流程了解吗?

好吧,我不想再写了。

总之一句话。源码是最能看功底的。这一块大家各自看命吧,说好了面试官直接高潮。

大家平时一定要养成看源码的好习惯!

  1. Mysql组合拳

说实话这块其实也可以问到死,但毕竟不是做DBA。

大家自行百度一堆。比如innodb底层的页结构,比如隔离级别底层实现(MVCC与锁)

  1. Redis 组合拳

大家看敖丙的公众号。再看看redis底层的源码实现即可。

  1. 分布式事务与微服务架构设计

这块也的核心是场景设计、较灵活

基本的知识点有: CAP理论、BASE理论、Paxos & Raft & ZAB 一致性算法、2PC、3PC、TCC、最终一致性、 Seata等等,重点在于理解。

  1. MQ消息队列

这块也的核心是场景设计、较灵活,以及大家针对一个MQ把底层原理了解清楚即可。

  1. 算法组合拳

首当其冲的就是各种排序算法,必须熟练背诵、各种时间复杂度空间复杂度、如果你还能知道不同排序算法的优化手段,面试官会高潮。

其此是海量数据的问题,例如topK的问题,无非就是基于海量数据上的存储,处理,操作。海量就是数据量太大。导致要么无法再较短时间解决,要么是数据太大,无法一次性装入内存。

解决方案:

  • 针对时间:可以采取巧妙的算法搭配合适的数据结构,如Bloom filter、Hash、bit-map、Heap、数据库索引或者倒排索引、Trie树
  • 针对空间:无非就是大而化小,分而治之(hash映射),不就是规模大嘛,我就化成小的,各个击破。

如果还能知道Roaring Bitmap——解决BitMap空间稀疏问题,面试官会高潮

最后就是JDK底层如何实现排序,如果能聊聊DualPivotQuicksort和Timsort,面试官会再次高潮。

  1. 还有很多杂项

比如:HTTPS、TCP三次握手 四次挥手、负载均衡算法、各个JDK版本的特性、常见linux命令、CDN(这个是阿里某个bu据说必问的问题,很神奇)、分库分表、tomcat的底层原理、以及JDK组合拳(例如==与equals区别、stringbuffer与Stringbuilder区别(这个其实也能问深入)、static和final关键词、面向对象的四大特点)、cookie与session、XSS与csrf、DNS解析过程等等。

总结一下,这些问题大家可以根据自己投的bu以及问问内推学长学姐,面试官有没有特别重视的板块,能更有针对性的复习。但以上问题属于基本的必考题,还是要熟练掌握为好。当然准备越充分越好,以上也只是我挑选了一些我认为最核心的问题,还有很多其他知识点,完整知识点可以看敖丙公众号。

第五部分:offer的选择

对于offer的选择,在和许多人聊完,我觉得基本上有这样一个大原则:

能去大厂就去大厂,能去核心就去核心。

说着是很容易,但事实上,我们遇到的选择可能会非常纠结,我说一下,一些特殊情况的选择,供各位参考

ps。以下比较是在岗位相同的情况,至于什么是大厂,什么是小厂,什么是核心,我相信你们能懂的。

  1. 超大厂非核心 与 小厂核心 ,选择超大厂非核心。

  2. 超大厂非核心 与 大厂核心,选择大厂核心。

  3. 大厂非核心 与 小厂核心,选择大厂非核心。

差不多是这个情况。当然,你还可以考虑一下其他的因素,比如是否考虑转正,对于城市是否有要求等等。

总结一下,实习就是来学习的!不要害怕选择,正如写在前面的话说的那样,因为你能学到多少,取决于你,而且一定要去实习,不要以为不在大厂就学不到东西。总之一句话,就是干!

第六部分:一些其他感想

  1. 你要相信面试中个人实力固然重要,但缘分也很重要。所以你没有拿到offer并不一定代表你不优秀。
  2. 竞争真的很激烈,因此需要加倍努力,要相信天道酬勤。
  3. 不要轻易更换目标,下定决心后就往死里干。
  4. 你不是一个人在战斗,要学会分享,多和大牛交流。
  5. 自学能力很重要,记得关注关注公众号,加加微信,经常讨论讨论,学会提问。
  6. 生活不只有工作和代码,也有生活本身。
  7. 要有独立之精神,自由之思想,不要盲从大流。
  8. 永远不要放弃,绝望之为虚妄,正与希望相同。

第七部分:总结

2020年,虽然开了一个不怎么样的头,但我相信一切都会好起来的,就像这次艰难的实习面试,困难终究会过去,希望终将到来,一切都将是新的开始,这也是我人生的第一篇写的这么正式的wiki哈哈,以后应该要经常写wiki了(猜猜我最终去哪里了嘿嘿),希望多年以后还能不忘初心,好好做一个合格的程序员~

感谢一路以来帮助我的朋友,甚至有些朋友只是聊天群里素不相识的热心人。

感谢大厂爸爸们给了我好好学习的机会

感谢自己没有放弃,坚持到现在。

也祝所有努力拼搏的小伙伴都能拿到自己向往的offer!

写在最后的话

机会遍地都是,但是能不能抓住,就要看你是否做好了准备了。

整个文章光是我排版都花了不少时间,更不用说读者背后耗费的经历了,大家可以看到一个优秀的仔是怎么准备一场春招或者秋招的,社招的朋友也一样,就是应该这样,不打没把握的仗,你准备越充分,你胜率就越大,给你的回报也就越大。

文中很多提到关注我公众号这个,真的是他写的,不是我的写的,看的时候我都笑了。

希望大家都能找到自己心仪的工作,如果通过努力进入了心仪的公司,也不要放松,学习就是逆水行舟,不进则退。

当大潮褪去,你才知道谁在裸泳。

我是敖丙,一个在互联网苟且偷生的工具人。

你知道的越多,你不知道的越多人才们的 【三连】 就是丙丙创作的最大动力,我们下期见!

注:如果本篇博客有任何错误和建议,欢迎人才们留言,你快说句话啊


文章持续更新,可以微信搜索「 敖丙 」第一时间阅读,回复【资料】有我准备的一线大厂面试资料和简历模板,本文 GitHub https://github.com/JavaFamily 已经收录,有大厂面试完整考点,欢迎Star。

敖 丙 CSDN认证博客专家 CSDN签约作者 算法工程师 B站网红UP
微信搜一搜【敖丙】关注这个文绉绉的程序员,关注后回复【资料】有我准备的一线大厂面试资料和简历模板。
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页