- 博客(325)
- 收藏
- 关注
原创 当你的对象结构拒绝修改时,访问者模式是如何破局的?
通过合理运用访问者模式,可以使系统获得更好的扩展性和维护性,特别是在需要为复杂对象结构添加多种操作时,能显著降低代码耦合度。分离,允许在不修改现有对象结构的前提下定义新的操作。它通过双重分派机制,实现操作与对象的解耦。客户端不直接操作具体元素,而是通过访问者与对象结构的抽象接口交互,符合依赖倒置原则。将格式转换逻辑外移到独立的访问者类中,实现操作与数据结构的解耦。收银员处理不同商品的方式,类似于访问者处理不同元素的操作。的两次动态绑定,实现操作与元素的动态匹配。访问者模式的核心目标是将。
2025-04-02 17:22:12
522
原创 使用 Redis Stream 解决 Java 与 Python 的长连接请求交互
【代码】使用 Redis Stream 解决 Java 与 Python 的长连接请求交互。
2025-04-02 17:21:35
324
原创 当你的对象结构拒绝修改时,访问者模式是如何破局的?
通过合理运用访问者模式,可以使系统获得更好的扩展性和维护性,特别是在需要为复杂对象结构添加多种操作时,能显著降低代码耦合度。分离,允许在不修改现有对象结构的前提下定义新的操作。它通过双重分派机制,实现操作与对象的解耦。客户端不直接操作具体元素,而是通过访问者与对象结构的抽象接口交互,符合依赖倒置原则。将格式转换逻辑外移到独立的访问者类中,实现操作与数据结构的解耦。收银员处理不同商品的方式,类似于访问者处理不同元素的操作。的两次动态绑定,实现操作与元素的动态匹配。访问者模式的核心目标是将。
2025-04-02 17:21:05
771
原创 Java必备的100道面试题!
Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。NIO 主要有三大核心部分:Channel(通道)Buffer(缓冲区)Selector。
2025-04-02 16:21:07
1439
原创 Java中线程暂停的分析与JVM和Linux的协作流程
Java中暂停线程的方法各有千秋,背后是JVM与Linux操作系统的精密协作。依赖内核定时器,借助POSIX条件变量,而利用futex实现高效暂停。理解这些机制有助于开发者在并发编程中选择合适的工具,提升程序性能和可靠性。
2025-04-01 20:28:03
797
原创 NumPy:数组加法/数组比较/数组重塑/数组切片
数组创建oneseyelinspace的作用与输出。数组运算:元素级加法和比较返回同形状结果。形状操作reshape和resize改变数组维度。切片:二维数组的行、列索引方法。
2025-04-01 20:27:31
720
原创 数据通信技术:数据通信传输信道-PCM信道-实现模数转换/简单了解损耗
数组生成与重塑arange生成序列,resize和reshape调整形状。np.modf:拆分小数和整数部分,返回元组。np.sum:沿指定轴求和,axis=1按行计算。输出格式:NumPy 的浮点数和数组显示规则。
2025-04-01 20:26:57
213
原创 2025最新整理Java面试版八股文
面向切面编程,将那些于业务无关的复用性比较高的代码快抽取出来,较低代码的耦合度。问:在你的项目中有使用过AOP吗?在我的云盘项目中就使用到AOP,在记录日志的时候,我创建有个自定义注解,aop的切面就是这个注解,使用环绕通知在方法中,我们通过传入的参数(joinPoint)获取对应的类和方法,从而获取前端传来的参数和其他主要信息,实现记录日志的效果。问:Spring中的事务是怎么实现的?
2025-04-01 16:47:17
1145
原创 什么是 Koa?——让小白也能轻松上手的 Web 框架
Koa 是一个轻量级、现代化的 Web 框架,它专注于提供更好的开发体验。它与 Express 类似,但在许多方面做了优化和改进。Koa 让开发者可以更加灵活地组织代码,减少了繁琐的配置和不必要的功能,简化了开发流程。简单来说,Koa 就是帮助你搭建 Web 应用的工具,它比很多传统框架更加简洁和高效。你可以用它来开发从简单的静态网站到复杂的 API 系统。Koa 是一个非常灵活且高效的 Web 框架,适合那些需要高度定制化的应用。它比传统的框架更简洁,适合开发者根据自己的需求自由构建功能。
2025-03-27 20:05:43
687
原创 G1 相较于 CMS 的优势:一场垃圾回收的革命性进化
在 Java 的垃圾回收器演进史上,CMS(Concurrent Mark-Sweep)曾是低延迟应用的标杆,而 G1(Garbage First)则是其继任者,于 Java 7 引入并在 Java 9 成为默认回收器。G1 相较于 CMS 的优势在于其革命性的区域化内存管理、可预测的停顿时间、主动的碎片处理、简化的调优和更广泛的适用性。对于企业应用,它意味着更低的维护成本和更好的用户体验。因此,从 Java 9 开始,G1 成为默认垃圾回收器,标志着 CMS 时代的终结和 G1 时代的开启。
2025-03-27 20:05:12
729
原创 Nginx负载均衡算法分析:面试复盘
Nginx的负载均衡算法看似简单,但背后蕴含了对性能、可用性和一致性的权衡。轮询适合简单场景,加权轮询和最小连接数适合性能差异较大的环境,而IP哈希则专注于会话保持。面试让我意识到,回答问题不仅要准确,还要全面、有深度,下次我会更有条理地组织语言,并主动抛出一些“加分点”。希望这篇复盘对准备面试的同学有所帮助!如果有其他关于Nginx的问题,欢迎交流。
2025-03-27 20:04:33
824
原创 Java面试题汇总-Java基础篇(共50道题)
思维导图回答:不可变类就是创建后其状态,也就是对象的字段无法被修改的类。一般是通过final关键字去创建一个不可变类,最常见的例子就是String字符串,String被创建后其值不可变,假设有s+='a',也只是创建了一个新对象,并将s的引用指向了新对象,s的旧引用指向的老对象的值没有变化还是s。不可变类主要有线程安全、缓存友好等优点,但是也有缺点例如性能问题,当执行了过多的字符串操作,可能会创建大量字符串对象,浪费内存空间。篇幅限制下面就只能给大家展示小册部分内容了。
2025-03-27 16:30:12
851
原创 国内金融资讯平台信息聚合:代理 IP 打破信息孤岛
直接用 Mapper 里的自定义方法:java代码解读复制代码输出可能是:ini代码解读复制代码{id=1, username=张三, age=25, status=1, order_name=手机, amount=1999.00} {id=2, username=李四, age=30, status=1, order_name=电脑, amount=5999.00}一次查完,效率高。
2025-03-20 17:25:14
844
原创 国内金融资讯平台信息聚合:代理 IP 打破信息孤岛
代理 IP 技术为国内金融资讯平台的信息聚合提供了有效的解决方案,能够打破信息孤岛,实现金融信息的高效整合和利用。随着金融市场的不断发展和信息技术的不断进步,代理 IP 技术在金融领域的应用将会更加广泛和深入。未来,我们可以期待看到更多基于代理 IP 的创新应用,为金融行业的发展提供更强大的支持。
2025-03-20 17:24:42
415
原创 告别手动赋值!优雅处理 MyBatis-Plus 的创建时间和更新时间
通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。一、缓存监控的背景游戏业务中存在大量的高频请求尤其是对热门游戏而言,而应对高并发场景缓存是一个常见且有效的手段。游戏业务中大量的采用远程缓存(Redis)和本地缓存(Caffeine)组合方式来应对大流量的场景。在整个缓存使用的实践过程中,基于真实线上案例和日常缓存运维痛点沉淀了一些缓存监控治理的有效案例供分享。二、远程缓存的监控介绍2.1 监控的方案2.1.1 监控目的从宏观来讲监控本质目的是为了及时发现定位并解决问题
2025-03-20 17:24:16
556
原创 2025年 Java 面试八股文_Java最全
线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率在 JDK 的 java.util.concurrent.Executors 中提供了生成多种线程池的静态方法。然后调用他们的 execute 方法即可。这4种线程池底层 全部是ThreadPoolExecutor对象的实现,阿里规范手册中规定线程池采用ThreadPoolExecutor自定义的,实际开发也是。
2025-03-20 14:57:16
1305
原创 Linux进程间通信(2)-信号
c代码解读复制代码功能:注册信号处理函数参数signum:更改的信号值handler:函数指针,要更改的动作是什么SIG_IGN:忽略该型号SIG_DFL:执行系统默认自定义函数名注意:不推荐,不同Linux版本有不同的行为。
2025-03-18 16:08:46
519
原创 简单且非常实用的代码优化技巧-会一直收集并增加
对于代码优化,对于很多团队和项目来说基本可有可无,毕竟能跑得起来才是大事。对于个人就是一个自己能不能看得过去的问题了,忙起来是坨~也无关紧要了如果一个团队从开始就有代码规范,整个团队的代码风格一定也还不错因为确实有的代码就是会看起来舒服,改起来也容易,排查问题以及需要优化性能时也顺手。差劲的代码读起来心累,改的时候提心吊胆,深怕影响到核心功能,怕改一下房子都塌掉了。
2025-03-18 16:07:52
227
原创 Redis 主从复制:从原理到实践的深度解析
菜小弟:表哥,持久化的配置我已经学会了,但是如果服务器宕机了,虽然数据不会丢了,但是数据恢复期间,Redis提供不了服务,怎么办?,听说 Redis 可以通过主从复制来实现数据备份和读写分离,这个概念我有点懵,你能给我讲讲吗?表哥:Redis宕机确实是很危险的,Redis设计了主从架构, 可以通过主从复制来实现数据备份和读写分离。主从复制是 Redis 中非常重要的机制,简单来说,它是指一个 Redis 实例(主库)将数据同步到一个或多个 Redis 实例(从库)的过程。菜小弟。
2025-03-18 16:07:22
836
原创 2025最新春招八股文(精简、纯手打)
当一个线程被剥夺cpu使用权时,切换到另外一个线程执行死锁指多个线程在执行过程中,因争夺资源造成的一种相互等待的僵局AQS是一个抽象类,可以用来构造锁和同步类,如ReentrantLock,Semaphore,CountDownLatch,CyclicBarrier。AQS的原理是,AQS内部有三个核心组件,一个是state代表加锁状态初始值为0,一个是获取到锁的线程,还有一个阻塞队列。当有线程想获取锁时,会以CAS的形式将state变为1,CAS成功后便将加锁线程设为自己。
2025-03-18 15:29:29
443
原创 Redis---配置文件详解
启动redis并使配置文件生效include 可以使用多个配置文件,如果配置文件有相同值,后面的会覆盖前面的:bash代码解读复制代码加载modules 没什么用好像,还需要继续研究bash代码解读复制代码绑定ip地址,为了安全最好都绑定保护模式,如果保护模式开了,而且redis既没有bind ip,也没设置密码,那redis只接收127.0.0.1的连接。 默认都开端口,设置为0就不会监听linux 内核tcp_max_syn_backlog和somaxconn 参数调优unix sock
2025-03-16 15:40:51
699
原创 manim边学边做--三维图形的场景类
在Manim中,是一个专门为设计的类。它通过配置三维相机、支持复杂的相机运动以及管理物体与相机的交互关系,为等领域提供了强大的工具。
2025-03-16 15:40:14
695
原创 如何优雅的更新你的npm包
在现代软件开发中,无论是前端应用、还是node服务 保持项目依赖的更新都是一项重要但具有挑战性的任务。过时的依赖可能会带来安全隐患、性能问题,以及与新特性的不兼容。然而,盲目地更新依赖也可能引入意外的破坏性变更,导致项目出现问题。为了安全、高效地管理依赖更新,我们需要一个可靠的工具和系统的更新策略。本文将介绍这个强大的工具,它不仅可以帮助我们检查和更新依赖,还能让我们对更新过程有更细粒度的控制。语义化版本(Semantic Versioning)主版本号(Major):做了不兼容的 API 修改。
2025-03-16 15:39:17
805
原创 Java 面试八股文:高效备战 Java 面试的必备知识
在Java 开发的面试中,面试官常常会围绕基础知识、经典问题以及核心概念展开提问,这些问题被戏称为“Java 面试八股文”。熟练掌握这些内容,不仅能帮助你顺利通过面试,还能巩固你对 Java 知识体系的理解。本文将全面整理 Java 面试八股文的核心内容,助你轻松备战面试!Java 的面向对象特性有哪些?什么是重载与重写的区别?
2025-03-16 15:03:34
712
原创 springcloud eureka原理和机制
在微服务架构下,服务端环境通常包含多个服务,同时每个服务也是一个无状态的多实例集群。这些服务和实例一般都是会动态变化的,可能会因为意外的故障或者人为的重启发版等原因,这些服务和实例的信息和数量随时会发生改变。因此微服务环境下需要一个服务注册中心来集中管理集群中各个服务实例的状态,这样服务的调用方就可以动态地从服务注册中心获取到当前可用的服务实例来发起调用。Eureka 就是服务发现中心的一种。
2025-03-14 15:27:35
698
原创 Godot 引擎:开源游戏开发的强大工具
Godot 是一个功能丰富的开源游戏引擎,支持 2D 和 3D 游戏开发。它提供了一套完整的工具,帮助开发者从原型设计到发布整个游戏开发流程。Godot 可以导出到多个平台,包括 Windows、macOS、Linux、Android、iOS 和 HTML5。Godot 引擎是游戏开发者和应用程序开发者的强大工具,提供了易用性、强大的功能和灵活性。它适合从初学者到高级开发者的多种需求。
2025-03-14 15:26:46
470
原创 登录注册中的密码安全:从明文传输到非对称加密
无论在什么类型的产品中, 用户认证系统的安全性是系统设计的重中之重。我将从最基础的明文传输开始,逐步探讨不同安全级别的密码处理方案,并最终给出业界最佳实践建议。无论您是刚接触安全领域的新手,还是希望优化现有系统的开发者,都可以给你提供一些思路和参考。
2025-03-14 15:26:16
910
原创 最新Java面试八股文10万字总结
但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理。HashMap是线程不安全的,HashTable是线程安全的,其中的方法是Synchronize的,在多线程并发的情况下,可以直接使用HashTabl,但是使用HashMap时必须自己增加同步处理。
2025-03-14 14:50:08
1105
原创 Redis 高可用性:如何让你的缓存一直在线,稳定运行?
Redis 的高可用性不仅关乎缓存系统的稳定性,更是支撑业务连续性的关键。通过选择合适的高可用架构,我们可以让 Redis 在系统故障时仍然坚挺不倒,保证业务流畅运行。希望你通过这篇文章了解了 Redis 主从复制、Sentinel 和 Cluster 的不同高可用实现方式,找到适合自己的方案,确保 Redis 在高负载下仍能保持稳定运行!
2025-03-13 15:38:50
718
原创 你知道SpringMVC的参数是怎样被映射的吗?
现在我们知道了不同参数是如何被解析的了,如果后面再遇到有参数解析的问题就可以找到对应的类去看源码了。springmvc的参数解析对我们再也不是迷了。
2025-03-13 15:36:53
600
原创 为什么无法实现精确一次的消息投递
在分布式系统中,你无法实现。浏览器和服务器?分布式。服务器和数据库?分布式。服务器和消息队列?分布式。在这些场景中,你无法实现真正的仅一次投递语义。
2025-03-13 15:36:17
705
原创 2025最全Java面试八股文,找工作必备
直接内存不属于JVM内存,是操作系统的内存,常见于NIO操作,用于数据缓冲区,拥有较高的读写性能,且不受JVM内存回收影响BIO(同步阻塞IO)发送请求后线程一直阻塞,直到数据处理完并返回NIO(同步非阻塞IO)通过一个线程轮询大量socket,当有socket准备就绪时通知客户端,客户端调用函数接收。AIO(异步非阻塞IO)每个请求都会绑定一个Buffer;通知操作系统去完成异步的读(这个时间你就可以去做其他的事情)读完之后会通知客户端来读取数据。
2025-03-13 15:01:48
1020
原创 java并发-线程池(一)
线程池是一种用于管理和复用一组工作线程的设计模式,旨在减少因频繁创建和销毁线程带来的系统开销,并提供更有效的资源管理。在Java中,线程池是通过类提供的多种工厂方法或直接使用类来实现的。在JDK5之前,java并没有提供内置的线程池支持和高级并发工具。这意味着开发者需要自己实现线程池机制来管理和复用线程,这不仅复杂而且容易出错。从JDK5开始,java引入了线程池的实现和管理工具,把工作单元和执行机制分离,工作单元包括Runnable和Callable,而执行机制由Executor框架提供。
2025-03-12 15:38:16
784
原创 设计模式-组合模式
typescript代码解读复制代码} /** * 定义活动执行抽象方法 */ public abstract void execute();public void add(Campaign campaign) { throw new UnsupportedOperationException("不支持组合活动");} }
2025-03-12 15:37:45
750
原创 【设计模式】探索状态模式在现代软件开发中的应用
【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下:代码如下:java代码解读复制代码public interface ILift { //电梯的4个状态 //开门状态 public final static int OPENING_STATE = 1;
2025-03-12 15:37:10
238
原创 Java八股文详细,终于整理完了!
为什么要使用线程池 难度系数:⭐线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最 大数量,超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。主要特点:线程复用;控制最大并发数:管理线程。第一:降低资源消耗。通过重复利用己创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消
2025-03-12 15:19:35
1166
原创 可扩展的层级化错误码设计实践
微服务架构下的跨团队协作智能运维系统中的异常定位C端用户的问题自诊断未来计划增加错误码生命周期管理,通过与工单系统集成实现错误码的自动退役机制。这种结构化的设计方案不仅能提升问题排查效率,更为质量监控系统提供了标准化的数据输入。
2025-03-11 15:46:47
383
原创 Go 项目目录结构的最佳实践
本文讨论了 Go 项目的标准目录结构及一些最佳实践。通过合理的目录组织,不仅可以提升代码的可读性,还能为团队协作提供便利。希望对您在构建 Go 项目时有所帮助。如果您有任何问题或建议,请随时留言讨论!
2025-03-11 15:46:10
404
原创 Spring Boot+RabbitMQ+Canal 解决数据一致性
以上是RabbitMQ+Canal数据一致性的完整解决方案,包括环境配置、代码实现以及运行测试等环节,确保了数据在不同系统间的一致性和可靠性。当MySQL数据出现变动后,会触发canal-queue的监听事件,后续可根据具体业务逻辑实现业务处理。:基于 Docker 同一网络下,可以使用容器名称代替 host。: RabbitMQ 的三件套,用于后续创建具体通道监听。:选择 RabbitMQ 作为通知服务模型。RabbitMQ路由。
2025-03-11 15:45:37
295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人