Java后端秋招如何准备?

Java后端各科最全八股自用整理,获取方式见

一、秋招看的书籍

书籍/课程推荐程度备注
02-Java核心技术面试精讲-极客时间很不错的课程,条理化具备了。
88-高并发系统设计40问不错的课程,可以看看用来对分布式相关有个概念之前记错了,刚翻笔记发现这门课还不错
Java并发编程的艺术并发讲的还算可以,但是有些老; 这方面目前没找到别的比较好的资料实在读不下去可以试试老外的并发编程的实践。
MySQL必知必会复习SQL语句很好,可以很快过完
06-MySQL实战45讲一定要看,拿下这门课,MySQL面试官基本问不住你;很多时候你甚至可以拉着他分析有的章节难度大,建议反复看看。 但是join那里过过就行了,面试官不太问
Redis深度历险:核心原理和应用实践值得读,不是特别细节化,对Redis来说够用了要是最后Redis方面还是扛不住面试官,整整Redis设计与实现
剑指OFFER最起码刷一遍面试过程中很多原题的
深入理解Java虚拟机一定要看,有些章节我看了不止一遍但是机器码啥的那块就不用多看了
图解网络-小林严格来说不算书,一个博主的博客集合,值得一看我的HTTPS大框架最后就是这个书里看懂的
图解系统-小林过知识点比较好
advanced-java比JavaGuide之流强多了,分布式知识可以看一遍这个,比较系统化github上的开源项目
05-趣谈网络好课程,网络把这个拿下,网络方面别人问不住你后悔时间晚了点才知道这门课,那时候秋招都结束了

二、建议

  1. 小公司很多其实没必要面,爱乱问,问的东西没有任何参考意义。

  2. 阿里会抓着你问原理算法反而不看重。但是原理会抓着你问。很难混进去(当然有幸存者偏差,阿里应该也有不太行的部门)。

  3. 腾讯面试官很参差不齐,有技术大拿,但是我也碰见过一边打游戏一边面试我的人,很无聊。

  4. 美团喜欢问你原理的细节,有时候确实没考虑到,比如问你不可重复读和脏读的区别,大部分公司都是问你幻读和不可重复读的区别。

  5. 京东面试很迷,好多时候都回答上来了,但是最后挂了。最后的秋招的物流面试还行,没让你回答八股文,先给你一个简单的场景让你实现,然后一步一步复杂化。

  6. 博客写起来,但是不建议写流水账,也不建议写的和笔记一样,要有自己的思考。
    简历上附上自己的博客和github或gitee。github或gitee上个人主页的贡献度亮起来,因为好多公司很无聊,喜欢问你代码行是多少,这时候可以把这个截图给他。

  7. 附上几个比较厉害的公众号

  • 算法:宫水三叶(我后期刷每日一题好多不会都是看三叶姐姐题解)

  • 技术美团技术团队(强推,质量很高),架构师之路(时水时不水,topk问题就是他给我回答了),码农的荒岛求生,techGuide(经常复盘笔试题,明年不知道还会不会),小林coding,很多技术文章可以去掘金社区,知乎上很多高质量文章都是搬运掘金的

  • 小工具: codetop,一个网站,按公司部门面试频率分类算法题

  • 校招薪水:到时候会总结各公司的薪酬档次

  • 应届生职前菌:招聘信息大汇总

  • offershow小程序:可以查薪资

  • 各大公司作息:一个在线文档,能看到很多公司和部门的作息,但老被举报,试试WorkingTimes小程序

  • 微软To Do:代办清单啥的,用着特别爽,把面试不会的知识点放上去,一个一个消灭。

三、知识点篇

1.关于框架。

  • 这块并没有整的很明白,但是AOP、IOC这种高频还是得弄明白。

  • 其实这两个概念,特别是IOC已经很复杂了,一时半会不是那么能懂的,建议从知乎、掘金上慢慢看,一个概念一个概念解决(控制反转、依赖注入等),知乎上虽然有些大佬能起到醍醐灌顶的作用。

2.开源组件

  • ZooKeeper、NginxDub、dubbo之类是加分项,能会最好,但是学生时期并没有并发的场景,面试官也能理解,对这些要求并不高。
  • 建议把互联网常用的那些组件大概明白是用来做啥的就行。但是消息队列建议还是尽量去用用,上手容易,面试官会问。

3.设计模式

  • 这块我也没太整明白,特别是开闭原则这种,我只理解了一部分,有些公司倒是爱问这些,个人觉得有个大概了解就行。

4.基本知识

  • 操作系统和网络一定得拿下,面试官很爱问,但是除了常见高频问题外,有些内容很见功力,比如HTTPS,异步IO这些。

  • 至于组成原理啥的我觉得没必要复习,除了字节和滴滴有一次问我这些神奇问题外,别的家都没问过。

  • 很多面试官容易问的显而易见的知识点,其实有很多东西可以挖

  • 比如常见的TCP中的拥塞控制,我们书本中学得那一套即慢启动啥的叫RENO算法,业内谷歌还开源了一套BBR,可以有效降低传输时延,并保证较高的吞吐量。

5.HashMap和ConcurrentHashMap

  • 知识点很多,扩容时机,为什么用红黑树],为啥要求初始化是2的次方,然后比较偏的就是为啥默认大小是16,链表>8时变红黑树。源码里写过,是在泊松分布的二项分布下通过0.75的负载因子算出来的。
  • 可以看看我写的这两篇博客,都是干货👉👉集合(上)👉👉集合(下)

6.常见逻辑题的总结

  • 现在很多面试官喜欢整赛马、称小球这些题。

7.很多知识点比较复杂,可能得花很长时间,经常反复才能会,比如异步IO,除了多去掘金上看经典博客以外,可以翻翻经典的书,比如我真正理解finalize是看了《Java编程思想》中这里的章节。

  • 总之把握两个方面:如果一个知识点特别难懂,不是历史原因,就是你切入点的问题。 比如异步IO你要是从语言角度去切入,很难理解,从操作系统切入就很容易。

9.场景题是最难整的一种,不好说,但是一些经典的需要明白

  • 如:微信扫码登录、游戏排行榜啥的、分布式锁的两种实现(Redis实现和ZooKeeper实现的区别)。

下面是需要看的一些知识点的提纲,每一个都应该深入理解。最后达到可以自己不借助任何资料写出来这些提纲,面试说的时候就基本不会卡壳,也就可以自己延伸一些话题,把握面试的主动权。所以最重要的还是知识要成体系。

一开始学快速总览全局,之后深入每一个细节,最后还要抓住每一个模块的重点整理出自己的知识框架,就可以去面试了。

四、重点

1、JAVA

1.1 基础

  • 面向对象和面向过程的本质区别,SOLID原则,面向对象的特性。

  • 接口和抽象类的区别

  • 字符串常见的问题,以及不同版本中新建字符串时候的区别。

  • 包装类和基本类型的自动装包拆包,包装类的缓存,互相转换方法

  • final修饰变量,方法,类。transient作用。

  • Object的方法以及使用注意

  • 泛型实现原理、泛型擦除

  • 异常:继承体系,try catch finally 谁可以省略,return在某个地方是否会执行

  • 反射:原理(动态获取类或者对象的字段以及方法,可以获取private字段)

  • 动态代理:JDK和cglib的实现原理区别,性能对比,spring里面默认什么,如何切换。

  • 新特性:8 的lamda和Stream,方法引用;9 的String使用byte,接口的私有方法

1.2 容器

基本都是源码级别理解的要求,自己实现需要注意什么,各个培训机构和八股文其实讲烂了,多看几遍就记住了

List

  • ArrayList
  • LinkedList
  • 数组和List之间的相互转换,注意事项

Map

  • HashMap:底层结构,put流程(死循环原因),扩容流程(前面都是7和8对比说),几个参数(容量2的幂,refactor 0.75,8,6,64)默认值原因,线程安全(null的时候)
  • Collections.synchronizeMap(),HashTable(问题,锁粒度大)
  • ConcurrentHashMap:7分段锁原理,锁粒度;8的CAS+ synchronized以及所粒度;转移节点,协助扩容。count 的CAS并发计算,
  • TreeMap

Set

  • HashSet
  • TreeSet

Queue

  • BlockingQueue

2、并发编程

线程池基本是问的,再写个并发编程的代码

  • Thread:4个创建方式、中断、状态以及状态变化涉及的方法

  • 线程池:Excutors的缺点,参数含义,阻塞队列的选择,参数的选择,常见拒绝策略

  • ThreadLocal:实现源码,内存泄漏,子线程想共享怎么办

  • volatile:作用,实现原理,MESI,为什么有了MESI还要volatile(MESI 实现可见性–>store buffer + 失效队列 实现加速,但是带来不一致–>读写屏障解决不一致–>volatile手动设置屏障位置)。

  • synchronized:使用(方法和代码块使用的锁,阻塞,条件等待),字节码(方法和代码块的区别),JVM实现原理ObjectMonitor(数据结构,加锁流程),锁的升级流程

  • Lock

    • AQS:继承需要实现方法,如何实现可重入(state字段),如何实现公平和非公平,同步队列和条件队列(Condition)
    • 常见Lock的实现
    • 和synchronized的对比:使用上,实现原理上,效率上,使用场景选择
  • JMM:逻辑还是物理存在,导致的问题。

  • Serial:单线程下,即使CPU指令重排,看起来没有重排

  • happens-before:多线程下,即使不是按照顺序执行,看起来是顺序执行

3、JVM

也是基本会问的,最好看看课或者书,看课收益高见效快,B站多的是

类加载

  • 加载链接(验证准备解析)初始化,初始化时机,准备阶段做什么,类卸载的条件。
  • 双亲委派源码,常见类加载器,自定义类加载的方式
  • Tomcat如何打破,如何实现热加载

对象实例化

  • 加载,分配内存,设置对象头,执行init方法
  • 对象头的构成

JVM内存模型

  • 共享(堆,方法区),独享(虚拟机栈,本地方法栈,程序计数器)
  • JDK678中方法区的实现改进
  • 字符串常量池在6和7 的区别,intern() 的实现机制差别

GC理论

  • 为什么需要GC,为什么其他语言不需要GC
  • 垃圾定位:引用计数,可达性分析,GCroot是谁
  • 区域划分
  • 3个算法:使用区域,优缺点
  • 垃圾回收器:特点,流程,使用场景,不同JDK默认的垃圾回收器,三色标记(增量更新,原始快照)
  • 逃逸分析,标量替换

JVM参数调优

  • 常见参数含义,Xms,Xmx,Xmn,Xss,SurvivorRatio
  • 动态年龄判断机制
  • 空间担保机制

4、设计模式

具体设计模式可以看这两篇博客:
👉👉Java设计模式

👉👉秋招八股–设计模式

最简单的例子,在自己的项目里面使用策略模式替换了多种类型的时候 if else代码块,使得系统变得更加易扩展,也可以结合JDK源码里面和Spring源码里面涉及到的一些模式展开描述

  • 单例模式(可能会手写,最好掌握,理解每一个字段的作用)
    • 饿汉
    • 懒汉:
      • 双重检查 + volatile + synchronized
      • 静态内部类:可以防止反射攻击
      • 枚举类
  • 工厂模式
  • 策略模式
  • 适配器模式
    • FutureTask
  • 责任链模式
  • 模板方法
  • 监听者模式

5、MySQL

这个要理解好还真得看看书,视频和专栏都太简略了,我基本比较好评的书、视频、专栏都看了

  • SQL题目(基本刷题,看书没用):连表查询,分组查询,SQL关键字的执行顺序
  • 存储引擎
    • innodb和MyISAM的区别
  • 索引
    • 实现数据结构,为什么用这个
    • 优化理论
    • 联合索引??
  • 事务
    • 事务特性,AID实现C,如何实现
    • 隔离级别,如何实现
    • MVCC = readview + undolog
  • 日志
    • binlog:意义,参数设置
    • redolog:2阶段提交,redolog buffer/block
    • undolog:记录的内容
    • 三者区别
  • 高可用
    • 主从复制:三个线程执行流程。
  • InnoDB实现原理
    • buffer pool实现原理:内存结构,三个链表,描述数据,LRU冷热数据优化
    • 表空间,数据区组,数据区,页,页目录,槽,行记录
    • 行格式(变长字段,null字段,数据头,三个隐藏字段,真实数据
  • 慢查询
    • 定位
      • show processlist
      • 设置慢查询日志超时时间
    • 解决
      • 偶尔:buffer pool小,redolog buffer小,
      • 频繁:explain 看是否有索引,是否用对索引。
  • SQL完整流程
    • update:涉及到缓存页的读取,bufferpool 链表的修改,undolog的更新,数据页的修改,事务提交时日志的两阶段提交
    • select:涉及到缓存页的读取,bufferpool 链表的修改
  • BufferPool

6、Redis

最常见的就是数据结构的实现,使用场景以及持久化的一些原理,缓存问题

  • Redis 和 memcache 的对比
  • 数据结构:常见五个记住就好,以及一些简单的命令
    • 各自的实现编码的方式
    • sds的改进,和c、java对比,
    • 跳表的实现,
    • 字典和跳表为什么结合使用,zset分别使用key以及分数查询时候的时间复杂度,实现原理
    • 为什么不使用红黑树或者B+树而使用跳表
  • 应用场景
  • 持久化
    • aof
    • rdb
    • 混合持久化
  • 事务
    • 自带的
    • lua脚本
  • 缓存问题以及常见解决方案
    • 缓存雪崩
    • 缓存击穿
    • 缓存穿透
  • 数据库和缓存不一致方案
    • 先改缓存后改数据
    • 先改数据库后改缓存
    • 先删缓存后改数据
    • 先改数据库后删缓存(cache aside)
  • 主从复制
    • 全量复制原理
    • 增量复制原理
  • 哨兵
    • 如何实现自动切换
    • raft 选哨兵的主
    • 客户端使用时候的注意事项
  • 集群
    • 实现原理
    • gossip 原理
  • 分布式锁

6、spring

培训机构最喜欢讲的,比较偏向社招,不要太沉迷,说的就是我

  • IOC 和 依赖注入的源码实现

  • AOP的源码实现

  • spring 的启动流程

  • 循环依赖的解决(二层缓存可以吗,一层呢)

  • 事务的实现原理

  • 事务的传播机制,隔离级别

  • Bean的生命周期,线程是否安全

  • spring的扩展点

  • springboot (下面的三个就基本够了)

    • 自动配置的原理
    • 启动的原理
    • starter的原理

7、rabbitMQ

  • rabbitMQ 和 rocketMQ 和 kafka的对比,使用场景
  • 常见问题:消息不丢,消息有序,消息不重,消息积压的解决方案
  • 实现原理(时间不够挑一个重点学,我学的rocket,因为用java实现的)
    • rocketMQ事务消息,半消息队列
    • 重试队列和死信队列
    • rocketMQ组件启动流程,心跳机制,拉取路由实际,负载均衡算法
    • commitlog,零拷贝(和kafka的区别),consumequeue,index file
    • rocket高可用,dledger。raft算法,主从同步,落盘机制

8、计算机网络

“小林coding”的电子书,应对普通研发岗绰绰有余

  • 四层七层模型分别作用
  • 应用层:http请求响应组成,常见字段,状态码,http 1、1.1、2、3的区别,https流程,
  • 传输层:TCP和UDP区别,TCP握手回收流程,状态变化,每一次消息丢失的补救措施,头部字段。UDP如何实现安全
  • 网络层:IP层
  • 数据链路层
  • URL回车整个流程
  • 网络安全:中间人攻击,CSRF跨站请求伪造,XSS跨站脚本攻击,SYN Flood攻击 ,DNS劫持,对应的解决办法

9、操作系统

CPU缓存行,执行一个c程序的流程,虚拟内存,分页分段段页式,进程线程协程,PCB组成,进程间通信,线程间通信

Linux

  • 常见命令使用:top,iostat,lsof,ping,
  • 命令原理,kill原理,fork()函数原理
  • 僵尸进程,孤儿进程
  • 索引目录项,索引节点inode,数据块
  • 硬链接(ln -s , 同一个INODE,多个指向自己),软链接(不同INODE,文件里面放的文件指针)

五、非重点

Netty(花费了我大量时间,结果没人问,装逼失败,所以大家还是多关注面经里面问的比较主流的东西吧)

  • reactor + 多路复用
  • 零拷贝的几个实现方式,netty的具体实现
  • 源码流程
  • netty 如何解决粘包拆包,断线重连,JDK的空轮询
  • ByteBuffer和ByteBuf的区别是什么

SpringMVC

  • 运行流程是什么
  • RequestMapping的原理是什么

Mybatis

  • 两个缓存的作用是什么
  • #$的区别
  • 设计模式

微服务

  • 为什么使用微服务,又是优点和缺点
  • 服务如何拆分

docker (字节做go的部门可能会问问)

  • 解释namespace
  • 解释cgroup

Git (没问过我)

maven (没问过我)

更多后端全部八股点击👉👉【闲鱼】https://m.tb.cn/h.5yHpgkY?tk=O8bhWpn1NBD CZ8908 「我在闲鱼发布了【京985计算机硕士自用后端八股文出售,不同于市面上的几块钱八】」
点击链接直接打开

Java后端各科最全八股自用整理,获取方式见


整理不易🚀🚀,关注和收藏后拿走📌📌欢迎留言🧐👋📣
欢迎专注我的公众号AdaCoding 和 Github:AdaCoding123
在这里插入图片描述

  • 31
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值