【二本|面试|亲身经历|Java校招干货】二本学校的计算机学生如何拿到30万年薪的大厂Offer?

笔者是一位无名学校的无名学生,在经历疯狂内卷的校招中,也曾受过很过打击,在学历背景下,得到的面试机会寥寥无几,大多在简历关就被淘汰,也曾有过学习的迷茫,下面我将以面向工作的角度,分析我们如何把握学习脉络,让自己在校招的厮杀中拿到一个满意的Offer,希望能够给各位朋友带来一些小小的收获。

一、我在秋招中的收获?

在秋招中,因为准备的比较充足,很幸运的拿到了美团、京东、深信服SP、哈啰出行SP、唯品会、土巴兔、多益网络的Offer,其中美团、哈啰出行、深信服的年薪总包都接近或超过30万,虽然没有进入到满意的公司,但是对我来说已经很满足了。

【二本|面试|亲身经历|Java校招干货】二本学校的计算机学生如何拿到30万年薪的大厂Offer?_第1张图片

二、学习路线 | 面试重点

其实不管是面试实习岗位还是校招岗位,其核心问题内容都离不开我们所学的一些基础课程,例如数据结构、操作系统、计算机网络、数据库,这类基础课程是共通的,是作为底层建筑搭建自己的技术体系,无论你从事的是Java、Python或C++开发都必须掌握,且是面试重点,因此希望各位能够好好学习学校开设的这些基础课程

  • 数据结构

在实际的面试过程中,面试官当然不会直接问你会不会链表、会不会二叉树?你的数据结构功底往往会在算法题中体现,算法是极其重要的,笔试题要考算法、面试题也要考算法,在面试过程中如果算法题做不上或者bug太多的话,面试基本上就跪了,笔者算法就非常糟糕,屡次倒在算法题上

我主要是在力扣上刷题,主要刷 HOT100剑指offer,现在我回过头发现剑指offer上的题目都是比较高频的,推荐大家循环多刷几遍,自己一定要总结常见题型,主要考的就是动态规划、贪心、二叉树、链表、数组、字符串之类的。

推荐资料:

  • 力扣HOT100:上面的题目非常经典,面试出现的频次也很高;
  • 《啊哈!算法》:这两本书都是面向新手的图书,图画很多;
  • 《剑指offer》:这本书看名字就知道,不需要多做介绍,校招必备;

  • 操作系统

操作系统是比较重要的,面试三大要点之一(操作系统、计网、数据库)。

其中,死锁、虚拟内存、堆栈、进程线程、内存管理、磁盘调度 等都是重点,也是面试过程中问的比较多的一些知识点。

你如果能够在面试过程中讲出来一些具体的操作系统知识,而不是泛泛而谈,肯定是很加分的,例如 为什么基于磁盘的IO会比内存慢

我们回答到线程有内核态和用户态的区别,普通程序的线程是运行在用户态的,线程要切换到内核态才能执行磁盘IO,磁盘IO耗时长的原因主要是IO寻址时间、线程上下文切换时间成本。

我们普通的机械硬盘是随机IO寻址时间长,但是现在广泛应用的SSD硬盘是采用顺序IO寻址时间短,因此时间损耗主要集中在线程上下文切换上。

而线程上下文是如何切换的,要能回答到中断指令、保留CPU现场等,那毫无疑问很加分的。 

推荐资料:

  • B站清华大学操作系统:https://www.bilibili.com/video/BV1js411b7vg;
  • B站美国麻省理工MIT 6.828操作系统神级课程:https://www.bilibili.com/video/BV1px411E7ST;
  • 《现代操作系统》:也是讲操作系统的一本好书,讲的很细;《深入理解计算机系统》,大名鼎鼎的CSAPP,被誉为“和金子一样重要的计算机基础书籍”, 很厚的一本黑皮书,需要慢慢看;

  • 计算机网络

计网也是面试重点之一,其中 HTTP(S)、TCP/UDP、OSI七层网络模型 相关的知识点都是面试重点。

推荐资料:

  • 韩立刚老师的《计算机网络》:B站上直接搜就能找到,刚好书本也是配套本校的教学资料,韩老师讲课诙谐易懂,让你在哈哈大笑中学到很多知识点,重点看第三章传输层TCP/UDP;
  • 《图解HTTP》、《图解TCP/IP》:这两本书比较简单,日本人写的,把复杂的知识点简单化;
  • 《网络是怎样连接的》:这本书紧紧围绕一个问题:输入一个URL,直到我们在网页端看到请求的内容,这中间发生了什么?抽丝剥茧将这个问题逐步细化,带你走完整个网页访问的过程;

  • 数据库

一般来说数据库分为关系型数据库与非关系型数据库,以MySQL为代表的关系型数据库,以Redis为代表的非关系型数据库。

  1. MySQL

首先是MySQL,语法、索引、锁、事务、存储引擎 等知识点都是考察的重点,这里面包含的内容是非常多的。

MySQL推荐资料:

  • 《MySQL技术内幕 -InnoDB存储引擎》:InnoDB的详细剖析;
  • 《高性能MySQL》:建议只看索引以及优化这两章,后续的可以慢慢再看,这本书,真的真的很厚;
  • 《极客时间-MySQL实战45讲》:阿里P9数据库专家的力作,强力推荐,在你对MySQL有一定熟系之后去看,会有很多收获;
  1. Redis

Redis作为一款基于内存非关系型数据库,因其操作简单、易上手、速度快,基本上在所有企业都有使用到,也是我们需要深度掌握缓存中间件。

重点主要是 数据类型及常见操作、底层数据结构(诸如sds、跳表)、持久化存储及原理、过期策略和内存淘汰策略、集群、缓存穿透/雪崩、分布式锁 等等。

Redis推荐资料:

  • 《Redis设计与实现》:算是Redis入门资料吧,认真看完的话就对Redis有大概了解了,话说Redis这么火爆是有原因的,其中的一些精妙设计真的看完令人大呼过瘾,不得不承认,人与人之间真是有差距的;
  • 《极客时间- Redis核心技术与实战》:中科院的研究员开设的Redis专栏,非常不错;

  • Java

Java相关的技能是需要浓墨重笔的,因为你面试一个Java岗位,面试官不一定会问你操作系统、数据库,但是一定一定会围绕Java体系对你展开狂轰滥炸。

Java体系主要围绕 基础语法、集合容器、多线程、IO、JDK源码、框架、JVM虚拟机 来展开。

      1.基本语法

这包括static、final、transient、volatile等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。

顺便插一句,面试和被面试本身就是相对的,面试官能问这个问题同时也让面试者感觉到面试官也是一个喜爱研究技术的人,增加了面试者对公司的好感,不要觉得这太吹毛求疵了,越简单的问题越能看出一个人的水平,别人对你技术的考量绝大多数都是以 深度优先、广度次之 为标准的。

      2.集合

非常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。

集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。另外多说一句,ConcurrentHashMap的问题在面试中问得特别多,大概是因为这个类可以衍生出非常多的问题,关于ConcurrentHashMap,我给朋友们提供三点回答或者是研究方向:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

     3.多线程

这也是必问的一块了,推荐大家阅读《Java并发编程的艺术》。比如说Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,几次面试几乎都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:

假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

大家对这个问题是否有答案呢?不难,java.util.concurrent下就有现成的类可以使用。

另外,线程池也是比较常问的一块,常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际一些的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适。

多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法等等

     4.IO

IO分为File IO和Socket IO,File IO基本上是不会问的,问也问不出什么来,平时会用就好了,另外记得File IO都是阻塞IO。

Socket IO是比较重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。这是基本一些的,深入一些的话,就会问NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等,这有些难,当时我也是研究了很久才搞懂NIO。提一句,NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO,面试回答的时候要注意这个细节,讲到NIO会阻塞在Selector的select方法上会增加面试官对你的好感。

如果用过Netty,可能会问一些Netty的东西,毕竟这个框架基本属于当前最好的NIO框架了(Mina其实也不错,不过总体来说还是比不上Netty的),大多数互联网公司也都在用Netty。

     5.JDK源码

要想拿高工资,JDK源码不可不读。上面的内容可能还和具体场景联系起来,JDK源码就是实打实地看你平时是不是爱钻研了。LZ面试过程中被问了不少JDK源码的问题,例如String的hashCode()方法是怎么实现的。JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:

(1)List、Map、Set实现类的源代码

(2)ReentrantLock、AQS的源代码

(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的

(4)线程池的实现原理

(5)Object类中的方法以及每个方法的作用

这些其实要求蛮高的,去年一整年基本把JDK中重要类的源代码研究了个遍,真的花费时间、花费精力,当然回头看是值得的,不仅仅是为了应付面试。

     6.框架

老生常谈,面试必问的东西。一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做,比如我想要在Spring初始化bean的时候做一些事情该怎么做、想要在bean销毁的时候做一些事情该怎么做、MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习框架的使用细节自然都不成问题。

如果上面你的问题答得好,面试官往往会深入地问一些框架的实现原理。问得最多的就是Spring AOP的实现原理,当然这个很简单啦,两句话就搞定的的事儿,即使你不会准备一下就好了。遇到的最变态的是让画一下Spring的Bean工厂实现的UML图,当然面对这样一个有深度的问题,我是绝对答不出来的/(ㄒoㄒ)/~~

     7.JVM虚拟机

Java虚拟机器是非常重要的一块内容,非常有必要进行研究的,推荐大家阅读周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》,简单地列一个提纲吧,谈谈Java虚拟机中比较重要的内容:

  1. Java虚拟机的内存布局
  2. GC算法及几种垃圾收集器、浮动垃圾的解决办法、卡表的概念
  3. 类加载机制,也就是双亲委派模型
  4. Java内存模型
  5. 三色标记法、读写屏障、happens-before规则
  6. volatile关键字使用规则

  • 设计模式

设计模式在工作中还是非常重要、非常有用的,在京东实习的过程中也经常看见使用设计模式进行功能实现,23种设计模式中重点研究常用的十来种就可以了,例如 单例、策略、模板、门面、代理、工厂、责任链 等,面试中关于设计模式的问答主要是三个方向:

(1)你的项目中用到了哪些设计模式,如何使用

(2)知道常用设计模式的优缺点

(3)能画出常用设计模式的UML图

  • 中间件

中间件在校招中是作为一个加分项的,问过很多面试官,结合我自己的面试经历,大都是还是比较注重基础,大家如果学有余力可以去学学Kafka、Zookeeper、ES、Netty,都是业内应用比较广泛的中间件。

3、简历投递时间点

在和很多朋友聊天的过程中,发现他们技术能力都很好,但是却迟迟拿不到满意的offer,后来我发现是他们没有把握好简历投递的一些时间点,导致错失了很多机会,各位同学千万不能错过一下的几个时间:

  • 大三下学期(3~6月):暑期实习生招聘
  • 大四上学期(7~12月):秋招提前批+正式批
  • 大四下学期(3月~6月):春招

首先是大三下学期,请同学们务必准备好简历,参与暑期实习生的招聘项目,暑期实习生不同于日常实习生,暑期实习生的含金量和留用率更高。

拿到暑期实习的offer相当于半只脚踏入了企业的大门,企业往往通过暑期实习生的项目对实习生进行两三个月的实习答辩,通过后直接拿到正式offer,可以直接不参与秋招回家躺平。

就算不能拿到最后的留用offer,我们仍然可以将实习经历写在简历上,如果有一段中大厂的实习,那我祝贺你,你的秋招已经成功一半了。

如果你不能拿到暑期实习的offer,请不要沮丧,因为这才是绝大部分人的情况,请你不断的充实自己,不要停下学习的脚步,因为秋招马上就会到来。

其次是秋招和春招,这个没有什么好说的,大家做好打持久战的准备,建议大家可以海投,在面试中不断复盘,一定会收获自己满意的offer。

很多同学存在信息滞后的问题,不知道那些企业可以投、何时投,导致错失了很多机会,这里我提供两个渠道给大家,基本覆盖小中大厂的招聘信息:

  • 校招薪水、校招优选公众号:关注它们你就能掌握绝大部分的招聘信息
  • 牛客网:集招聘信息、面试题目、吐槽于一体的应用,非常推荐

4、碎碎念

可能一直有同学会疑问,普通学校真能通过大厂的简历筛选吗?能拿到面试机会吗?

答案是能的,在我投递暑期实习的时候,没有任何知名竞赛,只有一两个增删改查用来填充简历的项目,但是在大家听过的大厂里,例如腾讯阿里美团京东,我都拿到了面试机会。

最深刻的是蘑菇街,因为当时我在网上看到很多985的学生都在吐槽简历直接挂,没想到自己竟然拿到面试机会,而在面试的过程中我也没有收到任何的学校歧视,面试也都是一些基础问题。

反倒是一些小厂幺蛾子很多,各种学历歧视,要求你直接能造火箭,比如很清楚的记得一个面试官,全程低着头发呆,你回答问题就不停杠你,这都不会?就你还出来面试?都不知道你的学校是怎么通过简历筛选的?

当然这种面试官只是少数,大家遇到了也不必放在心上。有时候面试失败,不一定是自己的能力问题,与面试状态、面试官契合度都息息相关

你可能感兴趣的:(经验分享,面试,mysql,java)