glmapper

glmapper

从程序的世界中全身而退

SpringBoot 系列-内嵌 Tomcat 的实现原理解析
对于一个 SpringBoot web 工程来说,一个主要的依赖标志就是有 spring-boot-starter-web 这个 starter ,spring-boot-starter-web 模块在 spring boot 中其实并没有代码存在,只是在 pom.xml 中携带了一些依赖,包括 web、webmvc、tomcat 等: 1234567891011121314151617181920212223242526<dependencies> <dependency> <groupId>org.springframework.bo...
ARK 插件基本规则及注意事项
SOFAARK 是一个轻量级的类隔离框架,其有两个基本的能力:解决依赖包冲突和多应用(模块)合并部署。本篇将从解决依赖角度来说明下 SOFARK 插件的基本使用规则。 下图是官方文档中提供的用于描述依赖包冲突的一个场景: 这里通过一个工程来模拟这种场景,然后通过将其中一个打包成插件的方式来解决。 案例工程1234├── ark-main-project├── dependency-one├── dependency-two├── dependency-two-plugin ark-main-project 为一个 简单的springboot 工程 dependency-one 依赖1...
响应式编程 Reactor 小记
从响应式编程说起响应式编程是一种关注于数据流(data streams)和变化传递(propagation of change)的异步编程方式。 这意味着它可以用既有的编程语言表达静态(如数组)或动态(如事件源)的数据流。 在响应式编程方面,微软跨出了第一步,它在 .NET 生态中创建了响应式扩展库(Reactive Extensions library, Rx)。接着 RxJava 在 JVM 上实现了响应式编程。后来,在 JVM 平台出现了一套标准的响应式 编程规范,它定义了一系列标准接口和交互规范。并整合到 Java 9 中(Flow 类)。 响应式编程通常作为面向对象编程中的“观...
聊一聊-JAVA 泛型中的通配符 T,E,K,V,?
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。 那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自...
shell 脚本简单归纳和实践
if 条件 OPTION OPTION 解释 [-a file] 如果file存在则为真 ,也可以表示为 and: 条件与if [ -z “condition1” -a -z “condition2” ] [-b file] 如果file存在且是一个块特殊文件则为真 [-c file] 如果file存在且是一个字特殊文件则为真 [-d file] 如果 file 文件存在且是一个目录则为真,d前的!是逻辑非 #表示目录不存在,则执行后面的 then 操作 if [ ! -d lcd_path/par_date ] [-e file] 如果 file文件存在则为...
一个 maven 插件打包问题的排查
最近研究 sofa-ark 的插件机制时,发现当执行完 maven clean install -DskipTests 时,打在 target 目录下的 xxx.jar 与安装到本地仓库的 xxx.jar 大小不一致。 target 目录下的插件大小 .m2 下的插件大小 其实一开始看到这种现象也是懵逼,同一个工程,同一次命令执行,但是得到的两个 jar 包大小差距巨大。那么对于这种问题,我想到的有两点: debug 打包插件执行过程 了解 maven 插件的生命周期 debug 打包插件执行过程这里需要借助 IDEA 中的远程 debug 能力来完成。目前有两个工...
聊一聊 JAR 文件和 MANIFEST.MF
在 JAVA 语言这个圈子里面摸爬滚打,除了对于语言层面和框架层面的学习之外,有一些东西它一直存在,但是确没有对它们有足够的重视,因为都觉得它是理所当然,比如 JAR 是个什么? 提到 JAR,最先可能想到的就是依赖,比如 fastjson.jar ,它可以作为依赖在项目中来引用,但是不能通过 java -jar 来执行,这种就是非可执行的 JAR。另外一种,比如我们项目打包之后生成的 JAR (当然也可能是 war),我们可以通过 java -jar 来运行程序,我们把它称之为可执行的 JAR。 JAR 作用大体可以分为以下几种: 用于发布和使用类库 作为应用程序和扩展的构建单元 作...
并发编程-关于 CAS 的几个问题
CAS 相关基础知识CAS的全称是Compare And Swap ,即比较交换。CAS 中一般会设计到3个参数: 内存值 V 旧的预期值A 要修改的新值B 当且仅当预期值 A 和内存值 V 相同时,将内存值V修改为 B,否则什么都不做。 这里关于 CPU 指令对于 CAS 的支持不深入研究,有兴趣的可以自行了解。 CAS 几个问题很多书籍和文章中都有提出它存在的几个问题: 1、循环时间长开销很大 2、只能保证一个共享变量的原子操作 3、ABA 问题 下面就这三个问题展开来聊一下。 1、关于“循环时间长开销很大”的疑惑与验证自旋 CAS 如果长时间不成功,会给 CPU 带来非...
SpringBoot 系列-事件机制详解
微信公众号:glmapper工作室掘金专栏:glmapper微 博:疯狂的石头_henu欢迎关注,一起学习、一起分享 在这篇文章中聊一聊 Spring 中的扩展机制(一)中对Spring中的事件机制进行了分析。那么对于 SpringBoot 来说,它在 Spring 的基础上又做了哪些拓展呢?本篇将来聊一聊 SpringBoot 中的事件。 在 SpringBoot 的启动过程中,会通过 SPI 机制去加载 spring.factories 下面的一些类,这里面就包括了事件相关的类。 SpringApplicationRunListener 123# Run Li...
ZooKeeper 客户端之 Curator
原文链接:ZooKeeper 客户端之 Curator ZooKeeper 是一个分布式的、开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现。它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Curator 是 Netflix 公司开源的一套 Zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等等。Curator 包含了几...
avatar
Glmapper@leishu
分享与学习