自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大佬请赐教

经验的鸡肋,智慧的结晶

  • 博客(128)
  • 资源 (2)
  • 收藏
  • 关注

原创 各种常用指令

curl 接口url-X POST -H "Content-Type:application/json" -d '{"oprid":"100122","mchntid":"100000000003","orderid":"20210907095557062370"}'

2021-09-17 10:05:59 233

转载 不常用java知识

import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;public class Main { public static void main(String[] args) throws NoSuchMethodException { new Sub(); }}class Parent {}class Child extends Parent {}class.

2021-07-02 16:45:03 220

原创 git日常使用命令

1.git branch -a看不到gitlab上创建的分支命令:git fetch origin 指定分支名2.新建分支并切换到指定分支命令:git checkout -b dev_10047 origin/dev_10047该命令可以将远程git仓库里的指定分支拉取到本地,这样就在本地新建了一个dev_10047分支,并和指定的远程分支origin/dev_10047相关联。3.查看本地分支及追踪的分支命令:git branch -vv该命令显示本地所有分支关联的远程分支示例:* d

2021-06-01 10:03:38 1435

转载 jdbc连接oracle[service_name、sid、TNSName]不同写法

格式一: 使用ServiceName方式:jdbc:oracle:thin:@//<host>:<port>/<service_name>例 jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1526/CDEV@后面有//, 这是与使用SID的主要区别。(11g在@后不加//也OK)这种格式是Oracle 推荐的格式.因为对于集群来说,每个节点的SID是不一样的,而SERVICE NAME可以包含所有节点。格式二: 使用SID方式...

2021-05-31 15:32:09 575

原创 oracle sql调优

1.sql走索引分析explain plan for select语句select * from table(dbms_xplan.display);2.explain执行顺序sql执行过程有两个规则①根据Operation缩进判断,缩进最多的最先执行②Operation缩进相同时,最上面的是最先执行的如图执行计划,根据规则可以得出执行顺序:INDEX UNIQUE SCAN -> TABLE ACCESS BY INDEX ROWID -> INDEX RANGE SCAN .

2021-04-08 10:38:44 219

原创 linux下free内存查看

free -m -gused=total-free即total=used+free 实际内存占用:used-buffers-cached即total-free-buffers-cached 实际可用内存:buffers+cached+free第1行Mem数据:total 内存总数: 128 used 已经使用的内存数: 119 free 空闲的内存数: 8 sha...

2021-04-08 10:35:41 206

原创 布隆过滤器解决缓存穿透

111

2020-06-03 22:11:23 292

原创 Twitter SnowFlake算法

SnowFlake算法生成的ID值是一个64bit大小的整数,结构图如下1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 41位,用来记录时间戳(毫秒)。 41位可以表示个数字, 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至,减1是因为可表示的数值范围是从0开始算的,而不是1。 也就是说41位可以表示个毫秒的值,转化成单位年则是年 10位,用来记录工作机器id。 可以部署在个节点,包括5...

2020-05-23 08:50:33 279

原创 CompletableFuture使用详解

CompletableFuture引入CompletableFuture是java8引入的一个用于异步编程的工具类。我们根据CompletableFuture的简单示例来逐步介绍它的强大功能。 final CompletableFuture<String> cf = new CompletableFuture<String>(); T...

2020-05-07 15:52:24 1457 2

原创 Guava之EventBus实战

EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。定义EventBus@Configurationpublic class EventBusConfig { @Autowired private Applic...

2020-04-30 15:29:07 475

原创 Netty之心跳重连

心跳定义心跳即在TCP长连接中,客户端和服务器之间定期发送的一种特殊的数据包,通知对方自己还在线,以确保TCP连接的有效性。为什么需要心跳因为网络的不可靠性,有可能在TCP保持长连接的过程中,由于某些突发情况,例如网线被拔出,突然掉电等,会造成服务器和客户端的连接中断。在这些突发情况下,如果恰好服务器和客户端之间没有交互的话,那么它们是不能在短时间内发现对方已经掉线的.。为了解决这个问题,我...

2020-04-30 11:17:24 381

原创 Redis发布订阅模式

redis发布订阅架构Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。JAVA实现方式redi...

2020-04-27 16:35:32 458

原创 Netty之粘包拆包解决

粘包拆包表现形式产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。下面示意图能更加形象的说...

2020-04-27 15:30:22 440

原创 @RequestBody注解

1.使用@RequestBody接收页面参数: type: "POST", data: JSON.stringify({ "actiName":name }), dataType: "json", contentType: "application/json"2.不使用@RequestBody接...

2020-04-22 16:49:52 173

原创 实例分析join、left join、right join、fulljoin间的区别

分析INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN的ON、WHERE后面跟条件的区别准备表结构、数据新建表TAB1和TAB2,TAB1字段ID,SIZE;TAB2字段SIZ,NAMESELECT * FROM TAB1 LEFT JOIN TAB2 ON TAB1.SIZ = TAB2.SIZ,这里会生成一张临时表左连接SELECT * FROM TA...

2020-04-03 18:28:15 1798

原创 linux日常命令

一.grepgrep -n '关键字' log.logvim +n log.log二.sz、rzsz filename(下载)sz参数:-a以文本方式传输ascii,-b二进制方式传输binary, -e控制字符转义,保证文件传输正确sz -a files确定为文本文件sz -be files确定为二进制文件rz(上传)rz参数:-b二进制方式,默认文本方式,-e =对所有控制字符转义...

2020-02-29 16:47:06 276

原创 Netty之HashedWheelTimer源码分析

简介HashedWheelTimer是Netty的一个工具类,来自netty-common包,简单来说用于实现延时任务。使用场景:dubbo失败重试、netty中长连接超时(如客户端由于网络原因导致无法传送心跳至服务端)。优缺点优点:添加、删除、取消延迟任务,能高效地处理大批定时任务缺点:占用内存较高、避免创建多个HashedWheelTimer实例,时间精度要求不高结构图先根据上...

2020-02-26 12:37:26 799

原创 java读写锁ReentrantReadWriteLock源码分析

ReentrantReadWriteLock简介①读写锁在同一时刻可以允许多个读线程访问,但在写线程访问时,所有的读线程和其他写线程均被阻塞。保证了写操作对读操作的可见性②读写锁维护了一对锁,一个读锁和一个写锁,分离读写锁提升并发性能③一般情况下,读写锁比排它锁有更好的吞吐量和并发性ReentrantReadWriteLock特性公平性:支持公平和非公平获取锁方式,非公平吞吐量优于公平重...

2020-02-19 12:56:16 496

原创 浅析线程

线程与进程进程具有一定独立功能的程序,它是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈。两者关系一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。同一进程的所有线程共享该进程的资源。线程是进程内的...

2020-02-08 18:12:40 260

原创 java线程池 - Executor框架源码解析

为何使用线程池技术1.线程是重量级资源,线程创建、销毁需要耗费较大的性能,因此重复使用线程能极大地改善程序性能。2.线程并不是越多越好,线程数量和性能呈抛物线关系,而且通过new Thread方式创建的线程无法很好地进行管控。3.new Thread方式创建的线程不利于扩展,比如定时、定期执行任务,线程中断。线程池如何提升性能主要是避免了线程的创建、销毁这部分时间的耗费1.普通线程执行某...

2020-02-05 16:56:34 274

原创 FutureTask源码解析二

本篇主要介绍FutureTask源码我们知道FutureTask实现了RunnableFuture接口,即Runnable接口和Future接口,Runable可以对应FutureTask的task,表示FutureTask本质上也是一个task任务,而Future对应FutureTask中的Future,表示了我们对于这个task任务可以执行某些操作,如判断任务是否执行完毕,获取任务的执行结果...

2020-01-18 20:07:21 464

原创 FutureTask源码解析一

考虑到文章篇幅过长,分为两篇讲解本片主要介绍FutureTask涉及的一些接口和基本知识FutureTask简介FutureTask是一种可取消的异步计算任务,它实现了Future接口,代表了异步任务的返回结果。从而FutureTask可以启动和取消异步计算任务、查询异步计算任务是否完成和获取异步计算任务的返回结果。只有异步计算任务结束时才能获取返回结果,当异步计算任务还未结束时调用get...

2020-01-18 16:09:46 229

原创 ThreadGroup线程组

ThreadGroup简介顾名思义,线程组是多个线程的集合,可以对一批线程或线程组进行统一管理,比如中断interrupt(),destroy()。另外可以准确的定位到某个线程和进行统一的异常捕获。一个线程组中可以有线程,也可以有线程组,所以线程组的结构有点类似于树,如下所示下面通过代码来看,线程组的树形结构 public static void main(String[] a...

2020-01-17 21:38:58 396

原创 ThreadLocal原理分析

ThreadLocal简介ThreadLocal线程本地变量的副本,对一个线程内的变量的修改不影响其它线程的变量。即在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。①ThreadLocal实例通常在类中被定义为private static②ThreadLocal在线程的生命周期内起作用③空间换时间的设计思想ThreadLocal用法首先了解下ThreadLocal的基本用法...

2020-01-15 22:34:46 305

转载 AQS源码分析三

第一篇基于ReentrantLock公平锁分析了AQS的核心第二篇主要分析了Condition的实现原理以及线程中断的使用该篇主要的关注点是AQS的共享模式本文主要基于CountDownLatch来分析AQS的共享模式,同时分析了CyclicBarrier、Semaphore。CountDownLatchCountDownLatch是一个典型的AQS共享模式的使用使用场景:比如有N个任务,...

2020-01-11 16:43:54 159

转载 AQS源码分析二

上一篇讲解了从ReentrantLock公平锁源码了解AQS主要实现原理本文关注以下几点内容①深入理解ReentrantLock公平与非公平锁区别②深入分析AQS的内部类ConditionObject③深入理解Java线程中断和InterruptedException异常公平锁和非公平锁// 默认采用非公平锁public ReentrantLock() { sync = ne...

2020-01-08 21:48:48 158

转载 AQS源码分析一

AbstractQueuedSynchronizer(简写AQS)这个抽象类,它是Java并发包的基础工具类,是实现ReentrantLock、CountDownLatch、Semaphore、FutureTask等类的基础。本文将从ReentrantLock公平锁源码出发,分析下AbstractQueuedSynchronizer工作原理AQS结构AQS属性及含义// 头结点,你可以理...

2020-01-06 22:16:03 160

转载 LongAdder原理分析

LongAdder由来LongAdder类是JDK1.8新增的一个原子性操作类。AtomicLong通过CAS算法提供了非阻塞的原子性操作,相比受用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足于此,因为非常搞并发的请求下AtomicLong的性能是不能让人接受的。如下AtomicLong 的incrementAndGet的代码,虽然AtomicLong使用CAS算法,但是CA...

2020-01-05 20:29:27 18567 10

原创 java原子类

什么是原子类原子是最小粒度的,操作不可分割的。原子类作用对多线程访问同一个变量,我们需要加锁,而锁是比较消耗性能的,JDk1.5之后, 新增的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式, 这些类同样位于JUC包下的atomic包下,发展到JDk1.8,该包下共有17个类, 囊括了原子更新基本类型、原子更新数组、原子更新属性、原子更新引用jdk1.8新增原子类Do...

2020-01-04 20:03:54 584

转载 java阻塞队列之SychronousQueue

SynchronousQueue原理详解-公平模式https://www.cnblogs.com/dwlsxj/p/Thread.htmlSynchronousQueue原理详解-非公平模式https://www.cnblogs.com/dwlsxj/p/synchronousqueue-unfair-pattern.html

2020-01-01 17:19:54 381

原创 java阻塞队列之LinkedBlockingQueue

LinkedBlockingQueue简介①LinkedBlockingQueue底层数据结构单向链表②获取元素按照FIFO原则③头尾通过独立的锁来控制并发④可以构建时指定容量,默认为Integer.MAX_VALUE,无界队列,使用时注意内存溢出问题!​​​​LinkedBlockingQueue内部属性// 链表结点结构static class Node<E> {...

2019-12-30 15:18:36 339

原创 java阻塞队列之LinkedTransferDeque

LinkedBlockingDeque是一种支持双向并发的阻塞队列。LinkedBlockingDeque特性1.底层数据结构双向链表。2.同时支持FIFO和FILO,从队列的头和尾同时操作(插入/删除)。3.线程安全,使用重入锁ReentrantLock和两个Condition来控制并发。4.容量可选(防止过度膨胀),即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MA...

2019-12-27 11:04:26 181

转载 java阻塞队列之LinkedTransferQueue

https://segmentfault.com/a/1190000016460411?utm_medium=referral&utm_source=tuicool

2019-12-23 11:15:33 133

原创 java阻塞队列之DelayQueue

DelayQueue简介一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。DelayQueue使用场景1.清掉缓存中超时的数据2.超时任务处理DelayQueue特性1.使用重入锁ReentrantLock和avail...

2019-12-20 17:41:42 237

原创 java阻塞队列之ArrayBlockingQueue

ArrayBlockingQueue简介它是 BlockingQueue 接口的有界队列实现类,底层采用数组来实现。ArrayBlockingQueue的特性1.其并发控制采用可重入锁来控制,不管是插入操作还是读取操作,都需要获取到锁才能进行操作,它采用一个 ReentrantLock 和相应的两个Condition来实现。2.采用FIFO的原则对元素进行排序添加3.既然是有界,它在示...

2019-12-19 23:04:02 308

原创 java阻塞队列之PriorityBlockingQueue

PriorityBlockingQueue简介它是一个数组实现的带优先级无阻塞队列并发安全队列。PriorityBlockingQueue的特性1.PriorityBlockingQueue内部是一个数组queue,但是其实数据结构是使用数组实现的一个最小堆,压入队列时需要计算最小堆,弹出队列时需要重新调整根节点。2.带优先级的队列(带排序功能)。3.无界队列,默认队列大小为11,当队列满...

2019-12-19 22:26:03 599

原创 NIO selector多路复用

public class NioServer { // 通道选择器,监控多个Channel并决定哪些channel能进行读或写,一个selector管理多个channel private Selector selector; public NioServer init(int port) throws IOException{ // 创...

2019-11-14 11:36:53 146

原创 Netty启动流程

1. 服务端启动流程// ServerSocketChannel初始化注册过程bind(int inetPort)- doBind(final SocketAddress localAddress)- initAndRegister()- this.channelFactory.newChannel()(实例化NioServerSock...

2019-11-13 17:46:30 245

原创 hmily源码解读

一阶段TRYING入口点orderService.orderPayorderService.orderPay -> CglibAopProxy$DynamicAdvisedInterceptor.intercept -> methodProxy.invoke -> OrderServiceImpl.orderPay业务...

2019-10-31 11:35:37 401 1

原创 tcc-transaction源码解读

一.try阶段入口点PaymentServiceImpl.makePayment方法的@Compensable注解,该注解会被aop拦截。CompensableTransactionAspect切面拦截进入CompensableTransactionInterceptor的interceptCompensableMethod,此时事务类型ROOT全局事务,执行rootMethodProcee...

2019-10-25 15:30:46 339

tomcat-7.0.42-src源码爱好者(已编译导入直接可用)

tomcat源码爱好者,了解tomcat内部运行原理,从而更熟悉的利用tomcat,借鉴其中的框架,用于日常开发中。

2018-02-06

jquery_validate

jquery验证的各种方式,包括自定义,远程remote验证等等

2010-11-15

空空如也

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

TA关注的人

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