自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发场景下常见的限流算法及方案介绍

限流方案对比

2023-10-17 22:43:09 436

原创 mysql为什么会选错索引,以及优化器是如何选择索引的

采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。在 索引建立之后,一条语句可能会命中多个索引,这时,索引的选择,就会交由 优化器 来选择合适的索引。- 因为把整张表取出来一行行统计,虽然可以得到精确的结果,但是代价太高了,所以只能选择“采样统计”。显然,一个索引上不同的值越多,这个索引的区分度就越好。优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。为什么需要使用 采样统计?

2023-10-17 22:37:31 520

原创 zk的二阶段提交图解

zookeeper

2023-10-17 22:32:39 257

原创 spring三级缓存简单总结

第一层缓存:最基础的缓存,创建完并初始化(createBean)后的bean实例会放入,项目启动完成后获取bean实例时从此获取第三层缓存:创建bean过程中用于处理循环依赖的临时缓存,由于只有在初始化时才知道有没有循环依赖,所以通过ObjectFactory临时“存储”刚创建完的bean,并延迟触发循环依赖时被引用的bean需要赋值当前bean时去获取当前bean的逻辑,且获取对象会作为当前bean的最终对象。

2023-10-17 22:31:14 190

原创 String和常量池

String和常量池

2022-09-22 01:13:36 124 1

原创 Java打印String对象的地址

String打印地址值

2022-09-22 00:59:25 1785

转载 类名.this与this的区别

类名.this与this的区别

2022-09-20 20:21:40 281

原创 H2数据库自定义函数

H2数据库使用java自定义函数

2022-07-27 11:40:10 651

原创 mybatis一级缓存踩坑

mybatis一级缓存踩坑循环中用相同条件重复查询数据,并编辑查询结果返回的集合,导致查询结果重复 或者在事务里 修改结果集 导致查询数据 结果集不是数据库值分析mybatis一级缓存默认开启,重复查询使用同一条SqlSession会重复从一级缓存中读取数据返回的集合对象是个List,在处理往list集合中插入数据,等同于往一级缓存中插入数据导致再次查询时,从一级缓存中读取数据时,读取的数据是缓存中的脏数据处理方法不在循环中调用查询开启查询语句的一级缓存刷新机制设置statement配

2022-03-30 20:39:53 343

原创 tomcat线程池对jdk原生线程池的改造

定制化队列TaskQueueTaskQueue重写offer方法核心excute方法其实主要逻辑是调用父类方法父类方法逻辑拒绝重试force方法总结1、检查如果没有传入ThreadPoolExecutor的引用,那么就还是直接放入队列(相当于与原生线程池的流程一致)。2、检查如果当前已经是最大线程数了,就还是得放入队列中3、如果提交的任务数小于当前线程数,则说明有空闲的线程,则添加到队列中也会被立刻获取走, 执行是在:Worker的runWorker..

2022-03-09 18:08:12 428

原创 HTTPS加密请求(一次握手)过程

HTTPS加密请求(一次握手)过程首先,客户端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息(这个没什么好说的,就是用户在浏览器里输入一个HTTPS网址,然后连接到服务端的443端口。)服务端的配置,采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。如果对公钥不太理解,可以.

2022-03-08 23:06:01 205

转载 Kafka详解

两万字长文,彻底搞懂Kafka1、为什么有消息系统1、解耦合2、异步处理例如电商平台,秒杀活动。一般流程会分为:风险控制库存锁定生成订单短信通知更新数据通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:风险控制库存锁定消息系统生成订单短信通知更新数据3、流量的控制3.1 网关在接受到请求后,就把请求放入到消息队列里面3.2 后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控制了流量缺

2022-01-07 10:00:10 401

原创 从sharding-jdbc看如何解决雪花算法的时钟回拨问题

https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247494475&idx=3&sn=a0d3a5918f70cb331546951fd11bbd85&chksm=fbb162b5ccc6eba3e56343b9df21f535994a6b41c1f73644f79190e523fd8eca88c189b8c5ec&mpshare=1&scene=1&srcid=1216Cs473kkMjC

2021-12-16 20:32:32 1874

转载 java.util.concurrent.locks.LockSupport

[java.util.concurrent.locks.LockSupport (讲得比较细)]学习JAVA中是如何实现线程间的锁,就得从LockSupport这个类先说起,因为这个类实现了底层的一些方法,各种的锁实现都是这个基础上发展而来的。这个类方法很少,但理解起来需要花费一点时间,因为涉及了很多底层的知识,这些都是我们平时不关心的。上源代码:package java.util.concurrent.locks;import java.util.concurrent.*;import sun.m

2021-12-07 20:26:16 204

原创 JVM预热

一、JVM 架构基础JVM 进程启动时,ClassLoader 会将需要的所有类加载到内存,主要分为以下三步:Bootstrap Class: 核心类库,由 “Bootstrap Class Loader”负责加载, 例如基础的运行时类库 JRE\lib\rt.jar。Extension Class: java.ext.dirs 路径下的类,由 ExtClassLoader 负责加载。在实际开发中,如果需要添加额外的类库,通常放置于此位置。Application Class: 实际应用包含的类,由

2021-11-24 20:04:57 980

原创 NIO优化原理和Tomcat线程模型

NIO优化原理和Tomcat线程模型1、I/O阻塞书上说BIO、NIO等都属于I/O模型,但是I/O模型这个范围有点含糊,我为此走了不少弯路。我们日常开发过程中涉及到NIO模型应用,如Tomcat、Netty中等线程模型,可以直接将其视为网络I/O模型。本文还是在基础篇章中介绍几种I/O模型方式,后面就默认只讲解网络I/O模型了。1.1、I/O分类BIO、NIO、AIO等都属于I/O模型,所以它们优化的都是系统I/O的性能,因此首先,我们要清楚常见的I/O有哪些分类:I/O种类场景ja

2021-11-24 20:00:54 497

转载 缓存和数据库一致性问题,看这篇就够了

https://mp.weixin.qq.com/s?__biz=MzAxNjM2MTk0Ng==&mid=2247497523&idx=2&sn=3d3e780ee2e3ec36248a4880f23aeb60&chksm=9bf74786ac80ce9000252c79e25a1872b27bf1f487cb9389931614c0bdbf051dfd66b258e7dc&mpshare=1&scene=1&srcid=09138ES5J9UTz3

2021-09-24 00:43:52 142

转载 Cookie/Session/Token对比

1. 网站交互体验升级作为网友的我们,每天都会使用浏览器来逛各种网站,来满足日常的工作生活需求。现在的交互体验还是很丝滑的,但早期并非如此,而是一锤子买卖。1.1 无状态的http协议无状态的http协议是什么鬼?HTTP无状态协议,是指协议对于业务处理没有记忆能力,之前做了啥完全记不住,每次请求都是完全独立互不影响的,没有任何上下文信息。缺少状态意味着如果后续处理需要前面的信息,则它必须重传关键信息,这样可能导致每次连接传送的数据量增大。1.2 解决之道整个事情交互的双方只有客户端和服务

2021-09-08 00:57:24 157

转载 通过银行转账问题解说死锁解决方案

大家都知道,在并发情况下对两个账户进行转账操作可能会产生死锁,可能出现死锁的原因是,并发情况下对两个账户的操作无法保证其执行顺序。并发问题描述假如现在执行下面的操:线程一执行的是:【账户A】给【账户B】转账线程二执行的是:【账户B】给【账户A】转账如果两个转账动作同时执行,则会出现线程一会请求对【账户B】进行加锁,线程二会请求对【账户A】进行加锁由于此时的【账户A】已由线程一进行锁定,【账户B】已由线程二进行锁定 此时就会产生死锁问题。接下来分析一下产生死锁的原因,以及如何避免死锁。如何

2021-09-08 00:39:08 1353

原创 java的interrupt的使用

通常我们会有这样的需求,即停止一个线程。在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。具体原因可以参考Why is Thread.stop deprecated。在本文中,将讨论中断在java中的使用。中断在java中主要有3个方法,interrupt(),isInterrupted()和interrupted()。interrupt(),在一个线程中调用另一个线程的interrupt()方法,即会向那个线程发

2021-09-08 00:37:40 243 1

原创 PropertyUtils嵌套属性的使用

一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值。但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.beans.Introspector这 样类,实现了在运行时检测Java类并确定属性get和set方法的名称,结合Java中的反射机制就可以调用这些方法了。然而,这些APIs使用起来比 较困难,并且将Java类中一些不必要的底层结构暴露给了开发人员。BeanUtils包中的APIs试图简化动态获取和设置bean属性的过程。

2021-09-05 15:46:54 308

原创 ThreadLocal总结

应该如何设计 ThreadLocal ?ThreadLocal<String> threadLocal1 = new ThreadLocal<>();ThreadLocal<Integer> threadLocal2 = new ThreadLocal<>();ThreadLocal<Integer> threadLocal3 = new ThreadLocal<>();那此时 ThreadLocal 对象和线程的关系

2021-09-03 15:28:50 122

原创 JAVA NIO学习笔记

一. NIO 基础non-blocking io 非阻塞 IO1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层#mermaid-svg-hX337Q3frJMPNfYD .label{font-family:'trebuche

2021-08-25 00:18:31 174

原创 查看mysql页大小

SHOW GLOBAL STATUS like ‘Innodb_page_size’;

2021-08-12 16:45:32 1575 1

原创 Linux命令之rz命令与sz命令

Linux命令之rz命令与sz命令1.rz命令rz命令(Receive ZMODEM),使用ZMODEM协议,将本地文件批量上传到远程Linux/Unix服务器,注意不能上传文件夹。当我们使用虚拟终端软件,如Xshell、SecureCRT或PuTTY来连接远程服务器后,使用rz命令可以上传本地文件到远程服务器。输入rz回车后,会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。此外,可以在虚拟终端软件设置上传时默认加载的本地路径和下载的路径。如

2021-08-09 19:15:49 817

原创 jackson常用配置

jackson常用配置@SpringBootTest public class JacksonTreeModelTest { private ObjectMapper objectMapper; @Before public void init() { objectMapper = new ObjectMapper(); // 如果为空则不输出 objectMapper.setSerializationInclusion

2021-08-08 14:04:10 332

原创 jackson自定义策略

Jackson支持在处理数据的时候,使用不同于对象字段名的JSON名称(Jackson内部使用),来代替原来的字段名进行序列化和反序列化。主要有几种实现方式:使用@JsonProperty指定固定的名称进行名称映射;使用预定义的命名策略PropertyNamingStrategy,设置全局或单个类的命名策略;扩展PropertyNamingStrategy,实现自定义命名策略,读和写支持使用不同的命名策略。一.属性名称@JsonProperty对于需要修改名称的字段,可以在字段或getter

2021-08-08 13:45:09 2259

原创 idea下使用springinitializr创建项目时 初始化失败的解决

修改初始化创建时Custom处 https://start.aliyun.com/

2021-08-08 12:49:34 302

原创 json根据路径查询

import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.JsonNode;import com.fasterxml.jackson.data

2021-08-07 17:08:52 807

原创 JAVA三元运算符空指针引用的坑

记一个踩坑,三元表达式空指针,翻阅资料发现原因如下:

2021-07-24 11:31:11 106

原创 通过Optional的map消除冗长的空值判断

下面的例子中,代码片段1和代码片段2作用等价,并且更简洁import lombok.Data;import java.util.Optional;public class OptionalExample { // String isocode2 = user.getAddress().getCountry().getIsocode() // 通过Optional的map可以消除冗长的空值判断 public static void main(String[] args) {

2021-07-14 11:14:15 867

转载 Runtime类中的freeMemory,totalMemory,maxMemory

Runtime类中的freeMemory,totalMemory,maxMemory最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对freeMemory(

2021-06-09 00:58:30 100

原创 java的finalize方法

我们通常用构造器来创建对象,而Finalize正好相反,构造方法执行对象的初始化操作,finalize方法执行对象的销毁操作.那我们什么时候需要使用finalize方法呢,我们都知道Java里垃圾回收器可以回收对象使用的内存空间,但是对象可能会持有很多资源比如Socket、文件句柄等,垃圾收集器无法回收这些资源,因此你需要使用finalize方法帮助GC回收这些资源,比如关闭打开的文件或者网元资源,删除临时文件等.一个例子Object类是所有类的父类,如果你去查看java.lang.Object类

2021-06-08 10:14:06 11874 2

原创 死锁的四个必要条件

https://blog.csdn.net/qq_43089516/article/details/90440592

2021-06-07 23:17:34 4922

原创 mysql的变量和赋值

https://www.cnblogs.com/Brambling/p/9259375.html 变量,https://blog.csdn.net/qq_37155959/article/details/81005287 赋值

2021-06-07 23:16:30 1076

原创 记录一次内存溢出

记录一次内存溢出一.状况线上出现了OutOfMemoryError二.排查最简单查看java内存的方法就是分析dump文件.查找当前进程的Pid , pid 是 50480到jdk安装目录bin下面找一个 jmap的命令然后 ./jmap -dump:format=b,file=/opt/heap/heap1.bin 50480 , 得到 第一个 heap1.bin过个把小时, 再使用这个命令 ./jmap -dump:format=b,file=/opt/heap/heap2.bi

2021-06-07 23:09:53 196 3

原创 Mysql两道思考题

1、假定MySQL设定的页长度是16K,表主键是bigint,每行数据是500字节,根节点高度为1,以下说法正确的是()A. 如果需要存 2W 条数据,则聚合索引树高至少为 2;B. 如果需要存 200W 条数据,则聚合索引树高至少为 3;C. 如果需要存 2000W 条数据,则聚合索引树高至少为 4;D. 如果需要存 2亿条数据,则聚合索引树高至少为 4;1.答案:一页16K非叶子节点,存储主键+指针(8+6=14),所以一页能存 16384/14 =1170条主键叶子节点,存储数据,每

2021-05-19 17:32:38 98

转载 Nginx万字总结

Nginx总结Nginx 概述Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。Nginx 特点高并发、高性能;模块化架构使得它的扩展性非常好;异步非阻塞的事件驱动模型这点和 No.

2021-05-12 10:01:49 180

原创 网络七层模型

OSI 网络七层模型它可以分为以下几层:(从上到下)第一层:应用层。定义了用于在网络中进行通信和传输数据的接口。第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等。第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断。第四层:传输层。管理着网络中的端到端的数据传输。第五层:网络层。定义网络设备间如何传输数据。第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输。第七层:物理层。这一层主要就是传输这些二进制数据。备注实际应用过程中,五层协议结构里面

2021-05-10 19:30:57 151

原创 动态代理和静态代理的区别

代理模式的目的是在不修改原有类方法设计的基础上,对方法行为进行增强。为了好理解,举个实际场景,我们业务场景中经常有限流的需求,常规操作是在需要限流的接口代码前加入调用次数判断的代码,但是这样每个需要限流的方法都需要加,工作量大不说,一方面不好维护,不能很清晰的知道每个接口限流值,另一方面,限流代码和业务代码堆叠在一起,也影响代码阅读。解法是做一套统一限流,一般好点的会有专门的接口限流平台,配置对应的接口名,设置限流值,直接就可以限流,实现方式就可以用动态代理。不修改原接口的实现,对接口进行增强。动.

2021-04-25 09:59:04 446

空空如也

空空如也

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

TA关注的人

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