铁锤的IT奇妙探险 Java Back-End Coder

复习大纲

2020-07-31


复习巩固近期所看知识点。

知识点巩固复习

AOP配置

  • 切面实现了跨多个应用对象逻辑的模块化;
  • AOP配置就是动态代理的典型应用;
  • AOP配置共有三种方式,基于API,基于注解,基于XML配置文件;
  • 基于API的配置方式需要定义拦截类实现相关接口,并实现相关拦截方法,在xml中配置拦截规则,使用bean和property标签;
  • 基于@Aspect注解,在对象类中添加要被拦截的方法,用@Aspect注解表明是切面类,用 @Pointcut注解表明切点(拦截规则),使用@Before@After等注解定义通知(拦截方法),xml配置中添加注解类;
  • 基于XML标签,配置拦截处理类,<aop:config><aop:pointcut>标签配置拦截规则,<aop:aspect>标签配置拦截方法;
  • 调用getBean()返回的是代理类的示例。

克隆

  • 深克隆和浅克隆的根本差别;
  • Arrays.copyOf()的原理;
  • 深克隆的三种实现方式,将父类和子类都实现克隆、字节流、JSON工具类;
  • 实现克隆需要实现Cloneable接口,重写clone()
  • 利用字节流要求对象可以被序列化,否则会抛异常,People p2 = (People) StreamClone.clone(p1)
  • 先调用toJson()、再调用fromJson()People p2 = gson.fromJson(gson.toJson(p1), People.class)

建造者模式

  • 包含四个角色:抽象建造者,具体建造者,产品角色,指挥者;
  • 抽象建造者主要有两种方法:创建复杂对象的组件,返回复杂对象;
  • 具体建造者实现或继承抽象建造者,包含各个部件的具体构造方法和对象返回;
  • 指挥者负责安排建造次序,将具体建造者作为参数传入指挥者的构造函数。

装饰着模式

  • 构件和装饰类;
  • 用煎饼的例子进行说明;
  • 四个角色的关系:具体构件extends抽象构件,抽象装饰类extends抽象构件,具体装饰类extends抽象装饰类,所以其余三个角色都是抽象构件的子类。

模板模式

  • 抽象方法,具体方法和钩子方法;
  • 各个子类都一致的部分,定义为父类的具体方法,不一致则定义为抽象方法;如不同子类准备什么样的课件,在不同子类中具体实现,钩子方法可以与步骤挂钩,以决定步骤是否运行,如是否需要编写课堂笔记。
  • 举例:HttpServlet即一套处理http请求的模板

单例模式

  • 饿汉式和懒汉式区别和优缺点;
  • DCL中为什么要double check?为什么要用volatile修饰Singleton对象?
  • 静态内部类和枚举方式线程安全的原理;

适配器模式

  • 对象适配器和类适配器的区别;
  • 角色有三个:目标抽象类,适配器类,适配者类三者的关系;
  • 电压适配器

ConcurrentHashMap

  • JDK7和JDK8的区别;三个方面:数据结构,并发能力,并发安全
  • put()和get()方法的原理和HashMap类似;

CopyOnWriteArrayList

  • 适用的场景是什么?
  • 原理:CopyOnWrite机制;
  • 缺点和底层数据结构;
  • add()set()get()三个方法的原理

SpringBoot

  • Spring、SpringBoot、SpringCloud的区别?
  • SpringBoot的启动流程

MySQL

  • 执行流程;
  • 如何选择数据库引擎?InnoDB:MyISAM:MEMORY

阻塞队列

  • 常用的阻塞队列有哪些?
  • 三组添加和移除方法;
  • LinkedBlockingQueueSynchronousQueueDelayedWorkQueuePriorityBlockingQueueArrayBlockingQueue
  • ArrayBlockingQueue安全并发的原理
  • 如何选择阻塞队列?

JUC

  • JUC原子类的优势;
  • 六大原子类;
  • Atomic*基本类型原子类的方法,问题和改进;
  • AtomicInteger和synchronized的区别?
  • countDownLatch的两个应用场景。

线程

  • 本质上说,线程只有两种实现方式;
  • RunnableCallable的区别?
  • 线程停止的正确方式;
  • 线程的六种状态如何相互转换?注意如何转换到BLOCKED
  • wait()和sleep()方法的异同;
  • 生产者消费者模式的三种实现;
  • 为什么使用while循环判断队列状态而不是用if?
  • Condition和wait()的关系

ThreadLocal

  • ThreadLocal不是用来解决资源共享的;
  • 关于static修饰符的两个注意点;
  • ThreadLocal和sychronized的区别?
  • 两个应用场景是什么?通过举例来进行表述;
  • 怎么设置,获取ThreadLocal变量;
  • Thread ThreadLocal ThreadLocalMap的关系;
  • get()set()的底层原理;
  • 内存泄漏问题。

Redis

  • 两种过期策略是?
  • 内存淘汰策略;
  • 分布式锁;
  • 实现消息队列;
  • 实现高可用的手段;
  • 三种数据持久化方式;
  • 什么是哨兵/主从模式?

Future

  • Future类的运作流程;
  • Future接口的五个方法;
  • get()执行时可能发生的情况;
  • cancel()方法可能的情况;
  • FutureTask的用法。

JMM

  • JMM的三大核心是什么?
  • Java的原子操作有哪些?
  • 什么叫可见性?
  • 主内存与工作内存的关系。

CAS

  • CAS的原理,用等价代码来解释;
  • CAS在ConcurrentHashMap和原子类中的应用;
  • CAS的缺点

AQS

  • 为什么需要AQS?用hr和面试官的例子说明;
  • AQS的三大核心部分;
  • state在不同工具类中所表示的不同含义;

Similar Posts

Comments