08 2019 档案
摘要:概述 Java运行时区域中,程序计数器,虚拟机栈,本地方法栈三个区域随着线程的而生,随线程而死,这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收问题。而Java堆和方法区则不一样,一个接口的多个实现类需要的内存不一样,一个方法的多个分支需要的内存可能也不一眼,我们只有在运行期,才能知道会创
阅读全文
摘要:概述 前后端分离之后,因为HTTP本身是无状态的,Session就没法用了。项目采用jwt的方案后,请求的主要流程如下:用户登录成功之后,服务端会创建一个jwt的token(jwt的这个token中记录了当前的操作账号),并将这个token返回给前端,前端每次请求服务端的数据时,都会将令牌放入Hea
阅读全文
摘要:概述 前不久刚学会使用权限注解(),开始思索了一番。最开始猜测实现方式是注解@Aspect,具体实现方式类似如下所示(切面记录审计日志)。后来发现并非如此,所以特地分析一下源码。 权限注解的源码分析 这个类实现了 接口,当 读取所有的Bean配置信息后,这个类将扫描上下文,寻找所有的 (一个 是一个
阅读全文
摘要:概述 4A(认证Authentication、授权Authorization、账号Account、审计Audit)是现代任何IT系统中很基础但非常重要的部分,无论是传统管理信息系统还是互联网项目,出于保护业务数据和应用自身的安全,都会设计自己的登录和资源授权策略。最近项目中需要登录和权限相关的功能,
阅读全文
摘要:虚拟机日志 打印GC日志可以使用参数 XX:+PrintGC 如果需要更详细的信息,可以使用 XX:+PrintGCDetails 以上面的第一次GC进行分析,GC日志开头的“GC”,说明这次垃圾回收的停顿类型。一般还有Full GC (System.gc()) 和Full GC,前者说明是调用Sy
阅读全文
摘要:函数调用的过程 线程执行的基本行为是函数调用,每次函数调用的数据都是通过Java栈传递的。Java栈与数据结构上的栈有类似的含义,它是一块先进后出的数据结构,只支持入栈和出栈两种操作。Java栈的主要内容是栈帧。每次函数调用都会有一个对应的栈帧被压入Java栈,每次函数调用结束(无论是正常返回或者抛
阅读全文
摘要:常用但是容易忘记的命令 1. 查看java项目的进程 2. 根据进程查询端口 3. 根据端口查询进程 4. 详解 1. 几个基本符号及其含义 /dev/null 表示空设备文件 0 表示 标准输入 1 表示 标准输出 2 表示 标准错误 2. command a 2 a 与 command a 2
阅读全文
摘要:Java虚拟机定义了若干种程序运行期间会使用的运行时数据区域,其中一些会随着虚拟机启动而创建,随着虚拟机的退出而销毁。另外一些则是和线程一一对应,这些与线程对应的数据区域随着线程开始而创建,线程的结束而销毁。 PC寄存器 PC寄存器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,
阅读全文
摘要:定义 动态的给一个对象添加一些额外的职责。就功能来说,装饰模式相比生成子类更加灵活 使用场景 1. 装饰类和被装饰类都可以独立发展,不会耦合,它是继承关系的一个替代方案 2. 需要扩展一个类的功能,或者给一个类增加附加功能 3. 动态增加一个类的功能,再动态的撤销 4. 需要为一批兄弟类,进行改装或
阅读全文
摘要:定义 定义一组算法,将每个算法封装起来,并且它们之间可以互换 使用场景 1. 多个类只有在算法或者行为上不同的场景 2. 算法需要自由切换 实现方式 一般判断条件的代码,可以使用策略模式优化 策略的接口 策略的实现类 对外的入口 测试类 扩展与思考 1. 使用Spring情况下,可以不用自己创建 ,
阅读全文
摘要:定义 定义对象间的一对多的关系,使得每当一个对象的状态改变,则所有依赖与它的对象都会得到通知并被自动更新 使用场景 1. 观察者和被观察者是抽象耦合,利于扩展 2. 一个对象的改变将会导致一个或多个对象的改变,不清楚具体有多少对象以及这些被影响的对象是谁的情况 3. 如果有这样一个影响链的情况下也可
阅读全文
摘要:定义 将一个复杂对象的创建与它的表示(部件与装配细节)相分离,使得同样的创建过程可以创建不同的表示。 使用场景 1. 可以将装配细节封装起来,调用者不必知道具体的产品的内部结构和产生过程。 2. 多个部件,都装配到一个对象,不同的装配过程或者不同的装配顺序,产生不同的结果,可以使用该模式 实现方式
阅读全文
摘要:定义 为其他对象提供一种代理以控制这个对象的访问。 使用场景 1. 职责清晰,真实角色就是实现业务逻辑,不必关系其他非本职的工作。 2. 高扩展性,具体的角色随时变化,只要实现了接口,代理类都可以在不用改变的情况下使用。 实现方式 一个简单的RPC通信,运用了动态代理。详细的代码请参考 "自己实现R
阅读全文
摘要:定义 1. 简单工厂:由一个工厂对象决定创建出产品的实例。 2. 工厂方法:定义一个用于创建对象的接口,让使用者决定实例化哪一个类。工厂方法使一个类的实例化延迟到其使用者。 3. 抽象工厂:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体实现类。 使用场景 1. 简单工厂模式将对象的
阅读全文