- 博客(35)
- 收藏
- 关注
原创 分层架构的认识
MVC:简单直接,适合小型项目,但易导致 Controller 臃肿。MVP:通过 Presenter 解耦 View 和 Model,适合需要严格分离的场景(如测试驱动开发)。MVVM:通过数据绑定减少胶水代码,适合复杂 UI 交互和现代前端框架。实际开发中,MVVM 是 MVC/MVP 的演进,尤其在前端开发中广泛应用。选择哪种模式取决于框架支持(如 Vue 用 MVVM)、团队习惯和项目复杂度。B/S与C/S架构:定义系统整体结构,关注客户端与服务端的职责划分和通信方式。
2025-03-20 09:34:00
432
原创 SpringBoot启动过程中IOC相关内容过程分析
在doGetBean方法中首先从三级缓存中获取对象(首先从singletonObjects中获取对象,如果未获取到且该对象正在创建中,则从earlySingletonObjects中获取。真正执行的方法为doCreateBean方法。当执行SpringApplication.run()方法,会执行SpringApplicaion类中的createApplicatonContext和refreshContext两个核心方法,前者是创建ApplicationContext容器,后者是需要容器管理的对象的创建。
2025-03-17 11:24:55
640
原创 Java中定时任务的创建方式总结
通过合理选择方案,可显著提升系统自动化程度和可靠性。如需进一步优化,可结合 Redis 分布式锁或 Prometheus 监控任务执行状态。笔者在项目中将Timer改为了ScheduledExecutorService,首先具有对高并发和异常隔离的支持,同时还能手动管理线程池。*愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!
2025-03-07 14:29:51
526
原创 Springboot中,Mybatis集成PageHelper进行分页
具体表现为,如果 pageSize 设为 0 或极大值,PageHelper 不会执行分页查询而是直接执行 count 查询并返回所有数据,这样可以避免不必要的分页操作,提高效率。不同的数据库有不同的 SQL 语法,特别是对于分页查询来说。当 PageHelper 动态生成用于计数的 SQL 时,它会将查询中的 SELECT 部分替换为 COUNT (*),并且如果有自定义的统计 SQL(比如通过重写 countByExample 等方法),那么这个自定义的 SQL 会被用来计算总数。
2025-03-04 11:27:59
858
原创 Linux中停服导致问题的思考
SELinux可能会阻止某些端口的监听。如果SELinux的策略不允许的应用程序绑定到12020, 13020端口,那么即使应用程序尝试启动,这些端口也不会被监听。可以查看SELinux的日志(通常位于/var/log/audit/audit.log),以确定是否有SELinux拒绝的记录。
2025-02-27 17:57:36
790
原创 Java中的深浅拷贝
至此,在引言中的导致的问题是由于前后使用同一个消息对象导致。每个消息必须独立改变,因为消费是异步的。所以每个消息进入队列必须为不同对象。由于该类中只包含了基本数据类型和不可变的引用数据类型(String),所以可以用浅拷贝来获得新对象,且新对象和原对象互不影响。虽然原本希望减少对象数量的优化策略无法实现,但通过浅拷贝创建对象,也使得代码更加简化,不必重复设置许多相同的属性。*愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!
2025-02-21 10:56:38
548
原创 SpringBoot中Mybatis记录执行sql日志
MyBatis默认使用SLF4J作为日志门面,所以需要在项目中选择一个SLF4J兼容的日志实现,比如Logback, Log4j2等。以Logback为例,也是SpringBoot默认日志框架。</</</</
2025-02-14 14:06:23
649
原创 SpringBoot的日志框架
在没有特殊配置的情况下,Spring Boot 会使用 Logback 作为日志系统,将日志输出到控制台。同时,也集成了 SLF4J(Simple Logging Facade for Java)作为日志门面,是一种抽象层,用于将应用程序代码与底层的日志系统分离开来,使得应用程序可以在不修改代码的情况下,通过配置切换不同的日志实现。在 Spring Boot 中,Logback 日志框架默认的配置文件在 resources 的 logback-spring.xml 或 logback.xml。
2025-02-14 13:55:13
292
原创 数据实时推送至前端的主流方法总结
在 Java 后台实现数据实时推送至前端的主流方法主要有以下几种,每种方法适用于不同的场景,具体选择需根据需求权衡。根据具体需求选择最合适的技术栈,必要时可组合使用(如 WebSocket 用于核心功能,SSE 用于辅助通知)。:HTTP/2 允许服务器主动推送资源,但通常用于静态资源预加载,动态数据推送需结合其他技术(如 gRPC)。:客户端发起请求后,服务器保持连接直到有数据或超时,返回后客户端立即重新请求。:基于TCP的双向通信协议,建立持久化连接后,服务端和客户端可主动推送数据。
2025-02-06 16:47:49
1057
原创 WebSocket推送数据快,条数多导致前端卡顿问题解决
在项目中,常常需要前端实时获数据,实现动态刷新的效果。WebSocket 是可选方案之一。在实际情况下,如果WebSocket推送快、数据多,前端处理的压力增加,可能导致前端卡顿的问题。笔者在项目开发中有所遇到,通过本篇文章记录一些可选解决方案,作为技术储备。笔者在项目中,是通过将小消息合并,减少消息发送的频次。同时前端缓存数据,依次处理。通过实施上述策略,显著减少前端卡顿现象,提供更流畅的用户体验。愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!
2025-02-06 16:21:41
1511
原创 依赖注入失败异常处理
通过对比这两个 controller 以及方法的异同发现,不能正常注入的方法为 private,可以正常注入的方法为 public。该 private 方法在出现问题之前没有 aop,service 层实例正常注入,方法正常调用。当加入 aop 后,虽然 aop 代理对 private 方法不生效,但是也改变了类的调用过程,导致 service 层实例未正常注入 private 方法中。controller 层 post 方法在调用过程,service 层实例注入为 null,但启动过程不报错。
2025-01-23 09:13:39
256
原创 Java中调用外部脚本的方法总结
通过创建 ProcessBuilder 类的实例来使用。可以先设置各种参数,如运行命令、工作目录、环境变量等,然后再启动进程。直接通过 Runtime 类的 exec() 方法执行命令来创建进程,执行外部程序。// 3.List或Array。
2025-01-23 07:42:51
800
原创 #!/bin/bash^M 坏的解释器:没有哪个文件或者目录
以上方法可以是通过网络和自己实践总结,如有问题,还请批评指正。推荐使用vim编辑器,可以在shell脚本中直接执行,而不需要交互式操作。愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!
2024-12-26 14:06:42
1006
原创 SpringBoot启动执行操作实现
最后补充一下Spring Boot启动顺序初始化阶段Spring Boot 应用程序开始初始化,创建并配置各种 Bean。这个阶段包括读取配置、初始化数据源等。CommandLineRunner 和 ApplicationRunner在所有 Bean 初始化完成后,但还没有处理任何请求之前,Spring Boot 会调用所有实现了 CommandLineRunner 或 ApplicationRunner 接口的 Bean 的 run 方法。
2024-12-12 17:58:00
814
2
原创 Mybatis的批量操作
每种方法都有其适用场景和限制。例如,使用 标签生成的批量 SQL 在某些数据库中可能因为 max_allowed_packet 大小限制而失败。因此,在选择批量处理方案时,需要根据具体的业务需求和数据库特性进行综合考虑。愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!
2024-11-28 14:16:55
1728
原创 SpringBoot项目打包自动获取Git revision number写入文件
由于项目在开发过程中,代码在不断提交,可能无法找到与出现问题的JAR相对于的源码版本来调试。所以这就需要在每次打包部署的时候,就记录下当前提交的版本revision number,以便可以在出现问题的时候可以回退到version,进行调试。在完成了上述配置之后,当通过 Maven 打包 JAR 文件时,Git 版本号会被自动写入到 /src/main/resources/version 文件中。最后,在的应用程序中,可以读取 version 文件中的版本号,并在需要的地方显示它。
2024-11-20 17:47:29
406
原创 对计算机架构的认识
4.Windows Server:2022 数据中心版 64位中文/英文版,2019 数据中心版 64位中文/英文版,2019 with Container 数据中心版 64位中文/英文版,2016 数据中心版 64位中文/英文版,2012 R2 数据中心版 64位中文/英文版。工作中接触到了计算机架构这个概念。总的来说,计算机架构主要是描述硬件层面的处理器设计,但这种硬件设计又直接影响到软件,特别是操作系统的设计和实现。计算机架构的核心是硬件层面的设计,既可以描述硬件的处理器,也可以涉及软件的操作系统。
2024-11-08 15:35:14
778
原创 Java权限修饰符的设计
最近在工作中使用了模板方法设计模式。在设计抽象类属性的权限修饰符时,使用private,并提供公有的getter,setter方法,类似于普通类的设计。然而发现在其子类中,如果想要访问父类的属性时,只能通过其get,set方法。有些不方便,于是重新学习了Java的权限控制。如果抽象类中的属性需要在子类中被访问或修改,但又不想让它们对类的外部可见,通常会将这些属性设置为 protected。// 其他抽象方法和具体方法在这个例子中,name 属性被设置为 protected,以便在子类中访问。
2024-10-18 14:41:44
456
原创 spark on yarn集群调优
在client模式下运行,观察运行日志,使得大多数计算是PROCESS_LOCAL,同时application运行时间减少了,才是有效的优化。spark中的本地级别有:PROCESS_LOCAL(进程本地化,效率最高), NODE_LOCAL(节点本地化), PACK_LOCAL(机架本地化), ANY, NO_PREF。在实际运行中我们希望的是大多数计算是进程本地化或节点本地化。分布式存储是大数据技术的核心,而为了提高大数据计算的效率,使计算靠近数据,减少移动大量数据而产生的网络io和磁盘io。
2024-08-27 18:07:14
712
原创 调用toJSONString方法,value为null所对应的key被舍弃
fastjson的使用过程中,当调用JSONObject对象的toJSONString()方法,将对象格式化为json字符串时。若某个key的value为null时,这个key在最总的字符串中将被舍弃。
2024-08-27 17:44:31
495
原创 RESTful 风格编程
RESTful(Representational State Transfer)架构风格是一种的和,基于HTTP协议,可以利用URI(Uniform Resource Identifier)来访问和操作资源。在RESTful设计中,资源的组织和访问遵循一定的原则,以提高系统的可读性和可维护性。
2024-08-22 17:05:21
694
原创 多线程下任务状态异常的问题解决
当方法上标注了@Transactional注解时,整个方法体内的所有数据库操作都会在一个统一的事务范围内进行。这意味着事务会在方法执行开始时开启,并在方法正常完成时提交,或者在方法中抛出未被捕获的异常时回滚。
2024-08-22 16:58:46
896
原创 ConcurrentModificationException 异常处理
ConcurrentModificationException 是并发编程中常见的问题,通常是因为集合被多个线程共享,并且在迭代过程中被意外修改。通过上述解决方案,可以有效地避免这类问题的发生。
2024-08-05 13:55:58
778
原创 SpringBoot中AOP的使用
创建一个切面类,使用@Aspect注解标记,并在其中定义切点(Pointcut)和通知(Advice)。// 这是一个切点签名,所有在service包下的方法都将被匹配 } @Before("allServiceMethods()") public void logBefore(JoinPoint joinPoint) {// 前置通知,在方法执行前打印日志 String methodName = joinPoint . getSignature() . getName();
2024-06-28 13:31:07
1294
原创 常用Linux命令总结
Linux操作系统以其强大的功能、高度的稳定性以及开源的特性,成为了服务器管理、编程开发、云计算等领域不可或缺的基石。以下为工作中常用的Linux指令汇总,有错误指出希望大家指正。
2024-06-20 13:38:35
697
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人