SpringSecurity
SpringSecurity 绿色:认证用户的身份,检查当前请求是否有此过滤器需要的信息,如果有就尝试认证 蓝色:ExceptionTranslationFilter,捕获后面的类抛出来的异常,做相应的处理 最终到达FilterSecurityIntercepter:决定当前的请求能否访问后面的服务,依据用户的配置,如某个请求是否需要认证才能访问,如果是就看是否有认证信息, Spring Social 实现三方登陆 这是第六步,获取信息,所以继承AbstractOAuth2ApiBinding(其内有令牌和RestTemplet帮我们获取信息)
ThreadLocal
ThreadLocal使用场景 每个线程需要一个独享的变量(通常是工具类,典型需要使用了类有SimpleDataFormat和Random) 每个线程需要保存全局变量(如在拦截器中获取哦那个户的信息),可以让不同的方法直接使用,避免传递参数的麻烦 场景一,每个线程需要独享的对象 每个Thread内有自己的实例副本,不共享 见代码 场景二 避免传递参数 见代码 使用ThreadLocal有哪些好处 达到线程安全 不用加锁,执行效率高 更高效的节省内存,减小开销 免去传参的繁琐,降低代码耦和 ThreadLocal 原理 每个Thread会持有一个ThreadLocalMap(一对一关系) 一个ThreadLocalMap存储多个ThreadLocal对 主要方法介绍 T...
SpringBoot自动装配
SpringBoot 自动装配 SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。 自动配置原理1). SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration2)....
JUC知识点梳理
...
反射
反射Java反射机制是在运行状态中, 对于任何一个类,都能够知道这个类的所有属性和方法; 对于任何一个对象,都能够任意调用他的方法和属性; 这种动态获取信息和动态调用对象方法的功能就叫做反射机制。
内存模型
内存模型 Runtime Data Aera Method Area:是Java虚拟机规范中的概念,在HotSpot的实现中: JDK7及以前,HotSpot用永久带来实现方法区,存在jvm内存中,与堆连续的地址空间,GC和老年代一起。 JDK8及以后,HotSpot把很多东西放到了堆或者本地内存,而方法区则成为了元空间的实现,同时元空间不再与堆连续,而且是存在于本地内存(Native memory)。 JVM内存模型 线程私有:程序计数器,虚拟机栈,本地方法栈 线程共享:MetaSpace、Java堆 程序计数器(Program Counter Register) 是一块较小的内存空间,可以看做是当前线程所执行的字节码行号的指示器; 字节码解释器工作时,通过改变计数器的值选取下一条执行的字节码指令;(一些基本功能都需要依赖计数器来完成 如 分支 循环 跳转 异常处理 线程恢复...
常考题型
JVM三大性能调优参数 -Xms -Xmx...
GC
GC 垃圾回收机制判断对象是否为垃圾的算法引用计数算法 通过判断对象的引用数量来决定对象是否可回收 每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1 优点:执行效率高,程序执行受影响较小 缺点:无法监测出循环引用的情况,导致内存泄露 由于其缺点的存在,主流JVM基本不使用此方式。 可达性分析算法 通过判断对象的引用链是否可达来就决定对象是否可以被回收 对内存中的整个对象图进行遍历,从GC Root开始,回收器将所有访问到的对象标记为存活,完成遍历后不可达的对象会被作为垃圾对象而清除。 可以作为GC Root的对象 虚拟机栈中引用的对象(栈帧中的本地变量表) 方法区中的常量引用的对象 方法区中的类静态属性引用的对象 本地方法栈中JNI(Native方法)的引用对象 活跃线程的引用对象 垃圾回收算法标记-清除算法(Mark and...
ClassLoader
ClassLoader类从编译到执行的过程 编译器将源文件转化为字节码文件 ClassLoader将字节码转化为JVM中的Class<T>对象 JVM利用Class<T>对象实例化为T对象 ClassLoaderClassLoader在java中有着非常重要的作用,它主要工作在class装载的加载阶段,其主要作用是从外部系统获得class二进制数据流,它是java的核心组件,所有的class都是由ClassLoader进行加载的,ClassLoader负责通过将class文件里的二进制数据流装进系统,然后交给java虚拟机进行连接、初始化等操作。 ClassLoader的种类 BootStrapClassLoader:C++...
常见面试题
常见面试题Object的finalize()方法的作用是否与C++的析构函数作用相同finalize()方法垃圾回收器准备释放内存的时候,会先调用finalize()。 与C++的析构函数不同,析构函数调用确定,而它的是不确定的 当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。 方法执行随时可能被终止 给与对象最后一次重生的机会 对象不一定会被回收。 垃圾回收不是析构函数。 垃圾回收只与内存有关。 垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。 Java中的强引用,软引用,弱引用,虚引用有什么用强引用 最普遍的引用:Object obj = new...