- 博客(86)
- 收藏
- 关注
原创 使用springboot实现支付宝手机支付下单流程
在 Maven 或 Gradle 项目中添加以下依赖项:```xml。创建 AlipayUtil 类生成下单请求的业务参数:```java。创建 AlipayConfig 类封装支付宝参数:```java。创建 Controller 处理下单请求:```java。**4. 配置 AlipayConfig****3. 创建 Controller****5. 创建 AlipayUtil****2. 配置支付宝参数****1. 导入依赖****6. 运行项目**
2024-09-20 19:07:06
235
1
原创 MapStruct 的使用
MapStruct 是一个用于 Java Bean 映射的代码生成器,它通过编译时生成高效的映射代码,减少手动映射的负担。MapStruct 是一个强大的工具,能够轻松实现 Java Bean 之间的映射,减少手动代码的编写,提高代码的可读性和可维护性。- **使用注解配置**:优先使用 `@Mapping` 注解来明确源字段和目标字段之间的关系,提高可读性。- **保持简单性**:尽量保持映射逻辑简单,复杂的映射逻辑可以通过自定义函数实现。- **自定义映射**:可以在方法中添加复杂的自定义逻辑。
2024-09-19 16:18:09
356
原创 windows中修改mysql身份认证方式caching_sha2_password为mysql_native_password
【代码】windows中修改mysql身份认证方式caching_sha2_password为mysql_native_password。
2024-09-19 16:11:51
298
原创 ObjectMapper实现序列化对象数据
**配置功能**:通过配置 `ObjectMapper` 的各种特性,可以控制序列化和反序列化的行为,比如日期格式、忽略某些字段、字段名的映射等。以下是一个完整的示例,展示了如何使用 `ObjectMapper` 进行序列化和反序列化,及如何定制字段需求:```java。- **反序列化**:将 JSON 字符串转换为 Java 对象。**在类中使用自定义序列化和反序列化**:```java。**自定义反序列化**:```java。**自定义序列化**:```java。#### 3.1 定制化字段名。
2024-09-18 10:09:33
778
原创 面试题:单核服务器可以不加锁吗?
先说我的理解,。因为在,所以是需要加锁。例如,以下案例,线程 T1 和线程 T2 都要执行 i++ 操作,i 的初始值为 0,所以正确的执行结果应该是 2。
2024-09-18 09:15:41
200
原创 fastjson日期格式化和循环依赖问题
**`SerializerFeature.DisableCircularReferenceDetect`**:这是一个特定的序列化特征,启用后,Fastjson 将不会检测循环引用。- **环形引用(Circular Reference)**:在 Java 对象中,如果有两个对象相互引用,序列化时可能会导致无限循环,进而抛出异常。- **put** 方法:将 `Date` 类的序列化配置为自定义的日期格式(如 `yyyy-MM-dd HH:mm:ss`)。### 2. 解决循环引用问题。
2024-09-14 17:50:55
646
原创 springboot + rocketmq 延迟队列实现过期订单取消
1. **延迟级别**: RocketMQ 默认提供了一定的延迟级别(例如 1s, 5s, 10s, ...),如果需要自定义更多延迟时间,可以使用 `syncSend` 方法中的第三个参数。3. **分布式事务**: 需要确保订单和消息的一致性,可以考虑使用 RocketMQ 的分布式事务消息来确保这点。4. **监控和报警**: 订单取消操作的成功与失败应该有监控与报警机制,以便及时响应和处理异常情况。2. **异常处理**: 处理业务逻辑时,确保做好异常处理,确保消息不会丢失。
2024-09-13 17:19:25
706
原创 面试题:加密的手机号,如何模糊查询?
常见的对称加密算法有 AES、SM4、ChaCha20、3DES、DES、Blowfish、IDEA、RC5、RC6、Camellia等。目前国际主流的对称加密算法是AES,国内主推的则是SM4。无论是用哪种算法,加密前的字符串,和加密后的字符串,差别还是比较大的。
2024-09-13 15:06:11
1515
原创 Spring Boot + aop
好的,下面是一个真实的 Spring Boot 示例,展示如何使用 AOP 和自定义注解来记录请求参数、响应和耗时。通过这种实现方式,您可以便捷地记录请求和响应的参数以及处理时间,有效提高系统的可监控性和调试能力。1. **异常处理**:您可以扩展 AOP 来捕获异常并记录错误信息。实现一个简单的`UserService`,包含创建和获取用户的方法。2. **敏感数据**:在处理请求时,确保不在日志中记录敏感信息。3. **性能**:定期检查日志的生成,确认不会影响系统性能。
2024-09-10 17:38:45
969
原创 mysql通过MIN(id)实现删除重复数据保留一条
`SELECT MIN(id) FROM my_table GROUP BY name, value`:这段 SQL 语句选择了每组(以 `name` 和 `value` 为基准)重复记录中的最小 `id`,将其作为要保留的记录。- **测试查询**:先运行查询语句,确认将要删除的记录,例如将 `DELETE` 替换为 `SELECT *`,以查看哪些数据将被删除。1. **找出要保留的记录**:使用 `MIN(id)` 找出每组重复记录中的最小 `id`。
2024-09-10 14:13:54
278
原创 面试题:mysql中什么叫回表
由于查询请求返回 `employee_id` 和 `salary`,但 `employee_id` 没有在索引中,所以 MySQL 必须回到 `employees` 表中去读取完全的行,获取这两个字段的值。在 MySQL 中,“回表”是指在执行查询时,数据库首先通过索引找到相关记录的位置,但需要再访问原始表以获取完整的行数据。- 首先,MySQL 会在 `idx_department` 索引中查找 `department = 'IT'` 的记录。- 只选择必要的字段,最好是这些字段都包含在索引中。
2024-09-10 11:35:40
346
原创 面试题:mysql行锁没有命中索引导致表锁问题
**InnoDB 存储引擎**: InnoDB 默认使用行锁,并尝试在可以利用索引的情况下以行锁的方式进行锁定。- **表锁**(Table Lock):用于锁定整个表,阻止其他事务对该表的所有操作,直到锁被释放。2. **避免全表扫描**:检查查询的执行计划(使用 `EXPLAIN` 语句),确保查询能命中索引。3. **使用合适的存储引擎**:在需要高并发和行级锁的情况下,选择 InnoDB 存储引擎。1. **创建适当的索引**:为了避免读取整个表并且提高并发,建议为频繁查询的列创建索引。
2024-09-10 11:07:03
682
原创 面试题:mysql 一般如何建立复合索引
比如,如果你创建了一个复合索引 `(column1, column2)`,仅在 `column1` 上的查询可以使用该索引,但在 `column2` 上的范围查询可能会失去效率。在创建复合索引时,列的顺序很重要。在 MySQL 中,复合索引(组合索引)是指在一个索引中包含多个列。这种索引在某些查询中可以提高性能,尤其是在涉及多个列的过滤条件时。应谨慎使用复合索引,确保仅为常用的查询创建索引。可以在表创建后使用 `ALTER TABLE` 添加复合索引。在创建表的时候,可以在表创建语句中直接定义复合索引。
2024-09-10 10:32:47
793
原创 面试题:java 实现有序数组求和为指定数(双指针)
如果你有一个有序数组,想要找到两个数的和为指定数的方法,可以使用双指针方法。- 在 `while` 循环中,当 `left` 小于 `right` 时,计算两个指针所指向元素的和。- `right` 初始值为 `nums.length - 1`,指向数组的结束。- 如果和大于目标值,说明需要一个更小的值,因此将 `right` 向左移动。- 如果和小于目标值,说明需要一个更大的值,因此将 `left` 向右移动。- `left` 初始值为 0,指向数组的开始。### Java 实现示例```java。
2024-09-10 08:52:36
430
原创 面试题:java 实现原地反转字符串(双指针)
在 Java 中,可以使用原地反转字符串的方法来改变字符串的顺序。1. **创建字符数组**:首先,将输入字符串转换为字符数组,因为字符串在 Java 中是不可变的。这种方法的时间复杂度为 O(n),空间复杂度为 O(1),是原地反转字符串的有效实现。- 使用一个 `while` 循环,当左指针小于右指针时,交换其指向的字符。- `right` 指向数组的结束位置(`s.length - 1`)。4. **输出结果**:最后,将反转后的字符数组转回字符串并打印。- 交换后,左指针向右移动,右指针向左移动。
2024-09-10 08:43:08
687
原创 Oracle 处理字符串列日期方式
`TO_DATE(date_column, 'YYYY-MM-DD')`: 这个函数将字符串 `date_column` 按照指定格式 `'YYYY-MM-DD'` 转换为日期类。假设您有一个表 `your_table`,其中有一个列 `date_column`,类型为字符串格式(如 `'YYYY-MM-DD'`),并且您希望获取今天的记录。如果您在 Oracle 数据库中有一个存储为字符串的日期列,并且您想要获取与今天日期匹配的记录,您需要将字符串转换为日期进行比较。下面是几个常见的示例。
2024-09-09 16:22:28
844
原创 shutdown()和shutdownNow()的区别
它会调用正在执行的任务的 `interrupt()`,如果一个任务捕获了 `InterruptedException`,你需要在代码中自行处理这些异常。- 该方法会尝试停止所有正在执行的任务,暂停处理的任务,并返回一个 `List<Runnable>`,这个列表包含那些不会被执行的任务。- **返回值**: 返回一个 `List<Runnable>`,这个列表包含在调用 `shutdownNow()` 前尚未开始执行的任务。- `shutdown()`: 平滑关闭,完成已提交的任务,拒绝新的任务。
2024-09-09 15:49:42
472
原创 `ThreadLocal`和`InheritableThreadLocal`的使用
在设计高并发系统时,利用 `ThreadLocal` 和 `InheritableThreadLocal` 可以有效地管理线程局部数据,并在一定程度上实现子线程之间的数据共享和更新,而不需要使用共享内存或锁。1. **利用上下文对象**: 将需要在多个子线程中使用的数据封装到一个上下文对象中,在每个线程中使用 `ThreadLocal` 存储该上下文对象。2. **线程间隔离**: 虽然 `InheritableThreadLocal` 可以在父子线程间共享数据,但要理解这种机制的隔离性,避免误用。
2024-09-09 15:44:00
257
原创 nginx 入门配置说明
这里的 `if-all-aiops` 将请求转发到 `localhost` 上的 `12001` 端口。`**:当访问 `/login` 的资源未找到时,返回 `index.html`,而不是 `404` 错误。- **`ssl_session_timeout`**:定义 SSL 会话的超时间隔,这里设置为 `10分钟`。这个配置与上面 `/aiops/if/` 的配置类似,但处理的是 `/if/` 的请求。- **`ssl_session_cache`**:共享 SSL 会话缓存,设置为 `1m`。
2024-09-06 16:46:06
469
原创 本地生成ssh的公钥
运行命令后,你可能会被提示输入文件存储路径(默认为 `~/.ssh/id_rsa`)。你可以直接按 `Enter` 接受默认路径,也可以输入一个新的路径。- `-C "your_email@example.com"` 是一个注释,可以使用你的邮箱以便识别。### 4. **添加公钥到 SSH Agent(可选)**### 1. **在 Linux 和 macOS 上**### 2. **在 Windows 上**1. **打开 PowerShell**。1. **打开 Git Bash**。
2024-09-04 16:57:54
878
原创 maven中通过idea设置忽略证书编译
install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
2024-09-04 11:40:49
951
原创 springboot 如何实现子域名session共享,以及将session存储在redis中,并且以json方式存储数据
1. **配置 Cookie 域**:确保所有子域名共享相同的 Cookie。2. **配置 Redis 存储 Session**:将 Session 数据存储在 Redis 中,并配置 Redis 连接。3. **使用 JSON 存储 Session 数据**:自定义 Redis 序列化方式,以 JSON 格式存储 Session 数据。4. **处理跨域请求**:确保 CORS 设置允许跨域请求并且 Session Cookie 被正确发送。
2024-08-31 19:15:02
1277
原创 Spring Security之动态配置资源权限
在Spring Security中实现通过数据库动态配置url资源权限,需要通过配置验证过滤器来实现资源权限的加载、验证。系统启动时,到数据库加载系统资源权限列表,当有请求访问时,通过对比系统资源权限列表和用户资源权限列表(在用户登录时添加到用户信息中)来判断用户是否有该url的访问权限。
2024-08-30 14:52:53
1026
原创 spring security中HttpSecurity 是如何组装过滤器链的
**`SecurityContextPersistenceFilter`**:负责将安全上下文从`HttpSession`中加载到当前线程中,确保在请求处理期间有一个有效的安全上下文。- **添加自定义过滤器**:使用`addFilterBefore()`或`addFilterAfter()`方法可以在特定过滤器之前或之后添加自定义的过滤器。- **配置过滤器的顺序**:Spring Security会自动调整过滤器的顺序,但你也可以手动指定某些过滤器的位置。
2024-08-30 11:49:45
742
原创 Spring Boot如何利用 BeanFactoryPostProcessor 实现动态加载第三方库
在 Spring Boot 应用中,使用 `BeanFactoryPostProcessor` 实现动态加载第三方库的机制涉及在应用启动时动态地注册和配置 bean。这种机制通常用于在运行时加载和配置第三方库或插件,而不是在编译时或配置文件中静态定义。
2024-08-30 11:24:21
563
原创 Spring Boot中BeanFactoryPostProcessor的实际应用
BeanFactoryPostProcessor` 是一个接口,它允许开发者在 Spring 容器初始化 bean 之前修改 `BeanFactory` 的配置。它的主要方法是:- `postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)`: 这个方法允许开发者访问和修改 `BeanFactory` 的 bean 定义。
2024-08-30 11:18:38
1272
原创 spring security中WebSecurityCustomizer的使用
WebSecurityCustomizer` 的主要作用是定制 Spring Security 的过滤器链。它允许你针对不同的请求路径或条件配置不同的安全设置,从而实现更细粒度的控制。
2024-08-30 11:02:17
968
原创 Spring Boot中动态导入配置
ImportSelector`允许你根据条件动态选择需要导入的配置类。```java@Override// 根据条件动态选择要导入的配置类```然后在你的主配置类中使用`@Import`注解来应用这个选择器:```java```
2024-08-30 10:48:15
632
原创 spring中@Import的使用
在这个例子中,`AdditionalConfig`中的Bean定义(如`someBean()`)会被导入到`MainConfig`的上下文中。`@Import`可以用来导入实现了`ImportSelector`接口的类,这些类可以动态地选择哪些配置类需要被导入。- `@Import`用于导入其他配置类、`ImportSelector`、或`ImportBeanDefinitionRegistrar`。`@Import`可以用来导入配置类,这样这些配置类中的Bean定义就会被包含在当前上下文中。
2024-08-30 10:41:09
320
原创 spring security中点击劫持的使用
点击劫持防护主要依赖于HTTP响应头`X-Frame-Options`和Content Security Policy。在这个配置中,`frameOptions().deny()`会设置HTTP头部`X-Frame-Options`为`DENY`,这将阻止所有网站通过iframe加载你的页面,从而防止点击劫持。Spring Security的`HttpSecurity`配置允许你启用点击劫持防护。- 你可以使用`frameOptions().sameOrigin()`来允许同源嵌套。
2024-08-30 10:07:37
306
原创 Spring Boot中ApplicationListener事件监听的使用
首先,你需要定义一个自定义事件。自定义事件需要继承自`ApplicationEvent`类。这个类通常包含一个构造函数来传递事件数据。```java```然后,你需要创建一个事件监听器类,该类实现`ApplicationListener<T>`接口。这个接口需要你指定要监听的事件类型`T`。```java@Component@Override// 处理事件```在Spring Boot中,你可以在任何需要的地方发布事件。
2024-08-30 09:54:18
648
原创 Spring Security 中如何让管理员能够踢掉特定的登录用户?
在 Spring Security 中实现一个功能,让管理员能够踢掉特定的登录用户,需要几个步骤。你需要一个机制来识别用户会话并使其失效。
2024-08-30 09:44:40
647
原创 面试题:服务down了,线程池中的数据如何保证不丢失
之前没有线程池的时候,我们在代码中,创建一个线程有两种方式:继承Thread类实现Runnable接口虽说通过这两种方式创建一个线程,非常方便。但也带来了下面的问题:创建和销毁一个线程,都是比较耗时,频繁的创建和销毁线程,非常影响系统的性能。无限制的创建线程,会导致内存不足。有新任务过来时,必须要先创建好线程才能执行,不能直接复用线程。线程池。它相当于一个存放线程的池子。使用线程池带来了下面3个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。
2024-08-30 09:18:34
891
原创 设计一套单点的登录系统
对于这种情况,我们可以先将 token 放入到url链接中,类似上面流程图中跳转思路,对于同一个应用系统,我们可以将token放入到 cookie 中,不同的应用系统,我们可以通过 url 链接进行传递,实现token的传输。进入登录页面之后,会让用户输入用户名、密码进行登录验证,如果验证成功之后,会返回一个有效的token,然后客户端会根据服务端返回的参数链接,跳转回之前要访问的应用系统。但是,如果访问不同的域名系统时,这个cookie是无效的,因此不能跨系统访问,同时也不支持集群环境的共享。
2024-08-29 16:46:27
1269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人