自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 一次使用Redis做短信次数验证的小思考

前文都好久没写博文了,一转眼都一个月过去了,今天写点儿简单的,是我工作中遇到的,前一段时间做一个任务,里面涉及到一个发送短信次数的验证:需求原需求是这样的:要求用户没小时发送短信的次数不能超过5次,如果超过了就当天限制发送!想法拿到这样的需求,各位小伙伴会有怎么样的想法呢,你心中的方案是什么?话不多说!我一开始的第一个想到的方案 是 存数据库 建一张表 记录发送的记录 然后每次发送的时候 查表再做下验证!为嘛为会这么想呢,因为我看系统里面之前发送短信频次的验证就是这么写的!如果这样时候

2020-08-22 19:13:22 840 2

原创 Java多线程-ThreadPoolExecutor是怎么去执行一个任务的?源码分析

前言前面一遍文章 我们看了下FutureTask的源码,知道了怎么样去获取一个任务的返回值,今天我们看下ThreadPoolExecutor。ThreadPoolExecutor 看名词 我们就可以 看做是ThreadPool 和Executor的结合,大概意思我们也能知道就是线程池执行器,哈哈这翻译 真棒。这篇博文 会从源码的角度去分析下 一个线程任务 加入的线程池以后 是怎么被执行的~线程池上面 说线程的时候 我们也说过 线程是系统中极其珍贵的资源,那我们要合理的使用他,所以有了线程池的出现,那

2020-07-20 12:03:41 1074

原创 ConcurrentHashMap 怎么样去保证线程安全的, 读操作为什么不需要加锁

ConcurrentHashMap前言分析初识ConcurrentHashMap数据结构对比HashMap和ConcurrentHashMapConcurrentHashMapinitTable初始化put的线程安全transfer 扩容时的线程安全get总结前言最近在看公众号 看到一个问题:为什么 ConcurrentHashMap 的读操作不需要加锁?第一次看到这个问题的时候 我也确实比较懵逼 我虽然知道ConCurrentHashMap 是怎么在put的时候 去保证线程安全的,但是真的没关注

2020-07-01 23:18:26 2021

原创 带你看看Java的锁(一)-ReentrantLock

带你看看Javad的锁-ReentrantLock前言ReentrantLock简介Synchronized对比用法源码分析代码结构方法分析SyncNonfairSyncFairSync非公平锁VS公平锁什么是公平非公平ReentrantLockReentrantLock的构造函数lock加锁方法非公平的加锁公平的加锁unlock解锁总结公平锁 VS 非公平锁Synchronized VS Ree...

2020-04-05 19:49:10 266

原创 带你看看Java-AQS同步器 源码解读四 条件队列Condition上

Java-AQS同步器 源码解读-条件队列Condition前文为什么需要条件队列Conditon Queue举个小例子分析怎么使用条件队列写个小DemoJDK中是怎么使用的Lock和ConditionLockConditionSync-Queue和Conditian-QueueAQS Condition的实现条件队列-await源码分析条件队列-signal源码分析总结Java-AQS同步...

2020-04-01 01:37:38 473 3

原创 FlinK KeyBy分布不均匀 问题的总结思考

背景最近 公司组织架构调整,我也被调整到了 数据中台组,刚好最近分配到一个需求任务,这个任务其实也很简单,就是公司的BI分析需要一个维护的 统计分析数据 ,这部分数据 由于一些历史等原因,是solr 那边 做完索引的专利数据,发对应的专利消息到对应的Kafka 的一个topic 中,我们数据组这边消费消息后,做一些etl 的工作后 入库,为了保证数据的实时性,我们采用了Flink 来消费Kafka的消息,我这边只要在我们的处理专利数据的sink中,新增一个逻辑 处理这份数据,然后入库,最终提供给BI那

2022-03-28 00:45:39 2946 6

原创 记一次服务假死的问题排查

日常问题总结

2022-03-05 14:29:19 774

原创 FastJson 过滤复杂数据对象

FastJson 过滤复杂数据对象前言描述分析SimplePropertyPreFilter 的使用过滤名称重复的字段改良的版本依旧不灵活的问题最终版本过滤带层级属性 PropertyPreFilter其余的过滤器介绍总结前言很久 没有 写博客了 一晃都已经2个月了 到新东家也有2个月了,好快!博客还是要重新拾起了,养成一个好习至少要21天 但是毁掉它只需要一个借口~描述先描述下问题,最近做了一个任务,主要是处理数据的问题,所有的原始数据存在的我们的Nosql 数据库中,使用的是AWS 的Dyn

2020-11-10 17:05:12 786 1

原创 面试总结:2个栈去实现一个队列

说明博主我最近去面试,面试的公司问了很多问题,其中有2个和算法相关的题目,没回答上来,后来回来仔细看了下 其实也是很简单的,主要还是这些年 忽略了基础的一些算法,立下个Flag 这下半年 好好的 温习下算法,刷下leetcode.话不多说,其中的一问题是这样的:面试官:你知道栈结构么?栈和队列有啥区别?怎么用2个栈去实现一个队列?栈??? 嗯嗯 知道这个结构 但是很少用呀~? 栈和队列的区别不就是 数据一个树先进先出,一个先进后出么!2个栈实现一个队列???分析其实这个题目,我很久之前就看过

2020-09-07 16:55:47 184

原创 你知道ThreadPoolExecutor是怎么存储线程池状态和线程数量的么?

前言最近在看ThreadPoolExecutor的源码,里面在处理存储线程池的状态和线程池里面的大小感觉特比有意思,所以单独拿出来和大家分享下~怎么去存储状态和工作线程数,我们一步步的来看看,最后最下总结,总结下为什么这么去做分析 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static final int COUNT_BITS = Integer.SIZE - 3;//

2020-07-17 00:44:40 1118 3

原创 Java多线程-FutureTask是如果获取返回值的?

简介本篇 是Java 多线程的 开篇,这篇 主要简单的聊了下线程的几种创建方式,然后从源码的角度去分析了下FutureTask,FutureTask这个类 既和Callable有关系,又和Runnable有关联,并且是实现了Future这个接口,能够很好的管理我们的Callable或者Runnable。线程我们简单说下线程:线程是操作系统能够调度的最小单位,它是被包含的在进程中执行的,一个进程中可以包含多个线程,每个线程执行不同的任务。线程的几种状态线程的几种创建关于 这个问题 有人说 三种创

2020-07-11 18:51:14 1419

原创 HashMap 容量大小的问题-为什么长度都是2的幂?

前言在之前的文章 我分析过HashMap 初始化容量的问题 不清楚的可以看这个。经过这篇文章 我们知道了 HashMap是什么时候 设置容量大小的,容量大小和容量的阀值 是怎么计算的,但是有的小伙伴 包括我 可能对一点比较好奇 为什么默认的容量是16 而且计算是自己容量的时候,最终计算出来的容量也是2的幂次方?可能 有的小伙伴知道 这个是为了 降低哈希碰撞率,那是为什么呢?那我们今天就来聊一聊分析容量计算 /** * Returns a power of two size f

2020-07-07 12:03:48 357 1

原创 HashMap 容量设置-什么时候初始化

HashMap 容量设置问题的分析前言问题剖析源码分析初始化存放元素resize()总结前言最近 在看 HashMap 看到一个问题:HashMap 初始容量设置为 10000 时,放入 10000 条数据是否需要扩容;如果初始容量设置为 1000 时,放入 1000 条数据是否需要扩容?不知道有多少小伙伴 能回答出这个问题哈问题剖析看到这个问题 我一开始也不知道,但是从题目中 我们可以看出 初始容量的设置大小 对后面的 存放数据的多少 一定有影响 不然问题也不会这么问。我们知道

2020-06-29 15:20:20 1607

原创 SpringMVC(三)-DispatcherServlet(一)

FrameworkServlet前言结构HttpServletBeanFrameworkServletcontextConfigLocationcontextClasswebApplicationContextinitServletBeaninitWebApplicationContextrootContextfindWebApplicationContextcreateWebApplicationContextonRefreshconfigureAndRefreshWebApplicationContex

2020-06-27 18:29:04 191

原创 SpringMVC(二)-ContentLoaderListener去创建Root web容器

前言今天继续上一篇文章,上篇文章中只要将了 我们SpringMVC 中的ContextLoaderListener 是怎么被加入监听 然后tomact又是怎么去加载web.config配置的 最后怎么去调用ContextLoaderListener#contextInitialized方法的 不清楚的小伙伴 可以回到上篇文章 去看下ContextLoaderListener我们从前文中分析得到 程序启动的时候 是调用了contextInitialized的方法那我就从这个方法入手 看看到底执行

2020-06-26 17:43:46 186

原创 SpringMVC(一)-细聊ContextLoaderListener 是怎么被加载的

SpringMVC-ContextLoaderListener前言标准配置Spring Root容器ContextLoaderListener 是被怎么执行的listenerContextLoaderListenerServletContextListenerServletContextApplicationContextStandardContextContextConfig在继续深入下总结一下前言距离上一篇博客已经一个多月了 感觉都好久了!今天决定还是写篇博客 让自己坚持下,不然再这么下去就荒废了

2020-06-21 22:11:20 537 2

原创 Spring 循环引用(三)源码深入分析版

循环引用源码分析前言正文分析doGetBean为什么Prototype不可以createBeandoCreateBeangetEarlyBeanReferencegetSingletonbeforeSingletonCreationsingletonFactory.getObjectafterSingletonCreationaddSingletonaddSingletonFactorygetSingleton(beanName)核心说明缓存的说明执行流程图构造器的注入解决解决方法总结前言关于Sprin

2020-05-10 21:34:47 606 1

原创 Spring AOP 动态代理(二)

简介Spring AOP 大家在使用Spring 框架 一定非常的熟悉Spring AOP 的本质其实就是实现了动态代理,这个和Aspectj不一样,AspectJ 是直接修改你的字节码 完成的代理模式其实很简单 主要包括 接口+真实的实现类+代理类 在真实类的实例化的时候 使用代理类,所以需要 Spring AOP 做的是生成一个代理类,然后替换真实的类 去对外提供服务那怎么去替换呢?...

2020-05-05 12:23:38 263 3

原创 谈谈Spring bean的生命周期(一)

简介本片文章主要讲Spring IOC容器中 bean 的生命周期Spring bean 生命周期Spring 中bean的声明周期 可以分为如下4个阶段:实例化阶段–Instantiation 调用构造函数属性赋值阶段–Populate 设置依赖注入初始化—Initialization 调用Init方法销毁—Destruction 调用Destory方法各阶段的接口和方法...

2020-04-22 00:47:01 218

原创 一起聊聊 JVM垃圾回收器(三)

JVM垃圾回收器垃圾回收知识点引用计数可达性分析4种引用对象垃圾回收算法标记清除算法标记整理算法复制算法分代垃圾算法JDK 垃圾回收器SerialParNewParallel ScavengeSerial OldParallel OldConcurrent Mark SweepG1G1特点G1的运行步骤G1 的问题G1 提供了2中模式垃圾回收机制对象优先分配到Eden区大对象直接分配到老年代长期存...

2020-04-16 12:37:52 195

原创 一起聊聊JVM 运行时数据区(二)

JVM 运行时数据区运行时数据区共享区堆区方法区隔离区虚拟机栈栈帧本地方法栈程序计数器运行时数据区JVM 运行时数据区主要分为5块方法区 JDK1.8以后叫做元数据区(Metaspace)堆区虚拟机栈区本地方法栈区程序计数器方法区和堆都是线程共享的,在JVM启动时创建,在JVM停止时销毁,而Java虚拟机栈、本地方法栈、程序计数器是线程私有的,随线程的创建而创建,随线程的结束而...

2020-04-13 22:44:18 125

原创 一起聊聊JVM 虚拟机&&类加载(一)

JVM 虚拟机&&类加载虚拟机虚拟机简介Class 文件常量池虚拟机类加载加载验证准备解析字段的解析类方法解析接口方法解析类加载器加载器类型双亲委派什么是双亲委派如何打断为什么要使用双亲委派虚拟机虚拟机简介Java 虚拟机(JVM)是运行java程序的抽象计算机,它是计算机设备的规范,可以采用不同方式进行实现,java 程序通过运行在JVM中实现跨平台,一次编译到处运行,不同...

2020-04-13 02:02:14 383

原创 带你看看Java的锁(三)-CountDownLatch和CyclicBarrier

带你看看Java中的锁CountDownLatch和CyclicBarrier前言基本介绍使用和区别核心源码分析总结前言Java JUC包中的文章已经写了好几篇了,首先我花了5篇文章从源码分析的角度和大家讲了AQS,为什么花5篇时间讲这个,是因为AQS真的很重要,JUC中提供的很多实现都是基于AQS的,所以说看懂AQS中的代码很重要,看不懂的 多看几遍,上网多找找文章,这个时...

2020-04-11 18:46:43 233

原创 带你看看Java的锁(二)-Semaphore

带你看看Java的锁-Semaphore前言简介使用源码分析类结构图SyncNonfairSyncFairSyncSemaphore 构造函数Semaphore 成员方法获取释放总结前言简介Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同时拥有资源,是A...

2020-04-09 01:52:43 212 1

原创 带你看看Java-AQS同步器 源码解读五 条件队列Condition下

Java-AQS同步器 源码解读-条件队列Condition下AQS Condition-下AQS Condition的实现AQS中的ConditionObject和node条件队列-await源码分析0-await方法1-addConditionWaiter2-fullyRelease3-isOnSyncQueue4-while方法体内部5-while之后的方法6-await 总结条件队列-si...

2020-04-02 13:32:24 260

原创 带你看看Java-AQS同步器 源码解读2-独占锁解锁

Java-AQS同步器 源码解读独占锁解锁独占锁解锁release方法tryRelease方法unparkSuccessor方法总结Java-AQS同步器 源码解读1-独占锁加锁Java-AQS同步器 源码解读2-独占锁解锁Java-AQS同步器 源码解读3-共享锁今天继续在昨天的源码分析嗷嗷!!!昨天 我们看了加锁的代码,今天我们来看下解锁的代码,解锁的入口又怎么看呢?...

2020-03-27 13:30:13 220

原创 带你看看Java-AQS同步器 源码解读3-共享锁

Java-AQS同步器 源码解读三-共享锁共享锁共享锁加锁Semaphore初始化Semaphore获取 acquire() 方法重写tryAcquireShared的实现doAcquireSharedInterruptibly 获取失败后排队setHeadAndPropagate方法doReleaseShared方法共享锁解锁Semaphore 调用release 方法AQS类 releaseS...

2020-03-27 13:13:04 364

原创 带你看看Java-AQS同步器 源码解读1-独占锁加锁

带你看看Java-AQS同步器 源码解读<一>AbstractOwnableSynchronizerAbstractQueuedSynchronizerAQS 内部NodeAQS 实例属性独占锁 加锁acquire方法tryAcquire(arg) 方法addWaiter(Node.EXCLUSIVE)方法enq 方法acquireQueued方法shouldParkAfterFail...

2020-03-26 20:36:33 430

空空如也

空空如也

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

TA关注的人

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