- 博客(57)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 马尔可夫聚类算法
马尔可夫聚类算法(Markov Clustering Algorithm,MCL)是一种用于图聚类的算法,广泛应用于生物信息学、社交网络分析、推荐系统等领域。其核心思想是模拟随机游走过程,通过迭代地扩散和收缩图上的概率分布来识别图中的自然聚类或社区结构。
2024-06-23 10:47:54
494
原创 Go基础——字节、字符、字符串
字符的底层是UTF-8编码,对于一个汉字,需要使用3个byte进行存储,而英文字符只需要一个。字符串string的底层是byte数组形式存储数据的。而byte的底层实质上是。相当于4个byte,所占位置是4字节。
2024-06-06 10:29:44
319
原创 消息队列问题解决方案
可以采用持久化存储机制,将消息保存到持久化存储介质中,确保消息在传输过程中不会丢失。同时,可以采用消息确认机制,消费者在处理完消息后向消息队列发送确认消息,确保消息被成功处理。可以通过增加消费者的数量、优化消费者的处理能力、调整消息队列的容量等方式来解决消息堆积问题。同时,可以采用消息重试机制,对处理失败的消息进行重新处理。可以在消费端实现幂等性,即保证相同消息多次处理的结果是一致的,从而避免重复消费带来的问题。可以通过唯一标识符、消息序号等方式来实现消息的幂等性。
2024-04-25 16:35:49
159
原创 Spring Boot 启动流程
Spring Boot 在启动时会加载应用程序的配置文件(如 application.properties 或 application.yml),然后基于这些配置创建 Spring 应用上下文(ApplicationContext)。Spring Boot 内置了常用的 Servlet 容器(如 Tomcat、Jetty、Undertow),在启动过程中会根据配置选择合适的容器,并将应用程序部署到容器中。Spring Boot 会扫描应用程序中的所有组件(如控制器、服务、配置类等),并注册到应用上下文中。
2024-04-25 10:29:46
342
原创 JVM合集【持续更新】
是Java程序运行的环境,它负责解释执行 Java 字节码(Bytecode),并提供了内存管理、垃圾回收等功能。JVM 是 Java 程序在不同平台上实现跨平台的关键。JVM 可以独立于 JDK 存在,例如,你可以使用 JRE(Java Runtime Environment)来运行 Java 程序,而无需 JDK。Java 的跨平台性是其最重要的特性之一。Java 程序可以在不同的操作系统和硬件平台上运行,这得益于 Java 虚拟机的存在。
2024-04-23 00:57:22
620
原创 面向对象设计模式
设计模式通常被分为三种类型:创建型模式、结构型模式和行为型模式。创建型模式主要关注对象的创建机制,它们提供了一种将对象创建和实例化的机制,使得系统在不直接依赖于具体类的情况下能够灵活地创建对象。创建型模式的典型代表包括工厂模式、抽象工厂模式、建造者模式、原型模式和单例模式。
2024-04-23 00:36:30
933
原创 流量控制算法
流量控制算法,可以有效地控制系统的流量,防止系统被过多的请求压垮。常见的流量控制算法包括:令牌桶算法;漏桶算法;计数器算法;滑动窗口算法;漏斗算法
2024-04-22 12:14:41
317
原创 Java锁机制
总的来说,当一个线程锁住某个类时,它会尝试获取该类的Syn锁,如果成功获取锁,则可以执行同步代码,否则会被阻塞直到获取到锁为止。在 Java 中,synchronized 关键字可以应用于不同级别的锁,包括偏向锁、轻量级锁和重量级锁。:当一个事务执行范围查询时,间隙锁可以确保查询结果的一致性,即在查询过程中其他事务无法在查询范围内插入新的记录,从而保证了查询结果的可靠性。:适用于需要可重入锁和更高级功能的情况,例如需要在同一个线程中多次获取同一个锁的情况,或需要公平锁、可中断锁等功能的场景。
2024-04-21 14:27:27
846
原创 Redis集合[持续更新]
Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
2024-04-21 12:13:33
701
原创 Spring循环依赖
Spring 框架提供了一些机制来缓解循环依赖问题,包括三级缓存和 Bean 的早期曝光、使用代理对象等。然而,最好的方式仍然是尽量避免循环依赖的发生,以保持应用程序的结构清晰、维护简单。
2024-04-18 16:32:59
388
原创 SpringSecurity集成JWT
使用 Spring Security 集成 JWT(JSON Web Token)身份验证是一种常见的方式来实现基于令牌的身份验证。在 Spring Boot 应用程序中使用 Spring Security 和 JWT,可以创建一个安全、可扩展的身份验证系统。
2024-04-18 16:29:02
421
原创 RabbitMQ和Minio实现头像存储
使用 RabbitMQ 处理用户头像上传任务,同时将用户头像存储在 Minio 中是一个常见的应用场景。该示例将展示如何在 Spring Boot 项目中使用 RabbitMQ 和 Minio 实现此功能。示例包括两个部分:一是将头像上传任务推送到 RabbitMQ 队列中;二是从队列中消费任务并将用户头像上传到 Minio。
2024-04-18 14:49:19
627
1
原创 JWT和网关双令牌登录验证
使用JWT(JSON Web Token)和网关实现双令牌登录验证是一种安全性较高的方案。双令牌通常包括一个短期有效的访问令牌(access token)和一个长期有效的刷新令牌(refresh token)。
2024-04-18 14:23:59
345
原创 垃圾回收器G1和CMS
G1 和 CMS 是 Java 虚拟机(JVM)中的两种常用垃圾回收器(Garbage Collector,GC)。它们在处理内存管理和垃圾回收方面有不同的策略和特点。下面我们分别介绍 G1 和 CMS 回收器以及它们的对比。
2024-04-18 00:37:46
364
原创 MySQL 主从复制
MySQL 主从复制是一种将一个 MySQL 服务器(称为主服务器)上的数据自动同步到另一个 MySQL 服务器(称为从服务器)的机制。这种复制可以实现数据的冗余备份,提高数据的可用性和容错性,以及支持读写分离和分布式架构。MySQL 主从复制是一种强大的数据同步机制,可以用于数据备份、读写分离、负载均衡等场景。在使用主从复制时,必须注意数据一致性、数据冲突和复制延迟等问题,并根据应用的需求进行相应的处理。
2024-04-16 15:17:18
522
原创 MySQL三大日志
错误日志主要用于诊断 MySQL 服务的启动和运行问题。查询日志用于监控和分析 MySQL 数据库的活动和性能。二进制日志是实现 MySQL 数据库备份、恢复以及主从复制的重要工具。
2024-04-16 14:22:25
690
原创 MVCC(多版本并发控制)
MVCC 是一种在数据库中实现高并发和数据一致性的方法。它通过维护多个数据版本,使得多个事务可以同时对数据进行读写操作,从而提高了数据库的并发性能和用户体验。MySQL 的 InnoDB 存储引擎在其事务处理和数据隔离级别中使用了 MVCC 机制。MySQL 中的 MVCC 机制:多版本:每个数据行都有一个版本号,表示该行数据的创建时间。通过保存历史版本的数据,MySQL 可以在读取时根据事务的开始时间返回正确版本的数据。读一致性视图。
2024-04-16 13:58:48
837
原创 MySQL死锁处理
死锁是指两个或多个事务相互持有对方需要的锁,从而导致它们都无法继续执行。这种情况会导致事务永久阻塞,除非其中一个事务放弃所持有的锁。
2024-04-15 00:24:38
465
原创 Java数据结构
这些List实现类在不同的场景下有不同的应用,你可以根据具体的需求选择合适的实现类。ArrayList通常在需要快速随机访问的场景下使用,LinkedList适用于频繁的插入和删除操作,Vector和Stack通常用于需要线程安全的情况下。:与ArrayList类似,也是基于数组实现的动态数组,但是Vector是线程安全的,所有的方法都是同步的。:基于双向链表实现的链表,支持快速的插入和删除操作,但随机访问的性能较差。在尾部插入和删除元素的时间复杂度为O(1),在中间插入和删除元素的时间复杂度为O(n)。
2024-04-14 23:54:32
198
1
原创 Java反射
RTTI(Run-Time Type Identification)运行时类型识别,作用是在运行时识别一个对象的类型和类的信息。主要有两种方式:一种是“传统的”RTTI,它假定我们在编译时已经知道了所有的类型;另一种是“反射”机制,它允许我们在运行时发现和使用类的信息。Reflection (反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
2024-04-14 23:52:37
934
原创 我的创作纪念日
提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。提示:在创作的过程中都有哪些收获。
2024-02-05 10:40:59
336
原创 【机器学习】损失函数
在机器学习领域,我们令P(x)为预测集,Q(x)为真实数据集。对交叉熵求最小值,也等效于求最大似然估计。用于度量两个概率分布之间的差异性信息。
2024-01-28 20:25:14
494
原创 【机器学习】正则化
正则化是防止模型过拟合的方法,它通过对模型的权重进行约束来控制模型的复杂度。正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了数据的噪声,一般不正则化b。
2024-01-28 20:20:54
835
原创 【机器学习】参数优化器
待优化参数w,损失函数loss,学习率lr,每次迭代一个batch。同时引入了SGDM的一阶动量和RMSPro的二阶动量。mt这个公式表示各时刻梯度方向的指数滑动平均值。二阶动量Vt是从开始到t时刻梯度平方的累计和。计算t时刻一阶动量mt和二阶动量Vt。二阶动量:与梯度平方相关的函数。在SGD的基础上增加了一阶动量。在SGD的基础上增加二阶动量。在SGD的基础上增加二阶动量。一阶梯度:与梯度相关的函数。一阶动量mt是当前的梯度。
2024-01-13 14:12:30
437
原创 Self-Attention
前置知识:RNN,Attention机制。在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素和Source中的所有元素之间。Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。
2024-01-13 14:08:31
457
原创 Transformer模型
前置知识:Attention机制。Transformer主要包括四部分,其中2, 3两部分是Transformer的重点,Transformer是一个基于Encoder-Decoder框架的模型输入自然语言序列到编码器: Why do we work?(为什么要工作);编码器输出的隐藏层,再输入到解码器;输入 < > (起始)符号到解码器;解码器得到第一个字"为";将得到的第一个字"为"落下来再输入到解码器;解码器得到第二个字"什";直到解码器输出 < > (终止符),即序列生成完成。
2024-01-10 11:15:36
1116
原创 【机器学习】激活函数整理
sigmoid函数连续、光滑、单调递增,以 (0,0.5) 中心对称,是一个良好的阈值函数。在x超出[-6,6]的范围后,函数值基本上没有变化,值非常接近,在应用中一般不考虑。sigmoid函数的值域范围限制在(0,1)之间,恰巧与概率值的范围相对应,这样Sigmoid函数就能与一个概率分布联系起来了。tanh函数的导数如下,当输入接近0时,tanh函数的导数接近最大值1,输入在任一方向上远离0点,导数越接近0。ReLU函数的求导表现很好:要么让参数消失,要么让参数通过。每一项的区间范围的(0,1)
2024-01-10 11:07:52
618
原创 Attention机制
前置知识:RNN,LSTM/GRU。在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素和Source中的所有元素之间。问题在于:将整个序列的信息压缩在了一个语义编码C中,用一个语义编码C来记录整个序列的信息,如果序列是长序列,那么只用一个语义编码C来表示整个序列的信息肯定会产生大量损失,且容易出现梯度消失的问题。
2024-01-01 22:16:18
1194
原创 GRU算法
前置知识:RNN,LSTM。它将忘记门和输入门合并成为一个单一的更新门,同时合并了数据单元状态和隐藏状态,使得模型结构比之于LSTM更为简单。rt就是重置门,得到rt后,将rt与上一时刻传入的ht-1进行点乘,得到重置之后的数据,并与xt进行拼接。LSTM需要训练的参数很多,极消耗计算资源。GRU是一种LSTM的改进算法,参数更少,更容易训练。h'包含了输入信息xt,经过选择后的上一时刻的信息h't-1,(1-z)*h':表示对包含当前节点信息的h'选择性的记忆。z*ht-1:表示对隐藏状态选择性的遗忘;
2024-01-01 22:10:10
771
原创 LSTM算法
前置知识:RNN循环神经网络LSTM(Long Short Term Memory长短期记忆网络)——目前使用最多的时间序列算法。LSTM是对RNN循环神经网络的一种优化,能够有效的延缓梯度爆炸以及梯度消失的问题。普通的RNN在隐藏层中只传递一个状态值 h,而LSTM不仅传递 h,还新增了一个状态值 C,每一层隐藏层中的每一个神经元都接收上一时刻传递的 h{t-1} 和 c{t-1} ,经过计算得到 h{t} 和 c{t} 再传入下一时刻。
2023-12-29 23:28:20
1298
原创 RNN循环神经网络
前置知识:BP神经网络、CNN卷积神经网络。网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。每一步的输出不仅仅依赖当前步的网络,并且还需要前若干步网络的状态,这种BP改版的算法叫做Backpropagation Through Time。对于梯度消失:有特殊的方式存储“记忆”,那么以前梯度比较大的”记忆”不会像简单的RNN一样马上被抹除。
2023-12-29 23:21:45
360
原创 CNN卷积神经网络
前置知识:BP神经网络。我们给计算机一个标准的图形,然后把需要识别的图形与标准图形进行比对,并进行判断二者是否一致。CNN会把未知图形与标准图形进行逐个局部比对。每一个局部尽心比对的计算过程就是卷积操作。卷积是指对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积的操作。
2023-12-29 16:04:06
380
原创 BP神经网络
前置知识:机器学习基本概念:监督学习与无监督学习、线性回归、梯度下降。BP(Back-propagation,反向传播),在模拟过程中收集系统所产生的,返回这些误差到输出值(反向传播),并用这些误差来调整神经元的权重。神经网络其实就是几层神经元,每层神经元里有几个神经元点。不同层级之间的神经元相互连接,每一个神经元只负责三件事:输入、判断、输出。通常,为了方便实际操作,我们令每一层的神经元数量相等。记权重矩阵为W,输入S,输出O,真值T,误差E,三者为列向量。即实际就是梯度下降。
2023-12-29 15:57:56
487
原创 C++11 Lambda表达式
实际在底层编译器对于lambda表达式的处理方式,就是按照函数对象的方式处理的,即:如果定义了一个lambda表达式,编译器会自动生成一个类,在该类中重载了operator()。函数对象将rate作为其成员变量,在定义对象时给出初始值即可,lambda表达式通过捕获列表可以直接将该变量捕获到。函数对象,又称为仿函数,即可以想函数一样使用的对象,就是在类中重载了operator()运算符的类对象。
2023-08-23 00:25:56
78
原创 类型转换操作符
普通的类型转换方式只适用于基本数据类型,对复杂的自定义类型不适用。因此,C++中提供了四种类型转换符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
2023-08-22 23:48:35
60
原创 C++11 智能指针
智能指针本质上一个类模板,它可以创建任意的类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放该指针所指向的空间。所有的智能指针类模板中都包含一个私有的指针对象,以及构造函数和析构函数。
2023-08-22 22:40:20
63
1
原创 内联函数——inline
inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。首先,C语言是一个效率很高的语言,宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈、代码生成等一系列的操作,因此效率很高,这是它在C中被使用的一个主要原因。
2023-08-19 00:16:39
87
原创 C++11移动语义
以移动而非深拷贝的方式初始化含有指针成员的类对象。移动语义指的就是将其他对象(通常是临时对象)拥有的内存资源“移为已用”。在旧版的拷贝构造函数的实现中,当类中拥有指针类型的成员变量时,拷贝构造函数中需要以深拷贝的方式复制该指针成员。(否则一旦多个对象中的指针成员指向同一块堆空间,这些对象析构时就会对该空间释放多次,这是不允许的)如果临时对象中的指针成员申请了大量的堆空间,那么深拷贝操作势必会影响对象初始化的执行效率。
2023-08-15 13:24:55
142
1
东北大学软件学院数据结构.zip
2022-06-13
东北大学C++选修课干货整理(单科绩点4.6).zip
2022-05-07
东北大学C++选修课干货整理(单科绩点4.6).zip
2022-05-07
东北大学数据结构课程资料保证干货.ziphttps://www.csdn.net/
2022-05-07
JavaFX颐养社区系统.zip
2021-07-23
vscode怎么取消顶部代码冻结
2024-04-04
为什么C语言中if(x=1)比if((x=1)==1)运行速度更快
2021-03-17
C语言添加背景音乐,为什么会提示报错
2021-01-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人