自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

葵续浅笑的博客

争取每天都有进步

  • 博客(126)
  • 资源 (7)
  • 问答 (1)
  • 收藏
  • 关注

原创 Elasticsearch搜索与排序经验小记

这篇文章更多的是实践经验而非es原理解析,自己经验小记下来,抛砖引玉,一得之见。

2023-06-18 15:41:03 3577 1

原创 MySQL查询计划key_len如何计算

desc 中的 key_len 表示使用的索引长度,是以字节为单位。根据这个值,就可以判断索引使用情况,特别在使用联合索引的时候,判断有多少的索引字段能被查询用到。

2022-07-15 12:45:32 443

原创 HTTPS 原理简要总结

HTTPS 的原理最近看了下《图解 HTTP》,对 HTTPS 怎么实现安全的原理总结了一下。HTTPS 的原理要从怎么解决安全性问题来一步步阐明,这样说起来会更清晰一点:如何解决网络传播中数据安全问题?答:运用对称加密或者非对称加密来加密数据内容。https 使用对称加密加密数据内容,不使用非对称加密是因为性能比对称加密更差。对称加密的密钥需要双方都要知道,如何保证密钥安全?答:使用非对称加密加密对称加密的密钥。客户端拥有非对称加密的公钥,对对称加密的密钥加密后,传给服务端,服务端用非

2022-02-01 20:07:50 1957

原创 Tomcat整体架构+启动流程+各种线程 随手小记

最近学了一下tomcat启动流程,顺便把里面的各种线程/优化点梳理了一下。因为tomcat架构确实繁杂,也不想大费周章一点点写了,就当给自己的笔记,也就大概自己能看懂了,啊哈哈。tomcat启动流程图自己整理了一下uml时序图。主要还是要了解tomcat整体架构,如下图,重点在于了解:connector 负责接收http请求,这时候tomcat还是一个http服务器。Engine,host,context,wrapper 则是负责servlet容器启动,启动后http请求会根据路由规则转发到指定的

2021-11-28 10:51:33 1312

原创 spring之我见 - 从 RefreshScope 理解IOC的世界不仅仅只有单例

从 getBean 讲起getBean 方法是我们的老朋友,在里面有一个细节我们可能会忽略。spring ioc 针对不同的 bean 管理模式有不同的执行策略,而我们最常见熟知的就是单例和原型,下面就是在创建bean的时候首先根据不同的管理策略执行不同的逻辑方法,而我们今天要讲的是比较少走的else逻辑部分。if (mbd.isSingleton()) { ...}else if (mbd.isPrototype()) { .....}else {

2021-09-30 18:05:06 273

原创 G1调优实践日记--被误解的MetaspaceSize

MetaspaceMetaspace 大家应该很熟悉了,所有线程共享的一块内存区域,主要存放已被虚拟机加载的类定义,方法定义,常量等一些元数据信息,运行时常量池(Runtime Constant Pool)也是方法区的一部分,Class 文件中的常量池表(Constant Pool Table,里面各种字面量和符号引用),被类加载后就放入方法区的运行时常量池 。运行时常量池并不只有编译时才往里放东西,运行时也可以放新的常量,比如 String.intern()。有一个别名叫“非堆”。jdk1.8以后直接

2021-08-27 18:01:23 3629

原创 spring之我见 - Ribbon如何在RestTemplate起作用(SmartInitializingSingleton)

还是IOC的知识 – Ribbon是何时塞入RestTemplate中的ribbon是一个客户端侧的负载均衡器,如果你使用 restTemplates 和 eureka, ribbon会将url中的 服务名 直接转换成请求的ip, 而 restTemplates 内部有一个 interceptors list(拦截器),让 ribbon 有地方可以施展拳脚. 那么在spring启动的时候,是什么时候把 ribbon 塞进 restTemplates 的拦截器中的呢?public abstract c

2021-07-15 18:09:02 288

原创 spring之我见 - Spring AOP实现原理(下)

预备材料这一篇需要先把我本地的demo应用代码放出来。然后上篇说到, 我们已经准备好了各种食材,这一篇真正开始看看 AOP 是怎么代理某个对象的.@Aspect@Componentpublic class TestAspectJ { @Pointcut("execution(* com.example.demo.service.TestService.test())") public void testPointcut() { } @Before("testPoi

2021-06-02 18:22:31 306 1

原创 spring之我见 - Spring AOP实现原理(上)

前言以前写过一篇文章, 专门讲了spring的动态代理实现原理 从代理模式再出发!Proxy.newProxyInstance的秘密, 这一次我们探究下动态代理模式比较重量级的应用 – Spring AOP 的源码实现. 本文重在讲主流程, 为了让流程更清楚, 本篇会补上很多Spring IOC 的知识.spring-boot-starter-aop 的启用 - ConfigurationClassPostProcessorConfigurationClassPostProcessor的由来都知道要

2021-05-19 14:49:49 321 1

原创 一窥TransmittableThreadLocal

ThreadLocal在我们平时的开发中很常见,拥有线程级别的变量共享,但是现在的项目都是跨线程的调用,如果主线程创建了另一个线程(父子线程),另一个线程还能拿到主线程的数据吗?这时候ThreadLocal就力不从心了,还好jdk提供了InheritableThreadLocal类,我们稍微讲下InheritableThreadLocal在跨线程间变量传递的原理。在Thread类里,除了threadLocals 变量,还有一个inheritableThreadLocals变量,两者类型一模一样。inher

2021-01-18 15:32:02 955 1

原创 G1调优实践日记--G1HeapWastePercent和InitiatingHeapOccupancyPercent的应用

背景最近有个算文本相似度的需求,当然这算法copy过来没做过什么验证就直接上线了,然后应用程序莫名就开始OOM,然后进程直接被kill掉,当然一开始我没想起来是这段算法代码的锅,我把java_pid18776.hprof文件down下来先用jprofiler研究了一番,居然发现没有什么大对象,然后我以为是其它原因,比如kafka消费量大导致的问题,然后去折腾jvm参数。直接导致我因为没有找到根本原因白白浪费时间。但是有失必有得,这次我也了解了G1的一些有用的调优参数,帮助我后期更了解G1顺便抱怨一句,下

2020-11-11 18:06:40 13429 5

原创 Redis的用武之处--redis lua脚本实践令牌桶限流

何为令牌桶限流之前写过 限流工具类的文章Redis的用武之处–由短信限流引出的分布式锁和漏斗限流(上)Redis的用武之处–由短信限流引出的分布式锁和漏斗限流(上)但是后面了解发现自己当初写的确实不伦不类,对漏斗限流的理解有误,再加上代码里面为了保证原子性,用了很多重量级锁,对性能也有影响,所以看了这篇文章后,决定重新写限流工具。简析限流算法根据自己的实际业务,我选择令牌桶作为我的限流算法,该限流算法简单说就是一个桶里匀速会一直放令牌,当有任务要执行时,它必须先从令牌桶里取一个令牌,如果桶里有令

2020-10-13 13:44:38 306

原创 @Transactional内部的秘密

我们都知道Transactional是通过aop实现的,这里介绍一下更底层的代码原理,我们直接从AnnotationAwareAspectJAutoProxyCreator这个类开始分析, 也就是说当一个服务类的某个方法带上了@Transactional时,这个类是如何帮助生成代理类的.AnnotationAwareAspectJAutoProxyCreator 的继承图如下图所示,我们可以看到它本质是一个BeanPostProcessor,BeanPostProcessor 会在对象初始化的前后,对对象

2020-07-21 17:04:53 843

原创 spring之我见- spring循环依赖为啥是三级缓存?

单例在spring里的获取方式今天讲一下spring中针对单例bean的循环依赖问题,本着追本溯源的学习理念,我们要先知道单例在spring中怎么管理的。spring获取实例都通过beanfactory的getBean方法获取实例,顺着代码而下,在doGetBean方法(AbstractBeanFactory)中,单例总是通过getSingleton()方法获取缓存实例。protected &...

2020-03-06 15:35:34 2320

原创 mysql索引实用优化实践

背景最近在写一些数据统计的面板,里面有sql对表数据的聚合统计,我的主表现在有100来万的数据,其间看了很多资料。记录一下sql索引的优化过程. sql 如下,只有一个连表查询,再加上函数聚合出结果select count(if(b.severity = 1, true, null)) severityAllNum, count(if(b.severity = 2, true,...

2020-01-13 19:29:26 368

原创 JAVA锁的集大成应用者--synchronized的锁优化

前言之前博客转载过美团的锁介绍文章 【基本功】不可不说的Java“锁”事–转自美团技术博客,写的非常好,但是在锁的落地中,有哪个可以囊括大部分锁的落地应用,我觉得synchronized可以是一个。下面就讲讲synchronized的锁优化。对象头我们用过synchronized的都知道,它的使用语法是用一个对象来当“钥匙”的。哪个线程有这把钥匙,哪个线程就可以自由出入synchronize...

2019-11-12 15:34:04 222

原创 钉钉机器人限流应对方案--延迟队列的实现和内存泄漏思考(下)

没有被回收的对象上篇文章介绍了自己写的延迟队列工具。我们提到,延迟队列不需要长久存活,我们使用带有lru功能的LinkedHashMap来淘汰一些不常用的LimitUtil。但是对象有没有真的会回收呢?简单写了一个测试类,建了三个对象,Lru容量设为1LRU<String, LimitUtil> map = new LRU<>(1, 0.75f);@Test ...

2019-10-15 17:45:03 825

原创 钉钉机器人限流应对方案--延迟队列的实现和内存泄漏思考(上)

需求最近做公司的报警系统,需要做钉钉推送报警信息,但是钉钉有限流措施,一分钟内发多了会导致"send too fast"异常,虽然我们可以通过限流工具来拒绝多余的信息,但是我们希望信息不要漏掉.如果推送时间接受可以晚一点的话,我们可以通过延时队列解决。JDK里的延时队列其实jdk就有现成的延时队列 DelayQueue。里面存放的元素必须要全部实现 Delayed接口,Delayed接口只有...

2019-10-14 19:50:43 2451

原创 CyclicBarrier自旋改造

前言最近java的concurrent库学习的热火朝天,有以 悲观锁 为代表,AQS运用的如火纯青的LinkedBlockingQueue,ArrayBlockingQueue。也有 乐观锁 为代表,把 CAS+自旋 演示的出神入化的ConcurrentLinkedQueue。当然还有像ReentrantReadWriteLock为代表,犹如教科书般的 独占锁+共享锁 实际运用。总之一句话,D...

2019-07-12 17:48:14 191

原创 聊聊ReentrantLock的锁设计

前言之前看过美团的一篇不可不说的Java“锁”事,对java锁的概念做了一次梳理,其实在java类中,ReentrantLock算是一个对锁概念运用的典范,看懂它的源码对锁的理解很有帮助。我也以ReentrantLock为原型,略加改动使之能在分布式环境中运行。幕后功臣AQS当我们看第一眼ReentrantLock源码,里面有一个Sync对象,它继承AbstractQueuedSynchro...

2019-06-18 14:35:42 370

原创 记一次OOM排查过程(入门版)

第一次线上遇到问题,最近也在学jvm,记录一下,算是一个入门版jvm故障排查,希望能给新手带来一点干货。背景机器 (2c8g) 默认jvm部分关键参数配置:Xmx 最大堆内存Xms 最小堆内存UseG1GC 使用G1垃圾回收器PrintGCDetails/PrintGC 打印GC详细日志HeapDumpOnOutOfMemoryError 这个是故障排查关键,会在OOM的时候生成...

2019-06-06 10:43:14 1774

转载 【基本功】不可不说的Java“锁”事--转自美团技术博客

前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:乐观锁 V...

2019-03-04 15:16:03 391

转载 Spring主从数据库的配置和动态数据源切换原理

在大型应用程序中,配置主从数据库并使用读写分离是常见的设计模式。在Spring应用程序中,要实现读写分离,最好不要对现有代码进行改动,而是在底层透明地支持。Spring内置了一个AbstractRoutingDataSource,它可以把多个数据源配置成一个Map,然后,根据不同的key返回不同的数据源。因为AbstractRoutingDataSource也是一个DataSource接口,因此,应用程序可以先设置好key, 访问数据库的代码就可以从AbstractRoutingDataSource拿到对

2022-03-06 17:14:07 1005

原创 从方法调用看Java语言的 `静态多分派,动态单分派` 特性

方法调用方法调用对虚拟机来说并不只是执行一个方法,更重要的是确定要执行的目标方法,比如在复写的情况下,要知道该调用父类还是子类的方法。而在重载的情况下,又要在多个同名的方法中选取一个执行。当我们慢慢打开虚拟机的黑盒时,对虚拟机大致的执行逻辑也就一目了然。解析调用在class文件字节码中,因为没有分配内存,调用方法都是一个个符号引用表示依赖关系,在类加载的解析阶段,符号引用会转换为直接引用(确定内存地址),这种在 编译期间即可知,运行期间不会变 的叫做解析, 而符合这种方法有静态方法,私有方法,被f

2021-09-01 10:58:12 217

原创 String与常量池

这一篇主要还是记录一下String 对象的创建,通过一个个小例子总结一下 String a = "1"; String b = "1"; System.out.println(a == b);这个 a 和 b 取的都是 Constant pool 常量池,我们用javac看一下字节码文件。javap -v StringJson 的执行结果,可以看到 String 1 取的都是 Constant pool 里的#2, 那程序的执行结果也很明确了, 为

2020-06-14 14:19:52 126

原创 nginx构建图片服务(裁剪+压缩+缓存)

背景最近和朋友在建一个小站,主要展示图片的,对象存储服务囊中羞涩,就根据nginx自己弄一个图片存储服务,实现了动态压缩,裁剪以及缓存等功能。ngx_http_image_filter_modulenginx 有很多现成好用的模块,ngx_http_image_filter_module就是专门用来处理图片的,如果一个网站需要缩略图或是指定尺寸的图片,image_filter_module会...

2019-08-25 22:18:33 2998

转载 深入理解Java内存模型(七)-- 总结

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完...

2019-06-01 17:10:34 120

转载 深入理解Java内存模型(六)-- final

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。增强的final语义与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个fina...

2019-06-01 16:51:45 116

转载 深入理解Java内存模型(五)-- 锁

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的...

2019-06-01 16:03:53 91

转载 深入理解Java内存模型(四)-- volatile

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对...

2019-06-01 15:36:52 116

转载 深入理解Java内存模型(三)-- 顺序一致性

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序...

2019-06-01 14:51:41 213

转载 深入理解Java内存模型(二)-- 重排序

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 ...

2019-06-01 14:31:00 98

转载 深入理解Java内存模型(一)-- 基础

很棒的一个关于Java内存模型系列文章转载自并发编程网 – ifeve.com本文链接地址: 深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。提纲java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。本文大致分三部分:重排序与顺序一致性;三个同步原语(lock,vo...

2019-06-01 12:50:28 184

原创 Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(下)

分布式锁有些人应该用过Redission这个redis中间件框架,它以 使用者忘记redis本身命令,而更多关注业务为目标,所以它的api不同于jedis,redission就原生提供了分布式锁,限流器等现成的工具类。我以重复"造轮子"为宗旨,试着写写这个分布锁。上一篇我们知道光一个漏斗限流在生产环境是不行的,容易因为并发导致出现问题,我们需要给这个限流器上一把锁,先贴流程图/代码:这把锁...

2019-04-27 16:30:26 545

原创 Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(上)

需求项目有一个群发短信提醒的模块,这种东西做出来就需要谨慎,要做好单位时间限流,不然因为bug而导致短信发送失控那就不得了了,

2019-04-27 14:14:37 831

原创 代理模式及FactoryBean的实际运用--Mybatis Mapper文件的华丽转身

Mybatis的Mapper我们很熟悉,我们只需要提供sql和一个接口,其余与数据库的交互全部交给了Mybatis解决,但是,mapper文件我们只提供一个接口,这个接口是怎么和spring结合完成我们预期的要求?FactoryBean一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大...

2019-03-06 11:01:48 3291

原创 spring之我见--从Filter机制看设计模式(责任链模式,装饰器模式)

最近为公司一个项目写一个简单的网关,其实也就是一个filter做一些token解析/校验。但是光这一个filter就不简单,现在就说说里面运用的设计模式。Filter的核心-责任链模式Filter: 属于javaweb中一个重要的组件,对请求资源进行处理(request和response)。FilterChain: 管理着所有filter的顺序和执行,就像一个链条。通过这种链式串联,我们就...

2019-02-16 16:53:29 3685

原创 spring之我见--spring boot的组件化(以logging日志初始化为例)

之前写了java的多级缓存,是一个简单的util工具包,想着能不能跟springboot 做集成,顺便了解下spring boot 组件原理,比如众多的 xx-spring-boot-starter.这篇文章以 spring boot 2.x为基础。如何读取配置文件这个是面临的第一个问题,以logging 日志的集成为例。我们都知道logging日志的配置可以配置以&amp;amp;amp;amp;quot;logging.leve...

2019-01-03 21:45:33 2471

原创 实现简单的JAVA多级缓存(Caffeine + redis)

需求好久没写文章啦,之前写的文章到现在也没有收尾,没办法,时间不多啊,旧坑没有填完就开始开新坑,最近项目组长说实现一个多级缓存,通常我们喜欢把cache放到redis里,可以把访问速度提升,但是redis也算是远程服务器,会有IO时间的开销,如果我们把缓存放在本地内存,性能能进一步提升,这也就带出了二级缓存概念。有人说为什么不把cache直接放到本地,如果是单机没问题,但是集群环境下还是需要两级...

2018-10-18 18:59:31 10609

原创 从一个业务看待 InnoDB事务,InnoDB数据库锁,同步的关系

起因写这篇文章的起因在于现在公司的一个”激活学习卡“业务,激活的接口是其它组提供(你只需要给接口”卡号“和”激活的人“),而分配哪张卡号是自己来写,关键是这个卡号是从一个表里每次去选一个。用sql语句每次limit 1 去捞取一条,但是这里面就出现了资源占用问题,sql语句每次limit 1 都是同一条,除非你已经使用(改变这条数据的状态)。一开始想到事务,但是越想越不对劲(后面还是用锁同步机...

2018-07-01 23:06:44 298

ImportKey.class

ssl证书转换用的

2016-11-24

sql转java代码 v1.1

因为经常在plsql写sql然后放到java 文件当成String去执行 所以经常要花时间格式化,然后找到了网上的一篇文章 ,工具非常不错: 原文工具介绍地址: http://blog.csdn.net/isea533/article/details/9059001 本人工具介绍地址: http://blog.csdn.net/lovejj1994/article/details/50686501 后来我做了一些小的改进 包括:包括 :1.自动识别剔除oracle 的注释 2.一些特殊情况下的bug修改 3.java代码自动定义好变量

2016-02-18

SQL转Java代码小工具

因为经常在plsql写sql然后放到java 文件当成String去执行 所以经常要花时间格式化,然后找到了网上的一篇文章 ,工具非常不错: http://blog.csdn.net/isea533/article/details/9059001 后来我做了一些小的改进 包括:1。自动去除sql的注释 2。自动帮你自定义好变量

2015-11-01

JAVAEE分页jar包

学习分页的时候找到一个好用的分页jar包,在此分享给大家,这个包没找到源码,在博客中有详细使用方法,不懂可以留言

2015-09-23

C++宿舍管理查询系统

C++宿舍管理查询系统 包括源代码和课程设计报告 详情见压缩包

2015-02-11

《c++通讯录管理》代码清单

《​c​+​+​通​讯​录​管​理​》​代​码​清​单​,​运​行​本​程​序​前​请​阅​读​相​关​事​项​。

2015-02-11

《c++对参赛结果分数进行处理》实验报告

《​c​+​+​对​参​赛​结​果​分​数​进​行​处​理​》​实​验​报​告​,​使​用​本​代​码​运​行​前​请​仔​细​阅​读​注​意​事​项

2015-02-11

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

TA关注的人

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