
JAVA
文章平均质量分 69
明雨星云
学海无涯
展开
-
volatile 系列之指令重排序导致的可见性问题
什么是指令重排序呢?为了更加直观地理解,老司机还是通过一个案例来说明as-if-serial 语义原创 2023-12-13 21:16:05 · 161 阅读 · 0 评论 -
synchronized 同步锁的思考
synchronized同步锁的思考原创 2023-10-30 21:17:59 · 304 阅读 · 0 评论 -
volatile 系列之如何解决可见性问题
volatile如何解决可见性问题原创 2023-10-29 22:28:17 · 215 阅读 · 0 评论 -
synchronized 的锁类型
之前的文章有讲过对同步锁的理解,实现同步锁的方式无非是多个线程抢占一个互斥变量,如果抢占成功则表示获得了锁,而没有获得锁的线程则阻塞等待,直到获得锁的线程释放锁如图所示,在Mark Word中,我们发现锁的类型有偏向锁、轻量级锁、重量级锁,那么其实,在JDK 1.6之前,synchronized只提供了重量级锁的机制,重量级锁的本质就是我们前面对于锁的认知,也就是没有获得锁的线程会通过park方法阻塞,接着被获得锁的线程唤醒后再次抢占锁,直到抢占成功。原创 2023-10-28 22:57:00 · 675 阅读 · 0 评论 -
CAS 机制的实现原理分析
在 synchronized 中很多地方都用到了CAS机制,它的叫法有很多,比如CompareAndSwap、CompareAndExchange、CompareAndSet,它是一个能够进行比较和替换的方法,这个方法能够在多线程环境下保证对一个共享变量进行修改时的原子性不变。原创 2023-10-27 22:39:51 · 418 阅读 · 0 评论 -
CompletableFuture 实战
以一个商品查询为例,在微服务架构中,一个商品信息查询会涉及商品基本信息查询、商品评论查询、商品库存查询,每个查询都涉及不同的微服务的调用,如果使用异步编程的方式,应该如何实现呢?原创 2023-10-26 23:21:06 · 867 阅读 · 0 评论 -
锁升级的实现流程
当一个线程访问增加了synchronized关键字的代码块时,如果偏向锁是开启状态,则先尝试通过偏向锁来获得锁资源,这个过程仅仅通过CAS来完成。如果当前已经有其他线程获得了偏向锁,那么抢占锁资源的线程由于无法获得锁,所以会尝试升级到轻量级锁来进行锁资源抢占,轻量级锁就是通过多次CAS(也就是自旋锁)来完成的原创 2023-10-26 10:18:32 · 243 阅读 · 0 评论 -
volatile 系列之实现原理
揭密volatile 实现原理,我们通过volatile解决了由于编译器的指令重排序导致的可见性问题,这意味着volatile 底层用到了内存屏障原创 2023-10-27 02:00:00 · 323 阅读 · 0 评论 -
Synchronized 关键字
在Java中,线程同步使用最多的方法是使用synchronized关键字。每个Java对象都隐含有一把锁,这里称为Java内置锁(或者对象锁、隐式锁)。使用synchronized(syncObject)调用相当于获取 syncObject 的内置锁,所以可以使用内置锁对临界区代码段进行排他性保护原创 2023-10-25 12:20:32 · 124 阅读 · 0 评论 -
准备Plan B 如何设计兜底方案
架构设计兜底方案原创 2022-12-15 17:37:06 · 565 阅读 · 0 评论 -
ThreadLocal 源码分析
ThreadLocal原理分析原创 2022-11-20 20:36:56 · 266 阅读 · 0 评论 -
ThreadLocal的底层原理
ThreadLocal底层原理简述原创 2022-11-18 23:29:05 · 483 阅读 · 0 评论 -
Spring的事务机制
Spring的事务机制原创 2022-09-02 08:23:05 · 1201 阅读 · 0 评论 -
volatile关键字如何保证有序性和可见性
volatile关键字原创 2022-08-29 11:00:01 · 444 阅读 · 0 评论 -
关于微服务
微服务介绍转载 2022-08-23 15:50:31 · 463 阅读 · 0 评论 -
优雅的 Controller 层代码
优雅的 Controller 层代码原创 2022-06-30 17:01:09 · 1204 阅读 · 0 评论 -
微服务网关 Spring Cloud Gateway
API网关的作用网关的本质及技术选型Spring Cloud Gateway 网关实战Spring Cloud Gateway 原理分析原创 2022-07-25 15:35:09 · 321 阅读 · 0 评论 -
服务注册与发现(Nacos)
什么是Alibaba Nacos 服务注册与发现,配置中心?原创 2022-05-01 20:19:11 · 5259 阅读 · 0 评论 -
AQS 关于锁与队列的关系
AQS,队列与锁的关系,解决CAS恶性空白旋的有效方式之一是以空间换时间,较为常见的方案有两种:分散操作热点和使用队列削峰。JUC并发包使用的是队列削峰的方案解决CAS 的性能问题,并提供了一个基于双向队列的削峰基类、抽象基础类AbstractQueuedSynchronizer(抽象同步器类,简称为AQS)。原创 2023-10-29 21:38:32 · 156 阅读 · 0 评论 -
AQS的核心成员
AQS核心成员的讲解原创 2023-10-24 13:50:06 · 214 阅读 · 0 评论 -
Spring Boot 自动装配的原理
在Spring Boot中,不得不说的一个点是自动装配,它是Starter的基础,也是Spring Boot的核心,那么什么叫自动装配呢?或者说什么叫装配呢?原创 2022-04-22 15:55:56 · 1696 阅读 · 0 评论 -
Spring Boot 手写一个 Starter
手写Starter组件原创 2022-04-26 18:51:22 · 840 阅读 · 0 评论 -
Bean装配方式的升级
SpringBoot简化操作,开箱即用了解一下SpringBoot的相关Bean装配原创 2022-03-25 13:06:55 · 984 阅读 · 0 评论 -
Spring Ioc/DI 控制反转和依赖注入
Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入。如何理解这两个概念呢?原创 2022-03-23 17:33:22 · 977 阅读 · 0 评论 -
内置锁的核心原理之线程安全问题
i++自增线程不安全吗?你所理解的自增要怎么样才能安全呢?原创 2022-03-20 17:57:09 · 4050 阅读 · 0 评论 -
MultipartFile文件上传
MultipartFile文件上传原创 2022-03-27 21:32:09 · 5494 阅读 · 0 评论 -
OkHttp的使用
OkHttp工具原创 2022-01-28 15:08:00 · 889 阅读 · 0 评论 -
SpringCloud关于l2cache缓存
SpringCloud、SpringBoot、l2cache缓存原创 2022-01-27 17:00:57 · 1683 阅读 · 0 评论 -
SpringBoot SpringCloud MybatisPlus框架动态数据源(配置多个DB数据源)
分库分表的不要使用以下方法这里是普通的多数据源配置本方法是nacos的配置1 依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.4.1</version></dependency>...原创 2021-10-11 15:25:17 · 597 阅读 · 0 评论 -
多线程原理和实战
java在高并发核心编程,线程的核心原理,实战原创 2021-12-01 23:37:03 · 246 阅读 · 0 评论 -
Java开发手册七(设计规约)
1.【强制】存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。说明:有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡而陡然增加,所以,存储方案和数据结构需要认真地进行设计和评审,生产环境提交执行后,需要进行double check。正例:评审内容包括存储介质选型、表结构设计能否满足技术方案、存取性能和存储空间能否满足业务发展、表或字段之间的辩证关系、字段名称、字段类型、索引等;数据结构变更(如在原有表中新增字段)也需要进行评审通过后上线。2.【原创 2021-07-13 10:31:17 · 161 阅读 · 0 评论 -
Java开发手册六(工程结构)
(一)应用分层1.【推荐】根据业务架构实践,结合业界分层规范与流行技术框架分析,推荐分层结构如图所示,默认上层依赖于下层,箭头关系表示可直接依赖,如:开放API层可以依赖于Web层(Controller层),也可以直接依赖于Service层,依此类推:•开放API层:可直接封装Service接口暴露成RPC接口;通过Web封装成http接口;网关控制层等。•终端显示层:各个端的模板渲染并执行显示的层。当前主要是velocity渲染,JS渲染,JSP渲染,移动端展示等。•Web层:主.原创 2021-07-07 15:11:26 · 290 阅读 · 0 评论 -
Java开发手册五(MySQL数据库)
(一)建表规约1.【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)。说明:任何字段如果为非负数,必须是unsigned。注意:POJO类中的任何布尔类型的变量,都不要加is前缀,所以,需要在<resultMap>设置从is_xxx到Xxx的映射关系。数据库表示是与否的值,使用tinyint类型,坚持is_xxx的命名方式是为了明确其取值含义与取值范围。正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未原创 2021-06-13 21:52:43 · 362 阅读 · 0 评论 -
Java开发手册四(安全规约)
1.【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。2.【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。说明:中国大陆个人手机号码显示:139****1219,隐藏中间4位,防止隐私泄露。3.【强制】用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库。反例:某系统签名大量被恶意修改,即是因为对于危险字符# --没有进行转义,导致数据...原创 2021-06-07 19:38:59 · 243 阅读 · 0 评论 -
Java开发手册三(单元测试)
1.【强制】好的单元测试必须遵守AIR的原则说明:单元测试在线上运行时,感觉好像空气(AIR)一样感觉不到,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点 A:Automatic(自动化) I:Independent(独立性) R:Repeatable(可重复)2.【强制】单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的...原创 2021-05-25 20:30:56 · 188 阅读 · 0 评论 -
Java开发手册二(异常日志)
(一)错误码1.【强制】错误码制定原则:快速溯源、沟通标准化说明:错误码想得太过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂正例:错误码回答的问题是谁的错?错在哪?1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。2)错误码必须能够进行清晰地比对(代码中容易equals)。3)错误码有利于团队快速对错误原因达到一致认知2.【强制】错误码不体现版本号和错误等级信息说明:错误码以不断追加的方式进行兼容。错误等级由日志和错误码本身的释原创 2021-05-18 10:59:06 · 602 阅读 · 2 评论 -
Java开发手册一(编程规约)
编程规约(一)命名风格1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name/__name/$name/name_/name$/name__2.【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。正例:ali/alibaba /taobao / cainiao/ aliyun/ youku / hangzhou原创 2021-05-10 20:28:07 · 201 阅读 · 0 评论 -
Java开发手册
本手册以Java开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录目录一、编程规约(一)命名风格(二)常量定义(三)代码格式(四)OOP规约(五)日期时间(六)集合处理(七)并发处理(八)控制语句(九)注释规约(十)前后端规约(十一)其他二、异常日志(一)错误码(二)异常处理(三)日志规约三、单元测试四...原创 2021-05-09 21:55:56 · 695 阅读 · 1 评论 -
工厂+策略+模板这款设计模式挺不错
先看代码建handler包/** * 模板方法设计模式 */public abstract class AbstractHandler implements InitializingBean { public void AAA(String name) { throw new UnsupportedOperationException(); } public String BBB(String name,String str) {原创 2021-04-27 15:56:05 · 218 阅读 · 1 评论 -
SpringBoot以及网关服务配置部署和发布
云服务aliyunCloud,tencentCloud ......做任何事情之前,先考虑以下几个方面:1细节决定成败2墨菲定律一、工具管理服务搭建1、Maven搭建 ......2、Jenkins搭建 创建工程名aliyun-release-springboot-infinite-gateway-server General 描述XXX服务 流水线 定义 Pipeline script 脚本 pipeline {...原创 2021-03-23 15:28:26 · 2098 阅读 · 0 评论