自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【运维】界面操作与直接操作

所以,除非你对系统有非常完全的了解,不建议在有界面操作或脚本的情况下,依然选择简单粗暴的行为,因为这么做的代价必然是花费大量宝贵的时间处理微不足道的问题,最终以哭笑不得的心态收尾。类似的还有执行脚本,一个脚本中包含了很多命令,这些命令有条不紊地排列下来,很多复杂的操作都可以写入脚本中,简化执行流程。比如一个共享文件系统,一个简单的小操作,可能就涉及到数据库多张表的改动,而且往往改动的表并不是你以为的表。对于一个大型的复杂的系统,各个模块之间紧密关联,界面上的一个操作,可能涉及到很多底层逻辑的连携反应。

2024-01-04 17:59:19 533

原创 【Python安装】小版本号的匹配

只要大版本相同,那么对于一般的代码,python3.6.8和python3.10.10解释起来是没有区别的;不过编程语言的更新迭代很快,你永远不知道新版本增加了什么东西,也不知道用老教程在安装新版本的过程中会踩多少雷。所以为了节约排查额外版本问题的时间,最好还是按照教程的版本和步骤进行。在Linux上安装Python(尤其是按照教程安装)一定要注意版本问题,不要盲目追求全新的版本,最好和教程里的版本一致,不然仅仅是小版本的不同,也很有可能出现各种意想不到的问题。参数直接就是非法的了。

2024-01-02 16:07:49 615

原创 【运维】大日志文件按日期划分方法的改进及思考

完成这一步后,我特地找了一个很大的日志文件(40w行)进行测试,发现过程很漫长,足足用了十几分钟,这可太慢了,想来是每次read进行IO操作浪费了不少时间,那么换个思路,将文件内容全部存入数组中,每次遍历去数组中读取内容,在必要的时候一次性将匹配的行全部写入目标文件。刚开始接到这个需求后,我浏览了一遍日志文件,发现里面只有11月17号到11月22号的日志,天数不多,可以尝试手动划分。那么很自然地,我思考到:如果大日志文件中,涉及的天数很多呢,难道有几十上百天,我就要敲几十上百次命令吗?

2023-12-25 17:39:03 462

原创 【debug】重启服务问题流程分析

无论是架构类的模块(gateway、nacos等),还是业务模块(微服务),都需要仔细查看日志,有时候不是重启就能有效的。重启服务后,界面如果出现问题,一定要对涉及的每一个业务模块的日志进行排查!

2023-12-25 13:49:12 387

原创 Computer

当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天,电脑却故障了,我只能用巨大的打字机来编程。我感叹道:“果然这个魔法圈子里,先要会修电脑!有,让我学会用编程的思想分析问题与解决问题。方向三:计算机对自己的人生道路有帮助吗。方向二:现在还从事计算机相关行业吗。方向一:为什么当初选择计算机行业。

2023-12-21 14:39:41 416

原创 【Debug】查询的数据量比数据库中的数据量还要多

匪夷所思啊,我定位到Mapper层的代码,返回的也是5000多条数据,于是我反复执行了好几遍sql语句,根据查询条件从mysql中只能查询出一条数据,而且mysql本身也就1000多条数据,怎么可能查询出5000多条呢?我尝试咨询GPT,GPT说可能是Mybatis的缓存啥的,但我每次运行,都是固定的一个数据量:5231,如果有缓存,数据不应该越来越多吗?今天前端反馈了一个bug,某个接口返回的数据很多,我到mysql数据库看了一下,查询的表名为。,其中只有1000多条数据,而页面返回有5000多条数据!

2023-11-17 18:02:47 259

原创 【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard

Bug排查:由前端到后端

2023-10-17 15:08:42 2027 4

原创 Error creating bean with name ‘xxx‘: Bean with name ‘xxx‘ has been injected into other beans ...

参考:

2023-09-07 17:14:07 129

原创 IDEA中配置pom文件时对annotationProcessorPaths作修改后Lombok不起作用

之后我在进行数据库sql测试时,出现了查询到的数据使用原始的toString方法(Class@hashCode)表示,我意识到问题不对,我又尝试调用lombok生成的get、set方法,发现在编译时没有产生问题,但是一运行起来就会报错:java: cannot find symbol。解决方案:annotationProcessorPaths中仅仅配置了mybatis-flex-processor的内容,而没有lombok的配置,导致lombok在运行时的失效,加上lombok相关内容后,问题解决。

2023-07-31 11:25:37 1571

原创 MyBatis-Plus 编写SQL语句实现多表条件分页查询

MyBatis-Plus在单表简单的CRUD操作上十分便捷,但当涉及到复杂的多表间的联合查询,而且还要携带条件的情况下,就会显得无从下手,一般情况下我们可以在service层写大量的代码逻辑达到多表条件查询的要求,当然也可以手写sql语句,这样更加方便。而多表查询出来的结果也需要有一个对应的类与之映射,这时候我们就要根据实际情况创建一个对象接收查询出来的结果,并且也不能直接套用Mybatis自动生成的方法,而是需要自己声明方法并在xml文件中编写SQL语句实现来处理。那么必须要进行多表的查询。

2023-06-29 16:51:41 4453 3

原创 【力扣】59. 螺旋矩阵 II

模拟,从外圈往内圈填充,遇到边界即改变方向。所有元素,且元素按顺时针顺序螺旋排列的。

2023-05-09 15:21:14 67 1

原创 【力扣】27. 移除元素

请注意,输入数组是以**「引用」**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。本题要求返回新的数组长度,同时对原有的数组也需要进行修改。为什么返回数值是整数,但输出的答案是数组呢?不要使用额外的数组空间,你必须仅使用。的元素,并返回移除后数组的新长度。

2023-05-09 15:05:16 81

原创 【力扣】209. 长度最小的子数组

针对数组中的每一个元素,都需要以其为首或以其为尾寻找最短子数组(某种形式上的遍历),在寻找的过程中维护最短长度。滑动窗口:可以很好地利用之前求和的积累,每次只对滑动窗口内的子数组两端进行微调,节省了很多时间。双层for循环:暴力解法,每层循环都会从0开始重新求和判断,会超出时间限制;,并返回其长度**。**如果不存在符合条件的子数组,返回。个正整数的数组和一个正整数。找出该数组中满足其和。

2023-05-09 13:36:33 51

原创 【力扣】704.二分查找

在二分查找的过程中,需要注意"循环不变量"的问题,要么一值保持左闭右闭的区间,即[left,right],要么一值保持左闭右开的区间,即[left, right)推荐使用[left,right],其代码一致性更强,细节问题更少。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。

2023-05-09 12:41:18 50

原创 【力扣】56.合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [start。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2023-04-22 11:12:53 154

原创 【Redis学习】SpringBoot集成Redis

jedis-lettuce-RedisTemplate三者的联系本地Java连接Redis常见问题bind配置请注释掉保护模式设置为noLinux系统的防火墙设置redis服务器的IP地址和密码是否正确忘记写访问redis的服务端口号和auth密码Jedis Client是Redis官网推荐的一个面向java的客户端,库文件实现了对各类API进行封装调用。Lettuce是一个Redis的Java驱动包,Lettuce翻译为生菜,没错,就是吃的那种生菜,所以它的Logo长这样。

2023-04-07 15:50:25 379

原创 【Redis学习】Redis集群

由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节东间共享数据的程序集。Redis集群是一个提供在多个Redis节点间共享数据的程序集Redis集群可以支持多个Master不在同一个slot槽位下的多键操作支持不好,通识占位符登场不在同一个slot槽位下的键值无法使用mset、mget等多键操作。可以通过**{}来定义同一个组的概念,使key中。

2023-04-07 15:36:35 1447

原创 【Redis学习】Redis哨兵(sentinel)

吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。作用:监控redis运行状态,包括master和slave当master down机,能自动将slave切换成新master哨兵可以类比为无人值守的运维。

2023-04-05 21:34:32 721

原创 【Redis学习】Redis复制(replica)

replica即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。slave启动成功连接到master后会发送一个sync命令slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身的数据会被master覆盖。

2023-04-05 21:28:13 1269

原创 【Redis学习】Redis发布订阅

是一种消息通信模式:发送者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收消息,可以实现进程间的消息传递。开启3个客户端,演示客户端A、B订阅消息,客户端c发布消息演示批量订阅和发布取消订阅。

2023-04-05 21:22:31 71

原创 【Redis学习】Redis管道

客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。服务端处理命令,并将结果返回给客户端。上述两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间)如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法。

2023-04-05 21:20:12 505

原创 【Redis学习】Redis事务

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。开启:以MULTI开始一个事务入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面执行:由EXEC命令触发事务。

2023-04-05 21:18:24 401

原创 【Redis学习】Redis持久化

在指定的时间间隔,执行数据集的时间点快照实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。调用/usr/local/bin中的redis-check-rdb 命令即可修复破损的rdb文件。以日志的形式来记录每个写操作。

2023-04-05 21:13:37 615

原创 【Redis学习】Redis10大数据类型

这里说的数据类型是value的数据类型,key的类型都是字符串。

2023-04-05 21:07:31 1464

原创 【Redis学习】Redis安装配置

Linux下的/usr/local类似于Windows下的C:/Program Files。redis-bepchmark:性能测试工具,服务启动后运行该命令,看看自己本子性能如何。redis.conf配置文件,改完后确保生效,记得重启redis服务,否则配置不会生效。将默认的redis.conf拷贝到自己定义好的一个路径下,比如/myredis。redis-check-dump:修复有问题的dump.rdb文件。删除/usr/local/bin目录下与redis相关的文件。

2023-04-05 21:03:09 607

原创 【Redis学习】Redis入门概述

性能极高 —— Redis能读的速度是110000次/秒,写的速度是81000次/秒Redis数据类型丰富,不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用Redis支持数据的备份,即master-slave模式的数据备份。

2023-04-05 20:59:10 831

原创 【C语言学习】文件操作

C语言具有操作文件的能力,比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。与其他编程语言相比,C语言文件操作的接口相当简单和易学。在C语言中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。

2023-04-04 23:57:25 2299

原创 【C语言学习】typedef、const、随机数

C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作用,原因就是上面讲到的,将非 const 类型转换为 const 类型是允许的。多次运行程序,会发现每次生成的随机数都不一样了。这是因为,for 循环运行速度非常快,在一秒之内就运行完成了,而 time() 函数得到的时间只能精确到秒,所以每次循环得到的时间都是一样的,这样一来,种子也就是一样的,随机数也就一样了。

2023-04-01 09:00:11 135

原创 【C语言学习】结构体

只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种。

2023-04-01 08:57:47 1281

原创 【C语言学习】指针

数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。现在假设有一个 char 类型的变量 c,它存储了字符 ‘K’(ASCII码为十进制数 75),并占用了地址为 0X11A 的内存(地址通常用十六进制表示)。

2023-04-01 08:42:48 1135

原创 【C语言学习】预处理命令

前面各章中,已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。这种以号开头的命令称为预处理命令。编译(Compile)会将源文件(.c文件)转换为目标文件。对于 VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o。编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。链接(Link)是针对多个文件的,它会将编译生成的多个目标文件以及系统中的库、组件等合并成一个可执行程序。

2023-04-01 08:33:09 2388

原创 【C语言学习】数组

要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个intint a[4];这样,就在内存中分配了4个int类型的内存空间,共 4×4=16 个字节,并为它们起了一个名字,叫a。我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。

2023-04-01 08:24:10 2871

原创 【C语言学习】函数

C语言在发布时已经为我们封装好了很多函数,它们被分门别类地放到了不同的头文件中(暂时先这样认为),使用函数时引入对应的头文件即可。C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一系列函数的集合,在磁盘上往往是一个文件夹。C语言自带的库称为标准库(Standard Library),其他公司或个人开发的库称为第三方库(Third-Party Library)。除了库函数,我们还可以编写自己的函数,拓展程序的功能。

2023-04-01 08:22:52 688

原创 【C语言学习】循环结构和选择结构

选择结构(分支结构)涉及到的关键字包括 if、else、switch、case、break,还有一个条件运算符?(这是C语言中唯一的一个三目运算符)。其中,if…else 是最基本的结构,switch…case 和?都是由 if…else 演化而来,它们都是为了让程序员书写更加方便。你可以只使用 if,也可以 if…else 配对使用。另外要善于使用 switch…case 和?,有时候它们看起来更加清爽。

2023-04-01 08:22:45 1233

原创 【C语言学习】输入输出

C语言中常用的从控制台读取数据的函数有五个,它们分别是 scanf()、getchar()、getche()、getch() 和 gets()。其中 scanf()、getchar()、gets() 是标准函数,适用于所有平台;getche() 和 getch() 不是标准函数,只能用于 Windows。scanf() 是通用的输入函数,它可以读取多种类型的数据。getchar()、getche() 和 getch() 是专用的字符输入函数。

2023-04-01 08:20:54 2565

原创 【C语言学习】变量和数据类型

来凑够有效数字的位数,而 %f 和 %e。

2023-04-01 08:19:33 1682

原创 【C语言学习】C语言初探

C语言学习

2023-04-01 08:13:51 712

原创 【Python】爬虫实例

Python爬虫

2023-02-15 21:09:32 425

原创 【Java框架】Spring5

spring5

2022-09-13 21:32:47 259

原创 【力扣每日一题】1470. 重新排列数组

1470. 重新排列数组

2022-08-29 08:55:48 134

空空如也

空空如也

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

TA关注的人

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