
Java
文章平均质量分 61
MrBack
春鸿刷归翼,一寄杜蘅枝
展开
-
Spring事件机制使用
一、定义好事件。这里的Map 应该改为事件要传递的对象。public class InquiryRefundEvent extends ApplicationEvent { private Map<String,String> data; public InquiryRefundEvent(Object source) { super(source); } public InquiryRefundEvent(Object source, M原创 2021-07-08 15:05:47 · 545 阅读 · 0 评论 -
RocketMq tag动态设置失效问题
问题:Springboot整合RocketMQ后动态tag设置失效!依赖:<!-- rocketMQ --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <原创 2021-04-26 13:26:48 · 2666 阅读 · 3 评论 -
一个数是否为2的次方的更好求解方式
问题:判断一个数是否为2的次方?解决代码:尽量使用位运算 会比一直除2 取模的方式快一些/** * 2的n次方的正整数代表:某个位是1,其他位是0 * 负整数代表:连续为0 (取反 + 1 为真实表示的值) * 1...10 * 1...00 * 1..000 */public class BackDemo { public static boolean valid(int num){ boolean isPositive = (num & (1 &原创 2021-03-27 19:16:35 · 168 阅读 · 0 评论 -
多线程工具--CyclicBarrier
写两个CyclicBarrier、Phaser的例子。一、CyclicBarrier。线程达到一定数量再一起执行public class Test_Cyclic { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> System.out.println("执行")); for (int i = 0;原创 2021-03-19 01:30:23 · 193 阅读 · 0 评论 -
SpringBoot启动源码梳理
源码梳理Springboot入口。SpringApplication.runpublic ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; Collection<Sp...原创 2021-02-03 20:05:36 · 199 阅读 · 0 评论 -
Disruptor替代queue并解决queue的一些问题
一,遇到的问题。在工作项目中,数据处理完成后合并数据放入一个LinkedTransferQueue中,会有一些长线程来不断地从队列中拿写到数据库。由此产生以下问题:1)因为LinkedTransferQueue是无界的,同时使用了transfer + take解决了一部分问题,但是程内部运行的数据处理线程数量多的时候,只有没有限制,会产生完整的GC。2)LinkedTransferQueue是无锁的,但是内部数据结构使用LinkedList,不断添加,删除元素会导致重复gc基于以上.原创 2020-08-25 16:58:01 · 1009 阅读 · 0 评论 -
Spark复习(一)电光火石间体验Spark2.x开发
直接上数据格式、问题、代码。先按照Java来复习下。复习完再复习Scala一、数据准备、格式介绍.1、评分数据。数据为 UserId::MovieId::Rating::timestamp. 文件名rating.bat1::1193::5::9783007601::661::3::9783021091::914::3::9783019681::3408::4::9783002752、电影数据。数据为 MovieID::Title::Gengres1::Toy Story (1.原创 2020-06-22 00:04:49 · 316 阅读 · 0 评论 -
行为模式之解释器模式 示例
今天复习设计模式看到解释器模式。想到之前我碰到过的一个问题。问题:前后端多条件的解析。例:某字符串token开始于“a” 且包含“b” 或长度等于10之前是通过三方的组件解决的。如果要自己实现一个可扩展、易交互的方案。之前没想到什么好办法。其实可以用解释器模式封装两层来解决。但我的解释器示例以另一个更简单的例子做一个举例。上面的仅是一个思考。问题:波兰表示法。运算符末尾添加操作数的方式例:1 2 + 代表1+2的运算。 3 4 + 5 - 6 + 代表3+4-5+6的运算解释原创 2020-06-21 16:55:54 · 284 阅读 · 0 评论 -
初试响应式异步工具:RxJava
工作中并没有使用到,而且我觉得像vertx等优秀的框架已经提供了非常完善的异步事件驱动的功能,Spring也有ApplicationExentPublisher来做类似的事。今天就是写个入门例子,看看。emmmm当然这里只是简单例子,实际使用中应该进一步封装,Spring中的ApplicationExentPublisher就是很好的运行方式(封装思路)的参照物。public class...原创 2020-03-13 23:46:10 · 242 阅读 · 0 评论 -
并发编程实战读书笔记(二)对象的共享
并发编程实战读书笔记(二)对象的共享本章内容:1、内存可见性2、线程封闭3、不变性4、安全发布一、内存可见性1、线程可见性引入下面代码 中number值可能打印42,也有可能是0 重排序时!public class Novisibility { private static boolean ready; private static int number;...原创 2020-03-12 06:13:06 · 358 阅读 · 0 评论 -
并发编程实战读书笔记(一)线程安全性
本章内容:1、什么是线程安全?2、解决线程安全的几种方式?3、加锁的机制1、什么是线程安全?多个线程访问某个类时,不管运行环境以何种调度方式或者这些线程如何交替执行,并且在主代码中不需要额外的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。如http请求,处理类内部只使用局部变量就是线程安全的。比如做一个调用计数,每个线程都加一这种就是不安全的。但对于http请求来...原创 2020-03-04 05:57:39 · 163 阅读 · 0 评论 -
干掉if else
代码中太多if else。干掉多重if else的两种方式。虽然知道怎样去除,但是实际开发中衡量使用哪种异或还是使用if else本身最近有种武器很多但是不知道跟不同对手打该用啥感觉!!! emmmm一、枚举Integer level = 1; if(level == 1){ System.out.println("1 do something..."); }else ...原创 2020-03-03 03:41:07 · 350 阅读 · 0 评论 -
小工具:解析Cron表达式的工具
根据Quartz中搞出来的工具。避免依赖Quartz。package com.back.scheduler;import java.io.Serializable;import java.text.ParseException;import java.util.Calendar;import java.util.Date;import java.util.HashMap;imp...原创 2020-03-01 01:10:00 · 2440 阅读 · 0 评论 -
任务调度中心实现方式(三) 事件驱动异步任务分发
1、初步设计的应用任务结构。jobkey设计为前缀“app_job-”+id. jobkey=triggerkey任务管理表折叠原码 DROP TABLE IF EXISTS `APPLICATION_TASK`; CREATE TABLE `APPLICATION_TASK` ( `id` bigint(10) NOT NULL AUTO_INCREME...原创 2021-06-15 19:33:15 · 604 阅读 · 1 评论 -
任务调度中心实现(二)节点竞争拉取任务的方式
1、任务计划表和任务记录表设计。任务计划表展开原码任务执行记录表展开原码2、参数介绍。1)、task_type.任务类型。对于开发好的不同后端逻辑的任务。比如:任务归档的任务类型为DATAFILER.task_type要与对应job的实现对应。TaskType示例展开原码上面的TaskType中用到了自定义Job。Job初步设计如下:AbstractJob中统一完...原创 2021-06-15 19:34:03 · 392 阅读 · 0 评论 -
任务调度中心实现(一) Quartz集群方式
一、Quartz集群实现任务调度1、测试版本Quartz2.3.22、Quartz初始化数据库。https://github.com/quartz-scheduler/quartz/tree/quartz-2.1.x/docs/dbTables3、quartz.properties集群持久化配置。此时具备了调度故障转移及负载均衡、quartz任务持久化能力。# Default P...原创 2021-06-15 19:34:57 · 961 阅读 · 0 评论 -
记录一个使用的内容
最近在思考Quartz时,想到Spring使用Quartz的话,使用改的类不被IOC容器管理但是内部还想使用service或者dao这种情况。1、想到的第一个方案时把当前类交给ioc容器管理。但是Spring整合的代码有个类时反射的,那就需要重新写该类的实现将类放入ioc容器中,经实验可行。2、如果我就不想要放入ioc容器中。那可以考虑用哪个被IOC管理的类就直接从ioc从其中拿。比如在构...原创 2020-01-20 15:03:32 · 319 阅读 · 0 评论 -
ck(二) ck集群注意及常规操作
一、当设置了副本无效时记得检查以下三个方面。1、xml中的设置和system.clusters中的是否一致。2、<listen_host>0.0.0.0</listen_host> 这个配置要配置成0.0.0.0不然节点之间通讯可能有问题3、<interserver_http_host>ck1</interserver_http_host&g...原创 2020-01-20 14:54:26 · 2188 阅读 · 0 评论 -
quartz 集群化任务。 web增删改查任务 并且暂停继续任务。
一、Quartz集群化使用二、web增删改查任务 并且暂停启动任务。这里写一个增删改查任务、任务启停的简单的类,实际应用中1、记得持久化任务。2、持久化jobParam类。这里只是展示怎样增删改查和启停package com.back.scheduler;import com.back.scheduler.job.BackJob;import com.back.schedul...原创 2020-01-12 23:52:45 · 862 阅读 · 0 评论 -
quartz 持久化
上一篇写了quartz2.3.2的简单使用。但是Job的相关信息都是存在内存中的。对于一个持续定时任务比如执行100次一段逻辑,我们有时希望重新启动程序后应该将剩下的次数执行完,而不是重新执行100次。这时就需要持久化。当然还有另一个原因,job持久化就意味着可以web管理job!一、job持久化配置。resourses下新建quartz.properties内容如下# Defaul...原创 2020-01-12 23:50:44 · 1530 阅读 · 2 评论 -
quartz 使用例子
示例版本:quartz2.3.2原因:试下新版本api。复习下这块知识,以前写过一篇,太烂了1、简单定时。Scheduler defaultScheduler = null; try { defaultScheduler = StdSchedulerFactory.getDefaultScheduler(); logger.info(""); defaultS...原创 2020-01-12 19:31:32 · 355 阅读 · 0 评论 -
Kafka(二) kafka详细配置
一、kafka server.properties 详细配置 根据需要自己选择############################# System ##############################唯一标识在集群中的ID,要求是正数。broker.id=0#服务端口,默认9092port=9092#监听地址,不设为所有地址host.name=debugo01 #...原创 2020-02-25 22:34:28 · 291 阅读 · 0 评论 -
封装了个线程池+task模式的工具。
现在只支持定义task然后使用线程池(同一个)执行task,对于Task的启停还要研究下,后续再加上吧一、线程池类。静态的线程池类型根据自己需要换成Cache的 还是自定义的(最好自定义一个)package com.cloudwise.task;import java.util.ArrayList;import java.util.List;import java.util...原创 2019-12-08 13:38:29 · 213 阅读 · 0 评论 -
软、弱、虚、强引用。Jvm调优
弱饮用与软饮用避免oomhttps://www.cnblogs.com/dolphin0520/p/3784171.htmlJvm内存、回收期调优https://www.jianshu.com/p/a2a6a0995fee仔细整理后再写。想了下,其实关于二级缓存等场景·都是可以使用软引用的。我写过一个功能,二级缓存用了几百M,如果类似的场景都用这个话(尤其是节点内缓存等非业务必须内...原创 2019-12-06 13:33:45 · 272 阅读 · 0 评论 -
Netty(三) http协议开发应用
ps:太困了,后面再写原创 2019-11-06 03:26:11 · 338 阅读 · 0 评论 -
Netty(二) Netty中进行Java对象传输---MsgPack编解码(粘包拆包使用Head表示消息长度的方式)
高效编解码有很多方式:json、protobuf、msgpack、hession1、hession2、XStream、默认序列化等protobuf表现突出(码流小、响应时间低)跨语言时应用广泛。关于protobuf后续再介绍。本章主要介绍使用MsgPack完成编解码,在Netty中使用,达到可以传输的效果。这里要注意MsgPack反序列化的两种方式:下面图是官网粘的,Template可...原创 2019-11-05 23:57:52 · 735 阅读 · 0 评论 -
Netty(一) 简单的Client-Server开发+TCP粘包/拆包解决代码(换行与标识符两种)
本节只介绍如何传输String类型的简单的Client-Server模式的Netty代码 和几种处理TCP粘包/拆包的方式1、NettyServer主逻辑package com.back.server;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import ...原创 2019-11-06 02:50:42 · 334 阅读 · 0 评论 -
Mybatis两个知道怎么解决但不知道道理的困惑
1、当我们设置了二级缓存,有时常常不生效比如如下写法:解决问题的办法就是 openSession的SqlSession用完后要cose后,二级缓存生效。大致道理是没有close,第二次不是新的从factory拿到的新sqlSession?不确定,这里记录下,后面再思考2、关于自动提交。我以前总是以为数据源的Factory中设置一下后,所有的SqlSession都会默认是开启自...原创 2019-11-05 11:37:22 · 173 阅读 · 0 评论 -
Mybatis 插件开发
都快忘了咋开发插件了,这里从新记录一下。后面有时间写个自动下划线转驼峰插件和分页插件吧。现在就先写个简单的插件例子1、首先创建类实现Interceptor,可以拦截四个类 本例拦截Executor类 拦截方法querypackage com.back.plugin;import java.util.Properties;import org.apache.ibatis.ca...原创 2019-11-05 00:22:08 · 170 阅读 · 0 评论 -
Lettuce代码示例
虽然没有用到,但是看起来比Jedis强一些,这里写下示例,后续使用到再封装。我把测试的代码整体放入。后续自己剥离吧,现在做个记录。哨兵连接设置下RedisURI的api即可。public class TestLettuce { private static RedisConnectionPool<RedisAsyncCommands<String,String>...原创 2019-10-20 14:58:58 · 631 阅读 · 0 评论 -
Beetl模版初试
写一个Beetl的例子,现在并没有封装成方法,后续再封。beetl:模版例子select ${condition.columns} from ${condition.tableName}<% if(isNotEmpty(condition.whereCondition)){%> where ${condition.whereCondition}<%} %&...原创 2019-10-20 14:55:49 · 253 阅读 · 0 评论 -
一次Redis调优经历及思考
https://www.cnblogs.com/benwu/articles/8616141.htmlhttps://my.oschina.net/haogrgr/blog/228591先放两个链接。工作中优化后达到预期效果再着手写细节。https://www.cnblogs.com/me115/p/4337733.html背景:自己写的redis相关组件,每秒处理1600数据都无...原创 2019-10-17 22:41:39 · 717 阅读 · 0 评论 -
redis2.X手动主从、哨兵模式搭建redis3.X rediscluster搭建
一、redis 手动切换主从(了解即可)搭建三个redis,主节点开服务edis-server --port xxxx,从节点开启服务redis-server --port xxxx slave of [主节点ip] [主节点端口]此时已开启主从,从节点只读,主节点可用以增删改。主节点挂掉手动在其中一个执行slaveof no one 为主节点。 其余slaveof [新主节点ip] ...原创 2018-09-17 21:03:32 · 450 阅读 · 0 评论 -
重新认识下synchronized(转)
1. synchronized简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i <...原创 2019-05-27 19:56:55 · 172 阅读 · 0 评论 -
Mysql数据库插入查询优化小记。
前言,这几天工作做了个Mysql百万数据表在不同情况下比如子查询数量大小、模拟并发、主键-索引类型、连接方式(in、exists、join)的小测试。过程中无论模拟数据还是测试过程感觉都有很多可以改进的地方。这里记一下我在笔记本上的改进。(PS:工作时模拟了200W数据,开始后就忙别的了。忙完发现自己用的jdbc每条commit,单线程的方式跑的时间以小时记,幸亏没人看见,尴尬死了)环境:I5...原创 2019-07-25 00:40:05 · 285 阅读 · 0 评论 -
自定义注解完成简单的ioc容器编写达到类似@Service和@Configration+@Bean的效果
前言:由于项目不使用Spring,部分框架的注解开发对Spring有一定依赖。为了简化一些配置,实现了下类似ioc容器的功能,记录一下。首先,第一步模拟@service注解。这里展示下核心部分即可。由于比较简单就不过多讲解。@service最后测试一下:二、接下来只展示@config+@bean的核心部分。注解不再展示。...原创 2019-08-02 14:44:15 · 1545 阅读 · 0 评论 -
(补)高并发学习(三)Nginx优点、配置文件详解、搭建。
注意:Nginx安装,在前面Linux软件安装中的编译安装已完成。用的是Tengine,并发量可以达到20W一、前言 我们知道单个JVM支持的并发在1000左右。单个tomcat支持的最大并发在600左右,超过600开始出现异常。即便经过调优也仅在千级别上。我们前面的介绍的LVS能负载10万左右并发,但是,LVS并不对URI进行解析。既如果他直接分发给tomcat,这些tomcat都...原创 2018-09-07 02:44:34 · 453 阅读 · 0 评论 -
Tomcat调优篇----balabala(转)
tomcat调优的几个方面和早期版本相比最新的Tomcat提供更好的性能和稳定性。所以一直使用最新的Tomcat版本。现在本文使用下面几步来提高Tomcat服务器的性能。增加JVM堆内存大小修复JRE内存泄漏线程池设置压缩数据库性能调优Tomcat本地库其它选项第1步 – 提高JVM栈内存Increase JVM heap memory你使用过tomcat的话,简单...原创 2018-09-07 00:33:18 · 171 阅读 · 0 评论 -
高并发学习(一)LVS原理、搭建
一、基础知识。1、传输控制层中。netstat -natp 可以查看有哪些程序用了哪些端口号连接到哪些地址2、网络层。rount -n查看路由表。3、链路层。arp -a 查询ip对应的MAC地址。二、LVS原理。各种乱七八糟定义。以及负载均衡器的几种实现方式(包含LVS的)等等,balabala.理论知识,有空再补。3、LVS搭建。隐藏VIP方法:对外隐藏、对内可见...原创 2018-08-24 08:52:21 · 393 阅读 · 0 评论 -
(补)MySql主从模式与读写分离,Mysql分库分表
一、MySql主从模式实现读写分离前提两台mysql一致1、修改主数据库的配置文件。/etc/my.cnf 开启日志 设置server_id 注意主节点id一定要比从节点id小2、重启服务service mysql restart.再授权从节点可以访问:grant all privileges on *.* to 'xxxx'@'xxx.xxx.x.xxx' identified...原创 2018-09-18 01:19:14 · 307 阅读 · 0 评论