0%

方法论

一、微服务架构

1.一组小的服务

2.独立的进程

3.轻量级通信

4.基于业务能力

5.独立部署

6.无集中式管理

二、微服务的利弊

1.利:

1)强模块化边界

2)可独立部署

3)技术多样性

2.弊:

1)分布式复杂性

2)最终一致性

3)运维复杂性

4)测试复杂性

阅读全文 »

Spring IOC

  • IOC:控制反转,传统使用对象的时候,对象时由使用者控制的,有了Spring之后,可以将整个对象交给容器来帮我们进行管理

  • DI:依赖注入,将对象的属性注入到具体的对象中,通过@Autowired、@Resource、populateBean方法来完成注入

  • 容器:负责存储对象,使用map结构存储对象,在Spring中存储对象的时候一般有三级缓存:

    SingletonObjects存放完整对象、earlySingtonObjects存放半成品对象,SingletonFactory用来存放lambda表达式和对象名称的映射,整个bean的生命周期,从创建到使用到销毁,各个环节都是容器帮我们控制的。

  • Spring中所有bean都是通过反射生成的,constructor,newInstance,在整个流程中还包含很多扩展点,比如有两个非常重要的接口,BeanFactoryProcessor,BeanPostProcessor,用来实现扩展功能,aop就是在ioc基础之上的一个扩展实现,是通过BeanPostProcessor实现的,Ioc中除了创建对象之后还有一个重点的点就是填充属性

阅读全文 »

SpringBoot

Springboot是Spring框架的脚手架,以达到快速构建项目,预置第三方配置,开箱即用的目的。

Springboot两大核心:

  • Spring boot如何实现自动化配置(简化配置核心)

    • 基于configuration、EnableXXX、Condition
  • spring-boot-starter

阅读全文 »

SpringMVC的工作原理

SpringMVC启动流程

  1. Tomcat启动
  2. 解析web.xml listener 创建Spring容器(父容器) 存入servletContext
  3. DispatcherServlet实例化
  4. DispatcherServlet对象.init() 创建Spring容器(子容器) wac.setParent(parent) 完成父子关系绑定
  5. 接收请求

mvc-context-hierarchy

工作流程

1.用户发送请求至前端控制器DispatcherServlet

2.DispatcherServlet收到请求对URL进行解析,调用HandlerMapping处理器映射器

3.处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器,一并返回给DispatcherServlet

4.DispatcherServlet调用HandlerAdapter处理器适配器

5.HandlerAdapter经过适配调用具体的处理器(Controller)

6.Controller执行完成返回ModelAndView

7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9.ViewReslover解析后返回具体View

10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)

11.DispatcherServlet响应用户

阅读全文 »

AOP

概念

AOP,Aspect Oriented Programming,面向切面编程

AOP的理念:将分散在各个业务逻辑代码中相同的代码通过横向切面的方式,抽取到一个独立的模块中

SpringAOP底层原理就是动态代理

代理的意义:增强对象的行为,使用动态代理实质上就是调用时拦截对象方法对方法进行改造、增强

Spring AOP使用纯JAVA实现,它不需要专门的编译过程,也不需要特殊的类装载器,它在运行期通过代理方式向目标织入增强代码

阅读全文 »

锁的分类

  • 阻塞性
    • 自旋锁
    • 阻塞锁
  • 排他性
    • 共享锁(读锁)
    • 排他锁
  • 可重入锁
  • 公平性
    • 公平锁
    • 非公平锁
  • 中断性
    • 可中断锁
    • 不可中断锁
阅读全文 »

HashMap面试题

HashMap的数据结构?

  • JDK 1.7的数据结构是

    1
    数组 + 链表
  • JDK 1.8的数据结构是

    1
    数组 + 链表 + 红黑树

    其中,桶数组是用来存储数据元素,链表是用来解决冲突,红黑树是为了提高查询的效率。

  • 数据元素通过映射关系,也就是散列函数,映射到桶数组对应索引的位置

  • 如果发生冲突,从冲突的位置拉一个链表,插入冲突的元素

  • 如果链表长度>8&数组大小>=64,链表转为红黑树

  • 如果红黑树节点个数<6 ,转为链表

阅读全文 »

思想

枚举根节点,做可达性分析

  • 根节点
    类加载器、Thread、虚拟机栈的本地变量表、static 成员、常量引用、本地方法栈的变量等等

算法

引用计数法

JVM中没有使用

在创建对象和将对象赋值给某个变量时,将对象的引用计数+1,在移除对象和某个变量的引用关系时,将对象的运营计数-1,当对象的引用计数变为0时,递归地将该对象引用的子对象的引用计数器减1,并把该对象的内存块加入空闲链表中。在通过增减对象的引用计数器来判别活跃对象和非活跃对象,然后在计数器值为0的时候回收对象,这种做法可以在对象不活跃的时候立即回收它。

  • 优点

    • 可以立即回收垃圾。因为每个对象在被引用次数为0的时候,是立即就可以知道的。
    • 没有暂停时间。这个很容易理解,对象的回收根本不需要另外的GC线程专门去做,业务线程自己就搞定了。所以不需要stop the world,当然,在多线程的情况下,必要的同步和互斥操作还是需要的。
  • 缺点

    • 在每次赋值操作的时候都要做相当大的计算,尤其这里面还有递归调用。这是比较麻烦的。
    • 一个致命缺陷是循环引用,就是, objA引用了objB,objB也引用了objA,但是除此之外,再没有其他的地方引用这两个对象了,这两个对象的引用计数就都是1。这种情况下,这两个对象是不能被回收的。
阅读全文 »

参数调优

  • -Xms堆初始值

    默认值:物理内存的1/64(<1GB)

  • -Xmx

    堆最大值,默认值:物理内存的1/4(<1GB)

  • -Xmn

    新生代堆最大可用值,一般设置为整个堆的1/3-1/4

    新生代大小官网推荐的大小是3/8, 如果设置太小,比如1/10会导致Minor GCMajor GC次数增多。

  • -XX+PrintGC

    每次处罚GC的时候打印相关日志

  • -XX:SurvivorRatio

    设置新生代中eden区和from/to空间的比例关系n/1

  • -XX:MaxTenuringThreshold=n

    其中 n 的大小为区间为 [0,15], 如果高于 15,JDK7 会默认 15,JDK 8 会启动报错

阅读全文 »

GC Roots

In Java, there are special objects called Garbage Collection Roots (GC roots). They serve as a root objects for Garbage Collection marking mechanism (see picture).

Classloaders, effectively - via other GC roots.

image

GC Root对象

  • java虚拟机栈引用对象

  • 方法区类的静态成员引用的对象static variables

  • 方法区常量引用的对象

  • java native方法栈中JNI引用对象JNI references

    image

    本地方法就是一个 java 调用非 java 代码的接口,该方法并非 Java 实现的,可能由 C 或 Python等其他语言实现的, Java 通过 JNI 来调用本地方法, 而本地方法是以库文件的形式存放的(在 WINDOWS 平台上是 DLL 文件形式,在 UNIX 机器上是 SO 文件形式)。通过调用本地的库文件的内部方法,使 JAVA 可以实现和本地机器的紧密联系,调用系统级的各接口方法

    当调用 Java 方法时,虚拟机会创建一个栈桢并压入 Java 栈,而当它调用的是本地方法时,虚拟机会保持 Java 栈不变,不会在 Java 栈祯中压入新的祯,虚拟机只是简单地动态连接并直接调用指定的本地方法。

  • synchronized锁引用对象

  • 类元

  • JMXBean

来源:

https://rumenz.com/rumenbiji/what-is-gc-roots.html

https://stackoverflow.com/questions/27186799/what-are-gc-roots-for-classes