- 博客(80)
- 收藏
- 关注
原创 SQL的执行顺序
优化器根据解析后的SQL语句生成执行计划。首先确定从哪些表中检索数据,并执行JOIN操作(如果有的话)。如果没有命中缓存,服务器将对SQL语句进行解析和预处理。客户端与SQL服务器建立连接,进行账号认证和权限校验。服务器首先检查查询缓存,如果命中缓存,则直接返回结果。去除结果集中的重复行(如果指定了DISTINCT)。执行实际的查询操作,选择需要返回的列。对JOIN后的结果进行条件筛选。将结果集按一个或多个列进行分组。限制返回的记录数(实现分页)。将最终的结果集返回给客户端。对分组后的结果进行筛选。
2024-06-10 17:55:55
477
原创 Redis面试题
缓存失效策略:在更新数据库之后,立即使缓存中对应的数据失效,下次访问时重新从数据库中获取数据并更新缓存。这样可以确保数据库和缓存数据保持一致。读写时双写:在更新数据库时,同时更新缓存中对应的数据。这样可以确保数据库和缓存中的数据保持一致。但是这种方式会增加系统的复杂度,需要处理并发写入的情况。延时双删:在更新数据库时,先删除缓存中对应的数据,然后在事务提交成功后再重新写入缓存。这样可以避免并发写入导致数据不一致的情况。
2024-06-10 17:52:13
481
原创 Go语言学习
官网下载地址: https://golang.google.cn/dl/配置环境变量参考:配置环境变量 官方文档地址:https://golang.google.cn/doc/语法示例:note 官网文档地址:https://xorm.io/zh/docs/chapter-08/readme/
2024-06-10 15:59:21
298
原创 初识springclould到生产者消费者的RPC通信
是关注于全局的服务治理框架,离不开springBoot,它将每一个springboot的单体微服务进行了整合,为各个微服务之间进行整合管理,为各个微服务之间提供配置管理,服务发现,路由,微代理,事件总线,全局锁,分布式会话等集成服务。运行与查看,先启动提供者的端口,查看生产者是否可以正常运行,再运行开启消费者的端口,注意期间生产者不能关闭,否则消费者将无法访问。专注于快速的,方便的,开发单体微服务,可以离开springcloud独立使用,开发项目,开发单体个体的微服务。,版本不同的情况,修改版本费事费力。
2024-06-10 15:56:08
669
原创 代码的并发问题
删除都存在删除异常,在捕获异常的时候注意异常信息的简化消息传递,容易造成异常错误的简化。无法删除完的问题,因为集合在不断的伸缩变化。的判断,不然它不知道该删除哪一个错误。使用中间的集合暂存元素,再修改。安全但是依旧爆并发修改的错误。但是在删除之前一定要有个。通过安全的集合类,可行。通过迭代器修改,可行。
2023-11-29 22:36:14
307
1
原创 集合的使用
首先按照数组元素的第一个值进行降序排序,如果第一个值相等,则按照第二个值进行升序排序。队列数组,一维数组中存储的是队列,队列中存储字符初始化 ,并且添加新的元素数组静态内部的类,长度不可变,重新构造之后,移除元素出现数组 长度动态修改结果一定是类型擦除结果是PriorityQueue优先队列stream结果依次是 字符串分割后的数组转为集合 集合并行流过滤出字符串长度大于的数目 集合并行流去重后集合的数量 集合并行流处理后将字符串映射全大写的,在映射为字符串的长度,收集为集合返回 集合
2023-11-29 22:05:22
200
原创 Jdbc和Mybatis的增删改查
建立符合要求的包机制,其中主启动类放置的位置需要和依赖自定义扫描的位置一致,否则需要自定义包扫描机制。查询全部数据的业务函数,由于在自定义的配置文件中已经连接到本地的数据库了,所以在构造连接的时候采用的是无参构造函数生成。在实习期间,结合公司的开发体系架构,在导入公司的综合配置文件依赖之后,在基础上进行。的初始化,查询的时候需要增加一个结果集资源,在结束的时候需要逆向关闭三个连接资源。的增删改查,其中引用到公司的jar包依赖,可能会发生数据源的冲突,如下。位置,修改自己本地的。类似于这种点击发送即可。
2023-04-04 09:35:14
474
1
原创 JavaEE面向对象编程【持续补充完善】
仓库集合使用可见性的关键字进行修饰,针对删除和增加货物的方法使用锁的关键字进行修饰。添加其他线程的唤醒功能,优化体验感。增加了一个队列节点的类,维护的是节点和对应深度的关系,统计的是当前节点和其深度,广度优先搜索一但节点的左右子树为空,那么此节点的深度就是二叉树的最小深度。的工具类,将字符串进行翻转,对比去重之后的字符是否一致,既可得知操作之后是否是回文串。编写深度优先搜索的算法,在遍历每一个节点时候对比深度信息,对最小深度变量进行更新。中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,
2023-03-14 23:15:30
403
原创 Vue使用ECharts
快速入门 EChartsEcharts实例一个基于` JavaScript 的开源可视化图表库。例如折线图代码option = {xAxis : {
2023-02-23 16:40:49
954
原创 快速搭建前后端分离项目
/ 添加乐观锁 mybatisPlusInterceptor . addInnerInterceptor(new OptimisticLockerInnerInterceptor());//添加分页 mybatisPlusInterceptor . addInnerInterceptor(new PaginationInnerInterceptor(DbType . MYSQL));} }测试分页查询的代码。
2023-02-02 17:47:45
382
原创 项目中遇到的错误
进行了开启,应用的应用名字,应用程序的版本信息,描述信息,访问的地址等。required=“true” 表示属性是否必填,默认为false。controller 层的方法上多个参数中每一个参数的说明。required=“true” 表示参数是否必须传。controller 层的方法上多个参数的说明。description=“描述实体的作用”name=“name” 参数的变量名。defaultValue=“参数的默认值”value=“用户名” 描述参数的意义。message=“状态码对应的响应信息”
2022-12-17 19:26:45
1115
原创 Go安装和配置以及基本框架的配置
安装之后查看是否安装成功,使用命令。命令速度很慢,无法访问,需要设置代理。在国内放完外网速度很慢,在使用。在到编辑环境变量中设置进行添加。,囊地鼠,是北美的一种地鼠。内存管理,数组安全,编译快。的发明者之一,贝尔实验室。(罗伯特.格利茨默)
2022-12-14 21:41:51
260
原创 从Mybatis到Mybatis-Plus学习
修改之后,达到预期,实现创建时候获取日期,修改时候更新日期,但是这些都是基于数据库的表的操作,在实际开发情况中,不允许对数据库表进行修改,因此,需要引入代码级别的更新时间信息。以后如果需要获取相同的数据,直接从缓存中获取,不需要走数据库了。默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。由于一级缓存的作用域太低了,所以诞生了二级缓存,二级缓存也就叫做全局缓存。分析,需要在教师的实体类中加入一个学生集合的属性,学生具有老师的。号用户进行了修改,进行了修改,直接进行了提交,再对。
2022-12-13 17:38:54
899
原创 期末复习-大数据技术原理与应用
NoSQL,泛指非关系型的数据库。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。特点,灵活可扩展,灵活的数据模型,与云计算紧密相连兴起的原因,海量数据的需求,数据高并发的需求,无法满足可扩展和高可用性的需求。
2022-12-09 21:12:23
3759
原创 精确的数据类型BigDecimal和工具类
位有效位的数进行精确的运算,因为在现实生活中,财务、超市、银行使用基本的数据类型浮点数的时候只满足。定义了很多的有参构造函数,十分的丰富,省略了无参构造。类,实现了比较器的接口,用来对超过。时候,输出结果不可预知,因为。的构造器是可预知的,是准确的。无法准确的表示有限长度的。位就会出现精度上的丢失。的构造器中传入浮点数。
2022-12-08 16:32:16
853
原创 期末复习-软件体系结构
软件重用是按照的,以的软件构件进行组装软件系统的过程。一个重用驱动的软件开发过程描述了如何组装可重用构件建立软件系统,以及如何建立和管理可重用构件。模型代表的是概念,内容,语境构件概念是对构件做什么描述,构件内容是构件如何被实现,构件语境是可重用构件应用的领域,主要用于形式化的描述方法模型在描述函数型或者过程型软件构件,采用三元组描述在面向对象的软件构件来说,采用四元组刻画分类的模型,只允许按照给定的刻面架构描述已有的软件构件,适合非形式化方法青鸟构件模型外部接口和内部结构组成对应的概念和语境外部接口,构件
2022-12-03 21:05:28
1703
原创 LeetCode-895. 最大频率栈以及HashMap的存值取值操作
设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。第二步,计算索引,通过上面的哈希函数,计算键值对在数组中的索引。首次扩容,判断数组是否为空,如果数组为空,则进行第一次扩容。,链表就转化为红黑树,并且将数据插入到树中。和其对应出现频次的哈希表,在建立一个频次。第四步,再次扩容,如果数组元素的个数大于。使用栈对出现的频次的元素保存的哈希表。接口,可以克隆复制的接口,序列化接口。第三步,插入元素,如果当前位置元素为。
2022-11-30 16:44:05
354
原创 LeetCode-130. 被围绕的区域-广度优先和深度优先
从边界开始遍历递归遍历数组进行标记,这里在标记左右和上下两组边的时候,去掉重叠的部分,初始化了方向数组,遍历一次对应上下左右的直接相邻。,数组标记完毕之后,遍历数组,被标记的就是。围绕的区域,并将这些区域里所有的。,这样标记结束之后,数组就剩下标记的。的连通分量就是入队,将该位置标记为。就是未被包围的字符,将其更新为。最后将标记的位置的元素还原即可。不会被包围,也就是边界上的。访问四边的边界开始,边界的。的联通元素的索引,队列具有。就是被包围的,将其更新为。,没有被X包围的字符。和直接或者间接相连的。
2022-11-29 20:40:50
316
原创 Python-可视化单词统计词频统计中文分词
新建一个文件,输入文件的内容,查询此文件中关键字的出现的次数,关键字出现的位置,将所有的文本按照中文分词的词库进行切割划分,返回。每一个分词作为字典中的键,出现的次数作为字典中的值。将输入的文件内容写入新建好的文件中,点击新建文件按钮,弹出提示框“文件建立成功”,完成后。键值的添加,获得文件中相同字符出现的次数有word这个分词时,时返回其值,默认是。给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数。新建指定文本文件,输入一个文件名,以及里面的文件内容建立一个文本文件。
2022-11-29 19:57:05
1697
2
原创 LeetCode-图的建立和迪杰斯特拉算法以及数组的分组和排序轮转
times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。数组,距离小于指定的最大长度就是图中符合要求的可达节点,再遍历每一条边,统计边上可达的路径长度,即是小于等于最大的移动距离。节点最近的节点加入,就是在未访问的节点中查找最短路径长度,更新抵达节点的距离数组,将。出发,到达其他节点的最短路径的最大值,如果存在不可达的节点,直接返回。最开始的数组是一个非递减的数组,轮转之后能否得到题目给定的数组的顺序。
2022-11-28 11:34:50
678
原创 Gof23-创建型-工厂-单例-抽象工厂-建造-原型以及UML的绘制
具体实现,创建一个接口,创建多个接口的实现类,重写实现对应的方法,创建一个工厂类,工厂类中实现方法传入类型生产对应的接口实现类,返回接口,编写测试方法,new一个工厂传入多个类型就可以生产对应的产品了。例如,人包含头、躯干、四肢,它们的生命周期一致。适用的场景:统一的接口作为统一的零件,实现类作为零件的组合,将实例产品类的生产交给工厂,用户只需要面对工程提取指定的产品。存在问题,如果在Hungry的代码中加入一下代码,那么在类初始化时候,占用了这些空间,但是没有使用,就造成空间资源的浪费。
2022-11-26 22:25:38
709
原创 LeetCode-剑指 Offer 46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,。,25 翻译成 “z”。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。,遍历到这个数字字符串的每一位,要求当前位之前数字的最大翻译方式,就可以使用动态规划的思路进行解决,由于翻译过来,最多是。使用动态规划的数组,空间复杂度线性阶,依赖于数字的长度。,当前位置的翻译次数最少是上一次的翻译次数。使用变量代替动态规划数组,空间复杂度常数阶。的数字,有且最多只有一种翻译,一旦大于。
2022-11-23 09:37:53
144
原创 注解和反射
对比正常使用创建对象,反射创建对象,设置可见性的方式对比性能,结果发现new方式创建对象的方式最快,反射创建对象的时间最长,关闭检查,性能可提高一倍。写在程序之中,程序可以识别,做出相应的动作处理,具有检查和约束程序的作用。写在程序之中,供人参考,提示使用,程序会自动忽略。对象,一个类被加载之后,类的整个结构都会封装在。反射获取到类对象,创建实例,获取到方法的。元注解就是可以负责注解其他的注解。表示在什么级别保存该注解信息。说明子类可以继承父类中的注解。,一个类在内存中只存在一个。激活,对对对象设置值。
2022-11-15 22:21:00
3577
原创 Linux程序编译的过程
sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。c,c++代表的高层语言编写的程序在转化成为处理器可以识别并且执行的二级制代码的过程。动态链接,在链接阶段,把需要的动态库加入到内存中去。反编译ELF文件,可以查看ELF文件的指令和数据。编译,将预处理生成的我呢间编译成汇编文件。文件,就是执行连接格式的可重定向文件。,汇编之后停止,生成目标文件。的密码,su 命令需要输入。运行库 语法 + 标准库。
2022-11-14 16:39:44
838
原创 由浅到深的操作系统学习
是系统中多个进程并发执行时,由于资源占有和请求引起的一种进程永远被阻塞的状态的现象,就是进程之间持有自己的资源不愿放手,又要请求其他进程的资源满足自己的需要,造成的一种无解的,互相一直僵持的状态。4、一个进程调用一个过程的时候,始终在用户模式下的,在用户进程调用一个系统调用的话,就会发生模式的切换以及在系统调用返回的时候,会再次进行模式的切换。当一个进程被交换到磁盘中时,就处于挂起的状态。3、过程的调用始终在一种模式下进行的,不会发生进程的切换和进程状态的切换,系统调用是会引起进程的切换和状态的切换。
2022-11-12 22:13:35
721
原创 深入理解Java虚拟机
沙箱,沙箱就是一个限制程序运行的环境,将java代码限定到指定的虚拟机的特定运行范围中,严格控制它对资源的访问,确保对代码的有效隔离,防止恶意代码对本地系统的破坏。方法区属于共享的区域,存储静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在在堆内存中。标记需要回收的对象,标记完成之后,统一回收所有被标记的对象,也可以反过来,先标记存活的对象,统一回收未标记的对象。先进后出,主管程序的运行,生命周期和线程同步,线程结束,栈内存就释放,对于栈,不存在垃圾回收。结果如下,可见,一个类的多个对象的。
2022-11-09 22:08:56
691
原创 ThreadPoolExecutor
在人工手动的给线程池提交任务之后,线程池会先判断核心线程数是否已满,如果没满,就创建新的线程,执行任务,如果核心线程数满了,就判断工作队列是否已满,如果没满,就将任务添加到工作队列中,等待调用。(核心工作线程数):当向线程池提交一个任务时,若线程池已创建的线程数小于corePoolSize,即便此时存在空闲线程,也会通过创建一个新线程来执行该任务,直到已创建的线程数大于或等于corePoolSize时。因为多个任务的执行需要多个线程的处理,但是频繁的创建线程和销毁线程会造成资源的消耗和时间的浪费。
2022-11-07 21:12:22
246
原创 LeetCode:1106. 解析布尔表达式
如果当前字符是除了逗号和右括号以外的任意字符,则将该字符添加到栈内;分析题目可以知道,需要使用栈这个数据结构存储。如果当前字符是逗号,则跳过该字符;最后栈中剩余的字符即是结构。这个字符串中的字符。
2022-11-05 14:54:43
435
原创 树递归遍历和Mirrors遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历前序遍历就是按照的顺序完成遍历,他的每一颗子树都遵循这个遍历的顺序,就称为前序遍历。
2022-11-01 22:15:10
361
原创 栈和队列定义和应用
栈【Stack】在一端并且是同一端进行插入或者删除的线性表,可以使用数组或者链表实现,遵循的是FILO先进后出,或者是后进先出的原则,在现实生活类似肠子就是线性表,吃完就吐就是栈。队列【Queue】在一端进行插入,另外一端进行删除的线性表,可以使用数组和链表实现,遵循FIFO先进先出的原则。在现实生活类似肠子就是线性表,吃完就蹲坑就是队列。代码定义栈int top;50int top;队列50。
2022-10-26 08:33:04
379
原创 Centos7下MongoDB安装到基本命令的学习
复制:数据同步在多个服务器中,复制提供了数据的冗余备份,多个服务器中提供了备份,保证了数据的安全性和可用性。复制准备就是至少需要两个节点,一个主节点,一个从节点,主节点负责处理客户端的请求,从节点负责从主节点上拷贝数据,减少主节点的压力。客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。一定要先登录admin,在创建root用户并且设置密码,再使用root的信息登录,在进行操作。索引的查看,创建,删除全部,删除指定,查看索引大小。退出MongoDB的数据库。
2022-10-21 20:25:39
856
原创 Redis深入理念学习和集群的搭建
是指一个key非常的热点,在不断的抗住大的并发,大并发集中对一个点进行访问,在这个key失效的瞬间,持续的大并发机会穿破缓存,直接请求数据库,就相当在屏障上开了一个口子。由于缓存过期,会同时访问数据库查询最新的数据,并且写入到缓存中,瞬间使数据库的压力过大。fork的作用就是复制一个与当前进程一样的进程,新的进程的所有数据(变量,环境变量,程序计数器)的数值都和原进程一致。后面的哨兵检测到这个主机不可用,当到达一定的数量的时候,哨兵之间会进行一次投票,投票的结果有一个哨兵发起为即可,进行故障转移的操作。
2022-10-19 15:56:32
292
原创 LRU最近最少使用的缓存
实现思路,在LRU缓存类中维护一个Node的内部类,和一个缓存Map,实现每一个value就是一个Entry,entry之间是双向链表的关系,在链表之间加入head,和tail的entry节点,所有的数据节点都是在这两个之间进行的插入和查询。通过传入的指定的一个key,获取到对应的节点Entry,如何获取到的节点为null的话就是没有此节点,返回-1即可。的方法就比较麻烦了,通过key获取到节点node,此节点不为空,就说明缓存中具有此节点,更新此节点的value,将此节点移动到头部,返回即可。
2022-10-10 21:39:19
439
原创 Java多线程和JVM
实现Callable接口,实现call()方法,将call()方法作为线程执行体,其中call()具有返回值,然后创建该类的对象,使用FutureTask类包装该Callable对象,得到FutureTask的对象,将它作为Thread类的参数创建新对象,并且启动线程。实现Runnable接口,重写闰run()方法,run()是线程的执行体,常见该类的对象,将此对象作为创建的Thread类的参数,得到线程对象,线程对象的start()方法开启线程。下载电影时,好几个段同时下载,保证下载速度的最大化。
2022-10-10 20:52:25
333
空空如也
IDEA顶部白色一栏无法解决
2022-09-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人