- 博客(110)
- 收藏
- 关注
原创 MySQL为了提高查询效率,设计思路是怎样的
也叫做datapage,一般页大小是4KB的整数倍,在MySQL的InnoDB存储引擎下,默认一次读取16KB数据。存储K-V格式,可以采用Hash表、二叉树、BST、AVL树、红黑树等等,那么为什么MySQL最终采用B+树存储呢?MySQL持久化数据是通过磁盘上的文件实现的,当磁盘文件太多时,如何定位数据是一个棘手的问题。小结:索引和数据放到一起可以减少IO操作,这也是MySQL普遍使用InnoDB存储引擎的原因。内存跟磁盘进行交互时候,有一个最基本的逻辑单位,称之为。为什么每层树就是一次IO呢?
2024-08-13 23:23:41
848
原创 MySQL死锁问题案例
在并发情况下,多个线程下执行update会有锁,但是update和update直接不会有锁,update和insert之间有锁。insert和update之间相互抢锁形成死锁。这里不知道为什么在没有数据的时候,同时update相同条件的时候不会有锁,而执行insert的时候就有锁,推测是Mysql为了解决幻读问题使用间隙锁的原因。如果有大神知道,多谢指教!
2024-07-28 19:20:52
304
原创 阻塞队列-SynchronousQueue
构造方法中可以传入一个boolean值,如果为true使用队列是数据结构,如果为false默认使用栈的数据结构,无参构造默认false。只需关心transferer变量,所有的存取数据的方法最终都是调用了transferer对象的transfer方法。从结果可以看出,栈结构后插入的数据被先消费;队列结构先添加的数据被先消费。只定义了一个抽象方法transfer。基于队列存储,遵循先进出原则。基于栈存储,遵循先进后出原则。
2024-07-28 15:18:06
381
原创 阻塞队列-DelayQueue
延迟队列是基于优先级队列实现,添加元素不存在阻塞情况,直接调用offer方法。调用优先级队列中的remove方法,返回堆顶元素。除非线程被打断,否则一直等到获取元素。
2024-07-28 15:17:13
286
原创 阻塞队列-PriorityBlockQueue
在PriorityBlackQueue中并没有基于PriorityQueue实现而是基于private transient Object[] queue自己实现的。在分析优先级别队列时候,需要了解一下二叉堆是什么。
2024-07-28 15:16:36
400
原创 阻塞队列-BlockingQueue接口
在JUC包下有个接口BlockingQueue,它继承了java.util下的Queue接口,在这个接口种规定了一些抽象方法用来存取数据。
2024-07-28 15:14:23
307
原创 ReentrantLock源码
公平锁和非公平锁释放锁的流程一样,调用sync中的tryRelease方法。NonfairSync非公平锁中,Sync中的默认实现。FairSync公平锁中。默认构造使用非公平锁。
2024-07-21 21:23:14
171
原创 synchronized详解
如果在一个循环内部使用synchronized,频繁的获取/释放锁消耗资源。锁膨胀就是将synchronized放到循环体外部,这样就获取/释放一次锁。可以理解为一个临界资源,在同一时间只能有一个线程操作它,实现线程之间互斥的效果。在synchronized修饰的代码块中,如果不存在操作临界资源的情况,触发锁消除,即synchronized无效。在jdk1.6之前,线程在获取不到锁后,立即挂起线程。在创建对象作为锁的时候,会在栈中生成对象的引用,引用指向堆空间,有关锁的内容。
2024-07-15 21:21:52
308
原创 SpringSecurity在SpringBoot中的自动装配
约定大于配置,这里的内容就相当于在web.xml配置文件中配置springSecurityFilterChain的过程由spring自动实现.spring自动注入DelegatingFilterProxy对象,这样就可以将security中的过滤器切到spring中,在请求的时候会被DelegatingFilterProxyRegistrationBean拦截,然后去执行security中的过滤器链。注册逻辑在父类DynamicRegistrationBean中。
2024-07-07 15:57:46
212
原创 SpringSecurity初始化过程
/获取标签} else {//解析自定义标签,获得能解析该标签的HandlerResolver解析器} else {springSecurity解析器SecurityNamespaceHandler/**不同的标签交给不同的解析器去解析*/http标签的解析,HttpSecurityBeanDefinitionParser//注册FilterChainProxy//拿到FilterChainProxy。
2024-07-07 15:56:30
369
原创 SpringSecurity源码分析-过滤器链是如何植入到spring中的
DelegatingFilterProxy中加载FilterChainProxy小结:通过过滤器链代理对象DelegatingFilterProxy找到真正的过滤器链FilterChainProxy,然后去一个一个的过滤器去处理请求
2024-07-07 15:55:40
354
2
原创 Spring整合SpringSecurity
自定义登录页面只需要在security配置文件中指定登录页面即可--指定登录页面或登录成功页面等,都在这个标签中可以指定--> < form-login login-page = " /login.jsp " login-processing-url = " /login " authentication-success-forward-url = " /home.jsp " />
2024-07-07 15:54:11
647
原创 GateWay-基本使用
api网关是只微服务架构下的统一入口,提供服务内部的服务路由中转,为客户端提供统一的服务一些与业务无关的公共逻辑可以在这里实现,比如认证、授权、监控、路由转发等。常用的网关组件有,zuul、nginx+lua、Kong等实现Ordered,GlobalFilter两个接口,重写filter,getOrder两个方法,在filter中可以实现在业务处理之前和之后做一些操作import org/**
2024-07-01 23:28:44
917
原创 Elasticsearch分词器
自定义的字符串过滤器、令牌过滤器、分词器都要定义名字过滤器、令牌过滤器可定义多个//自定义字符串过滤器},//自定义令牌过滤器"filter":{"is","in","the","a","at"},//自定义分词器?]"},//自定义分析器,将自定义字符串过滤器、自定义令牌过滤器、自定义分词器赋值给分析器"char_filter":["my_char_filter"], //字符串过滤器可定义多个。
2024-06-30 00:57:22
636
原创 Elasticsearch查询上下文和_source
在查询时候,如果不指定排序字段,默认使用相关度评分排序,评分度越高排名越靠前。和Mysql中的select指定查询的字段作用一样。结果:hits中只包含id。
2024-06-30 00:56:36
544
原创 Elasticsearch的Mapping
例子:给user索引创建两个模板,第一个模板将long类型的属性默认转换为integer类型,第二个模板将以sum_开头的字段且不以_text结尾的字段且为String类型的字段转换为keyword类型。映射模板用来解决不确定的类型或字段名索引的创建,可以理解为批量处理索引的mapping。映射参数就是在创建索引时候的mapping中可以配置什么参数,分别代表什么含义。es在增加数据的时候如果没有指定字段的类型,es会自动分配类型。在创建Mapping时候,手动创建类型。
2024-06-30 00:54:16
1089
原创 Elasticsearch的节点、集群和分片
多个节点组成ES集群,其中主节点负责管理整个集群,不存储数据,数据靠数据节点存储当主节点宕机时候,会从有master角色的集群重新选举新的主节点。
2024-06-30 00:53:42
473
原创 Elasticsearch及其相关工具的安装
传送门:https://pan.baidu.com/s/1d83Ak4kHOJHIgCC7Hhjikw 提取码:ABCE推荐使用8.12.12版本,8.14.1没有找到ik分词器。
2024-06-30 00:53:15
373
原创 SpringCloud-OpenFeign基础
OpenFeign是一个基于HTTP协议的RPC(远程过程调用)组件,用于简化HTTP请求和响应的处理。它通过声明式的方式定义REST API接口,并自动生成实现该接口的客户端代码,从而简化了RESTful服务的调用过程。
2024-06-22 17:11:21
599
原创 SpringCloud-nacos基础
{spring.cloud.nacos.config.file-extension},其中${spring.cloud.nacos.config.file-extension}只支持yml或者properties。可以在nacos进行分组,通过spring.cloud.nacos.config.group属性指定分组。配置的文件名应该为${spring.name} + “-” +命名空间可以指定多个配置文件。只需要配置注册中心地址即可。
2024-06-22 17:10:13
1268
原创 Spring注解-@RestControllerAdvice
使用@RestControllerAdvice注解配合@ExceptionHandler实现自定义异常处理器。
2024-06-22 17:07:27
506
原创 JVM-GC-常用调优命令和GC参数
定位问题常用命令top:查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息,一般查看线程状态,判断是否死锁。重点观察:WAITING、BLOCKED的线程,另外查看waiting on xxx,如果多个线程都在waiting on 某把锁,看哪个线程持有这把锁;jstat -gc:查看GC情况jinfo 线程pid:查看线程信息jstat -gc 线程pid 间隔时间:查看jmap -histo 线
2024-06-17 23:29:17
828
原创 JVM-GC-G1垃圾回收器
当堆内存空间达到一定的阈值,会触发MixedGC,和CMS回收步骤相似。这个阈值可以通过XX:InitiatingHeapOccupacyPercent参数设置,默认45%它是一个HashMap,记录其他Regin中的对象指向本Regin中的引用。这样不用扫描整个堆就可以知道当前谁引用了当前分区中的对象,只需要扫描RSet即可。用来记录可以被回收的card,即通过算法计算出垃圾多的card;G1的调优是尽量不要FGC。
2024-06-17 23:28:34
426
原创 JVM-GC-CMS垃圾回收器
CMS从提出概念到实际完成用了10年多的时间,在此之前没有过并发回收的垃圾回收器,因此它是一个垃圾回收器的里程碑,后来的G1也是基于CMS做的一些改进。由于CMS是并发清除的新时代,它也存留了很多问题,JDK任何版本都不会使用CMS作为默认垃圾回收器。incremental update:增量更新,关注引用的增加,如果要给黑色对象引用增加,将黑色对象标记为灰色。
2024-06-17 23:27:37
547
原创 JVM-GC-基础知识
JVM中的GC使用Root Searching寻找垃圾单独方式,并结合mark-sweep、copying、mark-compact三种清除算法形成了各有特点的垃圾回收器,且垃圾回收器的演变过程是因为内存空间的不断增大的必然原因。
2024-06-16 12:05:28
391
原创 JVM-GC-什么是垃圾
所谓垃圾其实是指,内存中没用的数据;没有任何引用指向这块内存,或者没有任何指针指向这块内存。没有的数据应该被清除,垃圾的处理其实是内存管理问题。JVM虽然不直接遵循冯诺依曼计算机体系架构,但极其相似,像是一台小型计算机。一台计算机运行程序的流程大概是这样的:操作系统先将程序加载(load)至内存中,并产生一个进程;CPU在内存中读取指令集并执行;在CPU执行期间需要用到内存中的数据,因此在CPU执行期间内存是必须的;
2024-06-16 12:04:57
458
原创 JVM-类加载
继承ClassLoader重写findClass方法在findClass方法中调用super.defineClass方法可以通过调用父类构造方法super(parent)指定父加载器可通过重写loadClass方法打破双亲委派,tomcat的热部署就是这个逻辑。
2024-06-16 12:03:41
963
原创 JVM-基础知识
全称ThreadLocal Allocation Buffer,在edne区大约占用1%的内存归线程独有空间,多线程下不必争抢堆内存空间,提高效率。
2024-06-16 01:20:25
477
1
原创 设计模式-代理模式Proxy(结构型)
可以发现代理类只能代理实现Pay接口的类,不够灵活。开发过程中,经常会有日志、事务等的操作是不区分业务逻辑的,可以使用动态代理。代理模式和装饰模式非常相似,只是在语义上不一样。
2024-06-11 21:52:53
530
原创 设计模式-享元模式Flyweight(结构型)
享元模式是一种结构型模式,它主要用于减少创建对象的数量,减少内存占用。通过重用现有对象的方式,如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。最多产生五个连接对象。
2024-06-11 21:50:02
488
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人