- 博客(44)
- 收藏
- 关注
原创 初识springcloud
-网关依赖--> < dependency > < groupId > org.springframework.cloud < artifactId > spring-cloud-starter-gateway
2024-06-03 17:39:24 895 1
原创 MySQL-InonoDB
,在执行DML语句时,如果这些数据Page没有在BufferPool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区ChangeBuffer中,在未来数据被读取时,再将数据合并恢复到BufferPool中,再将合并后的数据刷新到磁盘中。日志缓冲区,用来保存要写入到磁盘中的log日志数据(redolog、undolog),默认大小为16MB,日志缓冲区的日志会定期刷新到磁盘中。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
2024-05-23 19:51:34 965
原创 MySQL-索引
索引是什么?索引是帮助mysql高效获取数据的数据结构(有序)优点:提高数据检索的效率,降低数据库的io成本,通过索引列对数据进行排序,降低排序的成本,降低cpu的消耗缺点:索引列也是要占用空间的,索引大大提高了提高了查询效率,同时却也降低了更新表的速度索引结构分类:B+tree索引Hash索引 通过hash表实现,只能实现精确匹配查询才有效,不支持范围查询R-tree空间索引 空间索引是MYISAM的一种特殊索引类型,主要用于地理空间数据类型,通常使用较少。
2024-05-19 17:27:28 844
原创 RattbitMQ安装
RabbitMQ是消息队列的一种,生态好,好学习,易于理解,时效性强,支持很多不同语言的客户端,扩展性、可用性都很不错。学习性价比非常高的消息队列,适用于绝大多数中小规模分布式系统。1.首先在执行docker search rabbitmq命令,在docker仓库中去找到rabbitmq的镜像,5.输入ip+端口(15672)就可以访问到rabbitmq的管理页面了。2.通过docker images查看镜像中是否安装的有。今天先来简单讲下RabbitMq的安装教程。3. 创建并启动容器。
2024-04-21 16:46:49 606 1
原创 常见的Linux命令
vim 文件名(如果文件存在就是修改这个文件,如果不存在就是创建一个新文件再进行编辑) 进入vim编辑器直接进入命令模式 敲i进入输入模式 敲:进入底线命令模式(如果是编辑模式,需要先退出编辑模式,esc键)chgrp -R 属组名 文件名 (-R递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会改变)rm -f 忽略不存在的文件,不会出现警告,强制删除 -r递归删除目录 -i 互动删除,询问是否删除 rm - rf删除整个系统文件。
2024-04-14 16:24:35 394
原创 Redis-底层数据结构
当前一个元素长度小于254(255用于zlend)的时候,prevlen长度为1个字节,值即为前一个entry的长度,如果长 度大于等于254的时候,prevlen用5个字节表示,第一字节设置为254,后面4个字节存储一个小端的无符号整 型,表示前一个entry的长度;因此,Redis 3.0 的 List 对象在数据量比较少的情况下,会采用「压缩列表」作为底层数据结构的实现,它的优势是节省内存空间,并且是内存紧凑型的数据结构。
2024-04-06 11:35:13 1716 2
原创 Redis的持久化方式
因为如果先将写操作命令记录到 AOF 日志里,再执行该命令的话,如果当前的命令语法有问题,那么如果不进行命令语法检查,该错误的命令记录到 AOF 日志里后,Redis 在使用日志恢复数据时,就可能会出错。AOF 重写机制是在重写时,读取当前数据库中的所有键值对,然后将每一个键值对用一条命令记录到「新的 AOF 文件」,等到全部记录完后,就将新的 AOF 文件替换掉现有的 AOF 文件。,当 AOF 文件的大小超过所设定的阈值后,Redis 就会启用 AOF 重写机制,来压缩 AOF 文件。
2024-03-31 17:09:22 1988
原创 布隆过滤器
布隆过滤器(Bloom Filter)是由 Bloom 于 1970 年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。布隆过滤器主要用来判断一个元素是否在集合中,某个数据存在时,这个数据可能不存在;
2024-03-24 16:35:28 579
原创 JUC-synchronized原理
如果尝试加轻量级锁的过程,cas操作无法成功,这是一种情况就是其他线程对此对象加上了轻量级锁(有竞争),这时需要锁膨胀,将轻量级锁变成重量级锁。如果对象虽然被多个线程访问,但没有竞争,这是偏向了t1的对想仍有机会重新偏向t2,重偏向会重新设置对象的thread id。当撤销偏向到达四十次,于是整个类的所有对象都会变成不可偏向的,新建的对象也是不可偏向的。当撤销偏向到达四十次,于是整个类的所有对象都会变成不可偏向的,新建的对象也是不可偏向的。,重偏向会重新设置对象的thread id。
2024-03-17 17:32:34 889
原创 数位dp(记忆化搜索版)
给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum。如果一个整数 x满足以下条件,我们称它是一个好整数: num1 <= x <= num2 min_sum <= digit_sum(x) <= max_sum.例如:https://leetcode.cn/problems/count-of-integers/description/数位动态规划(数位DP)主要用于解决“在区间[L,R]这个范围内,满足某种约束的数字的数量、总和、平方“这一类问题。
2024-03-03 16:49:48 414
原创 数据结构实训-规划春游的出行路线
(4)当所有的点都获取到最短路径后,循环停止,从终点开始寻找前驱节点,找到后,前驱节点的值赋给终点,继续寻找此前驱节点的前驱节点,直到终点等于起点结束循环,输出时建立一个数组用来存储每个节点的前驱节点对应的序号,此时的顺序是逆序,将数组中的各个节点对应数组中的索引转换为汉字倒着输出即为最短路线。(2)遍历这个节点所在邻接矩阵的一行的所有距离,如果遍历出的顶点j未被访问过且离这个顶点最近,在states数组中标记顶点j为已经获取到最短路径,之后更新"未获取最短路径的顶点的最短路径和前驱顶点"。
2023-12-31 17:05:36 1049
原创 垃圾收集器
为了缓解数量庞大的读屏障会带来许多额外的性能开销,开发者计划在JDK13中将Shenandoah内存屏障模型改进为基于引用访问屏障的实现,基于引用访问屏障就是指内存屏障只会拦截对象中数据类型为引用类型的读写操作,而不会去拦截原生数据类型等非引用类型的读写,这样能够省去大量原生类型、对象比较、对象加锁等场景中设置内存屏障带来的消耗。在ZGC中,当读取处于重分配集的对象时,会被读屏障拦截,通过转发表记录将访问转发到新复制的对象上,并同时修正更新该引用的值,使其直接指向新对象。
2023-12-17 17:33:26 61
原创 JVM垃圾收集算法及其实现细节
抢先式中断不需要线程的执行代码主动去配合,是系统介入,但现在几乎没有虚拟机实现采用抢先式中断来暂停线程响应GC事件。
2023-12-10 16:59:38 78
原创 java对象的创建及生死
已使用的内存和空闲的内存象胡交错,那就没办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录那些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为空闲列表。指针碰撞:假设java堆中的内存是绝对规整的,用过的内存放到一遍,没用过的放到一遍,中间放着一个指针作为分界点的指示器,那所分配的大小和执指针向空闲空间方向挪动一段与对象大小相等的距离。在对象中添加计数器,引用一次+1,有一个引用销毁就-1,直到计数器中的数值为0,该对象死亡。
2023-12-03 12:00:50 64
原创 JVM运行时的内存分布
每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,是线程私有的。方法退出后,必须返回到最初方法被调用时的位置,方法才能继续执行,方法返回时可能需要在栈帧中保存一些信息,用来帮助恢复它的上层主调方法的执行状态.一般来说,方法正常退出时,主调方法的PC计数器的值就可以作为返回地址(此地址就保存在方法返回地址中),栈帧中很可能会这个计数器值.而方法异常退出时,返回地址是要通过异常处理器表来确定的,栈帧中一般不会保存这部分信息.
2023-11-26 21:34:09 72
原创 字典树的简单应用
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
2023-11-19 17:54:32 62
原创 HashMap源码分析
红黑树的平均查找长度是log(n) 链表的平均查找长度是n/2 当长度大于8的时候才有转换为树的必要,6也是但是转换树和生成树的时间并不会太短。当length为2的n次幂的时候会,hash&(length-1)和hash%length是一样的,而位运算相对来说更快。当数组长度大于64,并且链表中的节点的个数大于8。HashMap为什么创建数组的时候是二次幂?
2023-11-12 08:39:17 51
原创 java语法糖
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。
2023-11-05 17:25:32 72
原创 ArrayList源码分析
ArrayList的底层是数组队列,相当于动态数组.与java中的数组相比,它的容量能动态增加.RandomAccess是一个标志接口,表名实现这个接口的List集合是支持快速随机访问的,在ArrayList中,我们可以通过元素的索引快速获取元素对象,这就是快速随机的访问ArrayList实现了Cloneable接口,即覆盖了函数clone(),能被克隆。一个类要想克隆,只能实现这个接口实现了接口,这意味着ArrayList支持序列化,能通过序列化去传输。
2023-10-29 11:22:13 47
原创 java中LocalDateTime的使用
LocalDate是不变的日期时间对象代表一个日期,往往被视为年月日。其他日期字段,如一年中的一天,一周和一周的一天,也可以访问。例如,“2007年10月2日”的值可以被存储在一个LocalDate。方法名作用获取月字段的一天获取一年的日子得到月年田间使用 Month枚举获取年度字段在默认时区中从系统时钟获取当前日期LocalDateTime:日期加时间的日期对象,包含年月日时分秒获取年月日的信息3方法作用年年月日时分秒3.与String类型的相互转换。
2023-10-22 16:26:28 52
原创 数据结构-线段树
线段树是一种高级数据结构,也是一种二叉树结构。它能够高效的处理区间修改查询等问题。线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。
2023-10-15 11:03:59 106
原创 java反射
获取成员变量后可以通过get(object obj) set(object obj ,object value )方法来进行设置和获取, setAccessible(true) 忽略访问权限修饰符的安全检查。Class.forname(“全类名”) :将字节码文件加载进内存,返回Class对象(多用于配置文件,将类名定义再配置文件中.读取文件,加载类)T newInstance()创建对象,用那种构造器就要再括号中满足那种构造器的参数要求,使用工造器对象来进行调用。获取class对象的方式。
2023-09-24 17:38:10 54
原创 正则表达式
什么是正则表达式?正则表达式是一种强大的文本处理工具,它可以用于匹配,查找,替换和提取字符串正则表达式的应用:1 .匹配和验证文本:正则表达式可以用于验证和匹配文本,例如电子邮件地址、电话号码、网址等。通过使用正则表达式,可以快速准确地确定字符串是否符合特定的格式要求。2.搜索和替换文本:正则表达式可以用于搜索和替换文本中的特定模式。例如,可以使用正则表达式搜索包含特定关键字的文件或文本,并将其替换为其他内容。
2023-09-17 08:41:21 57
原创 数据结构-堆
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。左右孩子的最大值做对比,如果小于左右孩子的最大值就与其进行交换,重复上述操作,知道不满足条件或者到叶子节点。将新增元素放入数组的末尾,不断去和其父亲节点做比较,大于父亲节点则交换位置,直到不满足条件或者到根节点。堆的删除就是把根节点去除,然后我们可以把数组当中的最后一个元素去放入根节点中,将根节点最大的堆叫作最大堆,根节点最小的堆叫做最小堆。堆中某个节点的值总是不大于或不小于其父节点的值;
2023-09-10 09:56:20 46
原创 WebScoket实现
主要解决ws连接无法携带token在请求头里面,从而导致权限问题,使用Sec-WebSocket-Protocol能将jwt放入,但是使用的同时一定要返回Sec-WebSocket-Protocol否则会报错。相较于传统的基于请求-响应模式的通信(如。@ServerEndpoint 是一个注解,用于将一个普通的 Java 类转换为 WebSocket 服务器端点(endpoint)。@ServerEndpoint 注解修饰的类可以处理客户端与服务器之间的 WebSocket 连接,并接收和发送消息。
2023-08-25 10:09:09 185 1
原创 java自定义注解
提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。用于描述注解的使用范围,也就是注解可以用在什么地方,如果我们想要同时满足两种需求,多个参数只需要用大括号抱起来,逗号隔开就可以了。注解表示是否将此注解的相关信息添加到javadoc文档中,用于描述生成帮助文档时是否要保留其注解信息。元注解是描述注解的注解,也就是专门为自定注解发明使用的注解。用于描述被它修饰的注解是否具有继承性,是否可以被继承。如何去使用自定义注解完成想要的功能。
2023-08-20 09:08:54 73 1
原创 数据结构-数组和链表
在计算机科学中,数组是有一组元素(值或者变量)组成的数据结构,每个元素有至少一个索引或键来标识,因为数组内的元素是连续储存的,所以数组中元素的地址,可以通过其索引计算出来,知道了数组的数据起始地址BaseAddress,就可以有公式BaseAddress+i*sice计算出索引i元素的地址i即索引,从0开始size是每个元素占用字节大小。
2023-08-06 19:05:35 53
原创 完全背包问题优化推导过程
根据01背包问题的思想,我们考虑有第i个物品和没有第i个物品的情况,则dp[i][j]就等于两种情况的最大值,又因为第i个物品是无限使用的则有第i个物品的情况下我们需要考虑i的个数k(k。则推出dp[i][j]=Max(dp[i-1][j],dp[i-1][j-v[i]]+w[i])推出 dp[i][j]=Math.(dp[i-1[j],dp[i-1][j=k。我们定义dp[i][j]表示使用前i个物品在不超过体积j的情况下总价值最大。我们求dp[i][j-v]的情况是。dp[i][j]的情况。
2023-07-23 17:42:52 129 1
原创 初学Redis
redis的sortedset是一个可排序的set集合,和java中的treeset类似,但底层数据结构却差别很大,sortedset中的没一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加hash表(排序的命令z后面加个rev是降序)redis的set结构于java中的hashset类似,可以看作一个value位bull的hashmap,应为也是一个hash表,因此具备于hashset类似的特性。:向列表左侧插入以一个或多个元素。
2023-07-17 17:18:31 76 1
原创 springmvc拦截器(Interceptor)
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
2023-06-10 20:43:56 421
原创 二分查找总结
left + ((right -left) >> 1) 其实和 (left + right) / 2是等价的,这样写的目的一个是为了防止 (left + right)出现溢出,一个是用右移操作替代除法提升性能。left + ((right -left) >> 1) 对于目标区域长度为奇数而言,是处于正中间的,对于长度为偶数而言,是中间偏左的。我们的循环条件中包含了 left == right的情况,则我们必须在每次循环中改变 left 和 right的指向,以防止进入死循环。1.寻找有序数组中的某个元素。
2023-05-28 10:41:58 60
原创 上传文件并进行判断
我们都知道,普通的文件后缀校验并不能校验出这个文件的类型,大部分的文件类型校验都是通过获取文件的魔数来判断文件的类型,因为对于大多数类型文件来说他的魔数是固定的(例如class文件的魔数就是:CA FE )所以目前大部分网络上找到的处理方案是将各个文件的魔数放倒Map集合中,然后通过获取文件的魔数,从Map集合查找对应的文件类型。但是同类型的文件的魔数真的都是固定的么?通过tika自带的detect()方法我们可以对查找出来文件真实的mime类型(mime类型是前面是文件的大类型,后面是文件的小类型)
2023-05-21 19:55:33 258
原创 java实现定时任务
这种定时任务用到了Timer和Timertask 其中Timertask是一个抽象类,我可以通过实现重写其中的run方法在其中执行我们想要执行的定时任务,timer负责设置每一个定时任务的执行时间。由于Timer是单例设计模式,所以所有的timertask都是由一个timer先后执行的,类似于队列,按照指定的时间进行运行,相同时间的定时任务执行则按照代码顺序进行运行.使用ref指定方法的类对象,method指定要进行定时的方法 fixed_rate和cron任选其一来进行对执行时间的规定。
2023-05-14 10:33:52 794
原创 注册账号(邮箱验证)
第二步创建生成验证码的方法,用来随机生成验证码,验证码的数位尽量高一些来保证验证码的安全性。第三步通过调用注册接口将验证码返回到前端页面,有前端进行数据检验。第一步创建邮箱工具类去想创建账号的邮箱发送验证码。
2023-05-07 15:05:53 448
原创 IOC和Aop
1.Spring是轻量级的开源的JavaEE框架2.Spring可以解决企业应用开发的复杂性3.Spring有两个核心部分:IOC和AopIOC:控制反转,把创建对象过程交给Spring进行管理Aop:面向切面,不修改源代码进行功能增强4.Spring的特点 1.方便解耦,简化开发 2.Aop编程支持 3.方便程序测试 4.方便和其他框架进行整合 5.方便进行事务操作 6.降低API开发难度。
2023-04-16 11:42:33 153
原创 jsp的使用
begin:开始值 end:结束值 var:临时变量 varSatus:循环状态对象(index和count是有varSatus对象进行调用的) index:容器中的元素的索引,从零开始 count:循环次数,从1开始 items:容器对象。区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据再找out缓冲区数据,response.getWrite()数据输出永远在out.write()之前,与两者再jsp文件中写的前后顺序无关。
2023-04-02 10:12:49 211
原创 xml文档解析器jsoup和json文档解析器jackson的使用
/</</</</</</</</通过获得student.xml文档的路径来获取Document对象,document对象中储存的是整个xml文档的内容以字符串的形式来进行储存document对象的一些方法其中getElementById()方法的返回值是Element,其他的都是Elements集合(Elements extends ArrayList)可以通过get(int index)来进行调用,其中他们都包含xml语句,如果想要消除相关的标签,通过text()方法来消除标签的相关内容。
2023-03-26 10:30:44 201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人