校招Java开发岗复习路线参考
背景:参加2021届秋招,无实习经历,6月开始刷题准备秋招,到国庆节结束。
offer:拼多多、华为、阿里巴巴、百度、美团、农行研发中心等。
最近帮实验室学弟梳理秋招知识点,理了下面的大纲,主要总结的是参加校招面试需要准备的内容,分享出来供没有复习方向的同学参考,大佬移步。具体的面试题可以参考牛客网上的面经,我就不在这里总结了。
专业课-计网
如果只是粗略的看,或者有考研基础的话,是不需要再看书的。计网虽然面试必问,但基本是套路问题,主要问tcp/ip相关,tcp三次握手四次挥手等问题。把面经题里的准备一下基本足够。
有时候会问到一些进阶问题,比如TCP如何处理粘包、如何处理重连、I/O多路复用技术(select/poll/epoll)等,面经里基本也总结到了的,这些问题在《UNIX网络编程》里都有提到,讲的比较透彻,可以看看。
专业课-数据结构
数据结构比较重要,主要在机试、手撕算法中考察到,以及语言里容器的实现原理,比如Java里的HashMap使用的Hash表,链表的实现等等。
专业课-操作系统
操作系统有必要看看书,主要看一下内存管理,进程管理,文件系统,这三部分比较重要,面试高频题。推荐两本书,《现代操作系统》、《UNIX环境高级编程》 ,现代操作系统讲概念,Unix环境高级编程讲到了unix的具体实现,理解起来更深刻。
专业课-数据库
数据库面试主要是考察Mysql数据库,很少会要求写sql语句。
推荐书:《Mysql技术内幕-Innodb引擎》,问的最多的是索引和事务两章,偶尔会问日志相关,这本书内容很多,挑我说的重点章节看。
Java基础-语法基础
看《Java核心基础卷一》就够了,完全足够,容器这一章,最好自己在ide里看一下源码实现,链表数组HashMap基本都是必问。
Java基础-多线程
并发编程属于必问知识点,主要考察点是:
volatile关键字的概念与实现。
可见性、禁止指令重排、原子性的概念与实现原理。
synchronized关键字概念和实现。
ReentrantLock底层实现(关于AQS的实现)。
乐观锁、悲观锁、互斥锁、共享锁、可重入锁、偏向锁、轻量级锁、CAS与自旋锁,这些锁的概念。
Java并发编程的相关类,Thread,Callable,Runnable这些,要有点印象。
推荐书籍:《Java并发编程的艺术》和《Java并发编程实战》。推荐先看前者,讲的比较通俗易懂。
Java进阶-Jvm
首先是jvm的总体构成,比如类加载器、内存管理(包括具体的堆区虚拟机栈、方法区等)、执行引擎等,这些部分的主要功能。
内存区域是重点,每个区域的具体作用,可以结合一段具体的Java代码分析理解。
内存区域还有一个重点就是垃圾回收相关,这个看看就行了,没多少内容。
类加载相关的就是类加载过程,背一背,类加载的双亲委派模型了解一下。还有一个对象的创建和对象存放。
Java内存模型
推荐书籍:《深入理解Java虚拟机》。
加分项-分布式中间件
首先就是缓存中间件redis,这个应该是必须要了解的,问的比较多的是redis的基础数据格式以及底层数据结构实现,常用指令,redis集群的几种方式,持久化方法。推荐书籍:《Redis设计与实现》。
集群管理中间件zookeeper,异步通讯框架netty。
消息中间件Kafka,推荐书籍《Kafka权威指南》
手撕代码
机试和面试基本都会涉及到算法题,大部分情况都是在牛客网的在线平台上编辑。
机试的算法题难度会高一些,可以在自己的IDE中调试运行。
面试的算法题难度会低一些,但一般都不允许跳转自己的IDE运行,所以调试会难一点。
练习方法:《剑指offer》、《程序员代码面试指南》、LeetCode。
LeetCode主要刷数据结构专题、公司专题等, 200-300道题就基本足够应付了。
项目
这个就要看自己的经历了,选择一两个自认为还不错的,主要是和面试官有话聊,最好是有一些特别的思考。
面试中面试官提出项目中存在的问题都要记录下来,面试完要思考一下答案。
总结:专业课(计算机网络,数据结构,操作系统,数据库) + Java基础(语法基础,多线程) + Java进阶(Jvm) + 手撕代码 + 加分项(分布式基础,中间件) + 实习and项目
#Java##学习路径#