- 博客(30)
- 收藏
- 关注
原创 【实战】SpringBoot整合ffmpeg实现动态拉流转推
在最近的开发中,遇到一个 rtsp 协议的视频流,前端vue并不能直接播放,因此需要对流进行处理。在网上查阅后,ffmpeg和webrtc是最多的解决方案,但是使用webrtc的时候没成功,所以选择ffmpeg。免密登录需要将公钥复制到被登录的目标服务器,在现在需求中,需要在容器中远程登录宿主机,所以宿主机就是目标服务器,那么换个思路,将这里生成的私钥,放在容器中,就可以从容器中远程登录宿主机。下面介绍一下整体的实现步骤。现在最简单的demo就已经完成了,但是这样的实现方式需要手动控制,
2024-07-30 15:40:40
1066
原创 Docker 搭建 Redis 环境
Redis 是一个基于内存的高性能非关系型数据库,在后端开发中非常常用,本文介绍一下如何在 Linux 环境中搭建 Redis。注意容器和宿主机的端口映射,用云服务器的话需要打开宿主机的端口安全组。Linux环境安装Docker,参考。
2024-07-02 17:32:50
154
原创 Spring Boot 集成 MinIO 实现文件上传
MinIO的搭建过程参考。登录MinIO控制台,新建一个 Bucket,修改 Bucket 权限为公开。
2024-06-21 14:43:39
738
原创 Docker 搭建 MinIO 对象存储
MinIO 是一个高性能的对象存储服务器,用于构建云存储解决方案。MinIO 允许你存储非结构化数据(如图片、视频、日志文件等)以对象的形式。MinIO 提供简单的部署选项和易于使用的界面,允许你快速设置和访问存储资源。本篇博客介绍一下使用 Docker 容器进行MinIO的安装与使用。部署方式采用单机单硬盘模式。服务器上没有 Docker 环境的可以参考。
2024-06-21 14:22:17
464
原创 【Java】时间工具类 —— 格式化,个性化,时间操作
在平常的编程中,经常会遇到时间的各种类型转化,避免每次都使用第三方库或者上网搜索,决定整理一下写篇博客,也是从各处收集或者让AI写的方法,应该可以涵盖平时所有的场景了
2024-05-17 14:46:22
566
原创 【踩坑记录】SpringBoot 3 统一处理 dubbo 3 接口异常和错误
经过搜索之后发现,dubbo提供了异常处理的类ExceptionFilter(org.apache.dubbo.rpc.filter.ExceptionFilter),大概功能就是对指定的一些异常放行,然后其他异常统一包装成RuntimeException返回。最近在学习Dubbo的时候,按照之前的习惯定义了自定义异常和统一异常处理,但是在进行接口测试的时候,发现并不是自定义的异常处理,而是被当做系统异常进行了处理。在经过debug和源码的阅读之后发现,虽然异常进入了自己写的过滤器,但是最后还是会回到。
2023-12-04 14:04:34
1190
1
原创 idea中mybatis的mapper.xml没有高亮显示
今天写代码的时候,生成完xml发现写SQL的时候没有高亮提示。修改了一下头部的url,去掉https的s就好了。
2023-11-21 10:54:43
897
2
原创 【踩坑日记】关于时间戳的异常
在最近的一次作业中,保存时间的时候,由于懒得改前端组件时间,默认用了1970-01-01(只有年月日)上传数据,但是遇到了问题`Data truncation: Incorrect datetime value: '1970-01-01 08:00:00' for column 'create_time' at row 1`。但是改一下时间就可以正常提交,引发思考。时间戳不能存 0。
2023-11-16 23:01:53
549
原创 【LeetCode刷题记录】 热题 100 —— 滑动窗口
3. 无重复字符的最长子串,438. 找到字符串中所有字母异位词如果它在子串中已经存在,那么就判断当前无重复子串的长度和维护的最长长度,并且删掉子串中这个字符以及它之前的字符,并且拼接上新的字符。优化之后确实快了很多,但是500ms还是有点慢的,毕竟只击败了不到20%,所以继续想办法优化。现在的解法中,每次都要重新构造一个子串的数组,有没有办法和上一题那样,通过滑动窗口来维护,每次删去不在窗口里的元素并且添加新进入窗口的元素,所以得到下面的解法。回想之前也做过一个异位词的算法题,可以通过数组来判断异位词,
2023-11-11 17:02:53
139
原创 若依分离版 docker 一键部署踩坑记录
前置工作按照流程操作,在最后docker compose运行的时候发现 ruoyi-server (也就是后端项目的服务) 会启动失败。查看容器启动情况的话会发现除了后端服务异常,其他容器都在正常运行。这时候有两种情况下面针对这两种情况分别进行分析。
2023-11-10 18:18:37
679
1
原创 【LeetCode刷题记录】 热题 100 —— 双指针
力扣:283. 移动零,11. 盛最多水的容器,15. 三数之和,42. 接雨水,双指针
2023-11-06 15:30:07
415
原创 Java集合框架 ——— LinkedList 源码分析
LinkedList是一个基于双向链表实现的集合类,经常被拿来和ArrayList做比较。LinkedList 继承自,它决定了 LinkedList 只能支持按次序访问。此外 LinkedList 还实现了Deque接口,它具有双端队列的特性,支持从两端插入和删除元素,方便实现栈和队列等数据结构。因此 LinkedList 实现了很多队列的方法,在开发中也可以当做一个堆栈来使用。
2023-10-31 08:26:15
316
1
原创 Java集合框架 ——— LinkedList 基础使用
采用链表存储,所以在头尾插入或者删除元素不受元素位置的影响,时间复杂度为 O(1);如果是要在指定位置 i 插入和删除元素的话, 时间复杂度为 O(n) ,因为需要先移动到指定位置再插入和删除。我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好。
2023-10-30 14:25:02
322
1
原创 Java集合框架 ——— HashMap 源码分析(二)
这两篇博客对 HashMap 的常用方法源码做了一些分析,扩容和插入方法的内容比较多,特别是插入操作,理解了插入之后,查找和删除的代码阅读起来也相对容易很多。
2023-10-26 08:05:54
166
原创 【LeetCode刷题记录】 热题 100 —— 哈希
两数之和,字母异位词分组,最长连续序列这道题的暴力解法相信看到这题的所有人都能想到,使用双重 for 循环进行枚举,算出所有的结果。提交发现耗时还是有些长,并且当前的在热题100的分类中,这道题被分在了哈希,那么很明显这一题可以使用哈希表解决。在这一题中,对于每一个元素 n ,都存在一个另一个数,使他们求和可以得到目标值,那个数就是差 diff。而这个差也需要在数组里找,所以将数组里全部的数存到 HashMap 中。
2023-10-23 13:50:11
187
原创 微服务网关整合 Knife4j
微服务架构下,每个服务都有自己的接口文档,但是需要访问不同的地址。如果想通过网关作为统一入口将所有文档聚合在一起,就需要使用 knife4j 提供的网关进行聚合组件。系统版本项目准备。
2023-10-19 14:00:43
466
原创 微服务实战项目 —— 知识分享应用(三)
我的兑换列表需要查询到 MidUserShare 中间表的数据后再查询 share 的具体信息,ShareService 创建方法。积分明细列表只需要简单的分页查询积分日志表,UserService 实现 userBonusLog 方法。注意:修改博客中两处主机地址,并且打开四个端口:9999,10909,10911,9876。用户中心不需要主动调用,写一个监听器,只要消息队列有了某个用户的积分,就会通知他去消费加分。重启服务,可以看到用户中心已经监听到,并且已经增加了积分,日志表也插入了日志。
2023-10-15 12:50:31
138
1
原创 微服务实战项目 —— 知识分享应用(二)
修改 http 登录接口测试代码,在 /login 登录接口响应成功后,将 token 存入 client.global 全局,然后就可以在 /client 接口请求中使用 {{ token }} 的形式使用它。JavaBean 方式比 yml 配置方式在多模块的微服务架构下实现更加便捷,只需要在公共模块写一个配置类就可以在全部模块(引入了公共模块的全部模块)实现时间的格式化。仿照 user 模块实现启动类。(此处需要用到用户中心的实体类 User,就先复制一份过来,结合前面的学习,思考最终的解决方案)
2023-10-13 10:11:08
251
原创 微服务实战项目 —— 知识分享应用(一)
share-common 模块新建 enums 子包,新建异常枚举类 BusinessExceptionEnum.java@GetterPHONE_NOT_EXIST("手机号不存在"),PASSWORD_ERROR("密码错误");share-common 模块新建 exception 子包,编写自定义异常类 BusinessException.java@Setter在全局统一异常处理类 ControllerExceptionHandler 中添加对自定义异常的处理/**
2023-10-08 15:34:21
194
1
原创 Java集合框架 ——— HashMap 源码分析(一)
在 JDK 1.8 之前,HashMap 底层数据结构为数组 + 链表实现。HashMap 使用这种数据结构来解决哈希冲突,在每个数组元素后面跟上一个链表,在添加元素的时候会根据 Key 的 HashCode 确定存放位置。一般来说,不同的键的 HashCode 是不同的,但是如果出现了相同的情况,我们称之为哈希碰撞,此时就会把新的键值接在原来的键值的链表后面。在 JDK 1.8 之后,Java 在原来的底层实现基础上,如果链表的长度过长(超过一定的阈值,并且满足一定条件后)会将链表转换为红黑树。
2023-10-07 16:31:53
161
1
原创 Java集合框架 ——— HashMap 基础使用
HashMap 是一种常用的数据结构,是一个非线程安全的集合,主要用来存放键值对。在 JDK1.8 之前 HashMap 由数组+链表 实现,链表主要用于解决哈希冲突;在 JDK1.8 之后,JDK 选择了新的哈希冲突解决方式,当链表长度大于一定阈值,HashMap 会将链表转化为红黑树,以此提高 HashMap 的效率。
2023-10-01 17:29:55
111
原创 容器化技术 —— 自定义镜像并发布到公服
为了从根本上解决开发和运维环境不一致的问题。也就是说,在安装时,把原始环境一模一样地复制过来,开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。开发在打包应用时,将应用所需要的文件打包成一个镜像文件,将镜像运行在docker中。从而达到一次镜像,处处运行。这也是 Docker 官方的口号:Build once,Run anywhere.
2023-09-28 22:09:26
134
原创 云原生浪潮下的容器化技术 —— Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的操作系统机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker官方的口号 : " Build once,Run anywhere,Configure once,Run anything " 。
2023-09-27 14:21:15
343
原创 Java集合框架 ——— ArrayList 源码分析
本文以 JDK1.8为例,分析ArrayList的源码。扩容机制,overflow-conscious code,int 溢出
2023-09-26 18:25:00
124
原创 Java 集合框架 ——— ArrayList 基础使用
数组的长度是固定的,无法适应数据变化的需求,因此Java提供了 ArrayList 集合类来解决这个问题。ArrayList 是大小可变的数组的实现,比数组使用起来更加灵活,它的容量能动态增长。ArrayList 对象不能存储基本类型,只能存储引用类型的数据。因此不能使用 int,double 等基本数据类型。
2023-09-25 19:46:12
136
1
原创 Linux搭建配置JDK环境
在Linux环境中,部署Java项目之前,需要在服务器中安装jdk环境,接下来在linux中开始安装jdk环境,有yum和压缩包两种部署方式。
2023-09-22 08:11:21
244
原创 Java集合框架介绍
当我们需要存储一组类型相同的数据时,数组是最常用且最基本的容器之一。但是,使用数组存储对象存在一些不足之处,因为在实际开发中,存储的数据类型多种多样且数量不确定。这时,Java 集合就派上用场了。与数组相比,Java 集合提供了更灵活、更有效的方法来存储多个数据对象。Java 集合框架中的各种集合类和接口可以存储不同类型和数量的对象,同时还具有多样化的操作方式。相较于数组,Java 集合的优势在于它们的大小可变、支持泛型、具有内建算法等。总的来说,Java 集合提高了数据的存储和处理灵活性,可以更好地适应。
2023-09-19 17:41:06
45
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人