摘要:
动态代理是 Java 反射的一种使用场景,只要有一个接口,就能在运行时动态生成类型安全的字节码文件,可实现资源延迟加载(同传统代理模式的能力)、切面增强等功能,可以说是 Spring 的基石之一。 这篇文章主要介绍 Java 动态代理的使用,JDK 提供的与动态代理有关的类库等。 先看下方类图(细节 阅读全文
摘要:
MyBatis 的动态 SQL 功能可以帮助我们根据不同条件拼接 SQL 语句,并自动处理 SQL 语法,动态 SQL 功能通过 OGNL(Object-Graph Navigation Language) 表达式和以下几个标签实现,下方详细介绍。 首先列出本文涉及到的数据表 DDL、entity 阅读全文
摘要:
Redis 可以理解为一个大号的 Map,其中所有的数据都采用 key:value 的形式维护,在 Redis 中,一个 key 总是对应一个 value。其中 key 永远是字符串,而一般提到 Redis 的数据类型,指的是其存储的 value 的数据类型。下面介绍 Redis 常见的数据类型,并 阅读全文
摘要:
Class Class 类用于表示已被 JVM 加载的类型(为避免歧义,文中用 “Class 实例” 代指类型),它的实例是 Java 基础数据类型、已被 Java 加载的类和实例。枚举是特殊的类,注解是特殊的接口,数组的类型实际也是类。 获取 Class 对象 Class 类没有公共的构造方法,所 阅读全文
摘要:
此前面试遇到了单例问题,本以为已经背的滚瓜烂熟,没想到被问单例如何避免被反射和序列化破坏,虽然后来还是等到了通知,但还是复习一下单例的实现方式,并学习防止反射和序列化破坏的手段。 基本实现方式 其他相关资料中,最多的能数出八种单例实现方式,而实际上其中有些实现并不具备实际意义,在文中出现也仅是为了指 阅读全文
摘要:
运行时数据区是指对 JVM 运行过程中涉及到的内存根据功能、目的进行的划分,而内存模型可以理解为对内存进行存取操作的过程定义。总是有人望文生义的将前者描述为 “Java 内存模型”,最近在阅读《深入理解 Java 虚拟机》之后对二者加深了部分理解,于是写一篇相关内容的学习总结。 运行时数据区 《Ja 阅读全文
摘要:
除了使用阶段外,Spring 将 bean 的生命周期定义为实例化、属性填充、初始化和销毁四个阶段,并为每个阶段提供了多个拓展点用于自定义 bean 的创建过程。这篇文章介绍了 bean 的生命周期和其各个拓展点,通过图示生动的展示、并结合一个实例来演示全过程。 Spring 生命周期 flowch 阅读全文
摘要:
Linux 系统中查找文件的命令有 which、whereis、locate 和 find 等,本文对这四条命令进行简单的介绍、列举了一些简单的使用方式。 which 在 PATH 变量中定义的全部路径中查找可执行文件或脚本。 which 命令有两个重要参数: -all, -a 默认情况下,whic 阅读全文
摘要:
记录一下工作半年之后发现的现象和对应的思考。 项目最终一定会成为“屎山” 百分之八十的代码是特殊或异常情况处理 参数校验是一把双刃剑 项目最终一定会成为“屎山“ 大学毕业之前就知道程序员最头疼的事是维护老项目,尤其是代码质量很差的”屎山”。很幸运的是,工作后遇到的第一个项目就是维护一个屎山,这个项目 阅读全文
摘要:
最近在阿里云服务器上部署一个自己写的小 demo 时遇到一点问题,查看 Tomcat 日志后定位到问题出现在与数据库服务器交互的地方,执行 SQL 语句时会返回 指定列.指定名 不存在的错误。多方查证后发现原来 MySQL 的标识符大小写区分规则在 Unix 和 Windows 系统上是不同的。为了 阅读全文