自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (5)
  • 收藏
  • 关注

原创 ThreadPoolExecutor参数及运行机制

ThreadPoolExecutor参数详解

2023-12-02 21:46:52 255 1

原创 线程安全的无锁循环队列实现

1.要解决的问题 多个生产者、多个消费者线程在内存中完成合作 2.应用场景 需要用到并发内存消息队列的场景,如撮合交易 3.需要的基础知识 CAS(CompareAndSwap) 位运算 4.解决思路 用数组不用链表,更快 保证生产、消费的持续,需是循环队列 不用Syncronized、不用显示锁,更快 使用AtomicReferenceArray中的CAS API,保证线程安全且更快 数组长度设置为2^n,位运算计算下标,更快 5.关键源码 数据成员 private AtomicRefer

2020-07-26 18:02:23 2028

原创 JDK8 HashMap容量计算算法分析

JDK8 HashMap容量计算算法分析 1.源码 /** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4;

2020-07-25 17:28:09 474

原创 “数据库并发导致更新丢失”的四种解决方法

1.问题描述 隔离级别:Read Commited 事务A 事务B select amount=1000 select amount =1000 转走100块...

2020-04-12 17:25:55 1815 2

原创 SSO单点登录之徒手实现篇

1.环境信息 Springboot 2.2.0 thymeleaf 2.CAS Server关键代码 拦截器 public class LoginHandlerInterceptor implements HandlerInterceptor { private final Logger logger = LoggerFactory.getLogger(LoginHandlerInte...

2020-04-11 23:20:44 373

原创 SSO单点登录之原理篇

1.场景 多个不同域名的服务,希望用户只要登录其中一个,其余访问时自动登录,即单点登录(SSO,Single Sign On)。 2.CAS(Central Authentication Service)实现SSO的原理 2.1关键点 依赖于cookie中保存sessionId ServerA将请求重定向到CAS服务,而不是直接转发至CAS服务,这样浏览器便保存了CAS服务的cookie。访问...

2020-04-11 21:31:56 315

原创 8.Quartz源码取经之线程池

1.为什么用线程池? 1.1 场景 有多个任务需要并发执行 1.2 解决方法 方法一:给每个任务在执行时再创建新线程 方法一缺点:(1)创建线程耗时(2)任务多时,线程数暴增导致CPU、内存爆掉 方法二:线程池,预先建立多个线程,任务到来时,从池中挑一个线程来执行任务 2. Quartz中的线程池 2.1 线程类 //重载了Thread的run方法,执行时实际调用的是runable.run()...

2020-03-29 21:10:42 631

原创 8.Quartz源码取经之插件模式

1.为什么用插件模式? 1.1 场景 想创建一个开放的应用,主应用只包含标准的功能,个性化的功能交给其他开发者实现 1.2 解决方法 主应用不知道子应用的存在:开放API,子应用独立运行。百度地图开放API、jar依赖、SDK、小程序1都属于这种。 主应用知道子应用的存在,子应用运行依赖于主应用:插件模式 2.插件模式怎么实现–Quartz中的插件 2.1 定义插件接口 public inte...

2020-03-28 23:17:09 366

原创 7.Quartz源码取经之建造者模式

为什么用建造者模式? 1. 场景 成员变量多,且创建对象时,多个成员变量可以有不同组合时(类似麦当劳套餐) 2. 解决方法 方法一:创建多个构造函数解决,不同入参组合 方法一缺点:组合数太多,需要创建的构造函数太多 方法二:创建入参包含所有成员变量的一个构造函数 方法二缺点:配置不同套餐时,可能会看到很多null传入 方法三:只创建一个默认构造函数,里面只对需要默认值的-成员变量赋值。其余变量的...

2020-03-22 19:50:46 289

原创 ThreadLocal设计初衷推断

问题 同一个线程内多个方法间如何共享变量? 方法a 类成员变量本来就是各个线程各有一份,线程内共享的。 class MyThread extends Thread{ String myvar; public void run(){ //do something } public void method1(){ myvar = "hi"; System.o...

2020-03-01 18:53:17 290

原创 6.Quartz应用场景之定时任务监控

要解决的问题 想知道每个定时任务有没有被执行,执行的结果怎么样 解决思路 通过JobListener实现定时任务历史记录 额外库表 #增加STATUS字段记录定时任务执行状态 CREATE TABLE `my_job_details` ( `ID` int unsigned NOT NULL AUTO_INCREMENT, `JOB_NAME` varchar(190) NOT NULL,...

2020-02-29 20:59:24 800

原创 5.Quartz应用场景之配置化定时任务(多节点)

要解决的问题 接上文,多节点情况下,加载jobDetail和Trigger会偶发性出现并发错误1 解决思路 加锁控制只有一个节点加载定时任务 额外库表 CREATE TABLE `my_job_load_ctrl` ( `ID` int unsigned NOT NULL, `SERVER_KEY` varchar(200) DEFAULT NULL, `IS_LOCKED` varc...

2020-02-29 20:30:52 1429

原创 4.Quartz应用场景之配置化定时任务(单节点)

要解决的问题 把多个定时任务的时间规则写死在代码里,当有改动时,需要动代码。代码多、维护成本略高。 解决思路 引入额外的库表,把定时任务配置在库表里,应用启动时再调API配置到Quartz原生表中 额外库表 建表 CREATE TABLE `my_job_details` ( `ID` int unsigned NOT NULL AUTO_INCREMENT, `JOB_NAME` v...

2020-02-29 19:16:48 776

原创 3.Quartz应用场景之应用重启后定时任务依然生效

默认你已掌握 Springboot 工程搭建 ApplicationRunner 环境信息 Quartz 2.3.0 Springboot 2.2.0 mysql IDE:idea 思路 定时任务配置持久化到数据库 搭建步骤 创建Quartz相关库表(脚本路径如下) quartz-2.3.0-SNAPSHOT\src\org\quartz\impl\jdbcjobstore\tables_mys...

2020-02-29 11:43:32 2943

原创 2.Quartz关键概念

设计理念 执行的任务和时间规则分离,实现灵活组合1 JobDetail Trigger Scheduler 个人认为实际系统中需要组合的场景不多 ↩︎

2020-02-27 22:44:56 347

原创 1.Quartz定时输出HelloWorld

默认你已掌握 Springboot 工程搭建 ApplicationRunner 环境信息 Quartz 2.3.2 Springboot 2.2.0 IDE:idea 搭建步骤 pom文件关键依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&...

2020-02-25 22:31:23 705

原创 反射运用之Object和Map转换

包含了属性名称和注解成员作为key两种Map Object=&gt;Map package util; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class FieldMapAssembler { /** * 将传入的对象转换为属性名称到值的映射 * @...

2018-12-02 15:55:34 529

翻译 反射与RTTI的区别

反射与RTTI的区别 RTTI是在编译时打开和检查.class文件,反射则是在运行时打开和检查.class文件

2018-12-02 15:50:17 389

原创 为什么需要RTTI

public class Shape{} public class Circle extends Shape{} public class Square extends Shape{} public class Test{ public static void main(String[] args){ Shape shape=new Circle(); shape=new Square(...

2018-11-25 18:44:10 289

原创 运行时类型信息(RTTI)之递归打印类信息

深度优先 public class ClassPrint { private static void printSupers(Class&lt;?&gt; clazz) { String name = clazz.getCanonicalName(); System.out.println(name); if(name.equals("java.lang.Object")) retu...

2018-11-24 17:29:23 241

ns2 2.30安装

最近安装ns2 2.30,总结了一下在Cygwin下的安装步骤,部分是网友提供的,部分是自己遇到并解决的。希望能够有助于后来者!

2010-11-19

mirrors-YApi-master.zip

很好的开源接口管理工具,仅供学习使用,官方版本才是最新版

2019-06-28

mirrors-jointjs-master.zip

在线开源的流程图制作工具,本包为快照,最新包请查看官网

2019-08-04

ActivePerl52612601.zip

PREL安装包,官网安装包,仅供学习用途,转摘保留权利

2019-06-25

vue-admin.zip

vue学习demo程序,供vue开发者使用,vue-admin-mastere 原作者链接https://panjiachen.github.io/vue-element-admin-site/zh/guide/#功能

2019-05-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除