Java面试 32个核心必考点完全解析

面试必备:《Java 最常见 200+ 面试题全面解析》 春招在即,想让面试官在短短的几十分钟内就认可你的能力? 想在最快的时间内收获 Java 技术栈最核心的知识点? 想要更全面、更深入的了解 Java 技术? 这里能够给你想要的所有答案 阅读详情

//点关注,不迷路;持续更新Java架构相关技术及资讯!!!

课程预习

课程内容分为三个模块

基础模块:

  • 技术岗位与面试
  • 计算机基础
  • JVM原理
  • 多线程
  • 设计模式
  • 数据结构与算法

应用模块:

  • 常用工具集
  • 常用框架
  • 缓存
  • 队列
  • 数据库

综合模块:

  • 系统架构设计
  • 微服务架构
  • 容器化

换工作面临问题

能力不错,却总被忽略

  • 不知道简历怎么准备
    • 工作年限
    • 美观度
    • 多分简历
  • 不知道面试官考什么
    • 社交门户侧重于大规模并发场景的应用和架构能力
    • OTO行业侧重于综合能力考察
    • 金融更喜欢逻辑缜密,对高可用安全领域有经验的候选人
    • 校招更多对基础知识和逻辑思维方面的考察,以培养潜力考察为主
    • 初中级工程师则需要多关注知识的广度,基础知识的应用
    • 高级资深工程师需要深入理解基本原理,以综合能力考察为主
    • 没有get到面试官的考察意图。如:问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。
  • 不知道如何提升晋级?
    • 学习首先有个框架

课程特色

  • 全盘汇总:Java知识体现精细梳理
  • 特近实战:面试官亲自教你拿Offer
  • 潜规则:揭秘技术面试加分&潜规则
  • 权威性:拉勾40W技术岗位大数据支持

课时1:技术人职业发展路径

1.1 工程师发展路径

技术序列:技术攻坚、架构知识、专业知识

  • 工程师
  • 高级工程师
  • 资深工程师
  • 技术专家
  • 高级技术专家

1~3年内从工程师到高级工程师发展,夯实基础,重点提高工作基础能力,培养技术的深度和广度,对不同方向的新技术保持强烈的好奇心和学习心

3年以上资深工程师需要重点配音技术攻坚能力,疑难问题的排查,大型项目的工程拆分,技术品牌的塑造。具体工作包括,原理实现,注重框架能力的培养,大规模高并发场景,高可用可扩展措施和方案,业务的抽象和架构能力

管理序列:团队管理、项目管理、沟通协作

  • 工程师
  • 高级工程师
  • 技术经理
  • 技术总监
  • 高级技术总监

偏向于团队把控,需要让团队形成技术战斗力,利用一切资源让团队完成作战目标,做好团队内和跨团队沟通工作,在实际工作中这两种并没有明显的边界,例如做管理不表示远离架构设计,技术专家也不是单兵作战。这两个方向的区分点在于工作方向的侧重点不同。

面试诀窍示例:同过往的经验来看,我对项目的整体规划、管理、推进比较感兴趣,在任务协调沟通方面也有过比较突出的表现,所以我的职业规划是成为一名职业的技术经理,以管理方向为发展目标。

1.2 常见技术岗位划分

1.3 面试岗位选择

公司&团队

  • 大公司核心业务(首选)
  • 小公司核心业务(1~3年)
  • 大公司边缘业务(镀金)
  • 小公司边缘业务(尽量不选)

岗位匹配度

匹配度与发展方向相吻合

1.4 常见面试流程

  • 前置面试
    • 电话面试
    • 笔试
    • 上机编程
  • 技术一面
    • 纯技术面(首选算法,例如排序、)
    • 偏重于基础与实战能力
    • 面试官是未来的同组同事
  • 技术二面
    • 纯技术面(项目能力、架构能力)
    • 偏重算法、技术深度
    • 面试官是未来直属leader
  • 技术三面
    • 半技术面(架构能力、技术敏感度、职业规划)
    • 架构能力与发展潜力
    • 面试官是部门技术leader
  • HR面
    • 非技术面
    • 个人发展规划
    • 价值观与薪资
  • 各级领导
    • 一般非技术面
    • 没有原则性问题能都通过

1.5 面试前的准备工作

能力、心态、沟通

  • 了解应试公司及岗位信息
  • 系统复习基础知识
  • 对原公司负责的项目进行梳理总结
  • 学习典型架构案例
  • 阅读常考考点源码
  • 针对性准备加分项

提前准备一份自我介绍,自己的技术特长和职业优势

避免冷场,对于回答不上来的问题,提供解题思路,或者询问面试官是否可以换一个问题

注意细节,坐姿、表情、观察面试官反应

1.6 面试考察点

硬技能

  • 基础知识
  • 项目经验
  • 架构能力
  • 应用能力

软实力

  • 逻辑思维
  • 沟通协作
  • 管理推进
  • 学习思考
  • 培养潜力

1.7 四类硬技能

基础知识

  • 计算机基础
    • 网络
    • 操作系统
    • 数据结构
    • 算法
  • Java
    • JVM
    • 语言特性
    • 多线程

项目经验

  • 项目描述
  • 项目难点
  • 项目问题
  • 项目改进

应用知识

  • 常用工具
    • 排查类
    • 协作类
    • 保障类
    • 系统类
  • 常用框架
    • Spring
    • Netty
    • Dubbo
    • Motan
    • Mybatis
  • 队列
  • 数据库
  • 缓存

架构能力

微服务架构

  • Docker
  • ZK
  • SC
  • KBs

课时2:计算机与网络基础

2.1 知识点汇总

2.1.1操作系统(加粗为重点)

进程与线程

  • 区别联系:进程是资源分配的最小单位,线程是程序执行的最小单位;进程使用独立的数据空间,线程共享进程的数据空间
  • 线程调度:时间片轮转调度、先来先服务调度、优先级调度、多级反馈队列调度、高响应比优先调度
  • 线程切换步骤:线程的上下文切换、线程切换的代价
  • Linux下的IPC(进程间通讯)
    • Pipe
    • MessageQueue
    • 共享内存
    • UnixSocket
    • Signal
    • Semaphore
  • 协程

Linux常用命令

  • awk
  • top
  • netstat
  • grep
  • less
  • tail

死锁

内存分页管理于Swap

任务队列于CPU Load

扩展知识点

  • 内存屏障
  • 指令乱序
  • 分支预测
  • CPU亲和性(affinity)
  • Netfilter于iptables

2.1.2 网络知识(加粗为重点)

4/7层网络模型

TCP协议

  • 建立链接三次握手
  • 关闭链接四次握手
  • 报文状态标志与链接状态
  • Nagel算法与ACK延迟
  • Keepalive
  • 滑动窗口与流量控制

UDP

  • 非链接
  • 非可靠传输
  • 效率高

HTTP

  • 协议
    • Method
    • Header
    • Cookie
  • UrlEncode
  • 状态码
  • HTTPS
  • HTTP2
  • 多路复用
  • Stream
  • 流量控制
  • 服务端推送
  • 头部压缩

QUIC(基于UDP,但是提供了基于UDP的可靠性保障)

  • 避免前序抱阻塞(HOL阻塞)
  • 零RTT建联
  • FEC前向纠错

2.2 TCP详解

TCP特点

  • 基于链接(点对点)
  • 双工通信
  • 可靠传输
  • 拥塞控制
  • 基于字节流而非报文(保证数据的可靠性和完整性)

TCP实现细节

  • 8种报文状态
  • 滑动窗口机制
  • KeepAlive
  • Bagel算法

2.3 设计模式详解

主要考察两点

  • 设计模式的实现

  • 设计模式的使用场景(用来解决什么问题)

    • 单例模式
    • 工厂模式
    • 代理模式
    • 构造者模式
    • 责任链模式
    • 适配器模式
    • 观察者模式
    • 其他模式

2.3.1 单例模式线程安全实现

  • 静态初始化(饿汉式)
  • 双重检查(懒汉式)
  • 单例注册表

2.3.2 常用设计模式与应用场景

  • 工厂模式:Spring如何创建Bean
  • 代理模式:Motan服务的动态代理
  • 责任链模式:Netty消息处理的方式
  • 适配器模式:Slf4J如何支持Log4J
  • 观察者模式:GRPC是如何支持流式请求的
  • 构造者模式:PB序列化中的Builder

2.4 Java基础知识详解

JUC

  • ConcurrentXXX
  • AtomicXXX
  • Executor
  • Caller&Future
  • Queue
  • Locks

版本差异新特性
动态代理与反射
数据类型

  • 空间占用
  • 基本数据结构
  • 自动转型与强制转型
  • 封箱与拆箱

常用集合

  • HashMap
  • ConcurrentHashMap
  • ArrayList&LinkedList
  • HashSet
  • TreeMap

对象引用

  • 强引用
  • 弱引用
  • 软引用
  • 虚引用

异常机制
扩展知识点

  • SPI机制
  • 注解处理机制

2.4.1 Map——知识点详解

HashMap

  • 数组加链表的实现方式
  • 容量大小是2的幂次方
  • 并发读写会有什么风险

ConcurrentHashMap

  • 并发控制与分段锁思想
  • 1.8中的CAS自旋锁
  • 红黑树的启用条件

2.4.1 Java版本特性

V 1.8

  • Lambda表达式
  • Stream API
  • 方法引用
  • 接口默认方法
  • Metaspace替换PermGen

V 1.9-1.10

  • 模块系统
  • 默认G1回收器
  • 接口私有方法
  • 局部变量推断
  • Graal编译器

V 1.11

  • ZGC
  • 字符串API增强
  • 内建HTTP Client

2.5 考察点和加分项

面试考察点

  • 基本概念和基本原理
  • 实现方式与使用姿势
  • 经常用到的知识点
  • 实际应用中容易犯错的点
  • 与面试方向相关的知识点

加分项

  • 知识点与典型的业务场景关联
  • 以反例来描述实际场景中误用的危害
  • 与知识点相关的优化点(例如在介绍TCP的建联与断连时最好能够指出,出现timewait时可以调整系统参数加快链接的回收与复用)
  • 与知识点相关的最新技术趋势
  • 在了解的前提下,尽量增加回答内容深度

2.6 真题

真题汇总——1

  • 线程与进程的区别与联系
  • 从资源的占用,切换效率,通信方式回答
  • 简单介绍一下进程的切换过程
  • 主要考察线程上下文的切换代价,要回答切换会保持寄存器、栈等线程相关的现场,需要由用户态切换到内核态,最后知道可以通过vmstate命令查看上下文的切换状况
  • 你经常使用哪些Linux命令,主要用来解决什么问题?
  • 为什么TCP建联需要3次握手而断连需要4次
  • 为什么TCP关闭链接时需要TIME_WAIT状态,为什么要等2MSL?
  • 一次完整的HTTP请求过程是怎样的
  • DNS解析、TCP建联、HTTP请求、HTTP相应

真题汇总——2

  • HTTP2与HTTP的区别有哪些?
  • 在你的项目中你使用过哪些设计模式?主要用来解决什么问题?
  • Object中的equal和hashCode的作用分别是什么?
  • final、finally、finalize的区别与使用场景
  • 简单描述一下java的异常机制
  • 线上使用的哪个版本jdk,为什么使用这个版本(有什么特点)?

课时3:深入浅出JVM

3.1 知识点汇总

内存模型

  • 程序计数器
  • 方法区
  • 堆
  • 栈
  • 本地方法栈

类加载器

  • 双亲委派机制
  • Boostrap类加载器
  • Extension类加载器
  • System类加载器
  • 自定义类加载器

GC

  • 分代回收
    • 老年代
    • 年轻代
    • 持久代
  • 回收器实现
    • 穿行回收器
    • 并行回收器
    • CMS
    • G1

性能调优

  • JVM参数
  • 性能分析工具
    • MAT
    • JMC
    • JStack
    • JStat

执行模式

  • 解释模式
  • 编译模式
  • 混合模式

编译器优化

  • 公共子表达式的消除
  • 指令重排
  • 内联
  • 逃逸分析
  • 方法逃逸
  • 线程逃逸
  • 栈上分配
  • 同步消除

3.2 JVM的内存模型

3.2.1 JVM内存模型

线程独占

  • 栈(存储局部变量表、操作栈、动态链接、方法出口等信息)
  • 本地方法栈(native方法)
  • 程序计数器

线程共享

  • 堆(堆所有线程共享,分代管理)
  • 方法区(类信息、常量、静态变量,jdk1.7中的永久代和jdk1.8中的metaspace都是方法区的一种实现)

面试回答要点:

  • 各部分功能
  • 哪些是线程共享,哪些是线程独占

3.2.2 JMM与内存可见性

Java内存模型,定义程序中变量的访问规则。

在多线程进行数据交互时,例如线程A给一个共享变量赋值后由线程B来读取这个值,线程A修改变量只修改在自己的工作内存区中,线程B是不可见的,只有从A的工作内存区写回到工作主内存,B在从主内存读取到自己的工作内存区才能进行进一步的操作。

由于指令重排序的存在,写和读的顺序可能会被打乱,因此JMM需要提供原子性、可见性、有序性的保证。

3.3 Java类加载机制详解

3.3.1 类的生命周期

加载:是文件到内存的过程,通过类的完全限定名查找此类字节码文件,并利用字节码文件创建一个Class对象;

验证:验证是堆文件类内容验证,目的在于当前类文件是否符合虚拟机的要求,不会危害到虚拟机安全,主要包括四种:文件格式验证、元数据验证、字节码、符号引用;

准备:准备阶段是进行内存分配,为类变量,也就是类中由static修饰的变量分配内存并设置初始值,初始值是0或null,而不是代码中设置的具体值,代码中设置的值在初始化阶段完成,另外也不包括final修饰的静态变量,因为final变量在编译时就已经分配;

解析:解析主要是解析字段、接口、方法,主要是将常量值中的符号引用替换为直接引用的过程,直接引用就是直接指向目标的指针或相对偏移量等;

初始化:最后是初始化,主要是完成静态块执行与静态变量的赋值,这是类加载最后阶段,若被加载类的父类没有初始化,则先对父类进行初始化。

只有对类使用是才会初始化,初始化的条件包括访问类的实例,访问类的静态方法和静态变量的时候,使用Class.forName()反射类的时候,或者某个子类被初始化的时候。

3.3.2 类加载器

BootStrap ClassLoader:启动类加载器加载JAVA_HOME/lib下的类

ExtClassLoader:扩展加载器加载JAVA_HOME/lib/ext下的类

AppClassLoader:应用加载器加载加载classpath指定目录下的类

除此之外,还可以自定义类加载器。

Java的类加载器使用双亲委派模式,双亲委派模型的工作过程是:

  • 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。
  • 每一个层次的类加载器都是如此。因此,所有的加载请求最终都应该传送到顶层的启动类加载器中。
  • 只有当父加载器反馈自己无法完成这个加载请求时(搜索范围中没有找到所需的类),子加载器才会尝试自己去加载。

很多人对“双亲”一词很困惑。这是翻译的锅,,,“双亲”只是“parents”的直译,实际上并不表示汉语中的父母双亲,而是一代一代很多parent,即parents。

双亲委派模式优势:

采用双亲委派模式的是好处是Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。

3.4 常用GC算法介绍

3.4.1 分代回收

分代管理主要是为了方便垃圾回收,这样做是基于两个事实:

  • 大部分对象很快都不在使用
  • 还有一部分不会立即无用,但也不会持续很长时间

大部分对象在Eden区中生成,Eden区满时,还存活的对象会在两个Suivivor区交替保存,达到一定次数后对象会晋升为老年代。

老年代用来存放从年轻代晋升而来的存活时间较长的对象。

永久代主要用来保存类信息等内容。

3.4.2 垃圾回收算法

  • 着色指针
  • 读屏障
  • 并发处理
  • 基于Region
  • 内存压缩(整理)

3.5 考察点和加分项

考察点

  • 深入理解JVM内存模型
  • 了解类加载机制
  • 了解内存可见性
  • 了解常用的GC算法实现和使用场景
  • 能够根据业务场景选择合适JVM参数与GC算法

加分项

  • 编译器优化
  • 问题排查经验与思路
  • JVM调优经验与调优思路
  • 了解最新的技术趋势(例如:ZGC、Grraalvm)

3.6 真题

  • 简述描述一下JVM的内存模型
  • 生命情况下会触发FullGC
  • Java类加载器由几种,关系是怎样的?
  • 双亲委派机制的加载流程是怎样的,有什么好处?
  • 1.8为什么用Metaspace替换掉PermGen?Metasapce保存在哪里?
  • 编译期会对指令做哪些优化?(简单描述编译器的指令重排)
  • 简单描述一下volatile可以解决什么问题?如何做到的?
  • 强制主内存读写同步以及防止指令重排序两点
  • 简单描述一下GC的分代回收
  • G1垃圾回收算法与CMS的区别有哪些?
  • 对象引用有哪几种方式,有什么特点?
  • 强弱软虚在四种引用以及在GC中的处理方式
  • 使用过哪些JVM调试工具,主要分析哪些内容?

课时4:并发与多线程

4.1 知识点汇总

死锁

  • 竞争条件与临界区
  • 死锁检测与防止死锁
  • 残剩条件
    • 互斥
    • 请求并保持
    • 不可剥夺
    • 循环等待

线程通信

  • wait
  • notify
  • notifyAll

线程状态转换

  • NEW
  • RUNNABLE
  • BLOCKED
  • WAITING
  • TIMED_WAITING
  • TERMINATED

常用工具类(JUC)

  • ConcurrentXXX
  • AtomicXXX
  • Executor
  • Caller&Future
  • Queue
  • Locks

机制

  • ThreadLocal
  • Fork/Join
  • Volatile
  • Interrupt

同步与互斥

  • Synchronized
  • Lock
    • 锁类型
    • 锁实现
  • CAS
    • Unsafe
    • 原语

线程池

  • 使用场景
  • 原理与实现方式
  • 线程池实现

4.2 线程池详解

线程池参数介绍

核心线程数,默认情况下,核心线程会一直存活

最大线程数,决定线程池最多可以创建多少线程

线程的空闲时间,空闲时间的单位,当线程闲置超过空闲时间时就会被销毁

线程缓存队列

  • 有界队列
  • 无界队列
  • 同步队列

线程池工厂方法

线程池满时拒绝策略

  • 抛出异常
  • 丢弃
  • 提交失败时,由提交任务的线程直接执行任务
  • 丢弃最早提交的任务

4.3 JUC重点工具实现类

4.4 考察点和加分项

考察点

  • 理解线程的同步与互斥的原理(临界资源、理解区、自旋锁、偏向锁 、冲入锁、读写锁概念)
  • 掌握线程安全相关机制(CAS、Synchronized、ThreadLocal使用弱引用ThreadLocalMap)
  • 了解JUC工具的使用场景与实现原理
  • 熟悉线程池的原理、使用场景、常用配置
  • 理解线程的同步与异步、阻塞与非阻塞(同步与异步的区别是任务是否在同一个线程中执行的 ,阻塞与非阻塞的区别是异步执行任务时线程是不是会阻塞等待结构还是会继续等待后面的逻辑)

加分项

  • 结合实际项目经验或实际案例介绍原理
  • 解决多线程问题的排查思路与经验
  • 熟悉常用的线程分析工具与方法
  • 了解Java8堆JUC的增强
  • 了解Reactive异步编程思想

4.5 真题

  • 如何实现一个生产者与消费者模型?(锁、信号量、线程通信、阻塞队列等)
  • 如何理解线程的同步与异步、阻塞与非阻塞?
  • 线程池处理任务的流程是怎样的?
  • wait与sleep的由什么不同?
    • wait属于Object类,sleep属于Thread类;
    • wait会释放对象锁,而sleep不会;
    • wait需要在同步块中使用,sleep可以在任何地方使用;
    • sleep需要捕获异常、wait不需要。
  • Synchronized和ReentranLock有什么不同?
  • 读写锁适用于什么场景?ReentrantReadWriteLock是如何实现的?
  • 读写锁适合读并发多,写并发少的场景
  • 线程之间如何通信?
  • wait和notify机制、共享变量Synchronized
  • 保证线程安全的方法由哪些?
  • CAS、Synchronized、Lock、ThreadLocal
  • 如何尽可能提高多线程并发性能?
  • 尽量减少临界区范围、使用ThreadLocal、减少线程切换、使用读写锁或CopyOnWrite机制
  • ThreadLocal用来解决什么问题?ThreadLocal是如何实现的?
  • 重点回答ThreadLocak不是用来解决多线程共享变量的问题,而是线程数据隔离的问题
  • 死锁产生的条件?如何分析是否由线程死锁?
  • 在实际工作中遇到过什么样的并发问题,如何发现(排查)并解决的?

课时5:数据结构与算法

5.1 知识点汇总

5.1.1 数据结构

队列

栈

表

  • 数组
  • 单链表
  • 双链表
  • 循环链表
  • 散列表

图

  • 有向图
  • 无向图
  • 带权图

多叉树

  • B、B+树
  • 字典树

二叉树

  • 平衡二叉树
  • 红黑树
  • 哈夫曼树
  • 堆

5.1.2 算法

常用算法思路

  • 分治
  • 动态规划
  • 贪心
  • 回溯
  • 分支界定

复杂度

  • 时间复杂度
  • 空间复杂度

排序

  • 插入
    • 希尔
    • 直插
  • 交换
    • 冒泡
    • 快排
  • 选择
    • 简单选择
    • 堆
  • 归并
  • 基数

查找

  • 二分查找
  • 二叉排序树
  • B树
  • BloomFilter

字符串匹配

  • BF算法
  • BM算法
  • Sundady算法
  • KMP算法
  • Tire树

5.2 字符串匹配

字符串匹配问题
判断给定字符串中的括号是否匹配

解体思路:

  • 使用栈
  • 遇左括号入栈
  • 遇右括号出栈,判断出栈括号是否与右括号成对

5.3 考察点和加分项

考察点

  • 了解基本数据结构与特点
  • 表、栈、队列、树需要熟练掌握,深刻理解使用场景(例如红黑树适合搜索,B+树适合索引)
  • 了解常用的搜索、排序算法,及复杂度和稳定性
  • 了解常用的字符串处理算法
  • 能够分析算法实现的复杂度
  • 了解常用算法分类,解决问题的思路和解决哪类问题

加分项

  • 能够将数据结构与实际使用场景结合(介绍红黑树时结合TreeMap的实现,介绍B+树时结合MySQL的索引)
  • 不同算法在业务场景中的应用
  • 面对模糊的题目能沟通确认条件和边界
  • 书写算法代码前,先讲一下解题思路
  • 能够发现解答中的一些问题,给出改进的思路

5.4 真题

题1、题2基础题,必须掌握

  • 各种排序算法实现和复杂度、稳定性
  • 二叉树的前、中、后序遍历
  • 翻转句子中单词的顺序
  • 用栈模拟队列(或用队列模拟栈)
  • 堆10亿个数进行排序,限制内存位1G
  • 去掉(或找出)两个数组中重复的数字
  • 将一颗二叉树转换成其镜像
  • 确定一个字符串中的括号是否匹配
  • 给定一个开始词,一个结束词,一个字典,如何找到从开始词到结束词的最短单词接龙路径
  • 如何查找两个二叉树节点的最近公共祖先

课时6:常用工具集

6.1 知识点汇总

团队协作

  • Ant
  • Maven
  • Gradle
  • Git
  • SVN

质量保证

  • Checkstyle
  • FindBugs
  • SonarQube

压测

  • JMeter
  • JMH
  • AB
  • LoadRunner

容器与代理(随着微服务的盛行,Envoy、OpenResty、Kong等API网关的使用也越来越普遍)

  • Tomcat
  • Jetty
  • Nginx
  • Envoy
  • OpenResty
  • Kong

CI/CD

  • Gitlab-CI
  • Jenkins
  • Travis

JVM相关

  • JMC(JFR)
  • jstack、jmap、jstat

系统分析

  • vmstat
  • iostat & iotop
  • ifstat & iftop
  • netstat
  • dstat
  • strace
  • GDB
  • lsof
  • tcpdump
  • traceroute

文档管理

  • JavaDoc
  • Swagger

网络工具

  • PostMan
  • WireShark(网络包分析工具)
  • Fiddler(只针对HTTP进行抓捕)
  • Charies

6.2 考察点和加分项

考察点

  • 了解常用JVM分析工具
  • 掌握Git的常用操作和工作流
  • 了解Linux系统下常用的分析工具

加分项

  • 能够主动出击体现知识广度(在描述项目问题主动引出工具)
  • 能够体现实战能力

6.6 真题

  • 排查JVM问题有哪些常用工具?
  • Git合并代码有那两种方法?有什么区别
  • Git与SVN有哪些差异?
  • 你所在的团队项目开发使用什么样工作流?有什么优点?

课时7:必会框架(上)——Spring全家桶

7.1 知识点汇总

Spring

  • Spring Framework
  • Spring Boot
  • Spring Data
  • Spring Cloud
    • Sleuth
    • Netflix
    • Config
    • Bus
    • Security
    • Struts

ORM

  • Hibernate
  • Mybatis
  • Netty

RPC

  • Motan
  • Bubbo
  • Grpc

其他框架

  • Jersey
  • RESTEasy
  • Shiro

7.2 Spring框架

机制与实现
AOP

  • 动态代理
  • 静态代理

PlaceHolder动态替换

  • PropertyPlaceholderConfigure
  • PropertySourcesPlaceholderConfigure

事务

  • 隔离级别

    • ISOLATION_DEFAULT
    • ISOLATION_READ_UNCOMMITTED
    • ISOLATION_READ_COMMITTED
    • ISOLATION_REPEATABLE_READ
    • ISOLATION_SERIALIZABLE
  • 传播行为

    • PROPAGATION_REQUIRED
    • PROPAGATION_SUPPORTS
    • PROPAGATION_MANDATORY
    • PROPAGATION_REQUIRED_NEW
    • PROPAGATION_NOT_SUPPORTED
    • PROPAGATION_NEVER
    • PROPAGATION_NESTED
  • 核心接口/类

    • ApplicationContext
    • BeanFactory
    • BeanWrapper
    • FactoryBean
  • scope

    • Singleton
    • Prototype
    • Request
    • Session
    • Global-session
    • Application
    • Websocket
  • 事件机制

    • ContextRefreshedEvent
    • ContextStatedEvent
    • ContextStoppedEvent
    • ContextClosedEvent
    • RequestHandledEvent

Spring应用

类型类

  • @Controller
  • @service
  • @Repository
  • @Component
  • @Configuration
  • @Bean

设置类

  • @Required
  • @Autowired && @Qualifier
  • @Scope

Web类

  • @RequestMapping && @GetMapping @ PostMapping
  • @PathVariable && @RequestParam
  • @RequestBody && @ResponseBody

功能类

  • @ImportResource
  • @ComponentScan
  • @EnableCaching && Cacheable
  • @Transactional
  • @Aspect && Poincut
  • @Scheduled

配置方式

  • XML
  • 注解
  • API

自动装配

  • byType
  • byName
  • constructor
  • autodetect

课时8:必会框架(下)——RPC与ORM

8.1 考察点与加分项

考察点

  • 掌握Spring的IOC、AOP的概念与实现
  • 掌握Spring的Context创建流程和Bean的生命周期
  • 了解Spring常用注解的作用与使用方式
  • 了解SpringBoot的相关知识点
  • 掌握Netty的线程处理模型
  • 知道常用RPC框架的特点
  • 了解Mybatis、Hibernate的实现原理

加分项

  • 阅读过框架源码,了解实现细节及思路
  • 除了会应用,还能够理解理念
  • 了解最新实现或方向
  • 有实际优化经验,例如Nett有性能调优

8.2 真题

  • SSH和SSM框架组合的区别是生命?
  • 能描述一些Spring Context初始化的整个流程吗?
  • 简单介绍一些Bean的生命周期及作用域
  • Spring配置中的placeholder占位符是如何替换的?有什么办法可以实现自定义的配置替换?
  • 要答出通过beanFactoryPostProfessal后置处理器进行的替换,如果要自定义处理,可以扩展PropertyPlaceHolderConfigure或者PropertySourcePlaceHolderConfigure来实现
  • SpringMVC的工作流程是怎样的?
  • Spring如何解决循环依赖?
  • 从构造器循环依赖和setter循环依赖两方面来回答
    Bean的构造方法、@PostConstruct注解、InitializingBean、init-method的执行顺序是怎样的?
  • 说说Netty中有哪些重要的对象,它们之间的关系是什么?
  • RPC与HTTP的区别是什么,什么场景适合选用RPC,什么场景适合使用HTTP?
  • 在使用方式方面,HTTP使用Client,RPC通过动态代理;从请求模型看,HTTP一般会经过DNS解析,4/7层代理等中间环节,而RPC是点对点直连;从服务治理能力来看,RPC提供丰富的服务治理功能,例如熔断 、负载均衡,HTTP对跨语言处理比较方便
  • RPC的交互流程是怎样的?
  • 请介绍一下Mybatis的缓存机制
  • Mybatis如何配置动态SQL?有哪些动态SQL标签?

课时9:缓存

9.1 考察点和加分项

考察点

  • 了解缓存的使用场景,不同类型缓存的使用方式
  • 掌握MC和Redis的常用命令
  • 了解MC的Redis在内存中的存储结构
    • 了解MC和Redis的数据失效方式和剔除策略
  • 了解Redis的持久化、主从同步与cluster部署的原理

加分项

  • 结合使用场景来介绍缓存的使用
  • 有过分布式缓存设计和应用经验
  • 了解缓存使用中可能产生的问题
  • 知道Redis的典型应用场景
  • 知道Redis的新特性

9.2 真题

  • Redis和Memcache有什么区别?该如何选用
  • 你用到过哪些Redis的数据结构?用在什么场景下?
  • Redis有哪些持久化方式,分别是什么?
  • Redis的过期机制是怎样的?Redis有哪些淘汰策略
  • 如何保证Redis的高并发和高可用?
  • 如何使用Redis实现延时队列?如何使用Redis实现分布式锁?

写在最后

眼尖的朋友可能页面左上角有惊喜

//点关注,不迷路;持续更新Java架构相关技术及资讯!!!

Java面试32大核心知识点全面解析 本文还有配套的精品资源,点击获取 简介:Java作为流行的面向对象编程语言,其面试中考察的知识点广泛且深入。掌握这32个面试必考点对于Java程序员的专业技能提升和面试成功至关重要。本专题将深入解析每个考点,包括面向对象基本概念、数据类型、变量运算符、流程控制、方法、数组、字符串、异常处理、集合框架、泛型、接口与抽象类、内部类、多线程、IO流、NIO、网络编程、反射、注解、... 阅读详情

相关推荐

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

睡觉不打呼噜的博客 1564

Java面试题(Java基础常⻅知识&⾯试题总结) 上

Java面试题(Java基础常⻅知识&⾯试题总结) 上

温涛的博客 211

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2663

【本人秃顶程序员】Java面试 32个核心必考点完全解析

←←←←←←←←←←←← 快!点关注 课程预习 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 常用框架 缓存 队列 数据库 综合模块: 系统架构设计 微服务架构 容器化 换工作面临问题 能力不错,却总被忽略 不知道简历怎么准备 工作年限 美观度 多分简历 不知道面试官考什么 社交门户侧重于...

weixin_34408717的博客 639

NVIDIA B300 vs B200:详细解析与性能对决

详细解析 NVIDIA B300 整机)的性能,并与前代的 B200 进行对比。它不仅在核心计算能力(FP8)上实现了飞跃,更重要的是通过革命性的第二代 Transformer Engine 和第五代 NVLink 技术,彻底重塑了大规模 AI 模型训练和推理的效率与规模上限。其显存容量和带宽的巨大提升也为处理超大型模型和数据提供了坚实基础。与 B200 相比,B300 是一次全面的、代际性的性能跃升,特别适合那些需要处理最前沿、最复杂 AI 和科学计算任务的用户和组织。

2401_89353317的博客 3056

Qt中常见的面试题总结

基于Qt开发的一些常用面试题

一名热爱编程的程序员 8493

耗时两个月总结了全网最全的Java面试高频考点,看完offer拿到手软

作为一个经历过很多面试的求职者,也是一个面试过很多求职者的面试官,深知Java基础、核心原理的重要性,其重要性甚至超过你的技术能力。我这里不是宣扬技术能力不重要,技术能力是企业的第一生产力,是老板雇用你的价值所在。但是作为面试者要清楚,你口若悬河介绍自己曾经用过的某工具的时候,面试官未必有共鸣,因为他可能对该工具根本就不熟悉——尤其是你供职的上一家公司和现在应聘的这家公司处于不同领域背景的情况下。但是如果你对于Java核心的东西回答得不好,那么面试官就有足够的理由认为你不行。

m0_73311735的博客 153

四足机械臂避坑指南:从URDF配置到逆运动学控制的完整流程

本文为四足机械臂(Loco-Manipulation)系统开发提供了一份详实的实战避坑指南。文章深入剖析了从URDF模型配置、核心控制循环设计到逆运动学(IK)求解与奖励函数构建的完整流程,重点讲解了如何避免关节命名错误、惯性参数设置不当、IK求解不稳定等常见陷阱,并强调了利用collision_bbox等可视化工具进行高效调试的方法,旨在帮助工程师构建稳定、高效的四足机械臂控制系统。

weixin_42509507的博客 192

二.java变量与运算符常见练习题与面试题总结

标识符的命名规则需要注意哪几点?基本数据类型有哪几类?包含String吗?写出基本数据类型自动转化的流程图整型默认的是什么类型,浮点型(实数型)默认的是什么类型?对于包名,类名接口名,变量名和函数名,常量名我们习惯如何格式来命名?定义一个变量需要注意什么?强制类型转化可能出现的问题答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节, 所以放一个中文是没问题的定义float f=3.4;是否正确? 答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(

2201_75392319的博客 561

海上风电经柔性直流送出系统的阻抗建模与稳定性分析

摘要 本文针对海上风电经柔性直流送出系统的稳定性问题,提出了一种基于阻抗建模的分析方法。研究建立了直驱永磁同步发电机(PMSG)的序阻抗解析模型和模块化多电平换流器(MMC)的交流侧小信号阻抗模型,通过Matlab/Simulink平台实现了完整的仿真验证系统。采用谐波线性化原理和端口阻抗分析法,揭示了风电机组与柔直换流器之间的阻抗匹配特性对系统稳定性的影响规律。研究结果表明,控制参数设置会显著改变系统阻抗特性,进而影响稳定裕度。文中提出的阻抗建模方法为分析海上风电柔直送出系统的宽频振荡问题提供了有效工具,

huanghm88的专栏 232

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4368

注意Java 面试中的这些问题,面试通过率提高80%!

近年来我国信息化发展越来越快,使得全国各地的信息化建设如火如荼,出现了大量的信息化人才,尤其是Java软件人才的缺口。而我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握Java软件开发基础技能与知识的软件工程师。 因此越来越多的人开始进入Java行业。但很多Java程序员在面试时,通常会遇到以下几个问题(几个比较经典的...

xiaoxijing的博客 811

《UDS协议从入门到精通》系列——图解0x19:读取故障码信息

认识最核心的诊断服务“0x19”!!全网最强图解!一文搞懂所有常用子服务!

车载系统攻城狮 1万+

Java面试 32个核心必考点完全解析(下)

1. Spring 全家桶 2. PRC 与 ORM 3. 缓存 4. 消息队列 Kafka 5. MySQL调优 6. 架构演进

小天一直在路上 1942

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java面试 32个核心必考点完全解析(上)【附视频地址】

在准备面试过程中,发现一份不错的很全面的面试视频资源,它涵盖的Java高级工程师所需要掌握的绝大部分知识点,将它整理成文档形式,方便复习,以及后期学习的查漏补缺。

小天一直在路上 3108

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java面试换背景颜色_Java面试 32个核心必考点完全解析

目录课程预习1.1 课程内容分为三个模块1.2 换工作面临问题1.3 课程特色课时1:技术人职业发展路径1.1 工程师发展路径1.2 常见技术岗位划分1.3 面试岗位选择1.4 常见面试流程1.5 面试前的准备工作1.6 面试考察点1.7 四类硬技能课时2:计算机与网络基础2.1 知识点汇总2.1.1操作系统(加粗为重点)2.1.2 网络知识(加粗为重点)2.2 TCP详解2.2.1 三次握手建联...

weixin_39875419的博客 140

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

32个Java面试必考点

Java面试 32个核心必考点完全解析(上)【附视频地址】 Java面试 32个核心必考点完全解析(下) Java面试 32个核心必考点完全解析 拉勾网《32个Java面试必考点》学习笔记 32个java面试必考点-视频

weixin_43719015的博客 303

拉勾网《32个Java面试必考点》学习笔记之九------必会框架2️⃣一Netty与RPC与ORM

本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容 必会框架2️⃣Netty与RPC与ORM知识点汇总知识点详解NettyNetty线程模型RPC开源RPC框架介绍MybatisMybatis处理流程面试考察点加分项真题汇总 知识点汇...

格林奥斯汀的博客 1996

拉勾网《32个Java面试必考点》(一)技术人职业发展路径

前言 本系列主要记录拉勾网<32个Java面试必考点>的学习笔记,并加入自己的理解 本章为第一章<技术人职业发展路径> 课时1 一、目录 1)常见技术岗位划分 1.1)问题:请谈谈你对未来职业的规划? 注意: 这个问题不是你在面试前打一个附稿就完成任务了,而是你进入职场准备成为一名工程师时心里就应该有个谱了,到底是选择技术还是管理。 面试小诀窍(可能会加分): 从...

Mikasa的博客 933

拉勾网《32个Java面试必考点》学习笔记之四------JVM

本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容 JVMJVM内存模型栈本地方法栈程序计数器堆方法区JMM与内存可见性类加载与卸载加载过程加载机制-双亲委派模式分代回收回收算法考察点加分项真题汇总 JVM是Java运行基础,面试时一定...

格林奥斯汀的博客 5802
上一篇: Java程序员注意:这21个核心技术,你掌握了吗?
下一篇: 关于redis,学会这8点就够了
程序员摩西
博客等级 码龄7年 45粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值