《32个Java面试必考点》学习笔记之三------设计模式与Java语言特性

设计模式与Java语言特性
知识点汇总
知识点详解
常用设计模式
单例模式
工厂模式
代理模式
责任链模式
适配器模式
观察者模式
构造者模式
Java语言特性
Java基础常考点--Map
HashMap
ConcurrentHashMap
Java版本特性
1.8
1.9-1.10
1.11
面试考察点
加分项
真题汇总
知识点汇总

该内容需掌握主要两点

常用设计模式的实现
各设计模式的使用场景


image.png

常见集合类和Java并发工具包(JUC)是常见考点


image.png

知识点详解
常用设计模式
有单例模式,工厂模式,代理模式,构造者模式,责任链模式,适配器模式,观察者模式等.

在回答设计模式问题时,可结合实际业务场景,体现对设计模式的理解和应用能力.

单例模式
线程安全实现的常见三种方法:

1. 静态初始化(饿汉).不管是否使用都会创建
2. 双检锁(懒汉).单例变量必须要用volatile修饰.
3. 单例注册表.spring中bean的单例模式就是用该方法实现.

工厂模式
在实际业务中经常用到,也是面试的主要考察点.是创建不同类型实例常用的方式.

spring中的bean都是由不同工厂类创建的.

1
代理模式
在不适合或不能直接引用另一个对象的场景,可以用代理模式对被代理的队形进行访问行为的控制.Java的代理模式分为静态代理和动态代理,静态代理是指在编译时就创建好的代理类,例如在源代码中编写的类.动态代理指在JVM运行过程中动态创建的代理类,如JDK动态代理,CDLIB,javaasist等.

例如,在Mybatis中getMapper时会通过MapperProxyFactory及配置文件动态生成的Mapper代理对象,代理对象会拦截Mapper接口的方法调用,创建对应方法的MapperMethod类并执行execute方法,然后返回结果.

1
责任链模式
类似工厂流水线,其中的每个节点完成对对象的某一种处理.

Netty框架的处理消息的Pipeline就是采用的责任链模式.

1
适配器模式
类似于转接头,将两种不匹配的对象进行适配,也可以起到对两个不同的对象进行解耦的作用.

SLF4J可使项目与Log4、logback等具体日志实现框架进行解耦,其通过不同适配器与不同框架进行适配,完成日志功能的使用.

1
观察者模式
也可称为发布订阅模式,适用于一个对象某个行为需要触发一系列操作的场景.

GRPC中stream流式请求的处理.

1
构造者模式
适用于一个对象拥有很多复杂的属性,需要根据不同情况创建不同的具体对象.

创建Protocol Buffer对象时,需要用到Builder

1
Java语言特性
集合类
主要掌握如何实现.

动态代理与反射
是java语言的特色,需要掌握动态代理与反射的使用场景.

ORM框架中会大量使用代理类,PRC调用时使用反射机制调用实现类的方法.
1
数据类型
也是面试的常见问题.如每种数据类型占用多大空间,数据类型的自动转换与强制转换,基础数据类型与Wrapper数据类型的自动装箱与拆箱等.

对象引用
(可自行搜索)

Java基础常考点–Map
能考查到数据结构,java的基础实现以及对并发问题的处理思路的掌握程度.

HashMap
通过数组加链表实现.

数组中的元素为一个链表,通过计算存入对象的hashcode,确认存入位置,用链表解决散列冲突.链表的节点存入的是键值对.
1
填充因子的作用

Map扩容的rehash机制

容量是二的幂次方.

是为了方便按位与操作计算余数,比求模更快
1
多线程风险的原因

对线程put时,会在超过填充因子的情况下rehash.HashMap为避免尾部遍历,链表插入采用头插法,多线程场景下可能产生死循环.
1
ConcurrentHashMap
分段锁思想

      1.7中采用segment分段加锁,降低并发锁定程度.

1
CAS自旋锁

     1.8中采用CAS自旋锁(一种乐观锁实现模式)提高性能.但在并发度较高时,性能一般.

1
红黑树

      1.8引入红黑树解决hash冲突时的链表查找问题.在链表长度大于8且总容量大于64时启用.扩容后链表长度小于6时重新转为一般链表.(8,6,64为默认参数)

1
Java版本特性
1.8
* Lambda表达式
* StreamAPI
* 方法引用
* 接口默认方法
* Metaspace替换PremGen
1
2
3
4
5
1.9-1.10
* 模块系统
* 默认G1回收器
* 接口私有方法
* 局部变量判断
* Graal编译器
1
2
3
4
5
1.11
* ZGC
* 字符串API增强
* 内建HTTP Client
1
2
3
面试考察点
基本概念和基本原理
要求:正确清晰

  • 网络协议4/7层模型的概念

  • TCP协议流量控制的实现原理


  • 1
    2
    3
    实现方法和使用方式

  • HashMap在JDK1.8中的实现方式

  • 单例模式有哪几种实现方式,什么场景该使用静态方法实现,什么场景该使用双检锁实现


  • 1
    2
    3
    经常用到的知识点

  • 常用的Linux命令有哪些,用来解决什么样的问题


  • 1
    2
    实际应用中容易犯错的点

  • ==与equals区别是什么

  • 对象强引用使用不当会导致内存泄露,考察不同引用方式和作用的理解


  • 1
    2
    3
    与面试方向相关的知识点

  • 中间件:存储,网络相关的考察


  • 1
    2
    加分项
    知识点与典型的业务场景关联.

如,谈到设计模型时,可以讲XX框架在解决XX问题时使用了那种设计模式.
1
以反例来描述实际场景中误用的危害.

如,大量使用反射会影响性能.
1
与知识点相关的优化点.

如,讲到tcp建连和断连时,如遇到洪水攻击或大量TIME_WAIT时,可以调整系统参数预防.
1
与知识点相关的最新技术趋势.

如,讲到ConcurrentHashMap,可以介绍1.8的改进细节.
或,讲到HTTP时,能说出HTTP2和QUIC的特点和实现.
1
2
在了解的前提下,尽量增加回答内容深度.

如,讲到tcp的滑动窗口时,能讲到流量与拥塞控制,进一步能指出解决拥塞的不同算法.
1
ps.面试官可能会顺着细节追问,回答不上来会适得其反.

真题汇总
进程和线程的区别和联系

从资源占用,切换效率,通信方式等方面解答
1
简单介绍一下进程的切换过程

线程上下文的切换代价,要回答,切换会保存寄存器,栈等线程相关的现场,需要由用户态切换到内核态,可以用vmstat命令查看线程上下文的切换状况
1
你经常使用哪些Linux命令,主要用来解决哪些问题?

参考之前操作系统汇总中提到的命令
1
为什么TCP建连需要3次握手而断连需要4次?

参考之前内容
1
为什么TCP关闭链接时需要TIME_WAIT状态,为什么要等2MSL?

参考之前内容
1
一次完整的HTTP请求过程是怎样的?

DNS解析,TCP建连,HTTP请求,HTTP响应等.
1
HTTP2和HTTP的区别有哪些?

在你的项目中你使用过那些设计模式?主要用来解决哪些问题?

Object中的equals和hashcode的作用分别是什么?

final,finally,finalize的区别与使用场景

简单表述一下Java的异常机制

先上使用的那个版本jdk,为什么使用这个版本(有什么特色)?

原文链接:https://blog.csdn.net/werqerwer/article/details/88075114

你可能感兴趣的:(《32个Java面试必考点》学习笔记之三------设计模式与Java语言特性)