自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈编辑距离算法

编辑距离(Edit Distance),也称为Levenshtein距离,是衡量两个字符串之间相似度的一种常用算法。它衡量的是将一个字符串转换为另一个字符串所需的最少编辑操作次数,其中编辑操作可以是插入、删除或替换字符。其中一些常见的应用包括:拼写纠错:通过计算目标单词与候选单词之间的编辑距离,可以找到最接近目标单词的正确拼写。文本相似性:编辑距离可以用于比较两段文本之间的相似性,例如在文本搜索中匹配近似的关键词或在文档聚类中寻找相似的文本。

2023-10-29 11:05:05 118

原创 在数据库中存储树状结构

Adjacency List(邻接列表):优点:简单易于理解和实现,只需要一个父节点 ID 字段,容易添加、删除、移动节点。不需要维护冗余数据。缺点:查询层级关系和递归操作需要进行多次查询,效率较低。在大型树状结构中,查询深度可能导致性能问题。使用场景:适用于树状结构较小,层级深度不太深的情况,或者只需要简单的树结构操作。Path Enumeration(路径枚举):优点:相比邻接列表,路径枚举能够更快速地进行递归查询和层级操作,因为路径信息已经在节点上存储。

2023-10-29 11:04:14 172

原创 注解封装一个公平锁

2. 然后编写一个代理工厂类,用于创建代理对象,首先判断对象的Class是否有。判断该对象是否需要动态代理,然后拦截对象中的方法,在方法执行前后加锁释放。采用注解+动态代理的方式来实现,思路就是根据。注解,以此判断是否要为该对象创建代理对象。

2023-10-29 11:03:09 97

原创 docker-compose搭建ELK

【代码】docker-compose搭建ELK。

2023-10-29 11:01:58 114

原创 Arthas排查SpringBoot的耗时

由于执行Arthas程序的用户需要与目标进程具有相同的权限,目前公司的项目都是通过容器启动的,所以我们首先要进入Java服务容器的内部,然后下载Arthas的jar包,然后再启动(Windows环境下直接在CMD窗口运行即可)那么现在的需求是分析从Spring框架接收到HTTP请求,然后分派到对应的Controller方法之间的耗时,这里我们只需要使用Arthas的一个小功能trace,它可以动态地计算方法调用路径和耗时。启动之后就会列出当前所有的Java进程,我们根据自身需求来选择要监控的Java进程。

2023-10-29 11:00:52 399

原创 AOP封装一个记录耗时的注解

【代码】AOP封装一个记录耗时的注解。

2023-10-29 10:59:56 44

原创 AOP、MDC实现日志追踪

在实际开发中,日志输出是非常重要的,在生产环境中,如果 日志打得好,可以快速地排查问题,为了更好的查看日志,我们需要将这些日志串联起来,这样会使排查问题变得更加轻松。正好我前一篇文介绍了ELK的搭建,那么现在我们再来看看AOP+MDC如何实现日志追踪。如果我们可以在日志中记录用户的IP,那么我们就能分析该用户的所有操作日志。如果我们可以在日志中记录订单ID,那么如果我们的订单出现了问题,我们可以很快的来根据订单ID在Kibana中搜索与该订单ID关联的所有日志信息。

2023-10-29 10:59:00 98

原创 Redisson延迟队列实现倒计时任务

Redisson延迟队列实现倒计时任务,支付倒计时,自动返还使用的优惠券/免费额度。

2023-10-29 10:57:24 166

原创 如何手写一个消息队列

由于项目目前还没有那么重,那么如何手写一个消息队列来替代kafka?

2023-10-29 10:54:41 76

原创 Redis面试题

37. 为什么Redis的操作是原子性的,怎么保证原子性?

2023-05-15 12:07:48 139

原创 MySQL面试题

7. 简单说说DROP、DELETE与TRUNCATE的区别。

2023-05-15 12:07:16 101

原创 SpringCloud面试题

{% endfolding %}

2023-05-15 12:06:39 142 1

原创 SpringBoot面试题

文件:Spring Boot会自动加载application.properties或application.yml文件中的配置。在Spring Boot中,配置文件的加载顺序是非常重要的,不同的加载顺序可以对应不同的配置场景。Java系统属性:可以通过-D参数设置Java系统属性,这些属性可以在Spring Boot应用程序中直接使用。OS环境变量:Spring Boot可以读取操作系统的环境变量,这些环境变量可以在应用程序中直接使用。命令行参数:Spring Boot可以通过命令行参数来动态地修改配置。

2023-05-15 12:05:01 110

原创 MyBatis面试题

8. XML映射文件中,除了常见的select、insert、update、delete标签外,还有哪些标签。5. MyBatis是如何进行分页的?分页插件的原理是什么。7. 如何执行批量插入。

2023-05-15 12:04:20 58

原创 Spring面试题

15. Spring基于XML注入的bena有几种方式。16. Spring框架中都用到了哪些设计模式。21. 说说事务的传播级别。

2023-05-15 12:03:19 85

原创 JVM相关面试题

{% folding cyan, 什么是Java虚拟机?为什么Java被称为平台无关的编程语言 %}Java虚拟机(JVM)是Java语言的核心组成部分之一,是一种在计算机上模拟运行Java字节码的虚拟机。Java虚拟机可以理解为一个运行Java程序的环境,它提供了一个统一的接口,将Java程序与底层操作系统隔离开来,使得Java程序可以在不同的操作系统上运行。Java被称为平台无关的编程语言,这是因为Java程序是编译成Java字节码,而不是针对某个具体的操作系统或硬件架构编译的机器码。

2023-04-25 16:25:18 108

原创 JVM内存模型

Person是一个对象,有一个属性age用来保存结果,那么上面的代码会有几种可能?但是其实还有一种可能,结果是0。运行如下maven命令。

2023-04-25 16:24:30 86

原创 JVM类加载与字节码技术

先来思考一下:什么时候需要自定义类加载器自定义类加载器可用于加载非 Classpath 路径中的类文件,例如外部配置文件夹、网络资源或其他自定义路径。这种需求在一些动态扩展或插件化的场景中比较常见。在应用程序中使用的类可以通过接口来使用,而不是直接引用类。这种做法可以减少应用程序之间的依赖,从而提高代码的灵活性和可维护性。同时,这种做法也使得框架的设计更加清晰和可扩展。在Tomcat容器中,每个Web应用程序都使用自己的类加载器,从而避免了不同Web应用程序之间的类冲突问题。步骤。

2023-04-25 16:24:02 184

原创 JVM垃圾回收

CMS(Concurrent Mark Sweep)是一种垃圾回收算法,它的设计目标是在最短的停顿时间内回收垃圾。它通过在一个线程中进行垃圾回收并在应用程序线程中同时运行,从而减少停顿时间。下面详细介绍CMS垃圾收集器的工作原理和优缺点。G1(Garbage-First)是一种现代化的垃圾回收器,它在JDK 7中首次引入,并在JDK 9中被标记为默认垃圾回收器。

2023-04-25 16:23:01 102

原创 JVM内存结构

JVM中的程序计数器(Program Counter Register)是一块较小的内存空间,它用来保存当前线程下一条要执行的指令的地址。每个线程都有自己独立的程序计数器,它是线程私有的,生命周期与线程相同。程序计数器是JVM中的一种轻量级的内存区域,因为它不会发生内存溢出(OutOfMemoryError)的情况。程序计数器的作用在于线程切换后能够恢复到正确的执行位置,也就是下一条需要执行的指令地址。

2023-04-25 16:21:57 88

原创 JVM导学

定义– Java程序的运行环境(Java二进制字节码的运行环境)好处一次编译,到处运行自动内存管理,垃圾回收功能数组下表越界检查多态比较JVM、JRE、JDKJVM(Java Virtual Machine),Java虚拟机JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具。

2023-04-25 16:20:47 48

原创 黑马SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式学习笔记

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目。例如:京东、淘宝微服务:一种更好的分布式架构方案优点:拆分力度更小、服务更独立、耦合度更低缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud 是微服务架构的一站式解决方案,集成了各种优秀的微服务功能组件通过定义IRule实现,可以修改负载均衡规则,有两种方式。

2023-03-30 19:50:34 726 1

原创 黑马微服务--Docker容器技术学习笔记

微服务似然具备各种各样的优势,但是服务的拆分通常给部署带来了很大的麻烦分布式系统中,依赖的组件非常多,不同组件之间部署时,往往会产生一些冲突在数百,数千台服务中重复部署,环境不一定一直,会遇到各种问题数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录一旦完成数据卷挂载,对容器的一切操作都会作用在对应的宿主机目录了。这样我们操作宿主机的/var/lib/docker/volumes/html目录,就等同于操作容器内的/usr/share/nginx/html目录了。

2023-03-30 19:49:47 439

原创 黑马程序员--分布式搜索ElasticSearch学习笔记

什么是ElasticSearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是Elastic Stack(ELK)?它是以ElasticSearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API索引库操作有哪些?创建索引名:PUT /{索引库名}查询索引库:GET /{索引库名}

2023-03-29 13:23:06 1116 2

原创 黑马程序员--MessageQueue消息队列学习笔记

基本消息队列的消息发送流程建立connection创建channel使用channel声明队列使用channel向队列发送消息基本消息队列的消息接收流程建立connection创建channel使用channel声明队列定义consumer的消费行为handleDelivery(),也就是接收到消息后要执行的业务逻辑利用channel将消费者与队列绑定Wrok模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch。

2023-03-28 17:11:52 173

原创 黑马程序员Redis学习笔记--Redis实战篇

短信登录这部分会使用Redis共享session来实现但其实我在之前的瑞吉外卖的项目优化部分就做过了,用Redis替换session来存储邮箱验证码商户查询缓存这部分要理解缓存击穿,缓存穿透,缓存雪崩等问题,对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容优惠卷秒杀这部分我们可以学会Redis的计数器功能,结合Lua(之前一直想学Lua然后写饥荒mod)完成高性能的Redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列附近的商户。

2023-03-27 10:32:23 779

原创 黑马程序员Redis学习笔记--Redis基础篇

SQLNoSQL数据结构结构化(Structured)非结构化数据关联关联的(Relational)无关联的查询方式SQL查询非SQL事务特性ACIDBASE存储方式磁盘内存扩展性垂直水平使用场景1)数据结构固定2)对一致性、安全性要求不高1)数据结构不固定2)相关业务对数据安全性、一致性要求较高3)对性能要求存储方式关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响。

2023-03-26 14:11:15 405

原创 瑞吉外卖项目优化

SpringCache是一个框架,实现了基本注解的缓存功能,只需要简单的添加一个注解,就能实现缓存功能SpringCache提供了一层抽象,底层可以切换不同的cache实现,具体就是通过CacheManager接口来统一不同的缓存技术针对不同的缓存技术,需要实现不同的CacheManager描述使用EhCache作为缓存技术使用Googke的GuavaCache作为缓存技术使用Rdis作为缓存技术MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。

2023-03-25 17:46:12 357

原创 全网最全瑞吉外卖项目笔记(含扩展功能)

写在最前想获得最佳的阅读体验,请移步至我的个人博客查看此文:https://cyborg2077.github.io/2022/09/29/ReggieTakeOut/全功能实现源码链接:https://pan.baidu.com/s/11X9aKxFb07AwhhQKjsbubQ?pwd=2077 提取码:2077准备工作话不多说,先建表,然后创建一个SpringBoot的工程,勾选Spring Web,MySQL和MyBatis,然后在pom.xml中导入druid,lombok和MyBat

2023-03-25 17:43:46 2583 1

原创 学成在线--项目优化

使用缓存后,代码的性能有了很大的提升,但是控制台还是打出了很多从数据库查询的日志,明明已经判断了如果缓存存在,课程信息就从缓存中查询,那为什么还有这么多从数据库查询的请求呢?因为并发数很高,很多线程会同时到达查询数据库代码处去执行如果存在恶意攻击的可能,大量并发去查询一个不存在的课程信息会出现什么问题呢?例如去请求一门不存在的课程,进行压力测试时会发现一直在请求数据库大量并发去访问一个数据库不存在的数据,由于缓存中没有该数据,就会导致大量并发查询数据库,这个现象叫缓存穿透。

2023-03-25 17:28:04 111

原创 学成在线--认证授权模块

截至目前,项目已经完成了课程发布功能,课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程,如果用户要购买课程也需要知道用户的身份信息。所以,去管理学生的学习过程最基本的要实现用户的身份认证。认证授权模块实现平台所有用户的身份认证和用户授权功能什么是用户身份认证?用户身份认证即当用户访问系统资源时,系统要求验证用户的身份信息,身份合法方可继续访问常见的用户身份认证表现形式有。

2023-03-25 17:26:07 2997 1

原创 学成在线--选课学习模块

本模块实现了学生选课、下单支付、学习的整体流程网站的课程有收费和免费两种对于免费课程,学生选课后可以直接学习对于收费课程,学生需要下单且支付成功后,方可选课、学习选课:是将课程加入到我的课程表的过程我的课程表:记录我在网站学习的课程,我的课程表中有免费课程和收费课程两种对于免费课程可以直接添加到我的课程表对于收费课程需要下单、支付成功后自动添加到我的课程表模块流程如下请求参数:课程id、当前用户id响应结果:选课记录信息、学习资格定义的接口如下。

2023-03-25 17:24:55 191

原创 学成在线--课程发布模块

课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后,学习者通过学成在线平台的网站可以搜索到课程,然后查看课程的详细信息,选课进行学习。下面是课程编辑与发布的整体流程为了保证课程内容没有违规信息、课程内容安排合理,在课程发布之前,平台运营方会进行课程审核,审核通过后,课程方可发布作为课程制作方即教学机构,在课程发布前通过课程预览功能可以看到课程发布后的效果,若课程信息存在问题,方便查看,及时修改。

2023-03-25 17:24:25 1013

原创 学成在线--媒资管理模块

媒资管理系统是每个在线教育平台所必须具备的,百度百科对其定义如下媒体资源管理(Media Asset Management,MAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储、管理以及应用的总体解决方案,包括数字媒体的采集、编目、管理、传输和编码转换等所有环节。

2023-03-25 17:20:41 734

原创 学成在线--内容管理模块

百度百科汇总对需求分析的定义如下需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体需求,将用户非形式的需求表叔转化为完整的需求定义,从而确定系统必须做什么的过程简单理解就是要高清问题域,问题域就是用户的需求,软件要为用户解决什么问题,实现哪些业务功能,满足什么样的性能要求那么如何做需求分析?首先确认用户需求用户需求即用户的原始需求。

2023-03-25 17:17:27 1060 1

原创 黑马学成在线--项目环境搭建

本项目包括了用户端、机构端、运营端。核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。下图是项目的功能模块图:本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。

2023-03-25 17:09:09 5031 2

空空如也

空空如也

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

TA关注的人

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