java进阶篇
文章平均质量分 82
dotaer-df
这个作者很懒,什么都没留下…
展开
-
分布式事务理论以及解决方案
文章涵盖2PC,3PC刚性事务;TCC,本地消息表,可靠性消息,最大努力通知。本文将对其一一讲解,尽最大努力写的通俗易懂。原创 2022-08-06 16:20:46 · 383 阅读 · 0 评论 -
对象怎么分配的——不只是在堆里new那么简单
首先对象是优先在栈上分配,并不是优先在堆上分配,但是他在栈上分配必须满足两个条件。1.逃逸分析后没有发生逃逸new的对象不能让其他线程访问到,因为其他线程访问到肯定得在堆中共享的。全局变量赋值逃逸 方法返回值逃逸 实例引用发生逃逸 线程逃逸:赋值给类变量或可以在其他线程中访问的实例变量.2.可以进行标量替换标量即不可被进一步分解的量,而JAVA的基本数据类型就是标量(如......原创 2020-04-14 15:28:02 · 1122 阅读 · 0 评论 -
@RefreshScope刷新配置文件原理(2)
接着上文@RefreshScope刷新配置文件原理前文提到:当配置中心更改配置之后,有两种方式可以动态刷新Bean的配置变量值向上下文发布一个RefreshEvent事件 Endpoint方式,Http访问/actuator/refresh(springboot2.0之前为/refresh,springboot2.0之后默认没有开启refresh端点,需配置)不管是什么方式,最终都会调用ContextRefresher这个类的refresh方法。现在我们通过第二种Endpoint方式来感原创 2022-04-14 22:47:23 · 1269 阅读 · 1 评论 -
@RefreshScope刷新配置文件原理
@RefreshScope注解详解原创 2022-04-13 21:41:24 · 3726 阅读 · 3 评论 -
聊聊同步,异步,阻塞与非阻塞
近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞、非阻塞、异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说的不那么准确,这也是自己在这几个方面也没有细细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻塞的概念其实也并不难以理解,在此写下此文,欢迎拍砖,希望多多交流。一、同步与异步首先来解释同步和异步的概念,这两个概念与消息的通知机制有关。也就是同步与异步主要是从消息通知机制角度来说的转载 2022-02-25 18:55:55 · 194 阅读 · 0 评论 -
RuleEngineListener和RuleListener区别
RuleEngineListener和RuleListener区别详解原创 2021-11-25 12:32:56 · 783 阅读 · 0 评论 -
业务中遇到的时间窗口
系统中在需要统计一段时间窗口内的曝光量,并绘制成x轴为时间,y轴为曝光量的图表,但是查询条件需要针对不同纬度(分钟,小时,天)如按1天纬度查询2021-09-05 00:00 至 2021-09-08 00:00,那么图表x轴就应该显示为 09-05 00:00,09-06 00:00,09-07 00:00。如按1分种纬度查询2021-09-05 00:00 至 2021-09-0500:15,那么x轴应该显示为09-05 00:01,09-05 00:02 等等。那么如何做呢?计算公式:...原创 2021-09-09 15:05:35 · 145 阅读 · 0 评论 -
规则引擎easyRule详解
规则引擎有许多种:Drools,Aviator,Mvel,EasyRule,这里主要讲解一下EasyRule。easyRule集成了Mvel,而Mvel表达式非常强大,我们可以自己写一些表达式,交给mvel进行解析计算,得到这个表达式计算的值。...原创 2021-08-26 16:16:32 · 12313 阅读 · 2 评论 -
redission看门狗实现机制一看就懂
某次偶然听到redission看门狗,感觉比较有趣,于是就想看看它长啥样。。。。废话不多说,直入正题。什么是看门狗?用官方文档的话来说就是:大家都知道,如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogT.原创 2021-08-06 11:34:12 · 19140 阅读 · 9 评论 -
redission扣库存demo
在分布式场景中,要实现锁如果仅仅通过Synchronized关键字是不行的,因为Synchronized只是在此java进程中进行了上锁。要想实现分布式锁即可采用redission。本文采用nginx反向代理+redission实现扣库存demo。引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st...原创 2021-08-03 10:57:30 · 830 阅读 · 1 评论 -
mybatis-generator之PluginAdapter
如果你觉得mybatis-generator(MBG)自动生成的代码不能满足实际开发中的需要,你可以自定义插件生成规则,插件必须实现org.mybatis.generator.api.Plugin,不过通常情况下我们是需要去实现org.mybatis.generator.api.PluginAdapter。编写完成后在generatorConfig.xml配置<plugin>标签即可PluginAdapter中有许多方法,按照生命周期执行顺序分为默认构造函数创建的...原创 2020-12-06 18:42:33 · 2831 阅读 · 2 评论 -
mysql好使的4个函数GROUP_CONCAT,FIND_IN_SET,REPLACE,TRIM以及一个复杂sql解析
最近在做的一个项目中学到mysql的4个函数,平常竟然都没发现,记录一下1.GROUP_CONCAT 函数语法:GROUP_CONCAT(字段 SEPARATOR ',')这个函数的功能可以将多行字段转为一行数据(纵转行),类似效果如图执行这条sql后SELECT GROUP_CONCAT(role_name SEPARATOR ',') FROM mooc_film actor_ t WHERE film_id = '2';查询后结果如下,可以看到把多行数据放到一行表格.原创 2020-05-27 19:18:43 · 547 阅读 · 0 评论 -
ThredLocal初探
ThredLocal使用的地方非常多,像spring的@Transactional中就是用ThredLocal管理Connection的,包括面试也经常问到。总的来说ThreadLocal就是实现线程间数据的隔离,它可以对每个线程存入一个key-value键值对。在了解ThreadLocal需要,需要对4种引用类型有个了解,可以看看我的这篇文章4种引用。1.代码初体验public cla...原创 2020-05-01 00:04:16 · 614 阅读 · 0 评论 -
synchronized和ReentrantLock的区别整理
首先synchronized是jdk的一个关键字,ReentrantLock是java.util.concurrent.locks并发包下的一个类。1.从公平与非公平角度来看什么是公平锁与非公平锁:公平锁与非公平锁都会维护一个队列,在公平锁中,新来的线程一定会进入队列的尾部,直到轮到自己拿到锁,他能保证每个线程都能执行。而非公平锁中,多个线程抢锁时,获取锁的线程不一定是同步队列中等待时...原创 2020-04-27 23:05:36 · 571 阅读 · 0 评论 -
对象头里面的东东以及锁升级过程
需要了解对象头里面的东西,需要先了解下对象在内存中的布局,具体请看我的上篇文章。对象内存中的布局因为前文已经介绍对象内存中的布局,以及openjdk的ClassLayout的使用,这里直接上代码public class T { public static void main(String[] args) { Object object = new Object(); ......原创 2020-04-14 12:06:34 · 265 阅读 · 0 评论 -
对象在内存中的布局
对象在内存中的布局分为普通对象和数组 普通对象public class T { private int m = 8; public static void main(String[] args) { // TODO Auto-generated method stub T t = new T();...原创 2020-04-14 11:15:10 · 701 阅读 · 1 评论 -
线程不安全的情况以及jvm内存结构,java对象模型,以及java内存结构,重排序和可见性问题
各种需要考虑线程安全的情况1.访问共享的变量或资源,会有并发风险,比如对象的属性、静态变量、共享缓存、数据库等2.所有依赖时序的操作,即使每一 步操作都是线程安全的,还是存在并发3.不同的数据之间存在捆绑关系的时候4.我们使用其他类的时候,如果对方没有声明自己是线程安全的为什么多线程会带来性能问题1.上下文切换2.线程间的协作内存同步jvm内存结构:字节码文件,通过类加载器,会...原创 2020-03-08 11:25:45 · 282 阅读 · 0 评论 -
springcloud-config笔记
Config简介在分布式系统中,每一个功能模块都能拆分成一个独立的服务,一次请求的完成,可能会调用很多个服务协调来完成,为了方便服务配置文件统一管理,更易于部署、维护,所以就需要分布式配置中心组件了,在spring cloud中,有分布式配置中心组件spring cloud config,它支持配置文件放在在配置服务的内存中,也支持放在远程Git仓库里。引入spring cloud config...原创 2020-02-16 11:44:57 · 171 阅读 · 0 评论 -
springcloud-zuul笔记
Zuul什么是API网关网关这种东西,是伴随着微服务风生水起的,微服务可以没有api网关,但是最好有,也并不是绝对的。因为有这个东西是合理的,没有的话,你的微服务会很难受。首先网关最基础的作用就是对外包括ios、android、webapp、website、h5、微信小程序甚至是第三方提供一个统一服务接入入口。聚合内网众多微服务,为端上提供统一的api入口。对外统一使-用http协议,网关...原创 2020-02-15 19:34:57 · 129 阅读 · 0 评论 -
springcloud-fegin笔记
刚学这个时候很懵逼,不知道这个是干嘛的,你要调用服务直接用RestTemplate来调用服务不就行了嘛,何必再来一个fegin。后来看了些博客,发现点奥秘。相同点:1.他们都是基于REST接口调用服务的(说白了两个都是拿来调接口的)区别:1.RestTemplate是基于模板来调用的,大家可以看如下代码:可以看到他的URL参数是以编程方式构造的,并且根据你要请求的类型可以更改get,del...原创 2020-02-12 20:24:55 · 190 阅读 · 0 评论 -
SpringCloud-Ribbon笔记-自定义算法
简单的说,Ribbon是Netflix发布的开源项目, 主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时, 重试等.简单的说,就是在配置文件中列出Load Balancer (简称LB) 后面所有的机器,Ribbon会自动的帮助你基 于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Rib...原创 2020-02-10 22:05:47 · 167 阅读 · 0 评论 -
SpringCloud-eureka笔记
Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件它主要包括两个组件:Eureka Server 和 Eureka ClientEureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)Eur...原创 2020-02-06 11:45:39 · 138 阅读 · 0 评论 -
Springboot中使用 @Transaction注解不生效的4种原因
记录一下常见1:遇到非检测异常时,事务不开启,也无法回滚。原因:因为Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。如果想针对非检测异常进行事务回滚,可以在@Transactional 注解里使用rollbackFor 属性明确指定异常。常见2: 在业务层捕捉异常后,发现事务不生效。原因:在业务层手工捕捉并处理了异常(try...原创 2019-11-27 21:38:02 · 2560 阅读 · 0 评论 -
SpringAop代理详解
1.AOP是什么? 面向切面编程,能够让我们在不影响原有功能的前提下,为软件横向扩展 功能 .2.在什么地方能够让我们少写代码? 要回答问题2,首先解决"横向"扩展什么意思? 理解了这个词基本就能理解AOP了. 软件开发可分为"持久层" “业务层” 控制器层" 所谓的"横向"就是指上面说到的三个层里的任意一层!使用AOP技术后,用一个方法,就能同时作用与一个层面内所有方法!AOP的作用 ...原创 2019-03-27 15:29:28 · 312 阅读 · 1 评论 -
Redis(1)---介绍
一.redis产生背景传统关系型数据库满足不了日益增长的高读写需求;由于数据库的持久化数据主要面向的是磁盘,而磁盘的读写比较慢,在一般的管理系统上,由于不存在高并发,因此往往不需要瞬间大量读写数据的要求。二.redis作用redis作用就是缓存这些数据,而它是缓存在cpu中,都知道读取cpu中的数据速度是极高的,这样就提高了速度。它有两个使用场景 1.缓存常用数据。2.在高速读写的场合使用它...原创 2019-05-08 17:39:40 · 264 阅读 · 1 评论 -
Redis(2)---数据操作
我的第一篇redis Redis(1)使用sping的RedisTemplate去操作Redis数据1.操作字符串private static ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context-jedis.xml"); //RedisTemplate操作redis...原创 2019-05-09 21:11:45 · 256 阅读 · 0 评论 -
Redis(3)---事务
Reids事务1.在Redis中,也许存在多个客户端同时向Redis系统发送命令的并非的可能性,因此同一份数据可能被不同线程所操控,这样就出现了并发下的数据一致问题。事物是一个被隔离的操作,事务中的方法都会被Redis按顺序执行,事务在执行过程中不会被其他客户端发生的命令所打断。例如,在Redis中开启事务是multi命令,执行事务是exec命令,开启到执行命令之间,Redis采取的是进入队列...原创 2019-05-11 16:16:29 · 201 阅读 · 0 评论 -
实际项目中对于异常的处理
异常处理再实际项目中,很重要,特别是在和前端交互的时候,如果后台出现错误,前端看见的是一堆对他们来说很难理解的500错误,如图这样体验是很不好的,如果能给予一些错误提示,那肯定是极好的。现在来具体说说处理异常的步骤,共分为 步。第一步:定义一个接口 目的是为了方便扩展//方便扩展public interface ResultError { //得到错误码 public int ...原创 2019-05-27 16:10:13 · 2899 阅读 · 3 评论 -
volatile关键字
volatile关键字主要作用就是使变量在多个线程中可见,它可以强制从公共堆栈中读取变量的值,而不是从线程私有数据栈中取得变量的值。看代码:public class MyThread extends Thread { private static boolean isR = true; public boolean isRun() { return isR; } public...原创 2019-08-04 15:06:23 · 128 阅读 · 0 评论 -
线程停止 interrupt,interrupted和isInterrupted
停止线程在java语言中不并不像break语句哪样干脆,不是说停止就停止。在java中有3种停止线程的方式:1.线程正常退出,也就是当run方法正常完成后终止线程。2.使用stop方法强制终止线程,但是不推荐使用这个方法,它是一个作废过期的方法,使用它们会产生不可预料的后果。3.使用interrupt方法中断线程。但是使用interrupt()方法的使用并不像for +break那样马上...原创 2019-07-23 11:50:51 · 200 阅读 · 0 评论 -
win下jdk自带jstack测试线程死锁问题
操作环境 windows,jdk8首先模拟死锁代码public class MyThread { private static String A = "A"; private static String B = "B"; public void deadLock() { Thread thread = new Thread(new Runnable() { @Ove...原创 2019-08-08 10:48:14 · 162 阅读 · 0 评论 -
原生servlet项目使用jedis缓存同步更新数据
目前维护的项目中需要添加一个类似说说的功能,之前也正好学过redis,正好拿来练练手。1.需要两个包commons-pool2-2.0.jarjedis-2.8.2.jar没有的话自行去maven仓库下载jedis连接池public class JedisUtil extends HttpServlet { private static Jedis jedis; priva...原创 2019-08-12 12:28:54 · 894 阅读 · 0 评论 -
springboot 快速部署
springboot自带tomcat,部署的服务器无需安装tomcat即可完成部署在pom.xml中导入插件第一步:<!-- 简化部署 ,这个插件直接把应用可以打包成一个可执行的jar包 在cmd模式下 服务器不用安装tomcat就可以运行 --> <build> <plugins> <plugin> <group...原创 2019-09-02 15:53:16 · 165 阅读 · 0 评论 -
mysql数据库基础总结
一.如何下载安装mysql:官网下载地址:https://dev.mysql.com/downloads/mysql/选择你要的版本选择你电脑的位数:我电脑是64位,所以这下载的是64位的下载文件下载后:打开解压后的MySql文件在根目录下创建my.ini (mysql配置文件)将一下内容复制进去(配置你的mysql)这里需要将basedir 与 datadir 路径改成my...原创 2019-02-19 16:39:57 · 361 阅读 · 0 评论