- 博客(387)
- 资源 (8)
- 收藏
- 关注
原创 mysql 存储过程和自定义函数 详解
1. 定义自定义函数: 用于创建一个新的自定义函数。BEGIN-- 函数体END;: 函数名称。: 参数列表,参数可以是IN类型。RETURNS: 指定函数返回值的类型。2. 参数定义IN: 定义输入参数。MySQL 的自定义函数只支持IN类型的参数。BEGINEND;3. 函数体BEGIN/END: 标记函数体的开始和结束。BEGIN-- 函数逻辑END;4. 返回值RETURN: 用于返回函数的计算结果。5. 属性或: 标记函数是否是确定性的。
2025-02-08 12:07:39
838
原创 java JIT怎么调优
这可以减少内存分配和回收的开销,提高内存访问效率。通过以上方法,可以有效地优化 JIT 编译器的行为,提升 Java 应用的性能。这将输出 JIT 编译的详细信息,包括编译序号、编译级别和方法信息。将频繁调用的小型方法体直接插入到调用点,以减少方法调用的开销。对循环中的常用代码进行展开,减少循环体内的分支判断和跳转。:提供实时的线程、内存和方法调用监控。内联优化可以显著减少函数调用的次数和堆栈操作的开销。循环展开可以减少循环的迭代次数和分支预测的开销。:减少代码中的分支数量,避免过多的条件判断。
2025-02-06 13:18:39
395
原创 java synchronized 锁优化的核心机制及其工作原理
Java 的锁通过偏向锁 → 轻量级锁 → 重量级锁的逐步升级策略,结合锁消除、锁粗化、自适应自旋等优化技术,在保证线程安全的同时,显著降低了同步开销。理解这些机制有助于编写高效并发代码和性能调优。
2025-02-06 13:03:56
757
原创 jdk8 G1收集器怎么手动调优
通过以上步骤和参数,可以在 JDK 8 中手动调优 G1 垃圾收集器,以满足应用的性能需求。这个参数设置 G1 收集器在进行垃圾回收时,尽量将暂停时间控制在 200 毫秒以内。这个参数表示当堆使用率达到 45% 时,G1 收集器会开始并发标记周期。这个参数设置每个 Region 的大小为 32MB。这个参数告诉 JVM 使用 G1 作为垃圾收集器。这将设置初始堆大小和最大堆大小均为 4GB。这个参数设置并发标记线程数为 4。这个参数设置并行回收线程数为 8。
2025-02-05 22:22:53
489
原创 spring @Scheduled定时任务注解使用方法以及注意事项
这意味着,如果多个定时任务被触发在同一时间执行,它们会按照任务注册的顺序依次执行,而不是并行执行。注解是 Spring 提供的一个注解式定时任务调度工具,用于简化定时任务的实现。如果任务抛出异常或执行时间过长,可能会影响后续任务的调度。:指定任务在上一次执行结束后,经过固定的时间间隔再执行下一次,单位为毫秒。通过合理使用这些参数,可以灵活地配置定时任务的执行计划,满足各种业务需求。表示上一次任务执行结束后,等待 5 秒再执行下一次。:如果一个任务执行时间过长,会阻塞后续任务的执行。
2025-02-05 16:53:44
539
原创 java 实现定时任务的方式
是 Java 提供的一个更强大的定时任务调度工具,支持多线程和固定延迟任务调度。Spring 提供了简单的注解式定时任务支持,适用于 Spring 应用程序。是 Java 提供的一个简单定时任务调度工具,适用于简单的单线程定时任务。Quartz 是一个功能强大的调度框架,支持复杂的调度任务和分布式调度。不支持复杂的调度任务,如基于日历或时间表达式的任务调度。不支持复杂的调度任务,如基于日历或时间表达式的任务调度。不支持复杂的调度任务,如动态调整任务调度时间。功能强大,支持复杂的调度任务。
2025-02-05 16:50:42
502
原创 二十三种设计模式-享元模式
享元模式适用于需要优化内存使用和提高性能的场景,特别是在系统中存在大量相似对象、对象创建和销毁成本较高、以及需要频繁访问和共享数据的情况下。然而,享元模式也会增加系统的复杂性,需要合理权衡其优缺点。
2025-01-25 12:58:01
1322
原创 二十三种设计模式-桥接模式
例如,一个数据访问对象(DAO)可以使用不同的数据库连接实现(如JDBC连接、Hibernate连接等),通过桥接模式可以将DAO逻辑与具体的数据库连接实现分离。在支付系统中,支付渠道(如微信支付、支付宝)和支付方式(如扫码支付、密码支付、人脸支付等)可以作为两个独立的维度。例如,一个按钮控件可以有不同的显示风格(如Windows风格、Mac风格等),通过桥接模式可以将按钮的逻辑与显示风格分离。通过桥接模式,可以实现不同消息和传输方式的组合,而无需修改消息传输协议的代码。
2025-01-25 12:38:16
1250
原创 二十三种设计模式-外观模式
外观模式(Facade Pattern)是一种结构型设计模式,其核心思想是提供一个统一的高层接口,用于访问子系统中的一群接口。通过这个高层接口,客户端可以更简单地访问子系统中的模块和类,而不需要了解子系统内部的复杂结构和交互细节。外观模式通过提供一个统一的高层接口,简化了客户端对复杂子系统的调用,降低了客户端的复杂性,提高了系统的可维护性和可扩展性。在实际开发中,外观模式非常有用,特别是在需要简化复杂系统调用、解耦客户端与子系统、实现层次化结构等场景中。
2025-01-25 12:26:18
577
原创 二十三种设计模式-代理模式
代理模式是一种结构型设计模式,其核心思想是提供一个代理对象,用以控制对实际对象的访问。通过代理对象,可以在不改变实际对象的情况下,添加各种功能,如权限控制、懒加载、缓存、远程调用等。代理模式通过代理对象控制对实际对象的访问,可以在不修改实际对象的情况下,添加各种功能,如权限控制、懒加载、缓存、远程调用等。代理模式在实际开发中非常有用,选择静态代理还是动态代理取决于具体的需求和场景。
2025-01-17 16:56:36
879
原创 二十三种设计模式-装饰器模式
装饰器模式是一种结构型设计模式,其核心思想是动态地给一个对象添加一些额外的职责。通过这种方式,可以在不改变原有对象结构的基础上,灵活地增加新的功能,使得对象的行为可以得到扩展,同时又保持了原有类的简洁性。
2025-01-17 16:29:47
2153
原创 二十三种设计模式-适配器模式
定义:适配器模式将一个类的接口转换成客户端所期望的另一种接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。作用兼容性:解决了接口不兼容的问题,让原本无法协同工作的类能够一起工作,提高了系统的兼容性。复用性:可以重用一些现有的类,而无需修改它们的代码,从而提高了代码的复用性。灵活性:客户端调用的是适配器类,而适配器类可以根据需要调用被适配类的方法,这样可以在不修改客户端代码的情况下,灵活地更换被适配类。
2025-01-13 17:26:41
906
原创 二十三种设计模式-原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它通过拷贝现有的实例来创建新的实例,而不是通过新建实例。这种方式可以避免复杂的构造过程,同时还能保持对象的创建和使用分离,提高系统的灵活性和扩展性。了解原型模式之前需要先搞懂浅拷贝和深拷贝。指的是创建一个新对象,然后将原对象的非静态字段复制到新对象中。如果字段是基本数据类型,那么直接复制其值;如果字段是对象引用,则复制引用本身,而不是引用的对象。这意味着新对象和原对象的引用字段指向同一个对象。
2025-01-08 17:09:30
630
原创 二十三种设计模式-建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种分步骤构建复杂对象的方法。这种模式允许你通过相同的创建过程构建不同的表示。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的对象。
2025-01-01 14:12:45
597
原创 二十三种设计模式-抽象工厂模式
多个工厂:抽象工厂模式包含多个工厂,每个工厂负责创建一族相关的产品。创建方式:通过一组工厂方法来创建相关产品,每个工厂方法返回一个抽象产品类型的对象。扩展性:增加新产品族时,只需增加一个新的具体工厂和对应的具体产品类,不需要修改已有代码,符合开闭原则。产品族:抽象工厂模式可以处理多个产品等级结构,即多个接口或抽象类下的所有具体类的创建。系统复杂度:实现较为复杂,需要定义多个抽象产品和工厂接口。
2025-01-01 14:02:54
698
原创 二十三种设计模式-工厂方法模式
工厂方法模式是一种创建型设计模式,其核心思想是通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行,从而使得扩展变得容易,而不需要修改现有的代码,符合开闭原则(对扩展开放,对修改封闭)。
2024-12-31 15:35:58
428
原创 spring alibaba sentinel
Sentinel 是阿里巴巴开源的一款面向微服务架构的流量控制组件,它提供了丰富的流量控制功能,包括流量控制、熔断降级、系统负载保护等。- **预热策略**:Sentinel 提供了预热策略,允许系统在启动时逐渐增加流量,避免一开始就承受过高的流量。- **优雅降级**:Sentinel 允许您定义降级策略,当下游服务不可用时,可以优雅地降级服务。- **快速失败**:Sentinel 可以快速检测到下游服务的异常,并立即熔断,避免系统过载。spring cloud 整合sentinel的maven依赖。
2024-12-14 13:18:49
443
原创 spring cloud alibaba nacos
配置文件名要是bootstrap.yml(确保Nacos的配置放在了正确的配置文件中。是Spring Cloud官方提供的负载均衡组件,它与Spring Cloud的其他组件更加紧密集成,提供了更好的易用性和稳定性。配置文件中的配置会在应用上下文初始化之前加载,确保在应用启动时就能正确连接到Nacos服务器)因此,如果您使用的是Spring Cloud 2020版本或更高版本,应当使用。负载均衡我们可以用ribbon来做,也可以用NacosRule来做,我这里使用的老版本,所以使用ribbon来做实验。
2024-12-02 22:33:48
503
原创 MyBatis 缓存机制
一级缓存的生命周期与 `SqlSession` 相同,当 `SqlSession` 关闭或执行 clearCache() 方法时,一级缓存会被清空。此外,执行增删改操作也会导致一级缓存失效。它的作用域是 `SqlSessionFactory` 级别,因此不同的 `SqlSession` 可以共用二级缓存中的数据。- 二级缓存可以通过多种属性进行配置,例如 `eviction`(回收策略)、`flushInterval`(刷新间隔)、`size`(缓存对象个数)和 `readOnly`(是否只读)等。
2024-09-09 12:05:11
381
原创 SLF4J介绍
例如,如果你想使用 Logback 作为日志实现,你可以在项目的依赖管理文件中添加 `logback-classic` 的依赖。需要注意的是,SLF4J 只是一个门面,它本身不提供日志的实现,因此你还需要在项目中添加一个日志框架的依赖,如 Logback、Log4j 等。SLF4J 本身不提供日志的实现,而是定义了一个日志接口,具体的日志实现可以通过绑定不同的日志框架来完成。使用 SLF4J 的好处在于,你可以在代码中使用统一的 API,而具体的日志实现可以在部署时通过添加相应的绑定库来决定。
2024-09-09 11:57:04
545
原创 MyBatis映射文件中 常用标签
在实际应用中,`TeacherCourse` 实体类可能不需要包含 `Teacher` 和 `Course` 属性,因为这些关系已经通过 `Teacher` 和 `Course` 实体类的 `courses` 和 `teachers` 属性来表示。`<id>`和`<result>`标签用于映射`Group`对象的属性。在这个例子中,`teacher_course` 表通过 `teacher_id` 和 `course_id` 外键与 `teachers` 表和 `courses` 表关联。
2024-09-05 14:05:27
892
原创 mysql用时间戳还是时间存储比较好
TIMESTAMP 通常占用的空间比 DATETIME 少,如果你对存储空间有限制,或者你需要存储大量的时间戳数据,TIMESTAMP 可能是更好的选择。- 如果你的应用需要在不同的时区中使用时间数据,或者需要自动处理夏令时的变化,使用 TIMESTAMP 可能更方便。- 考虑到不同的数据库系统和应用程序可能对时间类型的支持不同,选择一个能够满足你当前和未来需求的时间类型是很重要的。- 对于需要频繁进行日期和时间范围查询的场景,DATETIME 类型可能更适合,因为它允许更灵活的日期和时间计算。
2024-09-05 12:38:05
1182
原创 mybatis TypeHandler类型处理器介绍
MyBatis 还提供了许多内置的 `TypeHandler`,例如 `BooleanTypeHandler`、`IntegerTypeHandler`、`StringTypeHandler`、`DateTypeHandler` 等,它们能够处理大部分常见的数据类型转换。如果需要处理特殊的数据类型或转换逻辑,可以通过实现 `TypeHandler` 接口或继承 `BaseTypeHandler` 类来创建自定义的 `TypeHandler` 实现。把自定义的处理器注册到mybatis当中。
2024-09-05 12:35:27
562
原创 springMVC WebMvcConfigurer详解
6. **消息转换器配置(configureMessageConverters)**:通过 `configureMessageConverters` 方法可以配置或扩展默认的消息转换器,比如添加自定义的 `HttpMessageConverter`。10. **参数解析器(addArgumentResolvers)** 和 **返回值处理器(addReturnValueHandlers)**:这些方法允许你添加自定义的参数解析器和返回值处理器,用于处理控制器方法的参数和返回值。
2024-09-04 15:20:25
699
原创 mysql事务相关的知识
**REPEATABLE READ**(MySQL 默认级别):保证了在同一个事务中多次读取同样的记录结果是一致的,但仍然可能遇到幻读。- **不可重复读(Non-Repeatable Read)**:在一个事务中,多次读取同一数据集合时,由于其他事务的修改,结果不一致。不是所有的 MySQL 存储引擎都支持事务。- **READ COMMITTED**:只能读取到已提交的数据,可以避免脏读,但仍可能遇到不可重复读和幻读。- **脏读(Dirty Read)**:一个事务读取了另一个事务未提交的数据。
2024-09-04 11:14:42
552
原创 扫码登录实现大概步骤
如果验证通过,服务器会将用户的登录状态与这个唯一标识关联起来,并在WebSocket频道中发送一个响应,确认登录成功。:使用这个唯一标识,你可以构建一个URL,这个URL包含了用户需要访问的登录页面或者API端点。:首先,你需要为每个登录请求生成一个唯一的标识(通常是一个UUID),这个标识将用于生成二维码和识别登录请求。:用户使用手机扫描二维码后,手机端应用会发送一个请求到服务器,获取到登录状态的Token。:一旦WebSocket接收到登录成功的响应,前端页面可以更新用户的状态,显示用户已登录。
2024-09-03 18:20:07
316
原创 通过设置JVM参数来启用GC(垃圾回收)日志
在这个例子中,`-Xloggc:/path/to/gc.log` 指定了GC日志的输出文件路径,`-XX:NumberOfGCLogFiles=10` 表示最多保留10个GC日志文件,`-XX:GCLogFileSize=10M` 表示每个日志文件的最大大小为10MB。在这个例子中,`-XX:+PrintGC`、`-XX:+PrintGCDetails` 和 `-XX:+PrintGCDateStamps` 参数被用来启用GC日志,但没有指定 `-Xloggc` 参数,因此GC日志将默认输出到控制台。
2024-09-03 16:23:58
839
原创 springboot 整合mongoDB
在使用 `MongoTemplate` 时,通常需要构建 `Query` 和 `Update` 对象来指定查询条件和更新操作。- `mapReduce(MongoTemplate.ReduceOptions options, Class inputClass, Class outputClass, String collectionName)`:执行 MapReduce 操作。可以链式调用多个聚合操作,如`match`、`group`、`sort`、`limit`等。
2024-09-01 21:19:35
1736
4
原创 docker 安装mongoDB
默认情况下,MongoDB监听27017端口,因此需要将容器的端口映射到宿主机的相同或不同的端口。在这个命令中,`-v /data/db` 表示将宿主机的`/data/db`目录挂载到容器的`/data/db`目录,这是MongoDB的默认数据存储路径。如果你需要使用特定的MongoDB版本,可以通过指定标签来拉取特定版本的镜像,例如`mongo:4.4`。在这个命令中,`-e` 用于设置环境变量,这里配置了MongoDB的初始用户名和密码。- `-d` 表示在后台运行容器。
2024-09-01 14:07:01
1022
原创 数据库水平分表方案
在MySQL数据库中,使用雪花算法(Snowflake)作为分表键时,确实存在一些潜在的问题,尤其是在低并发的情况下。雪花算法生成的ID是趋势递增的,但在低并发环境下,由于每次请求的时间戳可能不同,导致生成的ID序列在分表时可能会集中在某些表中,从而造成数据分布不均匀,这种现象称为数据倾斜。或运算和非运算通常用于其他类型的位操作,而不是直接用于范围限制,但它们可以与其他运算结合使用来实现复杂的逻辑。请注意,这个示例是一个简化的版本,实际应用中可能需要更复杂的逻辑来确保ID的全局唯一性和趋势递增性。
2024-08-30 22:46:05
1313
1
原创 springboot 实现数据库的读写分离
方法,用于确定当前请求应该使用哪个数据源。这个方法的实现通常基于一些业务逻辑或者执行上下文来决定数据源的选择。另外如果你对性能和可扩展性要求比较高,还可以为每个数据源创建不同的MyBatis会话工厂。可以为每个数据源配置。这是一个用于存储和检索当前请求所选择的数据源类型的类,通常使用 ThreadLocal 来保证线程安全。这个类型可以是一个简单的字符串、枚举值或其他可以唯一标识数据源的类型。类来配置数据源和事务管理器,并使用。: 在这个方法中,你可以通过调用。Bean,并注入对应的数据源。
2024-08-30 14:05:58
789
原创 mysql 一主一从数据库的配置文件
4. **binlog-ignore-db**:如果需要忽略复制特定的数据库,如MySQL自带的数据库。4. **同步数据**:在从服务器上使用`CHANGE MASTER TO`语句配置复制。1. **server-id**:同样需要设置一个唯一的ID,不能与主服务器的ID相同。3. **read-only**:设置从服务器为只读模式,防止在从服务器上执行写操作。1. **server-id**:为每个MySQL服务器设置一个唯一的ID。2. **创建复制用户**:在主服务器上创建用于复制的专用用户。
2024-08-28 15:37:18
900
原创 MYSQL 优化
5. **索引优化**:考虑索引失效的场景,遵循索引设计原则,优化连接查询、子查询、排序、分组,处理深分页查询问题,尽量覆盖索引,注意字符串前缀索引,使用MySQL 5.6支持的索引下推,以及在写多读少的场景下使用普通索引。表拆分,包括垂直拆分和水平拆分;7. **查询优化**:理解MySQL查询流程,利用慢查询日志分析慢查询语句,使用`EXPLAIN`分析查询计划,调整索引或语句本身。12. **排序优化**:尽量避免在大量数据上进行排序操作,如果不可避免,尽量使用索引排序,减少内存或磁盘的使用。
2024-08-27 17:54:38
712
原创 java JVM
在Java中,判断一个对象是否成为垃圾,即是否可被垃圾回收器(Garbage Collector,GC)回收,主要基于以下条件:1. **无法到达性(Unreachability)**:对象没有任何引用与之相连,即从GC Roots开始无法到达该对象。2. **GC Roots的起点**:GC Roots是垃圾收集器进行可达性分析时的起始点,包括:- 静态字段(`static`字段)中的对象引用。- 局部变量表(栈帧中的局部变量)中的对象引用。
2024-08-27 17:04:44
965
原创 java 自定义线程池
1. **创建一个类实现`ExecutorService`接口**:这个类需要实现`execute(Runnable command)`方法,它是用于提交新任务的方法。5. **任务提交**:当提交新任务时,需要将其添加到工作队列中,并根据当前线程池的状态决定是否需要创建新线程来处理这个任务。7. **实现`shutdown`和`shutdownNow`方法**:这些方法用于关闭线程池,不再接受新任务。6. **线程池的关闭**:提供关闭线程池的方法,包括优雅关闭和强制关闭。
2024-08-27 11:47:25
411
原创 java 对象的四种引用类型
虚引用必须和 `ReferenceQueue` 一起使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会将这个虚引用加入到与之关联的 `ReferenceQueue` 中。- 弱引用不会阻止垃圾回收器回收其指向的对象,也就是说,只要垃圾回收器发现了弱引用,就会回收其指向的对象,并且清除弱引用本身。- 当系统内存不足时,垃圾回收器会回收软引用指向的对象来释放内存,但在此之前会清除这些对象的软引用。- 虚引用通过 `java.lang.ref.PhantomReference` 类实现。
2024-08-27 11:38:10
366
原创 java Fork/Join 框架的理解以及简单运用
2. **定义任务**:实现 `Callable` 接口或继承 `RecursiveTask` 或 `RecursiveAction` 类来定义任务。1. **任务(Task)**:表示可以执行的工作单元。4. **执行任务**:使用 `ForkJoinPool` 的 `invoke` 或 `execute` 方法来执行任务。5. **递归**:Fork/Join 模式通常与递归结合使用,即每个子任务可能进一步分解为更小的子任务。3. **分解任务**:在任务的 `call` 方法中实现任务的分解逻辑。
2024-08-26 13:59:45
416
springcloud_parent.rar
2021-09-06
upupw_php_redis-7.0-nts-vc14-x64.zip
2018-06-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人