- 博客(149)
- 收藏
- 关注
原创 AI生成题目功能实现
将生成的结果进行处理,最后可以将结果存入数据库中,这里分享结果处理的例子,将结果按行拆分,并移除了“`”符号,其中aiManger是已经封装构造消息列表的对象。具体生成题目功能,我们进一步修改 systemMessage和userMessage内容,并对返回的结果进行格式化。其中systemMessage控制AI角色、userMessage是用户对话内容,apiKey 是刚刚保存的。使用java接入API:有实例代码可以参考,先通过Maven安装。对应模型会生成一个api-key,记得保存,调用时需要。
2025-04-27 00:54:26
704
原创 Elasticsearch生态
Elasticsearch实现全文检索的原理Elasticsearch打分规则常用的查询语法ES数据同步方案Elasticsearch生态非常丰富,包含了一系列工具和功能,帮助用户处理、分析和可视化数据,Elastic Stack是其核心部分:Elastic Stack 也称 ELK Stack, 由以下几个部门组成:索引Index:类似数据库中的表,数据存储和搜索的基本单位,每个索引可以存储多条文档数据。文档 Document:索引中的每条记录,类似数据库中的行,文档
2025-04-13 21:33:18
1292
原创 Arthas线上问题诊断器
支持JDK6以上,支持linux、mac、windows,采用命令行交互模式,提供丰富的Tab自动补全功能。watch + 全定名 +方法名 + {params,returnObj} 同时查看参数和返回值。watch + 全定名 +方法名 + throwExp 查看抛出的异常对象。watch + 全定名 + 方法名 + returnObj 查看返回值。jad+ 类的全限定名,反编译字节码文件 将class-> java。watch + 全定名 + 方法名 + params 查看参数。
2025-03-30 21:06:58
517
2
原创 钉钉自定义机器人发送群消息(加签方式、http发送)
发送方法直接调用sendDingTalkMsg()方法,一个是发送给全体成员,一个是根据手机号发送给具体人。在钉钉群里创建自定义机器人(群设置-机器人-添加机器人),选择自定义机器人。添加成功后有一个Webhook,也就是机器人的发送消息的url。主要需要Webhook,和 secret密钥。
2024-12-17 12:02:24
3020
4
原创 Redis主从和哨兵
如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步。每一个master都有一个唯一的replid,slave则会继承master节点的replid。增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave。6.slave执行接收到命令,保持与master之间的同步。
2024-09-04 21:43:47
1246
3
原创 案例练习理解ThreadLocal以及应用场景
ThreadLocal:用来解决多线程程序下并发问题,通过为每一个线程创建一份共享变量的副本保证线程之间的变量的访问和修改互不影响。三个案例理解ThreadLocal;场景应用:用户身份信息存储 线程安全 日志上线文存储等
2024-08-30 17:55:24
1211
原创 Postman接口测试
form-data可上传文件,但 form-urlencoded 不支持上传文件。可以以json、text、javascript、html、xml格式。postman适用于基于HTTP(REST,GraphQL,SOAP)2.原始内容row(不会进行编码)Bearer Token:有明确约束的使用方式。响应收到后执行,执行js,改变响应。1.表单(表单会经过编码)pm.expect:创建预期条件,进行断言。其他:体验产品,抓包分析。KV结构,可以批量编辑。通过接口,可以让成功之间进行项目交互。
2024-07-14 15:04:16
1212
11
原创 若依(RuoYi)开源框架-登录
基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。使用若依:1.下载并运行2.看懂业务流程3.进行二次开发
2024-07-14 00:51:00
1325
1
原创 SpringCloudAlibaba Nacos配置中心与服务发现
阿里的开源产品,针对微服务架构中的服务发现、配置管理、服务治理的总和型解决方案。
2024-07-10 10:06:29
1308
2
原创 快速失败“fail-fast”和安全失败“fail-safe”
发现第一个元素可以正常删除,但由于使用for-each循环,底层实际使用的是迭代器遍历当执行for (String s : list)时,Java会隐式地创建一个迭代器,并调用iterator()方法开始迭代。在遍历集合时,不是直接在集合内容上进行访问,而是先复制原有集合内容,在复制的集合上进行遍历,在遍历时,对集合的修改是不会被迭代器检测到,所以不会抛出ConcurrentModificationException异常。正确做法使用迭代器的remove()方法,可正常删除。
2024-05-27 17:07:46
1285
15
原创 【话题】我眼神的IT行业现状与未来趋势
随着科技的飞速发展,新兴技术如人工智能、机器学习、区块链等正在逐渐渗透到各个行业,对教育体系产生了深远的影响。这些技术不仅带来了教学方式的变革,也对教育内容和评价机制提出了新的要求。本文将深入分析新兴技术对教育体系的挑战和机遇,并探讨如何培养下一代IT专业人才。欢迎来到我的博客——小俱的一步步,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。欢迎访问小俱的一步步!
2024-05-25 22:47:28
1262
5
原创 设计模式——职责链(责任链)模式
职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
2024-05-24 00:33:04
1555
4
原创 TCP/IP网络模型
在同一台设备上,进程间通信有管道、消息队列、共享内存、信号等方式。而对于不同设备上的进程间通信,就需要网络通信,而设备是多样的,为了兼容不同的设备,就协商出了一套通用的网络协议。从上到下包含应用层、传输层、网络层、网络接口层。
2024-05-18 00:36:26
1031
3
原创 Spring框架中的单例bean是线程安全的吗?
无状态的Bean的行为不受其内部状态的影响,每次调用都是基于传入的参数进行计算,而不依赖于任何之前的状态。(例如上面例子:userService是不能修改的,是无状态的bean)Spring框架中有一个@Scope注解,默认的值就是singleton,单例的。因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了。,是要考虑线程安全问题的,可以使用多例或者加锁来解决。单例bean不是线程安全。Spring框架中的。
2024-04-14 22:15:27
310
5
原创 MySQL如何定位慢查询?如何分析这条慢查询?
配置完毕之后,通过以下指令重新启动MVSQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log。性能由好到差为 NULL(未使用表)、system、const、eq ref、ref、range、index、all。聚合查询(常用的聚合函数有:MAX()、MIN()、COUNT()、SUM()、AVG())。聚合查询、多表查询、表数据过大查询可以使用Explain/DESC(desc) 进行查询。type字段类型:sql的连接的类型。
2024-04-12 20:15:51
554
原创 Docker核心特征
Dockerfile:制作进行的文件,可以理解为制作镜像的一个清单。镜像:用来创建容器的安装包,可以理解为给电脑安装操作系统的系统镜像。容器:通过镜像来创建的一套运行环境,一个容器里可以运行多个程序,可以理解为一个电脑实例。Docker核心特征1.Docker运行在Linux内核上2.CGroups:实现了容器的资源隔离,底层是Linux Cgroup命令,能够控制进程使用的资源3.Network网络:实现容器的网络隔离,docker容器内部的网络互不影响4.Namespace命名
2024-04-11 17:45:14
893
原创 【Redis】底层跳表实现
先巩固Redis的数据类型以及底层的数据结构:ZSet(有序集合)可以使用两种不同的内部数据结构来表示:压缩列表(ziplist)和跳跃表(skiplist)。跳表是redis底层SortedSet(ZSet)的数据结构实现,是ZSet的灵魂所在;set是一个无序集合,而ZSet是有序集合。ZSet使用压缩列表情况:1.有序集合保存的元素数量小于128个;2.有序集合保存的所有元素的长度小于64个字节如果元素数量或元素大小超过了以上限制就会转换为跳表存储。
2024-04-06 14:43:06
1393
3
原创 TCP三次握手四次挥手
是否收到了同意连接请求,就只能重复同意,这些过期的请求可能回导致⽹络的混乱 设计成三次握⼿,客户端在接收到服务端的同意连接报⽂之后,就不需要再重复发送请求连接报⽂, 并且第三次握⼿客户端会发送报⽂给服务端,告诉服务端我已经知道你同意连接了,就不需要再同意我重复发的其 他请求。所以三次握⼿的原因就是避免多次建⽴重复连接,当另⼀⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了 TCP。)是⼀种⾯向连接的协议,为了保证数据传输的可靠性。主机的⽹络较差,连续发送了多个连接请求,
2024-04-01 11:46:31
473
1
原创 Redis基础类型的String底层实现
Redis数据库中所有的键都是String类型,String 的底层实现是SDS(Simple Dynamic String)。//记录buf 数组中已使用字节的数量 等于 SDS所保存的字符串的长度。SDS主要是对C语言做了一个封装,是的SDS具有动态扩容、O(1)复杂度的长度计算的特点。是在⼀个连续 的内存空间中,申请内存的时候只需要⼀次分配,效率更⾼。的编码⽅式,直接让 redis 对象的指针位设置为这个整数。中的任意数据类型的键和值都会被封装成⼀个。个字节,尾巴结束字符⼀个字节,加在⼀起共。
2024-04-01 09:43:32
598
原创 MySQL索引下推
索引下推,服务层把查询工作下推到引擎层去处理 。在引擎层查询 ‘ % 张’,查到后将记录交给server层检查是否满足where条件。导致在引擎层查询出不必要的记录,例如“张飞”索引下推:index Condition Pushdown,简称ICP,是MySQL5.6版本的新特性。效果:减少回表查询次数,提高查询效率,节约IO开销。即服务层把查询工作下推到引擎层去处理。
2024-04-01 08:26:32
827
原创 一条SQL在MySQL中的执行过程
层每从存储引擎读到⼀条记录就会发送给客户端,之所以客户端显示的时候是直接显示所有记录的, 是因为客户端是等查询语句查询完成后,才会显示出所有的记录。如果查询的语句没有命中查询缓存中,那么就要往下继续执⾏,等执⾏完后,查询的结果就会被存⼊查询缓存中。:如果⽤户名和密码都对了,会读取该⽤户的权限,然后后⾯的权限逻辑判断都基于此时读取到的权限;查询语句的执⾏⽅案确定下来 ⽐如在表⾥⾯有多个索引的时候,优化器会基于查询成本的考虑,来。对于 MySQL 8.0。:基于查询成本的考虑,选择查询成本最⼩的执⾏计划;
2024-03-31 18:49:44
1541
原创 MySQL中的三种日志
它是为了防⽌机器故障导致数据丢失的物理⽇志,它⽤于记录数据⻚做了什么修改,每当执⾏⼀ 条事务就会产⽣这样的⼀条或多条物理⽇志,然后通过。这样,当 MySQL 需要回滚时,通过重放 undolog 就可以回滚事务。)操作,包括对表结构的更改、数据的插⼊、修改、删除等等。层⽣成的的⽇志,主要⽤于数据备份和主从复制。⽇志⽂件,保存的是全量的⽇志,⽤于备份恢复和主从复制。中的⼆进制⽇志,但是它们的作⽤和实现⽅式有所不同。是在事务提交后⽣成的,因此可以⽤于恢复数据库。)⽤于恢复数据,保证数据的⼀致性和持久性。
2024-03-31 16:39:57
700
原创 Java中final关键字的作用
相同参数列表的⽅法,只是⽅法体中的实现不同,以实现不同于⽗类的功能,这种⽅式被称为⽅法重写,⼜称。⽤在⽅法的前⾯表示⽅法不可以被重写(⼦类中如果创建了⼀个与⽗类中相同名称、相同返回值类型、参赋⼀个实参,⼀旦赋值之后,就只能在⽅法体内使⽤此形参的值,不能重新进⾏赋值。⽤在变量的前⾯表示变量的值不可以改变,此时该变量可以被称为常量。要求值,即地址的值不发⽣变化),但该引⽤所指向的对象的内容。⽤在类的前⾯表示该类不能有⼦类,即该类不可以被继承。修饰的变量不能被赋值这种说法是错误的,严格的说法是,
2024-03-31 12:33:01
737
原创 多态的实现原理、泛型擦除
当通过父类类型的引用变量调用被子类重写的方法时,虚拟机会根据实际对象的类型来确定要调用的方法版本,而不是根据引用变量的声明类型。可以看到 ArrayList和 ArrayList的原始类型是相同,在编译成字节码文件后都会变成 List ,JVM看到的只有 List,看不到泛型信息,这就是泛型的类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。
2024-03-27 14:52:57
885
1
原创 Synchronized和Lock的对比,和选择?
(可以通过readwritelock实现读写分离) 在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;synchronized: 在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。Lock: 发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。
2024-03-27 14:23:30
839
原创 Java异常机制
这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。正确的程序在运行中,很容易出现的、情理可容的异常状况。可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。
2024-03-27 14:17:50
630
原创 JWT(JSON Web Token)
是一种开放标准,用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。总结来说,使用 JWT 相较于传统的基于会话的认证机制,可以减少服务器存储开销和管理复杂性,实现跨域支持和水平扩展,并且更适应无状态和微服务架构。前端:存储在浏览器的。
2024-03-27 00:45:19
1220
原创 Hotspot虚拟机对象问题(对象头...对象创建)
HotSpot虚拟机的自动内存管理系统要求对象起止地址必须是8字节的整数倍,也就是说对象的大小必须是8字节的整数倍,对象头部分正好是8字节的整数倍,所以,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全,对齐填充并不是必然存在的,也没有特殊的含义,只是起到了占位符的作用。4.设置对象头:初始化零值后,虚拟机需要对对象进行必要的设置,例如这个对象是哪个类的实例.如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息都是存放在对象的对象头中。的,这里我们需要重点了解对象头。
2024-03-26 20:56:03
586
原创 【Redis】数据类型、事务执行、内存淘汰策略
WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。注意事项:通过命令设置内存淘汰策略,在 redis 重启之后会失效,所以最好是在配置文件中设置内存淘汰策略。:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。DISCARD:取消事务,放弃执行事务块中的所有命令。
2024-03-25 15:05:01
740
原创 【MySQL】MVCC多版本并发控制
Read View 在特定时刻为事务创建的一个快照,该快照包含了在该时刻所有未提交事务的事务标识符,以及其他一些辅助信息。它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离性,从而避免了传统的锁机制所带来的资源争用和阻塞问题。:是指在一个事务中,读取的数据版本是在事务开始时已经存在的数据版本,而不是最新的数据版本。这种读取方式提供了事务在执行期间看到的数据视图的一致性,在 MVCC 机制中,每个事务的读操作都能看到事务开始之前的一致性数据快照,而不受其他并发事务的修改的影响。
2024-03-24 12:27:43
402
原创 【MySQL】覆盖索引
但是,当查询的结果集占表的总行数的很大一部分时,可能就不会走索引了,自动转换为全表扫描。字段的复合索引,这样在查询某个客户的订单总金额时,可以直接从索引中获取数据,无需访问实际的数据行。(订单总金额)等字段。如果我们经常需要查询某个客户的订单总金额,可以通过覆盖索引来优化这个查询。通过创建覆盖索引,数据库引擎可以直接使用索引来满足这个查询,而不需要再去读取。索引中已经包含了所有需要获取的字段的查询方式称为覆盖索引。表中的实际数据行,从而提高查询性能。的数据库表,包含订单信息,其中包括。
2024-03-24 11:26:16
800
原创 产生死锁的四大条件
不剥夺条件:线程在已获得的资源但未使用完时,不能被其他线程剥夺,只能由自己使用完释放资源。设置获取锁的超时时间:尝试获取锁的线程在规定时间内没有获取到锁,就放弃获取锁,避免因为。请求与保持条件:一个线程在请求被占资源时发生阻塞,并对已获得的资源保持不放。循环等待条件:发生死锁时,所有的线程会形成一个死循环,一直阻塞。破坏不剥夺条件:线程在申请不到所需资源时,主动放弃所持有的资源。互斥条件:一个资源在同一时刻只能由一个运算单元(进程、,而同时不释放自己的资源,导致所有线程同时被阻塞。或协程)占用(排它性)
2024-03-22 22:24:03
443
1
原创 Spring 框架中都用到了哪些设计模式?
装饰者模式通过组合的方式来扩展对象的行为,而不依赖于继承,也就是说虽然类的框架中包含继承,但只是为了获取正确的类型,而不是继承一种行为。:其中IOC的设计就涉及到BeanFactory,是Spring容器的顶层接口,也是Bean工厂最上层的接口,其会有很多工厂实现,我们可以把BeanFactory看成是一种工厂方法模式。是一个定制化工厂,其会存在于BeanFactory创建对象的过程中,当有需要时,会通过FactoryBean去自定制个性化的Bean,从而Spring框架提高扩展能力。
2024-03-22 21:09:45
1200
原创 使用openAPI自动生成前端代码遇到问题
接着我又搜索“fetch”发现 最新的node.js 17.5才引入了对fetch API的支持!fetch()是一种流行的跨平台http客户端API。开始我搜fetch需要在哪里定义?找到几个定义的方法后,不知道在前端哪个具体文件里定义,尝试了几个位置,还是没有解决!出现:‘fetch is not defined’,fetch没有定义!首先安装好openAPI之后,测试自动生成代码,出现一下错误,拒绝执行。因此我立即查看我的node.js的版本,果然不够,仅仅16.19.1;文章之后,可以执行了!
2024-03-22 15:58:38
858
原创 微服务架构常见概念
常见问题:服务多,如何管理?通讯?客户端如何访问?出现问题,如何自处理和排错?优点:独立开发 – 所有微服务都可以根据各自的功能轻松开发 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起 是指在分布式系统中管理和控制各种微服务的一种方法。服务注册与发现:各个微服务向服务注册中心注册自己的信息,包括服
2024-03-17 18:20:34
1028
3
原创 java设计模式
设计模式本质上是面向对象设计原则的实际运用,是对类的封装性、继承性、多态性以及类的关联关系和组合关系的充分理解。最早诞生在建筑模式,后来引用到软件领域,经过前辈的代码设计的经验,总结的一套可以的设计模式。java中设计模式共23种分为3大类。
2024-03-17 16:29:17
1588
原创 java中的对象克隆(深、浅) 和 类与类之间的关系
整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在, 部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。关联对象只是进行地址引用,并没有创建新的对象,只将关联对象的地址指向原始引用对象。继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系。成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。接口与实现类之间的关系,接口与实现类之间的关系。
2024-03-16 12:36:06
426
原创 SpringBoot自动装配过程
Import({AutoConfigurationImportSelector.class}) 加载spring.factories文件中Spring支持的组件的配置,然后筛选保留我们项目pom.xml中配置文件的组件,加载配置类。SpringBoot自动装配过程就是:SpringBoot在启动时,如何做到自动的将项目中配置的相关文件进行加载、配置的过程。启用自动配置功能,用来加载项目中配置相关依赖的组件或bean,将bean定义加载到IOC容器中。Configuration注解,实现配置文件的功能。
2024-03-15 21:14:58
654
陕西理工大学数学软件实训-数学实验报告(7)(矩阵运算与多项式计算)
2023-09-12
用java并使用分支限界法求解01背包问题
2023-12-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅