本文介绍PostgreSQL
中如何管理用户和权限,这些是正确管理PostgreSQL
权限必备的前置知识。
Spring 源码剖析 - BeanDefinition
阅读提示:TL;DR。文章包含大量源码,阅读时长较长,认真阅读可能超过20分钟。
回想一下,Spring最最核心的功能,终究是一个容器,用于提供所谓的”Bean
“,并负责Bean
之间的联结。而我们又知道,Bean
有不同的Scope
,即作用范围,单例的、原型的、Session
的,或自定义的。Bean
还能够懒加载。因此,创建Bean
的时机可能是运行时的任何时候。Spring使用BeanDefinition
描述一个Bean
的name、类、scope等元数据,并在需要时候创建。创建过程自然也包括了自动注入的过程。
Spring 源码剖析 - ApplicationContext
Spring源码剖析 - ApplicationContext
前言
实话说,Spring虽火,但我的使用经验却不多。这和我的实际工作经历有一定关系,前几年初入软件这行,项目使用Struts1,第一次使用Spring,还是在同时期的外快项目,非常表面。换公司后直接转向Vertx技术栈,近一年多虽然又转向Spring,但手上的Spring项目并不复杂,也没抽时间好好过一遍Spring。于是,Spring成了心病,你可以说它千万好坏,但首先得掌握它,这一点我做的不好,所以是时候研究一下它。
Spring说简单也简单,本质上就一个依赖注入、面向切面的框架;Spring MVC也只是针对Web应用场景的抽象,会定义Controller、Servier、Repository就会用;Spring Boot就是一个快捷启动方式。说复杂也复杂,Spring太大了,人们常说Spring上手容易,精通难,没错,但有点废话,我印象中没有几门技术精通起来是容易的。
Spring的大,一是体现在功能的全面,同一件事提供多种处理方式,对老手是利器,对新手就抓瞎;二是体现在源码上,Spring的源码很大,抽象层次很多:比如BeanFactory有ConfiurableBeanFactory、HierarchicalBeanFactory等抽象,ApplicationContext也有很多。基础知识涉及也较多:如果要了解Spring Web的工作配置原理,首先要了解Servlet规范;要了解AOP,首先要了解JDK动态代理、CGLib的区别,最好还了解一下ASM,因为Spring读取Bean时也有用到;要了解资源国际化,你首先要了解JDK提供的ResourceBundle;三也体现在手册上,Spring的手册写得很好,但是很长,有尝试过通过读手册来学习Spring,但手册大而全,没有重点,不会讲原理,用的时候翻翻还行,深入探究就不管用了。
Java 动态代理介绍
动态代理说大不大,说小不小,可深可浅。往深了说还是对JVM的了解程度要足够深入,时间篇幅有限,本文专注于回答如下问题,不作更深入的探讨。
- JDK和Cglib动态代理,分别怎么使用
- JDK动态代理的原理
- Cglib动态代理的原理
- 为什么JDK动态代理一定要实现接口,而Cglib就不用?
- JDK和Cglib,本质上有什么区别?
JMH - 性能调优介绍
站在巨人的肩膀上,JMH是一个工具,不打算深入研究它,只求能够正确使用,网上关于它的使用方法讲的还挺全面的,就直接看他们吧。
这篇文章包含基本使用方法、注意事项、IEAD插件、JMH可视化工具的介绍等:性能调优必备利器之 JMH
这篇文章包含较为深层次的解释:JAVA拾遗 — JMH与8个代码陷阱
当然最重要的还有官方例程:JMH给的38个例子
作为补充,我添加了所有注解的说明,还有自己使用中遇到的问题
序列化探索 - Protobuf
序列化探索 - Fastjson
开局一吐槽,Fastjson的文档,比Jackson还差。Jackson只是位置不明确,如果安下心来看看,还是能够理清楚的。而Fastjson是位置不明确,如果安下心来看看,还会发现,它的文档零零散散,中英文混杂,找不准主线在哪儿。我记得知乎上有个问题,fastjson这么快老外为啥还是热衷 jackson?,就这文档,让老外用个啥。
不过看还是要看的,毕竟它是目前主流序列化框架之一。老样子,我们还是从基本使用方法和原理分析两部分着手。
序列化探索 - Jackson
写这篇文章时,我一度陷入了纠结与不安,再次体会到了聚焦的重要性。Jackson看似简单,实则功能强大,这两天有些迷失,不知道要看些什么,要写些什么。但路得一步一步走,饭得一口一口吃,纵使它可供探索的点繁如星辰,我也得将焦点拉回,否则就叫失控。至于其它的点,以后再说。因此,本文将聚焦如下几点
- Jackson的能力
- 基本原理
- module工作原理
序列化探索 - Kotlin
文章不长,但代码演示居多,可选择性阅读
Kotlin以扩展包的形式提供了序列化能力,使得能够以“Kotlin方式”进行序列化。Kotlin设计目标,是提供一个序列化抽象,具体格式实现可用Json、CBOR、Protobuf、Properties、Yaml等进行替换。但就目前的进度,仅提供了对Json的稳定支持。其它格式都处于试验阶段。
因此,我们看Kotlin的序列化,主要看的就是数据对象与Json之间的序列化和反序列化。
序列化探索 - Java
序列化和反序列化,渗透在日常开发的方方面面。
所谓的序列化,就是将数据转换为能够在网络上传输、在数据库中存储、在文件中持久化的格式,这类格式很多,可以是字节流(如Java自带的序列化机制)、可以是JSON(系统之间传输用的较多)、可以是Protocol Buffers(压缩率高,GRPC有用)。反序列化,即序列化的反过程。
序列化这件事,不同的语言、库,提供了不同的使用方法,哪怕是对同一种序列化格式的支持也有差别。因此,深入了解常用的序列化技术,很有必要。不要再去记使用方法了,我们来看原理吧。