- 博客(171)
- 收藏
- 关注
原创 原型模式详解
原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过持贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象clone()形象的理解:孙大圣拔出猴毛,变出其它孙大圣对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。对于数据类型是。
2025-04-03 09:32:03
292
原创 工厂模式详解
简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
2025-04-03 09:31:20
298
原创 设计模式七大原则
对类来说的,即一个类应该只负责一项职责。如类 负责两个不同职责:职责1,职责2。当 职责1 需求变更而改变 时,可能造成 职责2 执行错误,所以需要将类 的粒度分解为 A1,A2。示例二该示例遵守了单一职责原则,但是这样做的改动很大,即将类分解,同时修改客户端,是类级别上的单一职责。示例三(推荐)该示例虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责注意事项和细节降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性降低变更引起的风
2025-04-02 10:23:52
899
原创 设计模式基础入门
创建型模式→ 解决对象创建问题,简化实例化过程。结构型模式→ 解决类和对象之间的组合,增强灵活性。行为型模式→ 解决对象间的通信与职责分配,提升扩展性。类别模式名称核心目的主要应用场景创建型模式单例模式 (Singleton)保证唯一实例,节省资源Spring Bean、数据库连接池、缓存客户端创建型模式工厂方法/抽象工厂解耦复杂对象的创建数据库操作、支付系统、多消息队列适配结构型模式代理模式 (Proxy)扩展增强、不改变原有代码Spring AOP、RPC 调用、权限控制。
2025-04-01 11:56:49
708
原创 安全框架SpringSecurity入门
是 Spring 生态系统中的一个重要组成部分,用于为 Java 应用程序提供安全性。它支持多种认证和授权机制,并且可以轻松地与 Spring Boot 集成。实现@Service@Override// 从数据库或其他数据源加载用户信息// 从数据库或其他数据源加载用户信息 User user = getUserFromDatabase(username);
2025-04-01 11:53:59
1086
原创 JWT基础小结
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。JWT,因此,我们的。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。(JWT 存储在【客户端】)
2025-03-31 08:58:24
753
原创 深入了解 Bearer 模式
Bearer 模式是 OAuth 2.0 标准定义的一种令牌认证方式。谁拥有这个令牌,就可以凭借它访问受保护的资源。它通常用于在无状态 HTTP 请求中传递用户身份或授权信息。Bearer Token 的认证信息一般通过 HTTP 请求头的Bearer是固定的前缀,用于标识认证类型。<token>是具体的令牌(例如 JWT)。Bearer Token 是一种灵活且广泛应用的认证方式,它通过 OAuth 2.0 标准化了令牌的传递方式,简化了身份验证的实现。始终使用 HTTPS 保护令牌传输。
2025-03-31 08:57:17
1368
原创 聊聊那些鉴权相关的知识
用户授予第三方应用访问该用户某些资源的权限你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)Cookie。Session。Token。OAuth。凭证用于认证后,可生成会话或令牌,用于后续授权。凭证是用户或系统用来证明自己身份的信息。是在身份验证成功后,用来表明身份和授权的标识。Session ID:通过用户名和密码登录后生成的。
2025-03-30 15:24:02
671
原创 什么是 RBAC 权限模型?
RBAC 就是一个。。通过角色关联用户,角色关联权限的方式间接赋予用户权限。之所以在用户和权限在中间加一层角色,是为了增加安全性和效率,而且后续扩展上也会提升不少。打个比方,用户和角色是关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。用户和角色是关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。那么,什么时候该使用多对一的权限体系,什么时候又该使用多对多的权限体系呢?
2025-03-30 15:22:15
617
原创 LocalDateTime和DateTime
在现代的 Java 开发中,是推荐使用的日期时间类之一,尤其是在处理的日期和时间时。下面是对和(以及)的一些分析,帮助你更好地理解它们之间的区别和使用场景。是 Java 8 引入的java.time包中的一个类。它用于表示不带时区的日期和时间,通常用于不需要考虑时区的应用场景。
2025-03-27 10:41:11
517
原创 Shiro学习小结
Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有 信息都在会话中;会话可以是普通 JavaSE 环境,也可以是 Web 环境的;
2025-03-26 09:06:21
819
原创 Mybatis映射文件解析
直接在外层嵌套 这个标签,例如 标签说明:(Character Data)标签,它在 XML 和 HTML 中用于定义一段文本数据,该数据不应被解析器解析为标记。CDATA 部分中的内容将原样输出,即其中的所有字符都将被视为普通文本,即使它们可能包含特殊字符或标记。sql 举例如下:第二种写法符号替换,如下面表格所示符号区分:sql 举例如下:顶级元素SQL 映射文件有以下几个顶级元素(按照它们应该被定义的顺序):有两种形式:区别:什么是 SQL 注入呢?比如:value 应该是一个数值吧。然后
2025-03-26 09:03:41
957
原创 SpringBoot核心知识总结
Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。简单来说,就是一系列依赖关系的集合。例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入这个依赖即可。
2025-03-25 09:57:11
821
原创 讲讲Spring事务
Spring 事务管理是 Spring 框架中的一项重要功能,用于简化企业级应用中的事务管理操作。它通过声明式(Declarative)或编程式(Programmatic)的方式,帮助开发者保证数据的一致性、完整性和隔离性。事务的核心目标是确保一组操作(如数据库读写)要么全部成功,要么全部失败(回滚),从而保证系统数据的可靠性。Spring 提供了两种事务管理方式: 注解是 Spring 中声明事务的核心注解,通常标注在类或方法上。常见属性:事务传播行为定义当前方法事务的处理方式。常见值如下:事务隔离
2025-03-24 09:17:58
414
原创 聊聊 ThreadPoolTaskExecutor 与 ThreadPoolExecutor 的区别
是 Java 并发包中的基础线程池实现,适用于需要直接管理线程池配置和行为的场景。是 Spring 框架提供的扩展实现,简化了线程池的配置和管理,适用于 Spring 应用中的多线程任务执行。
2025-03-24 09:17:13
421
原创 异步注解 @Async + 自定义线程池
在 Spring 框架中,@Async注解可以用于异步执行方法。当你使用@Async注解时,如果不自定义线程池,Spring 会为你自动创建一个默认的线程池。这个默认线程池是由管理的,它为每个任务创建一个新的线程。无限制的线程创建会为每个任务创建一个新的线程,而没有最大线程数的限制。如果异步任务的数量非常多,这可能导致大量的线程被创建,消耗大量的系统资源,最终可能导致或降低系统性能。线程管理:由于每次调用都会创建新线程,没有线程复用,这可能会导致线程管理上的开销,尤其是在高并发场景下。调试和监控困难。
2025-03-21 14:15:35
551
原创 SpringCache小记
:开启缓存功能,一般放在启动类上。:表示该方法支持缓存。当调用被注解的方法时,如果对应的键已经存在缓存,则不再执行方法体,而从缓存中直接返回。当方法返回 null 时,将不进行缓存操作。(一般用于查询方法上):表示执行该方法后,其值将作为最新结果更新到缓存中,每次都会执行该方法。(一般用于新增方法上):表示执行该方法后,将触发缓存清除操作。(一般用于更新或删除方法上):用于组合前三个注解,例如:常用注解属性/:缓存名称(必填),指定缓存的命名空间;:用于设置在命名空间中的缓存 key 值,默认使
2025-03-21 11:32:24
667
原创 元注解知识小结
官方解释:从 JDK5 开始,Java 增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
2025-03-20 09:43:44
649
原创 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
1352
原创 Spring基础小结
Spring Core 模块:提供了 Spring 框架的核心功能,包括 IoC(控制反转)和 AOP(面向切面编程)等,是整个 Spring 框架的基础。Spring Context 模块:建立在 Spring Core 模块之上,提供了一个框架式的上下文环境,用于管理 Bean 的生命周期和配置元数据等。提供了对 JDBC 的封装,简化了数据库访问的操作,包括了连接管理、事务管理、异常处理等。
2025-03-19 09:53:43
1463
原创 【实战篇】exists语法解析
EXISTS是 SQL 中的一个子查询操作符,用于检查子查询是否返回任何行。EXISTSTRUEEXISTSFALSEEXISTS以下是EXISTS。
2025-03-17 09:07:48
1188
原创 【实战篇】一文教你如何删除重复记录
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
355
原创 【实战篇】MySQL 时间字段的处理
NOW():返回当前的日期和时间。:返回当前日期,不包含时间部分。:返回当前时间,不包含日期部分。:返回当前时间的 Unix 时间戳。:将 Unix 时间戳转换为日期时间。
2025-03-14 11:36:05
314
原创 【实战篇】执行计划解析
数据库优化器可能会根据连接方式、连接条件等因素选择不同的执行计划。你可以通过EXPLAIN关键字查看两个查询的执行计划,以便更好地理解优化器的选择。观察执行计划并查看其中的关键信息,这可以帮助你理解查询优化器是如何选择执行计划的,从而找到可能导致性能差异的原因。
2025-03-13 17:21:45
879
原创 【实战篇】JOIN 解析
这是 SQL 中一种早期的 JOIN 语法形式。在 FROM 子句中,通过在两个或多个表名之间使用逗号来表示 JOIN 操作。例如:这种语法形式实际上执行的是一个 Cartesian product(笛卡尔积)操作,即所有表中的行两两组合。然后,WHERE 子句用于筛选出满足特定条件的组合。显然,这种语法形式有以下几个问题:所以,笔者推荐使用明确的 JOIN 语句(如 、 等)来代替 ,因为它们更清晰、可读性和性能通常更好,并且允许在 ON 子句中指定连接条件,这还可能有利于查询优化。单独的 JOIN 语
2025-03-13 17:21:13
245
原创 【实战篇】JSON字段处理
JSON 数据类型扩展了关系型数据库的功能,能够灵活存储和操作半结构化数据。熟练掌握常用函数(如提取、更新、删除)以及索引优化技巧,可以显著提高处理 JSON 数据的效率。
2025-03-12 09:12:29
852
原创 数据库优化
数据库的优化主要包括索引优化、查询优化和存储优化三个主要方面,这些优化措施旨在提升数据检索速度、降低查询响应时间、减少存储开销以及提高整体系统的性能。
2025-01-22 19:57:56
947
原创 【基础篇】什么是SQL注入,如何防止?
SQL 注入(SQL Injection)是一种常见的网络安全漏洞,它发生在 Web 应用程序中,当恶意用户在输入数据时,将恶意的 SQL 代码插入到输入中,从而导致应用程序执行非预期的 SQL 查询。攻击者通过 SQL 注入可以访问、修改或删除数据库中的数据,甚至完全控制数据库。SQL 注入的原因是:未经适当验证和处理的用户输入被直接拼接到 SQL 查询语句中,使得攻击者可以修改 SQL 查询的逻辑。
2025-01-21 20:16:30
784
原创 【基础篇】SQL语法基础小结
数据定义语言(Data Definition Language,DDL)是 语言集中负责数据结构定义与数据库对象定义的语言。DDL 的主要功能是定义数据库对象。DDL 的核心指令是CREATEALTERDROP。DDL的主要功能是定义数据库对象(如:数据库、数据表、视图、索引等)。
2025-01-21 20:16:00
1087
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人