- 博客(181)
- 收藏
- 关注
原创 ffmpeg入门
ffmpeg [全局参数] {[输入选项] -i 输入文件}... {[输出选项] 输出文件}...全局参数:对整个命令有效,如-y(覆盖输出文件)、-loglevel(设置日志级别)等。输入选项:放在-i前面的参数,只对紧跟其后的输入文件生效,例如-ss用于设置起始时间(快速定位输入流)。输出选项:出现在输入文件之后,专门控制输出文件的编码、格式等,如-c:v(指定视频编码器)、-b:a(音频比特率)等。
2025-04-11 09:28:06
451
原创 讲讲断点续传的实现
通常视频文件都比较大,大文件分块上传主要是为了解决直接上传大文件可能出现的网络中断、超时、内存占用过大等问题,其核心思想是将大文件分割成多个较小的块(chunk),每个块单独上传,最后在服务器端进行合并。,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成,需要客户重新上传,用户体验非常差,所以对于。
2025-04-11 09:23:12
272
原创 聊聊SpringBoot事件机制
Spring 基于观察者模式,实现了自身的事件机制,由三部分事件:通过继承它,实现自定义事件。另外,通过它的source属性可以获取事件源timestamp属性可以获得发生时间。事件发布者:通过它,可以进行事件的发布。事件监听器:通过实现它,进行指定类型的事件的监听。友情提示:JDK 也内置了事件机制的实现,考虑到通用性,Spring 的事件机制是基于它之上进行拓展。因此,ApplicationEvent 继承自 java.util.EventObject。
2025-04-10 09:35:43
328
原创 讲讲五种通信方式的区别
通信方式核心特点适用场景优点缺点HTTP/HTTPS基于网络请求,文本协议RESTful API、跨平台调用通用性强,易于调试性能较低,不适合高并发RPC基于二进制协议,高性能微服务架构、高并发场景性能高,适合内部服务调用开发复杂度较高SDK封装好的库,直接调用第三方服务集成、工具类封装使用简单,提高开发效率依赖 SDK 的版本和更新WebSocket全双工通信,实时性强实时通信(如聊天、推送)实时性强,适合高频数据交互实现复杂度较高MQ。
2025-04-09 10:31:12
780
原创 外观模式详解
外观模式(Facade),也叫 “过程模式”:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式通过一个统一的接口(Facade)封装复杂子系统的调用逻辑,为客户端提供简单易用的操作接口。其核心是降低系统复杂度,避免客户端直接与多个子系统交互。外观模式可以理解为转换一群接口,客户只要调用一个接口,而不用调用多个接口才能达到目的。
2025-04-09 10:28:46
912
原创 装饰器模式详解
基础饮品(如LongBlack)提供核心功能。装饰器(如MilkChocolate)按需添加调料。客户端通过链式调用组合装饰器,灵活生成最终产品。此模式在 Java 中广泛应用于 IO 流(如装饰)、UI 框架等场景,是实现 “灵活扩展” 的利器。
2025-04-08 10:37:41
264
原创 桥接模式详解
桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。是一种结构型设计模式,主要目的是减少类的数量并简化代码结构,从而提高系统的灵活性和可扩展性。Bridge 模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
2025-04-08 10:35:55
1017
原创 适配器模式详解
适配器模式 (Adapter Pattern) 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式类适配器模式接口适配器模式对象适配器模式一些书籍称为:适配器模式(Default Adapter Pattern)或缺省适配器模式。核心思路:当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法)
2025-04-07 15:49:35
815
原创 建造者模式详解
建造者模式()又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者摸式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。职责:实现了Appendable接口中定义的append方法,提供了字符串构建的基本功能。虽然是抽象类,但它已经实现了大部分具体的构建逻辑。// ...省略Appendable。
2025-04-07 15:48:17
1248
原创 原型模式详解
原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过持贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象clone()形象的理解:孙大圣拔出猴毛,变出其它孙大圣对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。对于数据类型是。
2025-04-03 09:32:03
451
原创 工厂模式详解
简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
2025-04-03 09:31:20
336
原创 设计模式七大原则
对类来说的,即一个类应该只负责一项职责。如类 负责两个不同职责:职责1,职责2。当 职责1 需求变更而改变 时,可能造成 职责2 执行错误,所以需要将类 的粒度分解为 A1,A2。示例二该示例遵守了单一职责原则,但是这样做的改动很大,即将类分解,同时修改客户端,是类级别上的单一职责。示例三(推荐)该示例虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责注意事项和细节降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性降低变更引起的风
2025-04-02 10:23:52
970
原创 设计模式基础入门
创建型模式→ 解决对象创建问题,简化实例化过程。结构型模式→ 解决类和对象之间的组合,增强灵活性。行为型模式→ 解决对象间的通信与职责分配,提升扩展性。类别模式名称核心目的主要应用场景创建型模式单例模式 (Singleton)保证唯一实例,节省资源Spring Bean、数据库连接池、缓存客户端创建型模式工厂方法/抽象工厂解耦复杂对象的创建数据库操作、支付系统、多消息队列适配结构型模式代理模式 (Proxy)扩展增强、不改变原有代码Spring AOP、RPC 调用、权限控制。
2025-04-01 11:56:49
724
原创 安全框架SpringSecurity入门
是 Spring 生态系统中的一个重要组成部分,用于为 Java 应用程序提供安全性。它支持多种认证和授权机制,并且可以轻松地与 Spring Boot 集成。实现@Service@Override// 从数据库或其他数据源加载用户信息// 从数据库或其他数据源加载用户信息 User user = getUserFromDatabase(username);
2025-04-01 11:53:59
1093
原创 JWT基础小结
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。JWT,因此,我们的。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。(JWT 存储在【客户端】)
2025-03-31 08:58:24
760
原创 深入了解 Bearer 模式
Bearer 模式是 OAuth 2.0 标准定义的一种令牌认证方式。谁拥有这个令牌,就可以凭借它访问受保护的资源。它通常用于在无状态 HTTP 请求中传递用户身份或授权信息。Bearer Token 的认证信息一般通过 HTTP 请求头的Bearer是固定的前缀,用于标识认证类型。<token>是具体的令牌(例如 JWT)。Bearer Token 是一种灵活且广泛应用的认证方式,它通过 OAuth 2.0 标准化了令牌的传递方式,简化了身份验证的实现。始终使用 HTTPS 保护令牌传输。
2025-03-31 08:57:17
1485
原创 聊聊那些鉴权相关的知识
用户授予第三方应用访问该用户某些资源的权限你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)Cookie。Session。Token。OAuth。凭证用于认证后,可生成会话或令牌,用于后续授权。凭证是用户或系统用来证明自己身份的信息。是在身份验证成功后,用来表明身份和授权的标识。Session ID:通过用户名和密码登录后生成的。
2025-03-30 15:24:02
676
原创 什么是 RBAC 权限模型?
RBAC 就是一个。。通过角色关联用户,角色关联权限的方式间接赋予用户权限。之所以在用户和权限在中间加一层角色,是为了增加安全性和效率,而且后续扩展上也会提升不少。打个比方,用户和角色是关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。用户和角色是关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。那么,什么时候该使用多对一的权限体系,什么时候又该使用多对多的权限体系呢?
2025-03-30 15:22:15
623
原创 LocalDateTime和DateTime
在现代的 Java 开发中,是推荐使用的日期时间类之一,尤其是在处理的日期和时间时。下面是对和(以及)的一些分析,帮助你更好地理解它们之间的区别和使用场景。是 Java 8 引入的java.time包中的一个类。它用于表示不带时区的日期和时间,通常用于不需要考虑时区的应用场景。
2025-03-27 10:41:11
524
原创 Shiro学习小结
Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有 信息都在会话中;会话可以是普通 JavaSE 环境,也可以是 Web 环境的;
2025-03-26 09:06:21
821
原创 Mybatis映射文件解析
直接在外层嵌套 这个标签,例如 标签说明:(Character Data)标签,它在 XML 和 HTML 中用于定义一段文本数据,该数据不应被解析器解析为标记。CDATA 部分中的内容将原样输出,即其中的所有字符都将被视为普通文本,即使它们可能包含特殊字符或标记。sql 举例如下:第二种写法符号替换,如下面表格所示符号区分:sql 举例如下:顶级元素SQL 映射文件有以下几个顶级元素(按照它们应该被定义的顺序):有两种形式:区别:什么是 SQL 注入呢?比如:value 应该是一个数值吧。然后
2025-03-26 09:03:41
961
原创 SpringBoot核心知识总结
Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。简单来说,就是一系列依赖关系的集合。例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入这个依赖即可。
2025-03-25 09:57:11
823
原创 讲讲Spring事务
Spring 事务管理是 Spring 框架中的一项重要功能,用于简化企业级应用中的事务管理操作。它通过声明式(Declarative)或编程式(Programmatic)的方式,帮助开发者保证数据的一致性、完整性和隔离性。事务的核心目标是确保一组操作(如数据库读写)要么全部成功,要么全部失败(回滚),从而保证系统数据的可靠性。Spring 提供了两种事务管理方式: 注解是 Spring 中声明事务的核心注解,通常标注在类或方法上。常见属性:事务传播行为定义当前方法事务的处理方式。常见值如下:事务隔离
2025-03-24 09:17:58
420
原创 聊聊 ThreadPoolTaskExecutor 与 ThreadPoolExecutor 的区别
是 Java 并发包中的基础线程池实现,适用于需要直接管理线程池配置和行为的场景。是 Spring 框架提供的扩展实现,简化了线程池的配置和管理,适用于 Spring 应用中的多线程任务执行。
2025-03-24 09:17:13
425
原创 异步注解 @Async + 自定义线程池
在 Spring 框架中,@Async注解可以用于异步执行方法。当你使用@Async注解时,如果不自定义线程池,Spring 会为你自动创建一个默认的线程池。这个默认线程池是由管理的,它为每个任务创建一个新的线程。无限制的线程创建会为每个任务创建一个新的线程,而没有最大线程数的限制。如果异步任务的数量非常多,这可能导致大量的线程被创建,消耗大量的系统资源,最终可能导致或降低系统性能。线程管理:由于每次调用都会创建新线程,没有线程复用,这可能会导致线程管理上的开销,尤其是在高并发场景下。调试和监控困难。
2025-03-21 14:15:35
554
原创 SpringCache小记
:开启缓存功能,一般放在启动类上。:表示该方法支持缓存。当调用被注解的方法时,如果对应的键已经存在缓存,则不再执行方法体,而从缓存中直接返回。当方法返回 null 时,将不进行缓存操作。(一般用于查询方法上):表示执行该方法后,其值将作为最新结果更新到缓存中,每次都会执行该方法。(一般用于新增方法上):表示执行该方法后,将触发缓存清除操作。(一般用于更新或删除方法上):用于组合前三个注解,例如:常用注解属性/:缓存名称(必填),指定缓存的命名空间;:用于设置在命名空间中的缓存 key 值,默认使
2025-03-21 11:32:24
667
原创 元注解知识小结
官方解释:从 JDK5 开始,Java 增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
2025-03-20 09:43:44
652
原创 AOP 实战小记
Aspect用于定义一个切面,将横切逻辑封装在切面中。切面是包含切入点和通知的类。用于定义一个切入点,指定在哪些连接点上应用切面逻辑。可以在多个通知中重复使用同一个切入点。用于定义一个前置通知,在方法执行之前执行切面逻辑。在连接点之前执行。用于定义一个后置通知,在方法执行之后执行切面逻辑(无论方法是否抛出异常)。在连接点之后执行。用于定义一个返回后通知,在方法正常返回后执行切面逻辑。只在方法正常返回时执行,在方法抛出异常时不执行。用于定义一个异常通知,在方法抛出异常后执行切面逻辑。
2025-03-20 09:14:29
566
原创 聊聊 Spring IoC 和 AOP
循环依赖指的是多个 Bean 之间相互依赖,导致无法完成实例化。构造器循环依赖(Spring无法解决,会抛出异常)Setter/字段注入循环依赖(Spring可以解决,通过三级缓存)简单说就是自己依赖自己,或者和别的 Bean 相互依赖。只有单例的 Bean才存在循环依赖的情况,原型(Prototype)情况下,Spring 会直接抛出异常。原因很简单,AB 循环依赖,A 实例化的时候,发现依赖 B,创建 B 实例,创建 B 的时候发现需要 A,创建 A1 实例······无限套娃,直接把系统干垮。
2025-03-19 11:34:42
1355
原创 Spring基础小结
Spring Core 模块:提供了 Spring 框架的核心功能,包括 IoC(控制反转)和 AOP(面向切面编程)等,是整个 Spring 框架的基础。Spring Context 模块:建立在 Spring Core 模块之上,提供了一个框架式的上下文环境,用于管理 Bean 的生命周期和配置元数据等。提供了对 JDBC 的封装,简化了数据库访问的操作,包括了连接管理、事务管理、异常处理等。
2025-03-19 09:53:43
1464
原创 【实战篇】exists语法解析
EXISTS是 SQL 中的一个子查询操作符,用于检查子查询是否返回任何行。EXISTSTRUEEXISTSFALSEEXISTS以下是EXISTS。
2025-03-17 09:07:48
1211
原创 【实战篇】一文教你如何删除重复记录
t_useruididuiduid以下是一个删除重复记录的示例 SQL 语句,它将为每个uid保留具有最小id值的记录在这个例子中,内部查询首先为每个uid分组内的记录分配了一个行号(row_num),根据id字段排序,其中最小的id值对应行号 1。然后,外层的IN子句用来选择那些行号大于 1 的记录,即重复的记录。最后,DELETE语句根据id删除这些记录。是 SQL 中的一个(window function)的语法。窗口函数用于在不失去分组的情况下,对分组内的数据进行计算。这里是OVERuiduid。
2025-03-17 09:06:40
358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人